api_resource 0.2.11 → 0.3.0

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.
@@ -51,7 +51,13 @@ module ApiResource
51
51
  end
52
52
 
53
53
  def get(path, headers = {})
54
- format.decode(request(:get, path, build_request_headers(headers, :get, self.site.merge(path))))
54
+ # our site and headers for this request
55
+ site = self.site.merge(path)
56
+ headers = build_request_headers(headers, :get, site)
57
+
58
+ self.with_caching(path, headers) do
59
+ format.decode(request(:get, path, headers))
60
+ end
55
61
  end
56
62
 
57
63
  def delete(path, headers = {})
@@ -81,6 +87,23 @@ module ApiResource
81
87
  end
82
88
  end
83
89
 
90
+ protected
91
+
92
+ def cache_key(path, headers)
93
+ key = Digest::MD5.hexdigest([path, headers].to_s)
94
+ return "a-#{key}-#{ApiResource::Base.ttl}"
95
+ end
96
+
97
+ def with_caching(path, data = {}, &block)
98
+ if ApiResource::Base.ttl.to_f > 0.0
99
+ key = self.cache_key(path, data)
100
+ ApiResource.cache.fetch(key, :expires_in => ApiResource::Base.ttl) do
101
+ yield
102
+ end
103
+ else
104
+ yield
105
+ end
106
+ end
84
107
 
85
108
  private
86
109
  # Makes a request to the remote service.
@@ -83,37 +83,35 @@ module ApiResource
83
83
  end
84
84
  end
85
85
 
86
- module InstanceMethods
87
- def get(method_name, options = {})
88
- connection.get(custom_method_element_url(method_name, options), self.class.headers)
89
- end
86
+ def get(method_name, options = {})
87
+ connection.get(custom_method_element_url(method_name, options), self.class.headers)
88
+ end
90
89
 
91
- def post(method_name, options = {}, body = nil)
92
- request_body = body.blank? ? encode : body
93
- if new?
94
- connection.post(custom_method_new_element_url(method_name, options), request_body, self.class.headers)
95
- else
96
- connection.post(custom_method_element_url(method_name, options), request_body, self.class.headers)
97
- end
90
+ def post(method_name, options = {}, body = nil)
91
+ request_body = body.blank? ? encode : body
92
+ if new?
93
+ connection.post(custom_method_new_element_url(method_name, options), request_body, self.class.headers)
94
+ else
95
+ connection.post(custom_method_element_url(method_name, options), request_body, self.class.headers)
98
96
  end
97
+ end
99
98
 
100
- def put(method_name, options = {}, body = '')
101
- connection.put(custom_method_element_url(method_name, options), body, self.class.headers)
102
- end
99
+ def put(method_name, options = {}, body = '')
100
+ connection.put(custom_method_element_url(method_name, options), body, self.class.headers)
101
+ end
103
102
 
104
- def delete(method_name, options = {})
105
- connection.delete(custom_method_element_url(method_name, options), self.class.headers)
106
- end
103
+ def delete(method_name, options = {})
104
+ connection.delete(custom_method_element_url(method_name, options), self.class.headers)
105
+ end
107
106
 
108
107
 
109
- private
110
- def custom_method_element_url(method_name, options = {})
111
- "#{self.class.prefix(prefix_options)}#{self.class.collection_name}/#{id}/#{method_name}.#{self.class.format.extension}#{self.class.__send__(:query_string, options)}"
112
- end
108
+ private
109
+ def custom_method_element_url(method_name, options = {})
110
+ "#{self.class.prefix(prefix_options)}#{self.class.collection_name}/#{id}/#{method_name}.#{self.class.format.extension}#{self.class.__send__(:query_string, options)}"
111
+ end
113
112
 
114
- def custom_method_new_element_url(method_name, options = {})
115
- "#{self.class.prefix(prefix_options)}#{self.class.collection_name}/new/#{method_name}.#{self.class.format.extension}#{self.class.__send__(:query_string, options)}"
116
- end
117
- end
113
+ def custom_method_new_element_url(method_name, options = {})
114
+ "#{self.class.prefix(prefix_options)}#{self.class.collection_name}/new/#{method_name}.#{self.class.format.extension}#{self.class.__send__(:query_string, options)}"
115
+ end
118
116
  end
119
117
  end
@@ -8,7 +8,15 @@ module ApiResource
8
8
  # ActiveResource::Formats[:xml] # => ActiveResource::Formats::XmlFormat
9
9
  # ActiveResource::Formats[:json] # => ActiveResource::Formats::JsonFormat
10
10
  def self.[](mime_type_reference)
11
- ApiResource::Formats.const_get(ActiveSupport::Inflector.camelize(mime_type_reference.to_s) + "Format")
11
+ format_name = ActiveSupport::Inflector.camelize(mime_type_reference.to_s) + "Format"
12
+ begin
13
+ ApiResource::Formats.const_get(format_name)
14
+ rescue NameError => e
15
+ raise BadFormat.new("#{mime_type_reference} is not a valid format")
16
+ end
17
+ end
18
+
19
+ class BadFormat < StandardError
12
20
  end
13
21
  end
14
22
  end
@@ -35,50 +35,46 @@ module ApiResource
35
35
  alias_method_chain :save, :validations
36
36
  end
37
37
 
38
- module InstanceMethods
38
+ def save_with_validations(*args)
39
+ # we want to leave the original intact
40
+ options = args.clone.extract_options!
39
41
 
40
- def save_with_validations(*args)
41
- # we want to leave the original intact
42
- options = args.clone.extract_options!
43
-
44
- perform_validation = options.blank? ? true : options[:validate]
45
-
46
- @remote_errors = nil
47
- if perform_validation && valid? || !perform_validation
48
- save_without_validations(*args)
49
- true
50
- else
51
- false
52
- end
53
- rescue ApiResource::UnprocessableEntity => error
54
- @remote_errors = error
55
- load_remote_errors(@remote_errors, true)
56
- false
57
- end
58
-
59
- def load_remote_errors(remote_errors, save_cache = false)
60
- error_data = self.class.format.decode(remote_errors.response.body)['errors'] || {}
61
- if error_data.is_a?(Hash)
62
- self.errors.from_hash(error_data)
63
- elsif error_data.is_a?(Array)
64
- self.errors.from_array(error_data)
65
- else
66
- raise Exception.new
67
- end
68
- rescue Exception
69
- raise "Invalid response for invalid object: expected an array or hash got #{remote_errors}"
70
- end
42
+ perform_validation = options.blank? ? true : options[:validate]
71
43
 
72
- # This method runs any local validations but not remote ones
73
- def valid?
74
- super
75
- errors.empty?
44
+ @remote_errors = nil
45
+ if perform_validation && valid? || !perform_validation
46
+ save_without_validations(*args)
47
+ true
48
+ else
49
+ false
76
50
  end
77
-
78
- def errors
79
- @errors ||= ApiResource::Errors.new(self)
51
+ rescue ApiResource::UnprocessableEntity => error
52
+ @remote_errors = error
53
+ load_remote_errors(@remote_errors, true)
54
+ false
55
+ end
56
+
57
+ def load_remote_errors(remote_errors, save_cache = false)
58
+ error_data = self.class.format.decode(remote_errors.response.body)['errors'] || {}
59
+ if error_data.is_a?(Hash)
60
+ self.errors.from_hash(error_data)
61
+ elsif error_data.is_a?(Array)
62
+ self.errors.from_array(error_data)
63
+ else
64
+ raise Exception.new
80
65
  end
81
-
66
+ rescue Exception
67
+ raise "Invalid response for invalid object: expected an array or hash got #{remote_errors}"
68
+ end
69
+
70
+ # This method runs any local validations but not remote ones
71
+ def valid?
72
+ super
73
+ errors.empty?
74
+ end
75
+
76
+ def errors
77
+ @errors ||= ApiResource::Errors.new(self)
82
78
  end
83
79
 
84
80
  end
@@ -11,18 +11,16 @@ module ApiResource
11
11
  alias_method_chain method, :observers
12
12
  end
13
13
 
