Class: ResourceSpace::Search
- Inherits:
-
Object
- Object
- ResourceSpace::Search
- Defined in:
- lib/resourcespace/search.rb
Overview
Search interface for ResourceSpace API
Instance Attribute Summary collapse
-
#client ⇒ Client
readonly
The ResourceSpace client.
Instance Method Summary collapse
-
#advanced_search(criteria = {}, options = {}) ⇒ Hash
Advanced search with multiple criteria.
-
#build_search_params(search_term, options = {}) ⇒ Hash
private
Build search parameters hash.
-
#do_search(search_term, options = {}) ⇒ Hash
Perform a basic search.
-
#format_date(date) ⇒ String
private
Format date for ResourceSpace API.
-
#initialize(client) ⇒ Search
constructor
Initialize the search interface.
-
#recent_resources(count = 10, options = {}) ⇒ Hash
Get recently added resources.
-
#search_by_collection(collection_id, options = {}) ⇒ Hash
Search resources by collection.
-
#search_by_date_range(from_date, to_date = nil, options = {}) ⇒ Hash
Search resources by date range.
-
#search_by_extension(extensions, options = {}) ⇒ Hash
Search resources by file extension.
-
#search_by_ids(resource_ids, options = {}) ⇒ Hash
Search resources by resource IDs.
-
#search_by_tag(tag, options = {}) ⇒ Hash
Search resources by tag.
-
#search_by_title(title, options = {}) ⇒ Hash
Search resources by title/name.
-
#search_by_user(username, options = {}) ⇒ Hash
Search resources by user.
-
#search_get_previews(search_term, options = {}) ⇒ Hash
Search and get previews in one call.
-
#search_web_assets(asset_type = nil, options = {}) ⇒ Hash
Search for web assets (images, CSS, JS, fonts).
Constructor Details
#initialize(client) ⇒ Search
Initialize the search interface
31 32 33 |
# File 'lib/resourcespace/search.rb', line 31 def initialize(client) @client = client end |
Instance Attribute Details
#client ⇒ Client (readonly)
Returns the ResourceSpace client.
26 27 28 |
# File 'lib/resourcespace/search.rb', line 26 def client @client end |
Instance Method Details
#advanced_search(criteria = {}, options = {}) ⇒ Hash
Advanced search with multiple criteria
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/resourcespace/search.rb', line 199 def advanced_search(criteria = {}, = {}) search_parts = [] search_parts << "title:#{criteria[:title]}" if criteria[:title] search_parts << "tag:#{criteria[:tag]}" if criteria[:tag] search_parts << "user:#{criteria[:user]}" if criteria[:user] if criteria[:extensions] ext_search = Array(criteria[:extensions]).map { |ext| "extension:#{ext.gsub(/^\./, '')}" }.join(" OR ") search_parts << "(#{ext_search})" end if criteria[:from_date] date_search = "created:#{format_date(criteria[:from_date])}" date_search += ";#{format_date(criteria[:to_date])}" if criteria[:to_date] search_parts << date_search end search_term = search_parts.join(" AND ") search_term = criteria[:query] if search_term.empty? && criteria[:query] do_search(search_term, ) end |
#build_search_params(search_term, options = {}) ⇒ Hash (private)
Build search parameters hash
230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/resourcespace/search.rb', line 230 def build_search_params(search_term, = {}) params = { param1: search_term } params[:param2] = [:restypes] if [:restypes] params[:param3] = [:order_by] if [:order_by] params[:param4] = [:offset] if [:offset] params[:param5] = [:fetchrows] if [:fetchrows] params[:param6] = [:sort] if [:sort] params[:param7] = [:archive] if [:archive] params[:param8] = [:daylimit] if [:daylimit] params end |
#do_search(search_term, options = {}) ⇒ Hash
Perform a basic search
47 48 49 50 |
# File 'lib/resourcespace/search.rb', line 47 def do_search(search_term, = {}) params = build_search_params(search_term, ) client.get("do_search", params) end |
#format_date(date) ⇒ String (private)
Format date for ResourceSpace API
248 249 250 251 252 253 254 255 256 257 |
# File 'lib/resourcespace/search.rb', line 248 def format_date(date) case date when Date date.strftime("%Y-%m-%d") when Time date.strftime("%Y-%m-%d") else date.to_s end end |
#recent_resources(count = 10, options = {}) ⇒ Hash
Get recently added resources
153 154 155 156 |
# File 'lib/resourcespace/search.rb', line 153 def recent_resources(count = 10, = {}) search_term = "!last#{count}" do_search(search_term, ) end |
#search_by_collection(collection_id, options = {}) ⇒ Hash
Search resources by collection
132 133 134 135 |
# File 'lib/resourcespace/search.rb', line 132 def search_by_collection(collection_id, = {}) search_term = "!collection#{collection_id}" do_search(search_term, ) end |
#search_by_date_range(from_date, to_date = nil, options = {}) ⇒ Hash
Search resources by date range
117 118 119 120 121 122 123 124 125 |
# File 'lib/resourcespace/search.rb', line 117 def search_by_date_range(from_date, to_date = nil, = {}) from_str = format_date(from_date) to_str = to_date ? format_date(to_date) : from_str search_term = "created:#{from_str}" search_term += ";#{to_str}" if to_date do_search(search_term, ) end |
#search_by_extension(extensions, options = {}) ⇒ Hash
Search resources by file extension
104 105 106 107 108 109 |
# File 'lib/resourcespace/search.rb', line 104 def search_by_extension(extensions, = {}) extensions = Array(extensions).map(&:to_s) search_term = extensions.map { |ext| "extension:#{ext.gsub(/^\./, '')}" }.join(" OR ") do_search(search_term, ) end |
#search_by_ids(resource_ids, options = {}) ⇒ Hash
Search resources by resource IDs
142 143 144 145 146 |
# File 'lib/resourcespace/search.rb', line 142 def search_by_ids(resource_ids, = {}) ids = Array(resource_ids).join(":") search_term = "!list#{ids}" do_search(search_term, ) end |
#search_by_tag(tag, options = {}) ⇒ Hash
Search resources by tag
163 164 165 166 |
# File 'lib/resourcespace/search.rb', line 163 def search_by_tag(tag, = {}) search_term = "tag:#{tag}" do_search(search_term, ) end |
#search_by_title(title, options = {}) ⇒ Hash
Search resources by title/name
183 184 185 186 |
# File 'lib/resourcespace/search.rb', line 183 def search_by_title(title, = {}) search_term = "title:#{title}" do_search(search_term, ) end |
#search_by_user(username, options = {}) ⇒ Hash
Search resources by user
173 174 175 176 |
# File 'lib/resourcespace/search.rb', line 173 def search_by_user(username, = {}) search_term = "user:#{username}" do_search(search_term, ) end |
#search_get_previews(search_term, options = {}) ⇒ Hash
Search and get previews in one call
62 63 64 65 66 67 |
# File 'lib/resourcespace/search.rb', line 62 def search_get_previews(search_term, = {}) params = build_search_params(search_term, ) params[:param6] = [:getsizes] if [:getsizes] client.get("search_get_previews", params) end |
#search_web_assets(asset_type = nil, options = {}) ⇒ Hash
Search for web assets (images, CSS, JS, fonts)
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/resourcespace/search.rb', line 74 def search_web_assets(asset_type = nil, = {}) search_terms = [] case asset_type&.downcase when "image", "images" search_terms << "extension:jpg OR extension:jpeg OR extension:png OR extension:gif OR extension:svg OR extension:webp" when "css", "stylesheet", "stylesheets" search_terms << "extension:css" when "javascript", "js" search_terms << "extension:js" when "font", "fonts" search_terms << "extension:woff OR extension:woff2 OR extension:ttf OR extension:otf OR extension:eot" when "icon", "icons" search_terms << "extension:ico OR extension:svg" else # Search for all common web asset types search_terms << "extension:jpg OR extension:jpeg OR extension:png OR extension:gif OR extension:svg OR extension:webp OR extension:css OR extension:js OR extension:woff OR extension:woff2 OR extension:ico" end search_term = search_terms.join(" OR ") search_term += " #{options.delete(:query)}" if [:query] do_search(search_term, ) end |