her 0.8.2 → 0.8.3

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.
@@ -4,7 +4,7 @@ require "spec_helper"
4
4
  describe Her::Middleware::AcceptJSON do
5
5
  it "adds an Accept header" do
6
6
  described_class.new.add_header({}).tap do |headers|
7
- headers["Accept"].should == "application/json"
7
+ expect(headers["Accept"]).to eq("application/json")
8
8
  end
9
9
  end
10
10
  end
@@ -7,55 +7,55 @@ describe Her::Middleware::FirstLevelParseJSON do
7
7
  let(:body_with_errors) { "{\"id\": 1, \"name\": \"Tobias Fünke\", \"errors\": { \"name\": [ \"not_valid\", \"should_be_present\" ] }, \"metadata\": 3}" }
8
8
  let(:body_with_malformed_json) { "wut." }
9
9
  let(:body_with_invalid_json) { "true" }
10
- let(:empty_body) { '' }
10
+ let(:empty_body) { "" }
11
11
  let(:nil_body) { nil }
12
12
 
13
13
  it "parses body as json" do
14
14
  subject.parse(body_without_errors).tap do |json|
15
- json[:data].should == { :id => 1, :name => "Tobias Fünke" }
16
- json[:metadata].should == 3
15
+ expect(json[:data]).to eq(id: 1, name: "Tobias Fünke")
16
+ expect(json[:metadata]).to eq(3)
17
17
  end
18
18
  end
19
19
 
20
20
  it "parses :body key as json in the env hash" do
21
- env = { :body => body_without_errors }
21
+ env = { body: body_without_errors }
22
22
  subject.on_complete(env)
23
23
  env[:body].tap do |json|
24
- json[:data].should == { :id => 1, :name => "Tobias Fünke" }
25
- json[:metadata].should == 3
24
+ expect(json[:data]).to eq(id: 1, name: "Tobias Fünke")
25
+ expect(json[:metadata]).to eq(3)
26
26
  end
27
27
  end
28
28
 
29
- it 'ensures the errors are a hash if there are no errors' do
30
- subject.parse(body_without_errors)[:errors].should eq({})
29
+ it "ensures the errors are a hash if there are no errors" do
30
+ expect(subject.parse(body_without_errors)[:errors]).to eq({})
31
31
  end
32
32
 
33
- it 'ensures the errors are a hash if there are no errors' do
34
- subject.parse(body_with_errors)[:errors].should eq({:name => [ 'not_valid', 'should_be_present']})
33
+ it "ensures the errors are a hash if there are no errors" do
34
+ expect(subject.parse(body_with_errors)[:errors]).to eq(name: %w(not_valid should_be_present))
35
35
  end
36
36
 
37
- it 'ensures that malformed JSON throws an exception' do
37
+ it "ensures that malformed JSON throws an exception" do
38
38
  expect { subject.parse(body_with_malformed_json) }.to raise_error(Her::Errors::ParseError, 'Response from the API must behave like a Hash or an Array (last JSON response was "wut.")')
39
39
  end
40
40
 
41
- it 'ensures that invalid JSON throws an exception' do
41
+ it "ensures that invalid JSON throws an exception" do
42
42
  expect { subject.parse(body_with_invalid_json) }.to raise_error(Her::Errors::ParseError, 'Response from the API must behave like a Hash or an Array (last JSON response was "true")')
43
43
  end
44
44
 
45
- it 'ensures that a nil response returns an empty hash' do
46
- subject.parse(nil_body)[:data].should eq({})
45
+ it "ensures that a nil response returns an empty hash" do
46
+ expect(subject.parse(nil_body)[:data]).to eq({})
47
47
  end
48
48
 
49
- it 'ensures that an empty response returns an empty hash' do
50
- subject.parse(empty_body)[:data].should eq({})
49
+ it "ensures that an empty response returns an empty hash" do
50
+ expect(subject.parse(empty_body)[:data]).to eq({})
51
51
  end
52
52
 
53
- context 'with status code 204' do
54
- it 'returns an empty body' do
55
- env = { :status => 204 }
53
+ context "with status code 204" do
54
+ it "returns an empty body" do
55
+ env = { status: 204 }
56
56
  subject.on_complete(env)
57
57
  env[:body].tap do |json|
58
- json[:data].should == { }
58
+ expect(json[:data]).to eq({})
59
59
  end
60
60
  end
61
61
  end
@@ -12,21 +12,20 @@ describe Her::Middleware::JsonApiParser do
12
12
  subject.on_complete(env)
13
13
  env.fetch(:body).tap do |json|
14
14
  expect(json[:data]).to eql(
15
- :type => "foo",
16
- :id => "bar",
17
- :attributes => { :baz => "qux" }
15
+ type: "foo",
16
+ id: "bar",
17
+ attributes: { baz: "qux" }
18
18
  )
19
19
  expect(json[:errors]).to eql([])
20
- expect(json[:metadata]).to eql(:api => "json api")
20
+ expect(json[:metadata]).to eql(api: "json api")
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
- #context "with invalid JSON body" do
25
+ # context "with invalid JSON body" do
26
26
  # let(:body) { '"foo"' }
27
27
  # it 'ensures that invalid JSON throws an exception' do
28
28
  # expect { subject.parse(body) }.to raise_error(Her::Errors::ParseError, 'Response from the API must behave like a Hash or an Array (last JSON response was "\"foo\"")')
29
29
  # end
30
- #end
31
-
30
+ # end
32
31
  end
@@ -8,28 +8,27 @@ describe Her::Middleware::SecondLevelParseJSON do
8
8
  let(:body) { "{\"data\": 1, \"errors\": 2, \"metadata\": 3}" }
9
9
  it "parses body as json" do
10
10
  subject.parse(body).tap do |json|
11
- json[:data].should == 1
12
- json[:errors].should == 2
13
- json[:metadata].should == 3
11
+ expect(json[:data]).to eq(1)
12
+ expect(json[:errors]).to eq(2)
13
+ expect(json[:metadata]).to eq(3)
14
14
  end
15
15
  end
16
16
 
17
17
  it "parses :body key as json in the env hash" do
