Sha256: 92504cd8d2ae5d0ed0ff38d130fa45745ef04cc585a239313179f2aa85ca211e

Contents?: true

Size: 960 Bytes

Versions: 2

Compression:

Stored size: 960 Bytes

Contents

require 'frenetic/concerns/hal_linked'
require 'frenetic/concerns/collection_rest_methods'

class Frenetic
  class ResourceCollection < Delegator
    include HalLinked
    include CollectionRestMethods

    def initialize(resource, params = {})
      @resource_class = resource
      @resources      = []
      @params         = params || {}

      extract_resources!
    end

    def resource_type
      @resource_type ||= @resource_class.to_s.demodulize.underscore
    end

    def collection_key
      @collection_key ||= resource_type.pluralize
    end

    def __getobj__
      @resources
    end

    def __setobj__
      @resources
    end

    def api
      @resources.first.api
    end

  private

    def extract_resources!
      @resources = embedded_collection.collect do |resource|
        @resource_class.new resource
      end
    end

    def embedded_collection
      @params.fetch('_embedded', {}).fetch(collection_key, [])
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
frenetic-2.0.0 lib/frenetic/resource_collection.rb
frenetic-1.0.0 lib/frenetic/resource_collection.rb