class Beatport::Support::QueryBuilder
Converts a set of arguments into a format that beatport will understand
Constants
- SPECIAL_OPTIONS
Public Class Methods
process(*args)
click to toggle source
# File lib/beatport/support/query_builder.rb, line 11 def self.process(*args) new.process(*args) end
Public Instance Methods
camelize_keys(options)
click to toggle source
Camelizes all the keys in the options hash
# File lib/beatport/support/query_builder.rb, line 53 def camelize_keys(options) Inflector.process_keys(options) { |k| Inflector.camelize(k.to_s, false) } end
map_values(values) { |value| ... }
click to toggle source
Map values delimited by ,
# File lib/beatport/support/query_builder.rb, line 85 def map_values(values) values = values.split(/,\s*/) if values.is_a?(String) values.map do |value| yield value end.join(",") end
process(*args)
click to toggle source
# File lib/beatport/support/query_builder.rb, line 19 def process(*args) @single_result = false options = args.last.is_a?(Hash) ? args.pop : {} string_key_type = options.delete(:string_key_type) || :name collection = options.delete(:collection) key = options.delete(:key) || (args.length > 1 ? args.compact : args.first) case key when Integer options[:id] = key @single_result = true unless collection when String, Symbol options[string_key_type] = key.to_s @single_result = true unless collection when Array options[:ids] = key.flatten end options = camelize_keys(options) # Handle special options that need to be generated in a specific manner options.map do |key, value| if special_option?(key) options[key] = send(Inflector.underscore("process_#{key}"), value) elsif value.is_a?(Array) options[key] = value.join(',') end end options end
process_facets(values)
click to toggle source
Special processing for facets
# File lib/beatport/support/query_builder.rb, line 65 def process_facets(values) map_values(values) do |value| k, v = split_value(value, ':') Array(v).map {|v| "#{k}:#{v}"}.join(',') end end
process_return_facets(values)
click to toggle source
Special processing for return_facets
# File lib/beatport/support/query_builder.rb, line 73 def process_return_facets(values) map_values(values) do |value| Inflector.camelize(value, false) end end
process_sort_by(values)
click to toggle source
Special processing for sort_by keys
# File lib/beatport/support/query_builder.rb, line 58 def process_sort_by(values) map_values(values) do |value| split_value(value, " ").join(" ") end end
process_subgenres(value)
click to toggle source
Special processing for subgenres
# File lib/beatport/support/query_builder.rb, line 80 def process_subgenres(value) value ? 'true' : 'false' end
single_result?()
click to toggle source
# File lib/beatport/support/query_builder.rb, line 7 def single_result? @single_result end
special_option?(key)
click to toggle source
# File lib/beatport/support/query_builder.rb, line 15 def special_option?(key) SPECIAL_OPTIONS.include?(key) end
split_value(value, seperator)
click to toggle source
# File lib/beatport/support/query_builder.rb, line 92 def split_value(value, seperator) value = value.split(seperator) if value.is_a?(String) [Inflector.camelize(value.first, false), value.last] end