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.
@@ -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 be_true
30
- user.email_changed?.should be_false
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 be_true
42
- user.email_changed?.should be_false
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 be_true
66
+ user.fullname_changed?.should be_truthy
55
67
  user.should be_changed
56
68
  user.save
57
69
  user.should_not be_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
@@ -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 be_true
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 be_false
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 be_true
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 be_true
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 be_true
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 be_false
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 be_false
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 be_false
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 be_false
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 be_true
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 be_true
452
+ user.save.should be_truthy
387
453
  end
388
454
  end
389
455
  end
@@ -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
@@ -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 be_true
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 be_false
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 be_false
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 be_false
286
+ @user.active.should be_falsey
287
287
  end
288
288
  end
289
289
  end
@@ -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 have(1).items
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 have(2).items
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 have(3).items
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 be_true
117
+ @new_user.new?.should be_truthy
118
118
  @new_user.fullname.should == "Tobias Fünke"
119
119
  end
120
120
  end
@@ -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 ||= Faraday::Utils.parse_nested_query(env[:body]).with_indifferent_access.merge(env[: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.6.8
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: 2013-07-12 00:00:00.000000000 Z
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.7.7
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.7.7
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: 1.8.23
249
+ rubygems_version: 2.2.2
240
250
  signing_key:
241
- specification_version: 3
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: