Sha256: d0cec815d6927ba2c221d2f88ce1e24d26fee556978ee1e84f7d1f3d9204b43f

Contents?: true

Size: 1.01 KB

Versions: 6

Compression:

Stored size: 1.01 KB

Contents

require 'forwardable'

module Beatport
  class Collection
    include Enumerable
    extend Forwardable
    
    def_delegators :@results, :each, :'<=>', :length, :==, :===, :to_a
    
    attr_reader :host, :path, :query, :next_query
    attr_reader :per_page_options, :page, :per_page, :total_pages, :count
    attr_reader :facets, :applied_facets, :spellcheck
    attr_reader :date_filters, :applied_date_filters
    
    def initialize(klass, data)
      raise ArgumentError, "Invalid data passed to Collection.new" unless data['results'].is_a?(Array)
      
      data['metadata'].each do |k, v|
        instance_variable_set(:"@#{k}", v)
      end
      
      @results = if klass == :auto
        data['results'].map do |r|
          item_klass = Support::Inflector.constantize("Beatport::Catalog::#{r['type'].capitalize}")
          item_klass.new(r)
        end
      else
        data['results'].map { |r| klass.new(r) }
      end
    end
    
    def grouped
      group_by { |i| i.type.capitalize }
    end
    
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
beatport-0.1.8 lib/beatport/collection.rb
beatport-0.1.7 lib/beatport/collection.rb
beatport-0.1.6 lib/beatport/collection.rb
beatport-0.1.5 lib/beatport/collection.rb
beatport-0.1.3 lib/beatport/collection.rb
beatport-0.1.2 lib/beatport/collection.rb