her 0.6.8 → 0.7
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +3 -3
- data/Gemfile +8 -0
- data/README.md +49 -11
- data/gemfiles/Gemfile.activemodel-3.2.x +2 -0
- data/gemfiles/Gemfile.activemodel-4.0 +2 -0
- data/gemfiles/Gemfile.activemodel-4.1 +7 -0
- data/her.gemspec +5 -4
- data/lib/her/api.rb +8 -2
- data/lib/her/errors.rb +9 -0
- data/lib/her/middleware/parse_json.rb +1 -1
- data/lib/her/model/associations.rb +1 -0
- data/lib/her/model/associations/association.rb +13 -29
- data/lib/her/model/associations/association_proxy.rb +46 -0
- data/lib/her/model/associations/belongs_to_association.rb +4 -2
- data/lib/her/model/associations/has_many_association.rb +2 -1
- data/lib/her/model/associations/has_one_association.rb +2 -1
- data/lib/her/model/attributes.rb +18 -19
- data/lib/her/model/http.rb +5 -1
- data/lib/her/model/orm.rb +12 -1
- data/lib/her/model/parse.rb +27 -26
- data/lib/her/model/paths.rb +1 -1
- data/lib/her/model/relation.rb +2 -0
- data/lib/her/version.rb +1 -1
- data/spec/middleware/first_level_parse_json_spec.rb +5 -0
- data/spec/model/associations_spec.rb +76 -5
- data/spec/model/attributes_spec.rb +15 -9
- data/spec/model/dirty_spec.rb +19 -7
- data/spec/model/http_spec.rb +8 -0
- data/spec/model/introspection_spec.rb +5 -0
- data/spec/model/orm_spec.rb +77 -11
- data/spec/model/parse_spec.rb +30 -1
- data/spec/model/paths_spec.rb +4 -4
- data/spec/model/relation_spec.rb +4 -4
- data/spec/spec_helper.rb +4 -0
- data/spec/support/macros/request_macros.rb +9 -1
- metadata +63 -53
data/spec/model/dirty_spec.rb
CHANGED
@@ -22,24 +22,33 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context "for existing resource" do
|
25
|
+
let(:user) { Foo::User.find(1) }
|
26
|
+
it "has no changes" do
|
27
|
+
user.changes.should be_empty
|
28
|
+
user.should_not be_changed
|
29
|
+
end
|
25
30
|
context "with successful save" do
|
26
31
|
it "tracks dirty attributes" do
|
27
|
-
user = Foo::User.find(1)
|
28
32
|
user.fullname = "Tobias Fünke"
|
29
|
-
user.fullname_changed?.should
|
30
|
-
user.email_changed?.should
|
33
|
+
user.fullname_changed?.should be_truthy
|
34
|
+
user.email_changed?.should be_falsey
|
31
35
|
user.should be_changed
|
32
36
|
user.save
|
33
37
|
user.should_not be_changed
|
34
38
|
end
|
39
|
+
it "tracks previous changes" do
|
40
|
+
user.fullname = "Tobias Fünke"
|
41
|
+
user.save
|
42
|
+
user.previous_changes.should eq({"fullname"=>"Lindsay Fünke"})
|
43
|
+
end
|
35
44
|
end
|
36
45
|
|
37
46
|
context "with erroneous save" do
|
38
47
|
it "tracks dirty attributes" do
|
39
48
|
user = Foo::User.find(2)
|
40
49
|
user.fullname = "Tobias Fünke"
|
41
|
-
user.fullname_changed?.should
|
42
|
-
user.email_changed?.should
|
50
|
+
user.fullname_changed?.should be_truthy
|
51
|
+
user.email_changed?.should be_falsey
|
43
52
|
user.should be_changed
|
44
53
|
user.save
|
45
54
|
user.should be_changed
|
@@ -48,10 +57,13 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
48
57
|
end
|
49
58
|
|
50
59
|
context "for new resource" do
|
60
|
+
let(:user) { Foo::User.new(:fullname => "Lindsay Fünke") }
|
61
|
+
it "has changes" do
|
62
|
+
user.should be_changed
|
63
|
+
end
|
51
64
|
it "tracks dirty attributes" do
|
52
|
-
user = Foo::User.new
|
53
65
|
user.fullname = "Tobias Fünke"
|
54
|
-
user.fullname_changed?.should
|
66
|
+
user.fullname_changed?.should be_truthy
|
55
67
|
user.should be_changed
|
56
68
|
user.save
|
57
69
|
user.should_not be_changed
|
data/spec/model/http_spec.rb
CHANGED
@@ -24,6 +24,14 @@ describe Her::Model::HTTP do
|
|
24
24
|
its(:base_uri) { should == "https://api.example.com" }
|
25
25
|
end
|
26
26
|
|
27
|
+
context "when using a proc for uses_api" do
|
28
|
+
before do
|
29
|
+
Foo::User.uses_api lambda { Her::API.new :url => 'http://api-lambda.example.com' }
|
30
|
+
end
|
31
|
+
|
32
|
+
specify { Foo::User.her_api.base_uri.should == 'http://api-lambda.example.com' }
|
33
|
+
end
|
34
|
+
|
27
35
|
context "when binding two models to two different instances of Her::API" do
|
28
36
|
before do
|
29
37
|
Foo::User.uses_api api1
|
@@ -40,6 +40,11 @@ describe Her::Model::Introspection do
|
|
40
40
|
@user.inspect.should include("password=\"filtered\"")
|
41
41
|
@user.inspect.should_not include("password=\"Funke\"")
|
42
42
|
end
|
43
|
+
|
44
|
+
it "support dash on attribute" do
|
45
|
+
@user = Foo::User.new(:'life-span' => "3 years")
|
46
|
+
@user.inspect.should include("life-span=\"3 years\"")
|
47
|
+
end
|
43
48
|
end
|
44
49
|
|
45
50
|
describe "#inspect with errors in resource path" do
|
data/spec/model/orm_spec.rb
CHANGED
@@ -48,11 +48,11 @@ describe Her::Model::ORM do
|
|
48
48
|
|
49
49
|
it "handles new resource" do
|
50
50
|
@new_user = Foo::User.new(:fullname => "Tobias Fünke")
|
51
|
-
@new_user.new?.should
|
51
|
+
@new_user.new?.should be_truthy
|
52
52
|
@new_user.fullname.should == "Tobias Fünke"
|
53
53
|
|
54
54
|
@existing_user = Foo::User.find(1)
|
55
|
-
@existing_user.new?.should
|
55
|
+
@existing_user.new?.should be_falsey
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'handles new resource with custom primary key' do
|
@@ -102,6 +102,44 @@ describe Her::Model::ORM do
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
context "mapping data, metadata and error data in string keys to Ruby objects" do
|
106
|
+
before do
|
107
|
+
api = Her::API.new
|
108
|
+
api.setup :url => "https://api.example.com" do |builder|
|
109
|
+
builder.use Her::Middleware::SecondLevelParseJSON
|
110
|
+
builder.use Faraday::Request::UrlEncoded
|
111
|
+
builder.adapter :test do |stub|
|
112
|
+
stub.get("/users") { |env| [200, {}, { 'data' => [{ :id => 1, :name => "Tobias Fünke" }, { :id => 2, :name => "Lindsay Fünke" }], 'metadata' => { :total_pages => 10, :next_page => 2 }, 'errors' => ["Oh", "My", "God"] }.to_json] }
|
113
|
+
stub.post("/users") { |env| [200, {}, { 'data' => { :name => "George Michael Bluth" }, 'metadata' => { :foo => "bar" }, 'errors' => ["Yes", "Sir"] }.to_json] }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
spawn_model :User do
|
118
|
+
uses_api api
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "handles metadata on a collection" do
|
123
|
+
@users = User.all
|
124
|
+
@users.metadata[:total_pages].should == 10
|
125
|
+
end
|
126
|
+
|
127
|
+
it "handles error data on a collection" do
|
128
|
+
@users = User.all
|
129
|
+
@users.errors.length.should == 3
|
130
|
+
end
|
131
|
+
|
132
|
+
it "handles metadata on a resource" do
|
133
|
+
@user = User.create(:name => "George Michael Bluth")
|
134
|
+
@user.metadata[:foo].should == "bar"
|
135
|
+
end
|
136
|
+
|
137
|
+
it "handles error data on a resource" do
|
138
|
+
@user = User.create(:name => "George Michael Bluth")
|
139
|
+
@user.response_errors.should == ["Yes", "Sir"]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
105
143
|
context "defining custom getters and setters" do
|
106
144
|
before do
|
107
145
|
api = Her::API.new
|
@@ -156,6 +194,7 @@ describe Her::Model::ORM do
|
|
156
194
|
builder.adapter :test do |stub|
|
157
195
|
stub.get("/users/1") { |env| [200, {}, { :id => 1, :age => 42 }.to_json] }
|
158
196
|
stub.get("/users/2") { |env| [200, {}, { :id => 2, :age => 34 }.to_json] }
|
197
|
+
stub.get("/users?id[]=1&id[]=2") { |env| [200, {}, [{ :id => 1, :age => 42 }, { :id => 2, :age => 34 }].to_json] }
|
159
198
|
stub.get("/users?age=42&foo=bar") { |env| [200, {}, [{ :id => 3, :age => 42 }].to_json] }
|
160
199
|
stub.get("/users?age=42") { |env| [200, {}, [{ :id => 1, :age => 42 }].to_json] }
|
161
200
|
stub.get("/users?age=40") { |env| [200, {}, [{ :id => 1, :age => 40 }].to_json] }
|
@@ -195,6 +234,22 @@ describe Her::Model::ORM do
|
|
195
234
|
@users[0].id.should == 1
|
196
235
|
end
|
197
236
|
|
237
|
+
it "handles finding by an array id param of length 2" do
|
238
|
+
@users = User.find(id: [1, 2])
|
239
|
+
@users.should be_kind_of(Array)
|
240
|
+
@users.length.should == 2
|
241
|
+
@users[0].id.should == 1
|
242
|
+
@users[1].id.should == 2
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'handles finding with id parameter as an array' do
|
246
|
+
@users = User.where(id: [1, 2])
|
247
|
+
@users.should be_kind_of(Array)
|
248
|
+
@users.length.should == 2
|
249
|
+
@users[0].id.should == 1
|
250
|
+
@users[1].id.should == 2
|
251
|
+
end
|
252
|
+
|
198
253
|
it "handles finding with other parameters" do
|
199
254
|
@users = User.where(:age => 42, :foo => "bar").all
|
200
255
|
@users.should be_kind_of(Array)
|
@@ -217,7 +272,7 @@ describe Her::Model::ORM do
|
|
217
272
|
it "builds a new resource without requesting it" do
|
218
273
|
Foo::User.should_not_receive(:request)
|
219
274
|
@new_user = Foo::User.build(:fullname => "Tobias Fünke")
|
220
|
-
@new_user.new?.should
|
275
|
+
@new_user.new?.should be_truthy
|
221
276
|
@new_user.fullname.should == "Tobias Fünke"
|
222
277
|
end
|
223
278
|
end
|
@@ -238,7 +293,7 @@ describe Her::Model::ORM do
|
|
238
293
|
it "requests a new resource" do
|
239
294
|
Foo::User.should_receive(:request).once.and_call_original
|
240
295
|
@new_user = Foo::User.build(:fullname => "Tobias Fünke")
|
241
|
-
@new_user.new?.should
|
296
|
+
@new_user.new?.should be_truthy
|
242
297
|
@new_user.fullname.should == "Tobias Fünke"
|
243
298
|
@new_user.email.should == "tobias@bluthcompany.com"
|
244
299
|
end
|
@@ -269,18 +324,29 @@ describe Her::Model::ORM do
|
|
269
324
|
|
270
325
|
it "handle resource creation through Model.new + #save" do
|
271
326
|
@user = Foo::User.new(:fullname => "Tobias Fünke")
|
272
|
-
@user.save.should
|
327
|
+
@user.save.should be_truthy
|
328
|
+
@user.fullname.should == "Tobias Fünke"
|
329
|
+
end
|
330
|
+
|
331
|
+
it "handle resource creation through Model.new + #save!" do
|
332
|
+
@user = Foo::User.new(:fullname => "Tobias Fünke")
|
333
|
+
@user.save!.should be_truthy
|
273
334
|
@user.fullname.should == "Tobias Fünke"
|
274
335
|
end
|
275
336
|
|
276
337
|
it "returns false when #save gets errors" do
|
277
338
|
@company = Foo::Company.new
|
278
|
-
@company.save.should
|
339
|
+
@company.save.should be_falsey
|
340
|
+
end
|
341
|
+
|
342
|
+
it "raises ResourceInvalid when #save! gets errors" do
|
343
|
+
@company = Foo::Company.new
|
344
|
+
expect { @company.save! }.to raise_error Her::Errors::ResourceInvalid, "Remote validation failed: name is required"
|
279
345
|
end
|
280
346
|
|
281
347
|
it "don't overwrite data if response is empty" do
|
282
348
|
@company = Foo::Company.new(:name => 'Company Inc.')
|
283
|
-
@company.save.should
|
349
|
+
@company.save.should be_falsey
|
284
350
|
@company.name.should == "Company Inc."
|
285
351
|
end
|
286
352
|
end
|
@@ -335,14 +401,14 @@ describe Her::Model::ORM do
|
|
335
401
|
|
336
402
|
it "handle resource deletion through the .destroy class method" do
|
337
403
|
@user = Foo::User.destroy_existing(1)
|
338
|
-
@user.active.should
|
404
|
+
@user.active.should be_falsey
|
339
405
|
@user.should be_destroyed
|
340
406
|
end
|
341
407
|
|
342
408
|
it "handle resource deletion through #destroy on an existing resource" do
|
343
409
|
@user = Foo::User.find(1)
|
344
410
|
@user.destroy
|
345
|
-
@user.active.should
|
411
|
+
@user.active.should be_falsey
|
346
412
|
@user.should be_destroyed
|
347
413
|
end
|
348
414
|
end
|
@@ -370,7 +436,7 @@ describe Her::Model::ORM do
|
|
370
436
|
it 'uses the custom method (PUT) instead of default method (POST)' do
|
371
437
|
user = Foo::User.new(:fullname => 'Tobias Fünke')
|
372
438
|
user.should be_new
|
373
|
-
user.save.should
|
439
|
+
user.save.should be_truthy
|
374
440
|
end
|
375
441
|
end
|
376
442
|
|
@@ -383,7 +449,7 @@ describe Her::Model::ORM do
|
|
383
449
|
it 'uses the custom method (PUT) instead of default method (POST)' do
|
384
450
|
user = User.new(:fullname => 'Tobias Fünke')
|
385
451
|
user.should be_new
|
386
|
-
user.save.should
|
452
|
+
user.save.should be_truthy
|
387
453
|
end
|
388
454
|
end
|
389
455
|
end
|
data/spec/model/parse_spec.rb
CHANGED
@@ -135,9 +135,10 @@ describe Her::Model::Parse do
|
|
135
135
|
before do
|
136
136
|
Her::API.default_api.connection.adapter :test do |stub|
|
137
137
|
stub.post("/users") { |env| [200, {}, { :user => { :id => 1, :fullname => "Lindsay Fünke" } }.to_json] }
|
138
|
+
stub.get("/users") { |env| [200, {}, { :users => [ { :id => 1, :fullname => "Lindsay Fünke" } ] }.to_json] }
|
138
139
|
end
|
139
140
|
|
140
|
-
spawn_model("Foo::Model") { parse_root_in_json true }
|
141
|
+
spawn_model("Foo::Model") { parse_root_in_json true, format: :active_model_serializers }
|
141
142
|
class User < Foo::Model
|
142
143
|
collection_path "/users"
|
143
144
|
end
|
@@ -149,6 +150,11 @@ describe Her::Model::Parse do
|
|
149
150
|
@new_user = User.create(:fullname => "Lindsay Fünke")
|
150
151
|
@new_user.fullname.should == "Lindsay Fünke"
|
151
152
|
end
|
153
|
+
|
154
|
+
it "parses the collection of data" do
|
155
|
+
@users = User.all
|
156
|
+
@users.first.fullname.should == "Lindsay Fünke"
|
157
|
+
end
|
152
158
|
end
|
153
159
|
|
154
160
|
context "to true with :format => :active_model_serializers" do
|
@@ -224,4 +230,27 @@ describe Her::Model::Parse do
|
|
224
230
|
@user.fullname.should == "Lindsay Fünke"
|
225
231
|
end
|
226
232
|
end
|
233
|
+
|
234
|
+
context 'when send_only_modified_attributes is set' do
|
235
|
+
before do
|
236
|
+
Her::API.setup :url => "https://api.example.com", :send_only_modified_attributes => true do |builder|
|
237
|
+
builder.use Her::Middleware::FirstLevelParseJSON
|
238
|
+
builder.use Faraday::Request::UrlEncoded
|
239
|
+
end
|
240
|
+
|
241
|
+
Her::API.default_api.connection.adapter :test do |stub|
|
242
|
+
stub.get("/users/1") { |env| [200, {}, { :id => 1, :first_name => "Gooby", :last_name => "Pls" }.to_json] }
|
243
|
+
end
|
244
|
+
|
245
|
+
spawn_model "Foo::User" do
|
246
|
+
include_root_in_json true
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'only sends the attributes that were modified' do
|
251
|
+
user = Foo::User.find 1
|
252
|
+
user.first_name = 'Someone'
|
253
|
+
expect(user.to_params).to eql(:user => {:first_name => 'Someone'})
|
254
|
+
end
|
255
|
+
end
|
227
256
|
end
|
data/spec/model/paths_spec.rb
CHANGED
@@ -232,10 +232,10 @@ describe Her::Model::Paths do
|
|
232
232
|
describe "handling new resource" do
|
233
233
|
it "handles new resource" do
|
234
234
|
@new_user = Foo::User.new(:fullname => "Tobias Fünke", :organization_id => 2)
|
235
|
-
@new_user.new?.should
|
235
|
+
@new_user.new?.should be_truthy
|
236
236
|
|
237
237
|
@existing_user = Foo::User.find(1, :_organization_id => 2)
|
238
|
-
@existing_user.new?.should
|
238
|
+
@existing_user.new?.should be_falsey
|
239
239
|
end
|
240
240
|
end
|
241
241
|
|
@@ -277,13 +277,13 @@ describe Her::Model::Paths do
|
|
277
277
|
context "deleting resources" do
|
278
278
|
it "handle resource deletion through the .destroy class method" do
|
279
279
|
@user = Foo::User.destroy_existing(1, :_organization_id => 2)
|
280
|
-
@user.active.should
|
280
|
+
@user.active.should be_falsey
|
281
281
|
end
|
282
282
|
|
283
283
|
it "handle resource deletion through #destroy on an existing resource" do
|
284
284
|
@user = Foo::User.find(1, :_organization_id => 2)
|
285
285
|
@user.destroy
|
286
|
-
@user.active.should
|
286
|
+
@user.active.should be_falsey
|
287
287
|
end
|
288
288
|
end
|
289
289
|
end
|
data/spec/model/relation_spec.rb
CHANGED
@@ -38,7 +38,7 @@ describe Her::Model::Relation do
|
|
38
38
|
Foo::User.should_receive(:request).once.and_call_original
|
39
39
|
@users = Foo::User.where(:admin => 1)
|
40
40
|
@users.should respond_to(:length)
|
41
|
-
@users.should
|
41
|
+
@users.size.should eql 1
|
42
42
|
end
|
43
43
|
|
44
44
|
it "chains multiple where statements" do
|
@@ -47,9 +47,9 @@ describe Her::Model::Relation do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "does not reuse relations" do
|
50
|
-
Foo::User.all.should
|
50
|
+
Foo::User.all.size.should eql 2
|
51
51
|
Foo::User.create(:fullname => 'George Michael Bluth').id.should == 3
|
52
|
-
Foo::User.all.should
|
52
|
+
Foo::User.all.size.should eql 3
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -114,7 +114,7 @@ describe Her::Model::Relation do
|
|
114
114
|
|
115
115
|
it "handles new resource with build" do
|
116
116
|
@new_user = Foo::User.where(:fullname => "Tobias Fünke").build
|
117
|
-
@new_user.new?.should
|
117
|
+
@new_user.new?.should be_truthy
|
118
118
|
@new_user.fullname.should == "Tobias Fünke"
|
119
119
|
end
|
120
120
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
2
|
|
3
3
|
require "rspec"
|
4
|
+
require "rspec/its"
|
4
5
|
require "her"
|
5
6
|
|
6
7
|
# Require everything in `spec/support`
|
7
8
|
Dir[File.expand_path('../../spec/support/**/*.rb', __FILE__)].map(&method(:require))
|
8
9
|
|
10
|
+
# Remove ActiveModel deprecation message
|
11
|
+
I18n.enforce_available_locales = false
|
12
|
+
|
9
13
|
RSpec.configure do |config|
|
10
14
|
config.include Her::Testing::Macros::ModelMacros
|
11
15
|
config.include Her::Testing::Macros::RequestMacros
|
@@ -11,7 +11,15 @@ module Her
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def params(env)
|
14
|
-
@params ||=
|
14
|
+
@params ||= begin
|
15
|
+
parsed_query = Faraday::Utils.parse_nested_query(env[:body])
|
16
|
+
|
17
|
+
if parsed_query
|
18
|
+
parsed_query.with_indifferent_access.merge(env[:params])
|
19
|
+
else
|
20
|
+
env[:params].with_indifferent_access
|
21
|
+
end
|
22
|
+
end
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
metadata
CHANGED
@@ -1,142 +1,157 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: her
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: '0.7'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Rémi Prévost
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-03 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '10.0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '10.0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- - ~>
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '2.13'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- - ~>
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '2.13'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-its
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
46
55
|
- !ruby/object:Gem::Dependency
|
47
56
|
name: fivemat
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
58
|
requirements:
|
51
|
-
- - ~>
|
59
|
+
- - "~>"
|
52
60
|
- !ruby/object:Gem::Version
|
53
61
|
version: '1.2'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
65
|
requirements:
|
59
|
-
- - ~>
|
66
|
+
- - "~>"
|
60
67
|
- !ruby/object:Gem::Version
|
61
68
|
version: '1.2'
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: json
|
64
71
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
72
|
requirements:
|
67
|
-
- - ~>
|
73
|
+
- - "~>"
|
68
74
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
75
|
+
version: '1.8'
|
70
76
|
type: :development
|
71
77
|
prerelease: false
|
72
78
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
79
|
requirements:
|
75
|
-
- - ~>
|
80
|
+
- - "~>"
|
76
81
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.
|
82
|
+
version: '1.8'
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
name: activemodel
|
80
85
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
86
|
requirements:
|
83
|
-
- -
|
87
|
+
- - ">="
|
84
88
|
- !ruby/object:Gem::Version
|
85
89
|
version: 3.0.0
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '4.2'
|
86
93
|
type: :runtime
|
87
94
|
prerelease: false
|
88
95
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
96
|
requirements:
|
91
|
-
- -
|
97
|
+
- - ">="
|
92
98
|
- !ruby/object:Gem::Version
|
93
99
|
version: 3.0.0
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '4.2'
|
94
103
|
- !ruby/object:Gem::Dependency
|
95
104
|
name: activesupport
|
96
105
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
106
|
requirements:
|
99
|
-
- -
|
107
|
+
- - ">="
|
100
108
|
- !ruby/object:Gem::Version
|
101
109
|
version: 3.0.0
|
110
|
+
- - "<"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '4.2'
|
102
113
|
type: :runtime
|
103
114
|
prerelease: false
|
104
115
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
116
|
requirements:
|
107
|
-
- -
|
117
|
+
- - ">="
|
108
118
|
- !ruby/object:Gem::Version
|
109
119
|
version: 3.0.0
|
120
|
+
- - "<"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '4.2'
|
110
123
|
- !ruby/object:Gem::Dependency
|
111
124
|
name: faraday
|
112
125
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
126
|
requirements:
|
115
|
-
- -
|
127
|
+
- - ">="
|
116
128
|
- !ruby/object:Gem::Version
|
117
129
|
version: '0.8'
|
130
|
+
- - "<"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '1.0'
|
118
133
|
type: :runtime
|
119
134
|
prerelease: false
|
120
135
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
136
|
requirements:
|
123
|
-
- -
|
137
|
+
- - ">="
|
124
138
|
- !ruby/object:Gem::Version
|
125
139
|
version: '0.8'
|
140
|
+
- - "<"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '1.0'
|
126
143
|
- !ruby/object:Gem::Dependency
|
127
144
|
name: multi_json
|
128
145
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
146
|
requirements:
|
131
|
-
- - ~>
|
147
|
+
- - "~>"
|
132
148
|
- !ruby/object:Gem::Version
|
133
149
|
version: '1.7'
|
134
150
|
type: :runtime
|
135
151
|
prerelease: false
|
136
152
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
153
|
requirements:
|
139
|
-
- - ~>
|
154
|
+
- - "~>"
|
140
155
|
- !ruby/object:Gem::Version
|
141
156
|
version: '1.7'
|
142
157
|
description: Her is an ORM that maps REST resources and collections to Ruby objects
|
@@ -146,10 +161,10 @@ executables: []
|
|
146
161
|
extensions: []
|
147
162
|
extra_rdoc_files: []
|
148
163
|
files:
|
149
|
-
- .gitignore
|
150
|
-
- .rspec
|
151
|
-
- .travis.yml
|
152
|
-
- .yardopts
|
164
|
+
- ".gitignore"
|
165
|
+
- ".rspec"
|
166
|
+
- ".travis.yml"
|
167
|
+
- ".yardopts"
|
153
168
|
- CONTRIBUTING.md
|
154
169
|
- Gemfile
|
155
170
|
- LICENSE
|
@@ -158,6 +173,7 @@ files:
|
|
158
173
|
- UPGRADE.md
|
159
174
|
- gemfiles/Gemfile.activemodel-3.2.x
|
160
175
|
- gemfiles/Gemfile.activemodel-4.0
|
176
|
+
- gemfiles/Gemfile.activemodel-4.1
|
161
177
|
- her.gemspec
|
162
178
|
- lib/her.rb
|
163
179
|
- lib/her/api.rb
|
@@ -171,6 +187,7 @@ files:
|
|
171
187
|
- lib/her/model.rb
|
172
188
|
- lib/her/model/associations.rb
|
173
189
|
- lib/her/model/associations/association.rb
|
190
|
+
- lib/her/model/associations/association_proxy.rb
|
174
191
|
- lib/her/model/associations/belongs_to_association.rb
|
175
192
|
- lib/her/model/associations/has_many_association.rb
|
176
193
|
- lib/her/model/associations/has_one_association.rb
|
@@ -212,33 +229,26 @@ files:
|
|
212
229
|
homepage: http://her-rb.org
|
213
230
|
licenses:
|
214
231
|
- MIT
|
232
|
+
metadata: {}
|
215
233
|
post_install_message:
|
216
234
|
rdoc_options: []
|
217
235
|
require_paths:
|
218
236
|
- lib
|
219
237
|
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
-
none: false
|
221
238
|
requirements:
|
222
|
-
- -
|
239
|
+
- - ">="
|
223
240
|
- !ruby/object:Gem::Version
|
224
241
|
version: '0'
|
225
|
-
segments:
|
226
|
-
- 0
|
227
|
-
hash: 2536489429371279776
|
228
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
|
-
none: false
|
230
243
|
requirements:
|
231
|
-
- -
|
244
|
+
- - ">="
|
232
245
|
- !ruby/object:Gem::Version
|
233
246
|
version: '0'
|
234
|
-
segments:
|
235
|
-
- 0
|
236
|
-
hash: 2536489429371279776
|
237
247
|
requirements: []
|
238
248
|
rubyforge_project:
|
239
|
-
rubygems_version:
|
249
|
+
rubygems_version: 2.2.2
|
240
250
|
signing_key:
|
241
|
-
specification_version:
|
251
|
+
specification_version: 4
|
242
252
|
summary: A simple Representational State Transfer-based Hypertext Transfer Protocol-powered
|
243
253
|
Object Relational Mapper. Her?
|
244
254
|
test_files:
|