Class: ResourceSpace::Search

Inherits:
Object
  • Object
show all
Defined in:
lib/resourcespace/search.rb

Overview

Search interface for ResourceSpace API

Examples:

search = client.search

# Basic search
results = search.do_search("cat")

# Advanced search with parameters
results = search.do_search("web assets", {
  order_by: "date",
  sort: "desc",
  fetchrows: 20
})

# Search with previews
results = search.search_get_previews("images", {
  getsizes: "col,thm,scr",
  fetchrows: 10
})

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Search

Initialize the search interface

Parameters:

  • client (Client)

    ResourceSpace client instance



31
32
33
# File 'lib/resourcespace/search.rb', line 31

def initialize(client)
  @client = client
end

Instance Attribute Details

#clientClient (readonly)

Returns the ResourceSpace client.

Returns:

  • (Client)

    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

Parameters:

  • criteria (Hash) (defaults to: {})

    search criteria

  • options (Hash) (defaults to: {})

    search options

Options Hash (criteria):

  • :title (String)

    title search

  • :tag (String)

    tag search

  • :user (String)

    user search

  • :extensions (Array<String>)

    file extensions

  • :from_date (String)

    start date

  • :to_date (String)

    end date

Returns:

  • (Hash)

    search results



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 = {}, options = {})
  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, options)
end

#build_search_params(search_term, options = {}) ⇒ Hash (private)

Build search parameters hash

Parameters:

  • search_term (String)

    search term

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    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, options = {})
  params = { param1: search_term }

  params[:param2] = options[:restypes] if options[:restypes]
  params[:param3] = options[:order_by] if options[:order_by]
  params[:param4] = options[:offset] if options[:offset]
  params[:param5] = options[:fetchrows] if options[:fetchrows]
  params[:param6] = options[:sort] if options[:sort]
  params[:param7] = options[:archive] if options[:archive]
  params[:param8] = options[:daylimit] if options[:daylimit]

  params
end

#do_search(search_term, options = {}) ⇒ Hash

Perform a basic search

Parameters:

  • search_term (String)

    search term

  • options (Hash) (defaults to: {})

    search options

Options Hash (options):

  • :restypes (String)

    resource types to search (e.g., "1,2,3")

  • :order_by (String)

    field to order by ("relevance", "popularity", "date", "colour", "country", "title", "file_path", "resourceid", "extension", "user", "created")

  • :sort (String)

    sort direction ("asc" or "desc")

  • :offset (Integer)

    starting offset for results

  • :fetchrows (Integer)

    number of results to fetch

  • :archive (String)

    archive status ("0" = live resources, "1" = archived, "2" = both)

  • :daylimit (Integer)

    only return resources modified in the last X days

Returns:

  • (Hash)

    search results



47
48
49
50
# File 'lib/resourcespace/search.rb', line 47

def do_search(search_term, options = {})
  params = build_search_params(search_term, options)
  client.get("do_search", params)
end

#format_date(date) ⇒ String (private)

Format date for ResourceSpace API

Parameters:

  • date (Date, String)

    date to format

Returns:

  • (String)

    formatted date string



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

Parameters:

  • count (Integer) (defaults to: 10)

    number of recent resources to return

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



153
154
155
156
# File 'lib/resourcespace/search.rb', line 153

def recent_resources(count = 10, options = {})
  search_term = "!last#{count}"
  do_search(search_term, options)
end

#search_by_collection(collection_id, options = {}) ⇒ Hash

Search resources by collection

Parameters:

  • collection_id (Integer)

    collection ID

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



132
133
134
135
# File 'lib/resourcespace/search.rb', line 132

def search_by_collection(collection_id, options = {})
  search_term = "!collection#{collection_id}"
  do_search(search_term, options)
end

#search_by_date_range(from_date, to_date = nil, options = {}) ⇒ Hash

Search resources by date range

Parameters:

  • from_date (Date, String)

    start date (YYYY-MM-DD format)

  • to_date (Date, String) (defaults to: nil)

    end date (YYYY-MM-DD format)

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



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, options = {})
  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, options)
end

#search_by_extension(extensions, options = {}) ⇒ Hash

Search resources by file extension

Parameters:

  • extensions (String, Array)

    file extension(s) to search for

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



104
105
106
107
108
109
# File 'lib/resourcespace/search.rb', line 104

def search_by_extension(extensions, options = {})
  extensions = Array(extensions).map(&:to_s)
  search_term = extensions.map { |ext| "extension:#{ext.gsub(/^\./, '')}" }.join(" OR ")

  do_search(search_term, options)
end

#search_by_ids(resource_ids, options = {}) ⇒ Hash

Search resources by resource IDs

Parameters:

  • resource_ids (Array<Integer>)

    array of resource IDs

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



142
143
144
145
146
# File 'lib/resourcespace/search.rb', line 142

def search_by_ids(resource_ids, options = {})
  ids = Array(resource_ids).join(":")
  search_term = "!list#{ids}"
  do_search(search_term, options)
end

#search_by_tag(tag, options = {}) ⇒ Hash

Search resources by tag

Parameters:

  • tag (String)

    tag name

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



163
164
165
166
# File 'lib/resourcespace/search.rb', line 163

def search_by_tag(tag, options = {})
  search_term = "tag:#{tag}"
  do_search(search_term, options)
end

#search_by_title(title, options = {}) ⇒ Hash

Search resources by title/name

Parameters:

  • title (String)

    resource title

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



183
184
185
186
# File 'lib/resourcespace/search.rb', line 183

def search_by_title(title, options = {})
  search_term = "title:#{title}"
  do_search(search_term, options)
end

#search_by_user(username, options = {}) ⇒ Hash

Search resources by user

Parameters:

  • username (String)

    username

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results



173
174
175
176
# File 'lib/resourcespace/search.rb', line 173

def search_by_user(username, options = {})
  search_term = "user:#{username}"
  do_search(search_term, options)
end

#search_get_previews(search_term, options = {}) ⇒ Hash

Search and get previews in one call

Parameters:

  • search_term (String)

    search term

  • options (Hash) (defaults to: {})

    search options

Options Hash (options):

  • :getsizes (String)

    image sizes to include ("col,thm,scr,pre")

  • :order_by (String)

    field to order by

  • :sort (String)

    sort direction ("asc" or "desc")

  • :fetchrows (Integer)

    number of results to fetch

  • :archive (String)

    archive status

Returns:

  • (Hash)

    search results with preview data



62
63
64
65
66
67
# File 'lib/resourcespace/search.rb', line 62

def search_get_previews(search_term, options = {})
  params = build_search_params(search_term, options)
  params[:param6] = options[:getsizes] if options[:getsizes]

  client.get("search_get_previews", params)
end

#search_web_assets(asset_type = nil, options = {}) ⇒ Hash

Search for web assets (images, CSS, JS, fonts)

Parameters:

  • asset_type (String) (defaults to: nil)

    type of web asset ("image", "css", "javascript", "font", "icon")

  • options (Hash) (defaults to: {})

    search options

Returns:

  • (Hash)

    search results filtered for web assets



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, options = {})
  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 options[:query]

  do_search(search_term, options)
end