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