18
- env = { :body => body }
18
+ env = { body: body }
19
19
  subject.on_complete(env)
20
20
  env[:body].tap do |json|
21
- json[:data].should == 1
22
- json[:errors].should == 2
23
- json[:metadata].should == 3
21
+ expect(json[:data]).to eq(1)
22
+ expect(json[:errors]).to eq(2)
23
+ expect(json[:metadata]).to eq(3)
24
24
  end
25
25
  end
26
26
  end
27
27
 
28
28
  context "with invalid JSON body" do
29
29
  let(:body) { '"foo"' }
30
- it 'ensures that invalid JSON throws an exception' do
30
+ it "ensures that invalid JSON throws an exception" do
31
31
  expect { subject.parse(body) }.to raise_error(Her::Errors::ParseError, 'Response from the API must behave like a Hash or an Array (last JSON response was "\"foo\"")')
32
32
  end
33
33
  end
34
-
35
34
  end
@@ -8,8 +8,8 @@ describe Her::Model::Associations::AssociationProxy do
8
8
  builder.use Her::Middleware::FirstLevelParseJSON
9
9
  builder.use Faraday::Request::UrlEncoded
10
10
  builder.adapter :test do |stub|
11
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json ] }
12
- stub.get("/users/1/fish") { |env| [200, {}, { :id => 1, :name => "Tobias's Fish" }.to_json ] }
11
+ stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke" }.to_json] }
12
+ stub.get("/users/1/fish") { [200, {}, { id: 1, name: "Tobias's Fish" }.to_json] }
13
13
  end
14
14
  end
15
15
  spawn_model "User" do
@@ -26,6 +26,3 @@ describe Her::Model::Associations::AssociationProxy do
26
26
  end
27
27
  end
28
28
  end
29
-
30
-
31
-
@@ -8,7 +8,11 @@ describe Her::Model::Associations do
8
8
 
9
9
  context "single has_many association" do
10
10
  before { Foo::User.has_many :comments }
11
- its([:has_many]) { should eql [{ :name => :comments, :data_key => :comments, :default => [], :class_name => "Comment", :path => "/comments", :inverse_of => nil }] }
11
+
12
+ describe "[:has_many]" do
13
+ subject { super()[:has_many] }
14
+ it { is_expected.to eql [{ name: :comments, data_key: :comments, default: [], class_name: "Comment", path: "/comments", inverse_of: nil }] }
15
+ end
12
16
  end
13
17
 
14
18
  context "multiple has_many associations" do
@@ -17,12 +21,19 @@ describe Her::Model::Associations do
17
21
  Foo::User.has_many :posts
18
22
  end
19
23
 
20
- its([:has_many]) { should eql [{ :name => :comments, :data_key => :comments, :default => [], :class_name => "Comment", :path => "/comments", :inverse_of => nil }, { :name => :posts, :data_key => :posts, :default => [], :class_name => "Post", :path => "/posts", :inverse_of => nil }] }
24
+ describe "[:has_many]" do
25
+ subject { super()[:has_many] }
26
+ it { is_expected.to eql [{ name: :comments, data_key: :comments, default: [], class_name: "Comment", path: "/comments", inverse_of: nil }, { name: :posts, data_key: :posts, default: [], class_name: "Post", path: "/posts", inverse_of: nil }] }
27
+ end
21
28
  end
22
29
 
23
30
  context "single has_one association" do
24
31
  before { Foo::User.has_one :category }
25
- its([:has_one]) { should eql [{ :name => :category, :data_key => :category, :default => nil, :class_name => "Category", :path => "/category" }] }
32
+
33
+ describe "[:has_one]" do
34
+ subject { super()[:has_one] }
35
+ it { is_expected.to eql [{ name: :category, data_key: :category, default: nil, class_name: "Category", path: "/category" }] }
36
+ end
26
37
  end
27
38
 
28
39
  context "multiple has_one associations" do
@@ -31,12 +42,19 @@ describe Her::Model::Associations do
31
42
  Foo::User.has_one :role
32
43
  end
33
44
 
34
- its([:has_one]) { should eql [{ :name => :category, :data_key => :category, :default => nil, :class_name => "Category", :path => "/category" }, { :name => :role, :data_key => :role, :default => nil, :class_name => "Role", :path => "/role" }] }
45
+ describe "[:has_one]" do
46
+ subject { super()[:has_one] }
47
+ it { is_expected.to eql [{ name: :category, data_key: :category, default: nil, class_name: "Category", path: "/category" }, { name: :role, data_key: :role, default: nil, class_name: "Role", path: "/role" }] }
48
+ end
35
49
  end
36
50
 
37
51
  context "single belongs_to association" do
38
52
  before { Foo::User.belongs_to :organization }
39
- its([:belongs_to]) { should eql [{ :name => :organization, :data_key => :organization, :default => nil, :class_name => "Organization", :foreign_key => "organization_id", :path => "/organizations/:id" }] }
53
+
54
+ describe "[:belongs_to]" do
55
+ subject { super()[:belongs_to] }
56
+ it { is_expected.to eql [{ name: :organization, data_key: :organization, default: nil, class_name: "Organization", foreign_key: "organization_id", path: "/organizations/:id" }] }
57
+ end
40
58
  end
41
59
 
42
60
  context "multiple belongs_to association" do
@@ -45,7 +63,10 @@ describe Her::Model::Associations do
45
63
  Foo::User.belongs_to :family
46
64
  end
47
65
 
48
- its([:belongs_to]) { should eql [{ :name => :organization, :data_key => :organization, :default => nil, :class_name => "Organization", :foreign_key => "organization_id", :path => "/organizations/:id" }, { :name => :family, :data_key => :family, :default => nil, :class_name => "Family", :foreign_key => "family_id", :path => "/families/:id" }] }
66
+ describe "[:belongs_to]" do
67
+ subject { super()[:belongs_to] }
68
+ it { is_expected.to eql [{ name: :organization, data_key: :organization, default: nil, class_name: "Organization", foreign_key: "organization_id", path: "/organizations/:id" }, { name: :family, data_key: :family, default: nil, class_name: "Family", foreign_key: "family_id", path: "/families/:id" }] }
69
+ end
49
70
  end
