Method: Her::Model::Relation#find

Defined in:
lib/castle-her/model/relation.rb

#find(*ids) ⇒ Object

Fetch specific resource(s) by their ID

Examples:

@user = User.find(1)
# Fetched via GET "/users/1"
@users = User.find([1, 2])
# Fetched via GET "/users/1" and GET "/users/2"


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/castle-her/model/relation.rb', line 85

def find(*ids)
  params = @params.merge(ids.last.is_a?(Hash) ? ids.pop : {})
  ids = Array(params[@parent.primary_key]) if params.key?(@parent.primary_key)

  results = ids.flatten.compact.uniq.map do |id|
    resource = nil
    request_params = params.merge(
      :_method => @parent.method_for(:find),
      :_path => @parent.build_request_path(params.merge(@parent.primary_key => id))
    )

    @parent.request(request_params) do |parsed_data, response|
      if response.success?
        resource = @parent.new_from_parsed_data(parsed_data)
        resource.instance_variable_set(:@changed_attributes, {})
        resource.run_callbacks :find
      else
        return nil
      end
    end

    resource
  end

  ids.length > 1 || ids.first.kind_of?(Array) ? results : results.first
end