api_resource 0.6.5 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/api_resource/associations/association_proxy.rb +3 -0
- data/lib/api_resource/associations/has_many_remote_object_proxy.rb +24 -3
- data/lib/api_resource/conditions/abstract_condition.rb +8 -6
- data/lib/api_resource/version.rb +1 -1
- data/spec/lib/associations/has_many_remote_object_proxy_spec.rb +17 -0
- metadata +2 -2
|
@@ -24,6 +24,9 @@ module ApiResource
|
|
|
24
24
|
|
|
25
25
|
id_method_name = self.foreign_key_name(assoc_name)
|
|
26
26
|
associated_class = opts[:class_name] || assoc_name.to_s.classify
|
|
27
|
+
|
|
28
|
+
# pass this along
|
|
29
|
+
opts[:name] = assoc_name
|
|
27
30
|
|
|
28
31
|
klass.api_resource_generated_methods.module_eval <<-EOE, __FILE__, __LINE__ + 1
|
|
29
32
|
def #{assoc_name}
|
|
@@ -33,13 +33,34 @@ module ApiResource
|
|
|
33
33
|
# if we don't have a remote path and we do have and id,
|
|
34
34
|
# we set it before we call the internal object
|
|
35
35
|
# this lets us dynamically generate the correct path
|
|
36
|
-
if self.remote_path.blank?
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
if self.remote_path.blank?
|
|
37
|
+
# first try for a set of ids e.g. /objects.json?ids[]=1
|
|
38
|
+
associated_ids = self.owner.read_attribute(
|
|
39
|
+
self.association_id_method
|
|
39
40
|
)
|
|
41
|
+
if associated_ids.is_a?(Array) && associated_ids.present?
|
|
42
|
+
self.remote_path = self.klass.collection_path(
|
|
43
|
+
:ids => associated_ids
|
|
44
|
+
)
|
|
45
|
+
# next try for a foreign key e.g. /objects.json?owner_id=1
|
|
46
|
+
elsif self.owner.try(:id).present?
|
|
47
|
+
self.remote_path = self.klass.collection_path(
|
|
48
|
+
self.owner.class.to_s.foreign_key => self.owner.id
|
|
49
|
+
)
|
|
50
|
+
end
|
|
40
51
|
end
|
|
41
52
|
super
|
|
42
53
|
end
|
|
54
|
+
|
|
55
|
+
protected
|
|
56
|
+
|
|
57
|
+
# The method by which we get ids for the association
|
|
58
|
+
# e.g. object_ids
|
|
59
|
+
def association_id_method
|
|
60
|
+
self.class.foreign_key_name(@options["name"])
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
43
64
|
end
|
|
44
65
|
end
|
|
45
66
|
end
|
|
@@ -6,14 +6,16 @@ module ApiResource
|
|
|
6
6
|
|
|
7
7
|
include Enumerable
|
|
8
8
|
|
|
9
|
-
attr_reader :conditions, :klass, :included_objects,
|
|
10
|
-
|
|
9
|
+
attr_reader :conditions, :klass, :included_objects,
|
|
10
|
+
:internal_object, :association, :remote_path
|
|
11
11
|
|
|
12
12
|
# TODO: add the other load forcing methods here for collections
|
|
13
|
-
delegate :[], :[]=, :<<, :first, :second, :last, :blank?, :nil?,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
delegate :[], :[]=, :<<, :first, :second, :last, :blank?, :nil?,
|
|
14
|
+
:include?, :push, :pop, :+, :concat, :flatten, :flatten!, :compact,
|
|
15
|
+
:compact!, :empty?, :fetch, :map, :reject, :reject!, :reverse,
|
|
16
|
+
:select, :select!, :size, :sort, :sort!, :uniq, :uniq!, :to_a,
|
|
17
|
+
:sample, :slice, :slice!, :count, :present?, :delete_if,
|
|
18
|
+
:to => :internal_object
|
|
17
19
|
|
|
18
20
|
# need to figure out what to do with args in the subclass,
|
|
19
21
|
# parent is the set of scopes we have right now
|
data/lib/api_resource/version.rb
CHANGED
|
@@ -20,6 +20,23 @@ module ApiResource
|
|
|
20
20
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
+
context "#load" do
|
|
24
|
+
|
|
25
|
+
it "does a find based on its set of ids if present" do
|
|
26
|
+
tr = TestResource.new
|
|
27
|
+
tr.has_many_object_ids = [1,2]
|
|
28
|
+
|
|
29
|
+
HasManyObject.connection.expects(:get)
|
|
30
|
+
.with("/has_many_objects.json?ids%5B%5D=1&ids%5B%5D=2")
|
|
31
|
+
.returns([{"name" => "Test"}])
|
|
32
|
+
|
|
33
|
+
tr.has_many_objects.length.should be 1
|
|
34
|
+
tr.has_many_objects.first.name.should eql("Test")
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
23
40
|
end
|
|
24
41
|
end
|
|
25
42
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: api_resource
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.6
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2013-04-
|
|
14
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: rake
|