50
71
  end
51
72
 
@@ -55,56 +76,76 @@ describe Her::Model::Associations do
55
76
 
56
77
  context "in base class" do
57
78
  context "single has_many association" do
58
- before { Foo::User.has_many :comments, :class_name => "Post", :inverse_of => :admin, :data_key => :user_comments, :default => {} }
59
- its([:has_many]) { should eql [{ :name => :comments, :data_key => :user_comments, :default => {}, :class_name => "Post", :path => "/comments", :inverse_of => :admin }] }
79
+ before { Foo::User.has_many :comments, class_name: "Post", inverse_of: :admin, data_key: :user_comments, default: {} }
80
+
81
+ describe "[:has_many]" do
82
+ subject { super()[:has_many] }
83
+ it { is_expected.to eql [{ name: :comments, data_key: :user_comments, default: {}, class_name: "Post", path: "/comments", inverse_of: :admin }] }
84
+ end
60
85
  end
61
86
 
62
87
  context "single has_one association" do
63
- before { Foo::User.has_one :category, :class_name => "Topic", :foreign_key => "topic_id", :data_key => :topic, :default => nil }
64
- its([:has_one]) { should eql [{ :name => :category, :data_key => :topic, :default => nil, :class_name => "Topic", :foreign_key => "topic_id", :path => "/category" }] }
88
+ before { Foo::User.has_one :category, class_name: "Topic", foreign_key: "topic_id", data_key: :topic, default: nil }
89
+
90
+ describe "[:has_one]" do
91
+ subject { super()[:has_one] }
92
+ it { is_expected.to eql [{ name: :category, data_key: :topic, default: nil, class_name: "Topic", foreign_key: "topic_id", path: "/category" }] }
93
+ end
65
94
  end
66
95
 
67
96
  context "single belongs_to association" do
68
- before { Foo::User.belongs_to :organization, :class_name => "Business", :foreign_key => "org_id", :data_key => :org, :default => true }
69
- its([:belongs_to]) { should eql [{ :name => :organization, :data_key => :org, :default => true, :class_name => "Business", :foreign_key => "org_id", :path => "/organizations/:id" }] }
97
+ before { Foo::User.belongs_to :organization, class_name: "Business", foreign_key: "org_id", data_key: :org, default: true }
98
+
99
+ describe "[:belongs_to]" do
100
+ subject { super()[:belongs_to] }
101
+ it { is_expected.to eql [{ name: :organization, data_key: :org, default: true, class_name: "Business", foreign_key: "org_id", path: "/organizations/:id" }] }
102
+ end
70
103
  end
71
104
  end
72
105
 
73
106
  context "in parent class" do
74
- before { Foo::User.has_many :comments, :class_name => "Post" }
107
+ before { Foo::User.has_many :comments, class_name: "Post" }
75
108
 
76
109
  describe "associations accessor" do
77
110
  subject { Class.new(Foo::User).associations }
78
- its(:object_id) { should_not eql Foo::User.associations.object_id }
79
- its([:has_many]) { should eql [{ :name => :comments, :data_key => :comments, :default => [], :class_name => "Post", :path => "/comments", :inverse_of => nil }] }
111
+
112
+ describe "#object_id" do
113
+ subject { super().object_id }
114
+ it { is_expected.not_to eql Foo::User.associations.object_id }
115
+ end
116
+
117
+ describe "[:has_many]" do
118
+ subject { super()[:has_many] }
119
+ it { is_expected.to eql [{ name: :comments, data_key: :comments, default: [], class_name: "Post", path: "/comments", inverse_of: nil }] }
120
+ end
80
121
  end
81
122
  end
82
123
  end
83
124
 
84
125
  context "handling associations without details" do
85
126
  before do
86
- Her::API.setup :url => "https://api.example.com" do |builder|
127
+ Her::API.setup url: "https://api.example.com" do |builder|
87
128
  builder.use Her::Middleware::FirstLevelParseJSON
88
129
  builder.use Faraday::Request::UrlEncoded
89
130
  builder.adapter :test do |stub|