14
- module InstanceMethods
15
- %w( create save update destroy ).each do |method|
16
- module_eval <<-EOE, __FILE__, __LINE__ + 1
17
- def #{method}_with_observers(*args)
18
- notify_observers(:before_#method)
19
- if result = #{method}_without_observers(*args)
20
- notify_observers(:after_#{method})
21
- end
22
- return result
14
+ %w( create save update destroy ).each do |method|
15
+ module_eval <<-EOE, __FILE__, __LINE__ + 1
16
+ def #{method}_with_observers(*args)
17
+ notify_observers(:before_#method)
18
+ if result = #{method}_without_observers(*args)
19
+ notify_observers(:after_#{method})
23
20
  end
24
- EOE
25
- end
21
+ return result
22
+ end
23
+ EOE
26
24
  end
27
25
 
28
26
  end
@@ -28,18 +28,18 @@ module ApiResource
28
28
  self.related_objects[:scope][name.to_sym]
29
29
  end
30
30
  end
31
- module InstanceMethods
32
- def scopes
33
- return self.class.scopes
34
- end
35
-
36
- def scope?(name)
37
- return self.class.scope?(name)
38
- end
39
-
40
- def scope_attributes(name)
41
- return self.class.scope_attributes(name)
42
- end
31
+
32
+ def scopes
33
+ return self.class.scopes
34
+ end
35
+
36
+ def scope?(name)
37
+ return self.class.scope?(name)
43
38
  end
39
+
40
+ def scope_attributes(name)
41
+ return self.class.scope_attributes(name)
42
+ end
43
+
44
44
  end
45
45
  end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe ApiResource do
4
+
5
+ context ".cache" do
6
+
7
+ around(:each) do |example|
8
+ begin
9
+ old_rails = Object.send(:remove_const, :Rails)
10
+ example.run
11
+ ensure
12
+ Rails = old_rails
13
+ ApiResource
14
+ end
15
+ end
16
+
17
+ it "should be a Rails cache if it's initialized" do
18
+ cache_stub = stub()
19
+ Rails = mock(:cache => cache_stub)
20
+ ApiResource.cache(true).should be cache_stub
21
+ end
22
+
23
+ it "should default to an instance of memory cache" do
24
+ defined?(Rails).should be_blank
25
+ ApiResource.cache(true).should be_a(
26
+ ActiveSupport::Cache::MemoryStore
27
+ )
28
+ end
29
+ end
30
+
31
+ context ".with_ttl" do
32
+
33
+ it "should temporarily set ttl for a block" do
34
+ old_ttl = ApiResource.ttl
35
+ ApiResource.with_ttl(10) do
36
+ ApiResource.ttl.should eql(10)
37
+ end
38
+ ApiResource.ttl.should eql(old_ttl)
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -52,7 +52,7 @@ describe "Associations" do
52
52
 
53
53
  it "should only define relationships for the given class - they should not cascade" do
54
54
  TestResource.belongs_to :belongs_to_object
55
- AnotherTestResource.association?(:belongs_to_object).should_not be true
55
+ AnotherTestResource.association?(:belongs_to_object).should_not be_true
56
56
  end
57
57
 
58
58
  it "should have its relationship cascade when sub-classed" do
@@ -295,7 +295,6 @@ describe "Associations" do
295
295
 
296
296
 
297
297
  it "should be able to query scopes on the current model" do
298
-
299
298
  ScopeResource.one.to_query.should eql "one=true"
300
299
  ScopeResource.two("test").to_query.should eql "two=test"
301
300
  ScopeResource.three(1,2,3).to_query.should eql "three[]=1&three[]=2&three[]=3"
@@ -518,6 +517,7 @@ describe "Associations" do
518
517
  end
519
518
 
520
519
  it "should assign associations to the correct type on initialization" do
520
+ #binding.pry
521
521
  tr = TestResource.new(:has_one_object => {:name => "Dan"}, :belongs_to_object => {:name => "Dan"})
522
522
 
523
523
  tr.has_one_object.internal_object.should be_instance_of HasOneObject
@@ -563,7 +563,8 @@ describe "Associations" do
563
563
  context "ActiveModel" do
564
564
  before(:all) do
565
565
  require 'active_record'
566
- ActiveRecord::Base.establish_connection({"adapter" => "sqlite3", "database" => "/tmp/api_resource_test_db.sqlite"})
566
+ db_path = File.expand_path(File.dirname(__FILE__) + "/../tmp/api_resource_test_db.sqlite")
567
+ ActiveRecord::Base.establish_connection({"adapter" => "sqlite3", "database" => db_path})
567
568
  ActiveRecord::Base.connection.create_table(:test_ars, :force => true) do |t|
568
569
  t.integer(:test_resource_id)
569
570
  end
@@ -162,6 +162,10 @@ describe "Base" do
162
162
  TestResource.format.extension.to_sym.should eql(:xml)
163
163
  TestResource.format = :json
164
164
  end
165
+
166
+ it "should only allow proper formats to be set" do
167
+ expect {TestResource.format = :blah}.should raise_error(::ApiResource::Formats::BadFormat)
168
+ end
165
169
 
166
170
  it "should be able to set an http timeout" do
167
171
  TestResource.timeout = 5
@@ -579,5 +583,29 @@ describe "Base" do
579
583
  end
580
584
 
581
585
  end
586
+
587
+ context ".get" do
588
+
589
+ context "with ttl" do
590
+ around(:each) do |example|
591
+
592
+ begin
593
+ initial = ApiResource::Base.ttl
594
+ ApiResource::Base.ttl = 1
595
+ example.run
596
+ ensure
597
+ ApiResource::Base.ttl = initial
598
+ end
599
+
600
+ end
601
+
602
+ it "should implement caching using the ttl setting" do
603
+ cache = mock(:fetch => {:id => 123, :name => "Dan"})
604
+ ApiResource.stubs(:cache => cache)
605
+ TestResource.find(123)
606
+ end
607
+ end
608
+
609
+ end
582
610
 
583
611
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
-
4
3
  require 'bundler'
5
4
  require 'api_resource'
6
5
  require 'simplecov'
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.2.11
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-21 00:00:00.000000000 Z
12
+ date: 2012-06-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70339494520880 !ruby/object:Gem::Requirement
16
+ requirement: &2157448720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.9
21
+ version: '3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70339494520880
24
+ version_requirements: *2157448720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hash_dealer
27
- requirement: &70339494519400 !ruby/object:Gem::Requirement
27
+ requirement: &2157445640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70339494519400
35
+ version_requirements: *2157445640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rest-client
38
- requirement: &70339494517340 !ruby/object:Gem::Requirement
38
+ requirement: &2157443060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70339494517340
46
+ version_requirements: *2157443060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: log4r
49
- requirement: &70339494515320 !ruby/object:Gem::Requirement
49
+ requirement: &2157441760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70339494515320
57
+ version_requirements: *2157441760
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: differ
60
- requirement: &70339494514460 !ruby/object:Gem::Requirement
60
+ requirement: &2157438700 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70339494514460
68
+ version_requirements: *2157438700
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: colorize
71
- requirement: &70339494513160 !ruby/object:Gem::Requirement
71
+ requirement: &2157427000 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70339494513160
79
+ version_requirements: *2157427000
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: json
82
- requirement: &70339494498860 !ruby/object:Gem::Requirement
82
+ requirement: &2157425020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,43 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70339494498860
90
+ version_requirements: *2157425020
91
+ - !ruby/object:Gem::Dependency
92
+ name: pry
93
+ requirement: &2157421560 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *2157421560
102
+ - !ruby/object:Gem::Dependency
103
+ name: pry-doc
104
+ requirement: &2157417420 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *2157417420
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry-nav
115
+ requirement: &2157416240 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *2157416240
91
124
  - !ruby/object:Gem::Dependency
92
125
  name: rspec
93
- requirement: &70339494498060 !ruby/object:Gem::Requirement
126
+ requirement: &2157415120 !ruby/object:Gem::Requirement
94
127
  none: false
95
128
  requirements:
96
129
  - - ! '>='
@@ -98,10 +131,10 @@ dependencies:
98
131
  version: '0'
99
132
  type: :development
100
133
  prerelease: false
101
- version_requirements: *70339494498060
134
+ version_requirements: *2157415120
102
135
  - !ruby/object:Gem::Dependency
103
136
  name: ruby-debug19
104
- requirement: &70339494485980 !ruby/object:Gem::Requirement
137
+ requirement: &2157408240 !ruby/object:Gem::Requirement
105
138
  none: false
106
139
  requirements:
107
140
  - - ! '>='
@@ -109,10 +142,10 @@ dependencies:
109
142
  version: '0'
110
143
  type: :development
111
144
  prerelease: false
112
- version_requirements: *70339494485980
145
+ version_requirements: *2157408240
113
146
  - !ruby/object:Gem::Dependency
114
147
  name: growl
115
- requirement: &70339494484300 !ruby/object:Gem::Requirement
148
+ requirement: &2157406740 !ruby/object:Gem::Requirement
116
149
  none: false
117
150
  requirements:
118
151
  - - ! '>='
@@ -120,10 +153,10 @@ dependencies:
120
153
  version: '0'
121
154
  type: :development
122
155
  prerelease: false
123
- version_requirements: *70339494484300
156
+ version_requirements: *2157406740
124
157
  - !ruby/object:Gem::Dependency
125
158
  name: rspec-rails
126
- requirement: &70339494482660 !ruby/object:Gem::Requirement
159
+ requirement: &2157405020 !ruby/object:Gem::Requirement
127
160
  none: false
128
161
  requirements:
129
162
  - - ! '>='
@@ -131,10 +164,10 @@ dependencies:
131
164
  version: '0'
132
165
  type: :development
133
166
  prerelease: false
134
- version_requirements: *70339494482660
167
+ version_requirements: *2157405020
135
168
  - !ruby/object:Gem::Dependency
136
169
  name: factory_girl
137
- requirement: &70339494480240 !ruby/object:Gem::Requirement
170
+ requirement: &2157402240 !ruby/object:Gem::Requirement
138
171
  none: false
139
172
  requirements:
140
173
  - - ! '>='
@@ -142,10 +175,10 @@ dependencies:
142
175
  version: '0'
143
176
  type: :development
144
177
  prerelease: false
145
- version_requirements: *70339494480240
178
+ version_requirements: *2157402240
146
179
  - !ruby/object:Gem::Dependency
147
180
  name: simplecov
148
- requirement: &70339494479280 !ruby/object:Gem::Requirement
181
+ requirement: &2157394860 !ruby/object:Gem::Requirement
149
182
  none: false
150
183
  requirements:
151
184
  - - ! '>='
@@ -153,10 +186,10 @@ dependencies:
153
186
  version: '0'
154
187
  type: :development
155
188
  prerelease: false
156
- version_requirements: *70339494479280
189
+ version_requirements: *2157394860
157
190
  - !ruby/object:Gem::Dependency
158
191
  name: faker
159
- requirement: &70339494477780 !ruby/object:Gem::Requirement
192
+ requirement: &2157392560 !ruby/object:Gem::Requirement
160
193
  none: false
161
194
  requirements:
162
195
  - - ! '>='
@@ -164,10 +197,10 @@ dependencies:
164
197
  version: '0'
165
198
  type: :development
166
199
  prerelease: false
167
- version_requirements: *70339494477780
200
+ version_requirements: *2157392560
168
201
  - !ruby/object:Gem::Dependency
169
202
  name: guard
170
- requirement: &70339494476400 !ruby/object:Gem::Requirement
203
+ requirement: &2157391740 !ruby/object:Gem::Requirement
171
204
  none: false
172
205
  requirements:
173
206
  - - ! '>='
@@ -175,10 +208,10 @@ dependencies:
175
208
  version: '0'
176
209
  type: :development
177
210
  prerelease: false
178
- version_requirements: *70339494476400
211
+ version_requirements: *2157391740
179
212
  - !ruby/object:Gem::Dependency
180
213
  name: guard-rspec
181
- requirement: &70339494475220 !ruby/object:Gem::Requirement
214
+ requirement: &2157390760 !ruby/object:Gem::Requirement
182
215
  none: false
183
216
  requirements:
184
217
  - - ! '>='
@@ -186,10 +219,10 @@ dependencies:
186
219
  version: '0'
187
220
  type: :development
188
221
  prerelease: false
189
- version_requirements: *70339494475220
222
+ version_requirements: *2157390760
190
223
  - !ruby/object:Gem::Dependency
191
224
  name: mocha
192
- requirement: &70339494473700 !ruby/object:Gem::Requirement
225
+ requirement: &2157389540 !ruby/object:Gem::Requirement
193
226
  none: false
194
227
  requirements:
195
228
  - - ! '>='
@@ -197,10 +230,10 @@ dependencies:
197
230
  version: '0'
198
231
  type: :development
199
232
  prerelease: false
200
- version_requirements: *70339494473700
233
+ version_requirements: *2157389540
201
234
  - !ruby/object:Gem::Dependency
202
235
  name: bundler
203
- requirement: &70339494472760 !ruby/object:Gem::Requirement
236
+ requirement: &2157384400 !ruby/object:Gem::Requirement
204
237
  none: false
205
238
  requirements:
206
239
  - - ! '>='
@@ -208,10 +241,10 @@ dependencies:
208
241
  version: '0'
209
242
  type: :development
210
243
  prerelease: false
211
- version_requirements: *70339494472760
244
+ version_requirements: *2157384400
212
245
  - !ruby/object:Gem::Dependency
213
246
  name: jeweler
214
- requirement: &70339494471640 !ruby/object:Gem::Requirement
247
+ requirement: &2157381720 !ruby/object:Gem::Requirement
215
248
  none: false
216
249
  requirements:
217
250
  - - ~>
@@ -219,21 +252,21 @@ dependencies:
219
252
  version: 1.6.4
220
253
  type: :development
221
254
  prerelease: false
222
- version_requirements: *70339494471640
255
+ version_requirements: *2157381720
223
256
  - !ruby/object:Gem::Dependency
224
257
  name: activerecord
225
- requirement: &70339494455840 !ruby/object:Gem::Requirement
258
+ requirement: &2157379880 !ruby/object:Gem::Requirement
226
259
  none: false
227
260
  requirements:
228
- - - =
261
+ - - ~>
229
262
  - !ruby/object:Gem::Version
230
- version: 3.0.9
263
+ version: '3'
231
264
  type: :development
232
265
  prerelease: false
233
- version_requirements: *70339494455840
266
+ version_requirements: *2157379880
234
267
  - !ruby/object:Gem::Dependency
235
268
  name: sqlite3
236
- requirement: &70339494453680 !ruby/object:Gem::Requirement
269
+ requirement: &2157378660 !ruby/object:Gem::Requirement
237
270
  none: false
238
271
  requirements:
239
272
  - - ! '>='
@@ -241,7 +274,7 @@ dependencies:
241
274
  version: '0'
242
275
  type: :development
243
276
  prerelease: false
244
- version_requirements: *70339494453680
277
+ version_requirements: *2157378660
245
278
  description: A replacement for ActiveResource for RESTful APIs that handles associated
246
279
  object and multiple data sources
247
280
  email: ejl6266@gmail.com
@@ -294,6 +327,7 @@ files:
294
327
  - lib/api_resource/railtie.rb
295
328
  - lib/api_resource/scopes.rb
296
329
  - nohup.out
330
+ - spec/lib/api_resource_spec.rb
297
331
  - spec/lib/associations_spec.rb
298
332
  - spec/lib/attributes_spec.rb
299
333
  - spec/lib/base_spec.rb
@@ -325,7 +359,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
325
359
  version: '0'
326
360
  segments:
327
361
  - 0
328
- hash: 2077166226351536959
362
+ hash: 391851535398052430
329
363
  required_rubygems_version: !ruby/object:Gem::Requirement
330
364
  none: false
331
365
  requirements:
@@ -334,7 +368,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
368
  version: '0'
335
369
  requirements: []
336
370
  rubyforge_project:
337
- rubygems_version: 1.8.17
371
+ rubygems_version: 1.8.11
338
372
  signing_key:
339
373
  specification_version: 3
340
374
  summary: A replacement for ActiveResource for RESTful APIs that handles associated