90
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :comments => [{ :comment => { :id => 2, :body => "Tobias, you blow hard!", :user_id => 1 } }, { :comment => { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak", :user_id => 1 } }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 }.to_json] }
91
- stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 2 }.to_json] }
92
- stub.get("/users/1/comments") { |env| [200, {}, [{ :comment => { :id => 4, :body => "They're having a FIRESALE?" } }].to_json] }
93
- stub.get("/users/2/comments") { |env| [200, {}, [{ :comment => { :id => 4, :body => "They're having a FIRESALE?" } }, { :comment => { :id => 5, :body => "Is this the tiny town from Footloose?" } }].to_json] }
94
- stub.get("/users/2/comments/5") { |env| [200, {}, { :comment => { :id => 5, :body => "Is this the tiny town from Footloose?" } }.to_json] }
95
- stub.get("/users/2/role") { |env| [200, {}, { :id => 2, :body => "User" }.to_json] }
96
- stub.get("/users/1/role") { |env| [200, {}, { :id => 3, :body => "User" }.to_json] }
97
- stub.get("/users/1/posts") { |env| [200, {}, [{:id => 1, :body => 'blogging stuff', :admin_id => 1 }].to_json] }
98
- stub.get("/organizations/1") { |env| [200, {}, { :organization => { :id => 1, :name => "Bluth Company Foo" } }.to_json] }
99
- stub.post("/users") { |env| [200, {}, { :id => 5, :name => "Mr. Krabs", :comments => [{ :comment => { :id => 99, :body => "Rodríguez, nasibisibusi?", :user_id => 5 } }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 3, :name => "Krusty Krab" }, :organization_id => 3 }.to_json] }
100
- stub.put("/users/5") { |env| [200, {}, { :id => 5, :name => "Clancy Brown", :comments => [{ :comment => { :id => 99, :body => "Rodríguez, nasibisibusi?", :user_id => 5 } }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 3, :name => "Krusty Krab" }, :organization_id => 3 }.to_json] }
101
- stub.delete("/users/5") { |env| [200, {}, { :id => 5, :name => "Clancy Brown", :comments => [{ :comment => { :id => 99, :body => "Rodríguez, nasibisibusi?", :user_id => 5 } }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 3, :name => "Krusty Krab" }, :organization_id => 3 }.to_json] }
131
+ stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke", comments: [{ comment: { id: 2, body: "Tobias, you blow hard!", user_id: 1 } }, { comment: { id: 3, body: "I wouldn't mind kissing that man between the cheeks, so to speak", user_id: 1 } }], role: { id: 1, body: "Admin" }, organization: { id: 1, name: "Bluth Company" }, organization_id: 1 }.to_json] }
132
+ stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 2 }.to_json] }
133
+ stub.get("/users/1/comments") { [200, {}, [{ comment: { id: 4, body: "They're having a FIRESALE?" } }].to_json] }
134
+ stub.get("/users/2/comments") { [200, {}, [{ comment: { id: 4, body: "They're having a FIRESALE?" } }, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }].to_json] }
135
+ stub.get("/users/2/comments/5") { [200, {}, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }.to_json] }
136
+ stub.get("/users/2/role") { [200, {}, { id: 2, body: "User" }.to_json] }
137
+ stub.get("/users/1/role") { [200, {}, { id: 3, body: "User" }.to_json] }
138
+ stub.get("/users/1/posts") { [200, {}, [{ id: 1, body: "blogging stuff", admin_id: 1 }].to_json] }
139
+ stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
140
+ stub.post("/users") { [200, {}, { id: 5, name: "Mr. Krabs", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
141
+ stub.put("/users/5") { [200, {}, { id: 5, name: "Clancy Brown", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
142
+ stub.delete("/users/5") { [200, {}, { id: 5, name: "Clancy Brown", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
102
143
 
103
144
  stub.get("/organizations/2") do |env|
104
145
  if env[:params]["admin"] == "true"
105
- [200, {}, { :organization => { :id => 2, :name => "Bluth Company (admin)" } }.to_json]
146
+ [200, {}, { organization: { id: 2, name: "Bluth Company (admin)" } }.to_json]
106
147
  else
107
- [200, {}, { :organization => { :id => 2, :name => "Bluth Company" } }.to_json]
148
+ [200, {}, { organization: { id: 2, name: "Bluth Company" } }.to_json]
108
149
  end
109
150
  end
110
151
  end
@@ -114,14 +155,14 @@ describe Her::Model::Associations do
114
155
  has_many :comments, class_name: "Foo::Comment"
115
156
  has_one :role
116
157
  belongs_to :organization
117
- has_many :posts, :inverse_of => :admin
158
+ has_many :posts, inverse_of: :admin
118
159
  end
119
160
  spawn_model "Foo::Comment" do
120
161
  belongs_to :user
121
162
  parse_root_in_json true
122
163
  end
123
164
  spawn_model "Foo::Post" do
124
- belongs_to :admin, :class_name => 'Foo::User'
165
+ belongs_to :admin, class_name: "Foo::User"
125
166
  end
126
167
 
127
168
  spawn_model "Foo::Organization" do
@@ -136,136 +177,136 @@ describe Her::Model::Associations do
136
177
  end
137
178
 
138
179
  let(:user_with_included_data_after_create) { Foo::User.create }
139
- let(:user_with_included_data_after_save_existing) { Foo::User.save_existing(5, :name => "Clancy Brown") }
140
- let(:user_with_included_data_after_destroy) { Foo::User.new(:id => 5).destroy }
141
- let(:comment_without_included_parent_data) { Foo::Comment.new(:id => 7, :user_id => 1) }
180
+ let(:user_with_included_data_after_save_existing) { Foo::User.save_existing(5, name: "Clancy Brown") }
181
+ let(:user_with_included_data_after_destroy) { Foo::User.new(id: 5).destroy }
182
+ let(:comment_without_included_parent_data) { Foo::Comment.new(id: 7, user_id: 1) }
142
183
 
143
184
  it "maps an array of included data through has_many" do
144
- @user_with_included_data.comments.first.should be_a(Foo::Comment)
145
- @user_with_included_data.comments.length.should == 2
146
- @user_with_included_data.comments.first.id.should == 2
147
- @user_with_included_data.comments.first.body.should == "Tobias, you blow hard!"
185
+ expect(@user_with_included_data.comments.first).to be_a(Foo::Comment)
186
+ expect(@user_with_included_data.comments.length).to eq(2)
187
+ expect(@user_with_included_data.comments.first.id).to eq(2)
188
+ expect(@user_with_included_data.comments.first.body).to eq("Tobias, you blow hard!")
148
189
  end
149
190
 
150
191
  it "does not refetch the parents models data if they have been fetched before" do
151
- @user_with_included_data.comments.first.user.object_id.should == @user_with_included_data.object_id
192
+ expect(@user_with_included_data.comments.first.user.object_id).to eq(@user_with_included_data.object_id)
152
193
  end
153
194
 
154
195
  it "does fetch the parent models data only once" do
155
- comment_without_included_parent_data.user.object_id.should == comment_without_included_parent_data.user.object_id
196
+ expect(comment_without_included_parent_data.user.object_id).to eq(comment_without_included_parent_data.user.object_id)
156
197
  end
157
198
 
158
199
  it "does fetch the parent models data that was cached if called with parameters" do
159
- comment_without_included_parent_data.user.object_id.should_not == comment_without_included_parent_data.user.where(:a => 2).object_id
200
+ expect(comment_without_included_parent_data.user.object_id).not_to eq(comment_without_included_parent_data.user.where(a: 2).object_id)
160
201
  end
161
202
 
162
203
  it "uses the given inverse_of key to set the parent model" do
163
- @user_with_included_data.posts.first.admin.object_id.should == @user_with_included_data.object_id
204
+ expect(@user_with_included_data.posts.first.admin.object_id).to eq(@user_with_included_data.object_id)
164
205
  end
165
206
 
166
207
  it "fetches data that was not included through has_many" do
167
- @user_without_included_data.comments.first.should be_a(Foo::Comment)
168
- @user_without_included_data.comments.length.should == 2
169
- @user_without_included_data.comments.first.id.should == 4
170
- @user_without_included_data.comments.first.body.should == "They're having a FIRESALE?"
208
+ expect(@user_without_included_data.comments.first).to be_a(Foo::Comment)
209
+ expect(@user_without_included_data.comments.length).to eq(2)
210
+ expect(@user_without_included_data.comments.first.id).to eq(4)
211
+ expect(@user_without_included_data.comments.first.body).to eq("They're having a FIRESALE?")
171
212
  end
172
213
 
173
214
  it "fetches has_many data even if it was included, only if called with parameters" do
174
- @user_with_included_data.comments.where(:foo_id => 1).length.should == 1
215
+ expect(@user_with_included_data.comments.where(foo_id: 1).length).to eq(1)
175
216
  end
176
217
 
177
218
  it "fetches data that was not included through has_many only once" do
178
- @user_without_included_data.comments.first.object_id.should == @user_without_included_data.comments.first.object_id
219
+ expect(@user_without_included_data.comments.first.object_id).to eq(@user_without_included_data.comments.first.object_id)
179
220
  end
180
221
 
181
222
  it "fetches data that was cached through has_many if called with parameters" do
182
- @user_without_included_data.comments.first.object_id.should_not == @user_without_included_data.comments.where(:foo_id => 1).first.object_id
223
+ expect(@user_without_included_data.comments.first.object_id).not_to eq(@user_without_included_data.comments.where(foo_id: 1).first.object_id)
183
224
  end
184
225
 
185
226
  it "maps an array of included data through has_one" do
186
- @user_with_included_data.role.should be_a(Foo::Role)
187
- @user_with_included_data.role.object_id.should == @user_with_included_data.role.object_id
188
- @user_with_included_data.role.id.should == 1
189
- @user_with_included_data.role.body.should == "Admin"
227
+ expect(@user_with_included_data.role).to be_a(Foo::Role)
228
+ expect(@user_with_included_data.role.object_id).to eq(@user_with_included_data.role.object_id)
229
+ expect(@user_with_included_data.role.id).to eq(1)
230
+ expect(@user_with_included_data.role.body).to eq("Admin")
190
231
  end
191
232
 
192
233
  it "fetches data that was not included through has_one" do
193
- @user_without_included_data.role.should be_a(Foo::Role)
194
- @user_without_included_data.role.id.should == 2
195
- @user_without_included_data.role.body.should == "User"
234
+ expect(@user_without_included_data.role).to be_a(Foo::Role)
235
+ expect(@user_without_included_data.role.id).to eq(2)
236
+ expect(@user_without_included_data.role.body).to eq("User")
196
237
  end
197
238
 
198
239
  it "fetches has_one data even if it was included, only if called with parameters" do
199
- @user_with_included_data.role.where(:foo_id => 2).id.should == 3
240
+ expect(@user_with_included_data.role.where(foo_id: 2).id).to eq(3)
200
241
  end
201
242
 
202
243
  it "maps an array of included data through belongs_to" do
203
- @user_with_included_data.organization.should be_a(Foo::Organization)
204
- @user_with_included_data.organization.id.should == 1
205
- @user_with_included_data.organization.name.should == "Bluth Company"
244
+ expect(@user_with_included_data.organization).to be_a(Foo::Organization)
245
+ expect(@user_with_included_data.organization.id).to eq(1)
246
+ expect(@user_with_included_data.organization.name).to eq("Bluth Company")
206
247
  end
207
248
 
208
249
  it "fetches data that was not included through belongs_to" do
209
- @user_without_included_data.organization.should be_a(Foo::Organization)
210
- @user_without_included_data.organization.id.should == 2
211
- @user_without_included_data.organization.name.should == "Bluth Company"
250
+ expect(@user_without_included_data.organization).to be_a(Foo::Organization)
251
+ expect(@user_without_included_data.organization.id).to eq(2)
252
+ expect(@user_without_included_data.organization.name).to eq("Bluth Company")
212
253
  end
213
254
 
214
255
  it "returns nil if the foreign key is nil" do
215
- @user_without_organization_and_not_persisted.organization.should be_nil
256
+ expect(@user_without_organization_and_not_persisted.organization).to be_nil
216
257
  end
217
258
 
218
259
  it "fetches belongs_to data even if it was included, only if called with parameters" do
219
- @user_with_included_data.organization.where(:foo_id => 1).name.should == "Bluth Company Foo"
260
+ expect(@user_with_included_data.organization.where(foo_id: 1).name).to eq("Bluth Company Foo")
220
261
  end
221
262
 
222
263
  it "can tell if it has a association" do
223
- @user_without_included_data.has_association?(:unknown_association).should be false
224
- @user_without_included_data.has_association?(:organization).should be true
264
+ expect(@user_without_included_data.has_association?(:unknown_association)).to be false
265
+ expect(@user_without_included_data.has_association?(:organization)).to be true
225
266
  end
226
267
 
227
268
  it "fetches the resource corresponding to a named association" do
228
- @user_without_included_data.get_association(:unknown_association).should be_nil
229
- @user_without_included_data.get_association(:organization).name.should == "Bluth Company"
269
+ expect(@user_without_included_data.get_association(:unknown_association)).to be_nil
270
+ expect(@user_without_included_data.get_association(:organization).name).to eq("Bluth Company")
230
271
  end
231
272
 
232
273
  it "pass query string parameters when additional arguments are passed" do
233
- @user_without_included_data.organization.where(:admin => true).name.should == "Bluth Company (admin)"
234
- @user_without_included_data.organization.name.should == "Bluth Company"
274
+ expect(@user_without_included_data.organization.where(admin: true).name).to eq("Bluth Company (admin)")
275
+ expect(@user_without_included_data.organization.name).to eq("Bluth Company")
235
276
  end
236
277
 
237
278
  it "fetches data with the specified id when calling find" do
238
279
  comment = @user_without_included_data.comments.find(5)
239
- comment.should be_a(Foo::Comment)
240
- comment.id.should eq(5)
280
+ expect(comment).to be_a(Foo::Comment)
281
+ expect(comment.id).to eq(5)
241
282
  end
242
283
 
243
284
  it "'s associations responds to #empty?" do
244
- @user_without_included_data.organization.respond_to?(:empty?).should be_truthy
245
- @user_without_included_data.organization.should_not be_empty
285
+ expect(@user_without_included_data.organization.respond_to?(:empty?)).to be_truthy
286
+ expect(@user_without_included_data.organization).not_to be_empty
246
287
  end
247
288
 
248
- it 'includes has_many relationships in params by default' do
289
+ it "includes has_many relationships in params by default" do
249
290
  params = @user_with_included_data.to_params
250
- params[:comments].should be_kind_of(Array)
251
- params[:comments].length.should eq(2)
291
+ expect(params[:comments]).to be_kind_of(Array)
292
+ expect(params[:comments].length).to eq(2)
252
293
  end
253
294
 
254
295
  [:create, :save_existing, :destroy].each do |type|
255
296
  context "after #{type}" do
256
- let(:subject) { self.send("user_with_included_data_after_#{type}")}
297
+ let(:subject) { send("user_with_included_data_after_#{type}") }
257
298
 
258
299
  it "maps an array of included data through has_many" do
259
- subject.comments.first.should be_a(Foo::Comment)
260
- subject.comments.length.should == 1
261
- subject.comments.first.id.should == 99
262
- subject.comments.first.body.should == "Rodríguez, nasibisibusi?"
300
+ expect(subject.comments.first).to be_a(Foo::Comment)
301
+ expect(subject.comments.length).to eq(1)
302
+ expect(subject.comments.first.id).to eq(99)
303
+ expect(subject.comments.first.body).to eq("Rodríguez, nasibisibusi?")
263
304
  end
264
305
 
265
306
  it "maps an array of included data through has_one" do
266
- subject.role.should be_a(Foo::Role)
267
- subject.role.id.should == 1
268
- subject.role.body.should == "Admin"
307
+ expect(subject.role).to be_a(Foo::Role)
308
+ expect(subject.role.id).to eq(1)
309
+ expect(subject.role.body).to eq("Admin")
269
310
  end
270
311
  end
271
312
  end
@@ -273,29 +314,29 @@ describe Her::Model::Associations do
273
314
 
274
315
  context "handling associations with details in active_model_serializers format" do
275
316
  before do
276
- Her::API.setup :url => "https://api.example.com" do |builder|
317
+ Her::API.setup url: "https://api.example.com" do |builder|
277
318
  builder.use Her::Middleware::FirstLevelParseJSON
278
319
  builder.use Faraday::Request::UrlEncoded
279
320
  builder.adapter :test do |stub|
280
- stub.get("/users/1") { |env| [200, {}, { :user => { :id => 1, :name => "Tobias Fünke", :comments => [{ :id => 2, :body => "Tobias, you blow hard!", :user_id => 1 }, { :id => 3, :body => "I wouldn't mind kissing that man between the cheeks, so to speak", :user_id => 1 }], :role => { :id => 1, :body => "Admin" }, :organization => { :id => 1, :name => "Bluth Company" }, :organization_id => 1 } }.to_json] }
281
- stub.get("/users/2") { |env| [200, {}, { :user => { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 } }.to_json] }
282
- stub.get("/users/1/comments") { |env| [200, {}, { :comments => [{ :id => 4, :body => "They're having a FIRESALE?" }] }.to_json] }
283
- stub.get("/users/2/comments") { |env| [200, {}, { :comments => [{ :id => 4, :body => "They're having a FIRESALE?" }, { :id => 5, :body => "Is this the tiny town from Footloose?" }] }.to_json] }
284
- stub.get("/users/2/comments/5") { |env| [200, {}, { :comment => { :id => 5, :body => "Is this the tiny town from Footloose?" } }.to_json] }
285
- stub.get("/organizations/1") { |env| [200, {}, { :organization => { :id => 1, :name => "Bluth Company Foo" } }.to_json] }
321
+ stub.get("/users/1") { [200, {}, { user: { id: 1, name: "Tobias Fünke", comments: [{ id: 2, body: "Tobias, you blow hard!", user_id: 1 }, { id: 3, body: "I wouldn't mind kissing that man between the cheeks, so to speak", user_id: 1 }], role: { id: 1, body: "Admin" }, organization: { id: 1, name: "Bluth Company" }, organization_id: 1 } }.to_json] }
322
+ stub.get("/users/2") { [200, {}, { user: { id: 2, name: "Lindsay Fünke", organization_id: 1 } }.to_json] }
323
+ stub.get("/users/1/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }] }.to_json] }
324
+ stub.get("/users/2/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }, { id: 5, body: "Is this the tiny town from Footloose?" }] }.to_json] }
325
+ stub.get("/users/2/comments/5") { [200, {}, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }.to_json] }
326
+ stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
286
327
  end
287
328
  end
288
329
  spawn_model "Foo::User" do
289
- parse_root_in_json true, :format => :active_model_serializers
330
+ parse_root_in_json true, format: :active_model_serializers
290
331
  has_many :comments, class_name: "Foo::Comment"
291
332
  belongs_to :organization
292
333
  end
293
334
  spawn_model "Foo::Comment" do
294
335
  belongs_to :user
295
- parse_root_in_json true, :format => :active_model_serializers
336
+ parse_root_in_json true, format: :active_model_serializers
296
337
  end
297
338
  spawn_model "Foo::Organization" do
298
- parse_root_in_json true, :format => :active_model_serializers
339
+ parse_root_in_json true, format: :active_model_serializers
299
340
  end
300
341
 
301
342
  @user_with_included_data = Foo::User.find(1)
@@ -303,72 +344,72 @@ describe Her::Model::Associations do
303
344
  end
304
345
 
305
346
  it "maps an array of included data through has_many" do
306
- @user_with_included_data.comments.first.should be_a(Foo::Comment)
307
- @user_with_included_data.comments.length.should == 2
308
- @user_with_included_data.comments.first.id.should == 2
309
- @user_with_included_data.comments.first.body.should == "Tobias, you blow hard!"
347
+ expect(@user_with_included_data.comments.first).to be_a(Foo::Comment)
348
+ expect(@user_with_included_data.comments.length).to eq(2)
349
+ expect(@user_with_included_data.comments.first.id).to eq(2)
350
+ expect(@user_with_included_data.comments.first.body).to eq("Tobias, you blow hard!")
310
351
  end
311
352
 
312
353
  it "does not refetch the parents models data if they have been fetched before" do
313
- @user_with_included_data.comments.first.user.object_id.should == @user_with_included_data.object_id
354
+ expect(@user_with_included_data.comments.first.user.object_id).to eq(@user_with_included_data.object_id)
314
355
  end
315
356
 
316
357
  it "fetches data that was not included through has_many" do
317
- @user_without_included_data.comments.first.should be_a(Foo::Comment)
318
- @user_without_included_data.comments.length.should == 2
319
- @user_without_included_data.comments.first.id.should == 4
320
- @user_without_included_data.comments.first.body.should == "They're having a FIRESALE?"
358
+ expect(@user_without_included_data.comments.first).to be_a(Foo::Comment)
359
+ expect(@user_without_included_data.comments.length).to eq(2)
360
+ expect(@user_without_included_data.comments.first.id).to eq(4)
361
+ expect(@user_without_included_data.comments.first.body).to eq("They're having a FIRESALE?")
321
362
  end
322
363
 
323
364
  it "fetches has_many data even if it was included, only if called with parameters" do
324
- @user_with_included_data.comments.where(:foo_id => 1).length.should == 1
365
+ expect(@user_with_included_data.comments.where(foo_id: 1).length).to eq(1)
325
366
  end
326
367
 
327
368
  it "maps an array of included data through belongs_to" do
328
- @user_with_included_data.organization.should be_a(Foo::Organization)
329
- @user_with_included_data.organization.id.should == 1
330
- @user_with_included_data.organization.name.should == "Bluth Company"
369
+ expect(@user_with_included_data.organization).to be_a(Foo::Organization)
370
+ expect(@user_with_included_data.organization.id).to eq(1)
371
+ expect(@user_with_included_data.organization.name).to eq("Bluth Company")
331
372
  end
332
373
 
333
374
  it "fetches data that was not included through belongs_to" do
334
- @user_without_included_data.organization.should be_a(Foo::Organization)
335
- @user_without_included_data.organization.id.should == 1
336
- @user_without_included_data.organization.name.should == "Bluth Company Foo"
375
+ expect(@user_without_included_data.organization).to be_a(Foo::Organization)
376
+ expect(@user_without_included_data.organization.id).to eq(1)
377
+ expect(@user_without_included_data.organization.name).to eq("Bluth Company Foo")
337
378
  end
338
379
 
339
380
  it "fetches belongs_to data even if it was included, only if called with parameters" do
340
- @user_with_included_data.organization.where(:foo_id => 1).name.should == "Bluth Company Foo"
381
+ expect(@user_with_included_data.organization.where(foo_id: 1).name).to eq("Bluth Company Foo")
341
382
  end
342
383
 
343
384
  it "fetches data with the specified id when calling find" do
344
385
  comment = @user_without_included_data.comments.find(5)
345
- comment.should be_a(Foo::Comment)
346
- comment.id.should eq(5)
386
+ expect(comment).to be_a(Foo::Comment)
387
+ expect(comment.id).to eq(5)
347
388
  end
348
389
 
349
- it 'includes has_many relationships in params by default' do
390
+ it "includes has_many relationships in params by default" do
350
391
  params = @user_with_included_data.to_params
351
- params[:comments].should be_kind_of(Array)
352
- params[:comments].length.should eq(2)
392
+ expect(params[:comments]).to be_kind_of(Array)
393
+ expect(params[:comments].length).to eq(2)
353
394
  end
354
395
  end
355
396
 
356
397
  context "handling associations with details" do
357
398
  before do
358
- Her::API.setup :url => "https://api.example.com" do |builder|
399
+ Her::API.setup url: "https://api.example.com" do |builder|
359
400
  builder.use Her::Middleware::FirstLevelParseJSON
360
401
  builder.use Faraday::Request::UrlEncoded
361
402
  builder.adapter :test do |stub|
362
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :organization => { :id => 1, :name => "Bluth Company Inc." }, :organization_id => 1 }.to_json] }
363
- stub.get("/users/4") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke", :organization => { :id => 1, :name => "Bluth Company Inc." } }.to_json] }
364
- stub.get("/users/2") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :organization_id => 1 }.to_json] }
365
- stub.get("/users/3") { |env| [200, {}, { :id => 2, :name => "Lindsay Fünke", :company => nil }.to_json] }
366
- stub.get("/companies/1") { |env| [200, {}, { :id => 1, :name => "Bluth Company" }.to_json] }
403
+ stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." }, organization_id: 1 }.to_json] }
404
+ stub.get("/users/4") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." } }.to_json] }
405
+ stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 1 }.to_json] }
406
+ stub.get("/users/3") { [200, {}, { id: 2, name: "Lindsay Fünke", company: nil }.to_json] }
407
+ stub.get("/companies/1") { [200, {}, { id: 1, name: "Bluth Company" }.to_json] }
367
408
  end
368
409
  end
369
410
 
370
411
  spawn_model "Foo::User" do
371
- belongs_to :company, :path => "/organizations/:id", :foreign_key => :organization_id, :data_key => :organization
412
+ belongs_to :company, path: "/organizations/:id", foreign_key: :organization_id, data_key: :organization
372
413
  end
373
414
 
374
415
  spawn_model "Foo::Company"
@@ -380,23 +421,23 @@ describe Her::Model::Associations do
380
421
  end
381
422
 
382
423
  it "maps an array of included data through belongs_to" do
383
- @user_with_included_data.company.should be_a(Foo::Company)
384
- @user_with_included_data.company.id.should == 1
385
- @user_with_included_data.company.name.should == "Bluth Company Inc."
424
+ expect(@user_with_included_data.company).to be_a(Foo::Company)
425
+ expect(@user_with_included_data.company.id).to eq(1)
426
+ expect(@user_with_included_data.company.name).to eq("Bluth Company Inc.")
386
427
  end
387
428
 
388
429
  it "does not map included data if it’s nil" do
389
- @user_with_included_nil_data.company.should be_nil
430
+ expect(@user_with_included_nil_data.company).to be_nil
390
431
  end
391
432
 
392
433
  it "fetches data that was not included through belongs_to" do
393
- @user_without_included_data.company.should be_a(Foo::Company)
394
- @user_without_included_data.company.id.should == 1
395
- @user_without_included_data.company.name.should == "Bluth Company"
434
+ expect(@user_without_included_data.company).to be_a(Foo::Company)
435
+ expect(@user_without_included_data.company.id).to eq(1)
436
+ expect(@user_without_included_data.company.name).to eq("Bluth Company")
396
437
  end
397
438
 
398
439
  it "does not require foreugn key to have nested object" do
399
- @user_with_included_data_but_no_fk.company.name.should == "Bluth Company Inc."
440
+ expect(@user_with_included_data_but_no_fk.company.name).to eq("Bluth Company Inc.")
400
441
  end
401
442
  end
402
443
 
@@ -420,30 +461,30 @@ describe Her::Model::Associations do
420
461
  subject { user_with_role.role }
421
462
 
422
463
  it "doesnt mask the object's basic methods" do
423
- subject.class.should == Foo::Role
464
+ expect(subject.class).to eq(Foo::Role)
424
465
  end
425
466
 
426
467
  it "doesnt mask core methods like extend" do
427
468
  committer = Module.new
428
- subject.extend committer
429
- associated_value.should be_kind_of committer
469
+ subject.extend committer
470
+ expect(associated_value).to be_kind_of committer
430
471
  end
431
472
 
432
473
  it "can return the association object" do
433
- subject.association.should be_kind_of Her::Model::Associations::Association
474
+ expect(subject.association).to be_kind_of Her::Model::Associations::Association
434
475
  end
435
476
 
436
477
  it "still can call fetch via the association" do
437
- subject.association.fetch.should eq associated_value
478
+ expect(subject.association.fetch).to eq associated_value
438
479
  end
439
480
 
440
481
  it "calls missing methods on associated value" do
441
- subject.present?.should == "of_course"
482
+ expect(subject.present?).to eq("of_course")
442
483
  end
443
484
 
444
485
  it "can use association methods like where" do
445
- subject.where(role: 'committer').association.
446
- params.should include :role
486
+ expect(subject.where(role: "committer").association
487
+ .params).to include :role
447
488
  end
448
489
  end
449
490
 
@@ -457,20 +498,20 @@ describe Her::Model::Associations do
457
498
 
458
499
  context "with #build" do
459
500
  it "takes the parent primary key" do
460
- @comment = Foo::User.new(:id => 10).comments.build(:body => "Hello!")
461
- @comment.body.should == "Hello!"
462
- @comment.user_id.should == 10
501
+ @comment = Foo::User.new(id: 10).comments.build(body: "Hello!")
502
+ expect(@comment.body).to eq("Hello!")
503
+ expect(@comment.user_id).to eq(10)
463
504
  end
464
505
  end
465
506
 
466
507
  context "with #create" do
467
508
  before do
468
- Her::API.setup :url => "https://api.example.com" do |builder|
509
+ Her::API.setup url: "https://api.example.com" do |builder|
469
510
  builder.use Her::Middleware::FirstLevelParseJSON
470
511
  builder.use Faraday::Request::UrlEncoded
471
512
  builder.adapter :test do |stub|
472
- stub.get("/users/10") { |env| [200, {}, { :id => 10 }.to_json] }
473
- stub.post("/comments") { |env| [200, {}, { :id => 1, :body => Faraday::Utils.parse_query(env[:body])['body'], :user_id => Faraday::Utils.parse_query(env[:body])['user_id'].to_i }.to_json] }
513
+ stub.get("/users/10") { [200, {}, { id: 10 }.to_json] }
514
+ stub.post("/comments") { |env| [200, {}, { id: 1, body: Faraday::Utils.parse_query(env[:body])["body"], user_id: Faraday::Utils.parse_query(env[:body])["user_id"].to_i }.to_json] }
474
515
  end
475
516
  end
476
517
 
@@ -480,24 +521,24 @@ describe Her::Model::Associations do
480
521
 
481
522
  it "takes the parent primary key and saves the resource" do
482
523
  @user = Foo::User.find(10)
483
- @comment = @user.comments.create(:body => "Hello!")
484
- @comment.id.should == 1
485
- @comment.body.should == "Hello!"
486
- @comment.user_id.should == 10
487
- @user.comments.should == [@comment]
524
+ @comment = @user.comments.create(body: "Hello!")
525
+ expect(@comment.id).to eq(1)
526
+ expect(@comment.body).to eq("Hello!")
527
+ expect(@comment.user_id).to eq(10)
528
+ expect(@user.comments).to eq([@comment])
488
529
  end
489
530
  end
490
531
 
491
532
  context "with #new" do
492
533
  it "creates nested models from hash attibutes" do
493
- user = Foo::User.new(:name => "vic", :comments => [{:text => "hello"}])
494
- user.comments.first.text.should == "hello"
534
+ user = Foo::User.new(name: "vic", comments: [{ text: "hello" }])
535
+ expect(user.comments.first.text).to eq("hello")
495
536
  end
496
537
 
497
538
  it "assigns nested models if given as already constructed objects" do
498
- bye = Foo::Comment.new(:text => "goodbye")
499
- user = Foo::User.new(:name => 'vic', :comments => [bye])
500
- user.comments.first.text.should == 'goodbye'
539
+ bye = Foo::Comment.new(text: "goodbye")
540
+ user = Foo::User.new(name: "vic", comments: [bye])
541
+ expect(user.comments.first.text).to eq("goodbye")
501
542
  end
502
543
  end
503
544
  end