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,15 +4,15 @@ require File.join(File.dirname(__FILE__), "../spec_helper.rb")
4
4
  describe Her::Model::Introspection do
5
5
  context "introspecting a resource" do
6
6
  before do
7
- Her::API.setup :url => "https://api.example.com" do |builder|
7
+ Her::API.setup url: "https://api.example.com" do |builder|
8
8
  builder.use Her::Middleware::FirstLevelParseJSON
9
9
  builder.use Faraday::Request::UrlEncoded
10
10
  builder.adapter :test do |stub|
11
- stub.post("/users") { |env| [200, {}, { :id => 1, :name => "Tobias Funke" }.to_json] }
12
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Funke" }.to_json] }
13
- stub.put("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Funke" }.to_json] }
14
- stub.delete("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Funke" }.to_json] }
15
- stub.get("/projects/1/comments") { |env| [200, {}, [{ :id => 1, :body => "Hello!" }].to_json] }
11
+ stub.post("/users") { [200, {}, { id: 1, name: "Tobias Funke" }.to_json] }
12
+ stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Funke" }.to_json] }
13
+ stub.put("/users/1") { [200, {}, { id: 1, name: "Tobias Funke" }.to_json] }
14
+ stub.delete("/users/1") { [200, {}, { id: 1, name: "Tobias Funke" }.to_json] }
15
+ stub.get("/projects/1/comments") { [200, {}, [{ id: 1, body: "Hello!" }].to_json] }
16
16
  end
17
17
  end
18
18
 
@@ -25,33 +25,37 @@ describe Her::Model::Introspection do
25
25
  describe "#inspect" do
26
26
  it "outputs resource attributes for an existing resource" do
27
27
  @user = Foo::User.find(1)
28
- ["#<Foo::User(users/1) name=\"Tobias Funke\" id=1>", "#<Foo::User(users/1) id=1 name=\"Tobias Funke\">"].should include(@user.inspect)
28
+ expect(["#<Foo::User(users/1) name=\"Tobias Funke\" id=1>", "#<Foo::User(users/1) id=1 name=\"Tobias Funke\">"]).to include(@user.inspect)
29
29
  end
30
30
 
31
31
  it "outputs resource attributes for an not-saved-yet resource" do
32
- @user = Foo::User.new(:name => "Tobias Funke")
33
- @user.inspect.should == "#<Foo::User(users) name=\"Tobias Funke\">"
32
+ @user = Foo::User.new(name: "Tobias Funke")
33
+ expect(@user.inspect).to eq("#<Foo::User(users) name=\"Tobias Funke\">")
34
34
  end
35
35
 
36
36
  it "outputs resource attributes using getters" do
37
- @user = Foo::User.new(:name => "Tobias Funke", :password => "Funke")
38
- @user.instance_eval {def password; 'filtered'; end}
39
- @user.inspect.should include("name=\"Tobias Funke\"")
40
- @user.inspect.should include("password=\"filtered\"")
41
- @user.inspect.should_not include("password=\"Funke\"")
37
+ @user = Foo::User.new(name: "Tobias Funke", password: "Funke")
38
+ @user.instance_eval do
39
+ def password
40
+ "filtered"
41
+ end
42
+ end
43
+ expect(@user.inspect).to include("name=\"Tobias Funke\"")
44
+ expect(@user.inspect).to include("password=\"filtered\"")
45
+ expect(@user.inspect).not_to include("password=\"Funke\"")
42
46
  end
43
47
 
44
48
  it "support dash on attribute" do
45
49
  @user = Foo::User.new(:'life-span' => "3 years")
46
- @user.inspect.should include("life-span=\"3 years\"")
50
+ expect(@user.inspect).to include("life-span=\"3 years\"")
47
51
  end
48
52
  end
49
53
 
50
54
  describe "#inspect with errors in resource path" do
51
55
  it "prints the resource path as “unknown”" do
52
- @comment = Foo::Comment.where(:project_id => 1).first
53
- path = '<unknown path, missing `project_id`>'
54
- ["#<Foo::Comment(#{path}) body=\"Hello!\" id=1>", "#<Foo::Comment(#{path}) id=1 body=\"Hello!\">"].should include(@comment.inspect)
56
+ @comment = Foo::Comment.where(project_id: 1).first
57
+ path = "<unknown path, missing `project_id`>"
58
+ expect(["#<Foo::Comment(#{path}) body=\"Hello!\" id=1>", "#<Foo::Comment(#{path}) id=1 body=\"Hello!\">"]).to include(@comment.inspect)
55
59
  end
56
60
  end
57
61
  end
@@ -66,10 +70,10 @@ describe Her::Model::Introspection do
66
70
  end
67
71
 
68
72
  it "returns a sibling class, if found" do
69
- Foo::User.her_nearby_class("AccessRecord").should == Foo::AccessRecord
70
- AccessRecord.her_nearby_class("Log").should == Log
71
- Foo::User.her_nearby_class("Log").should == Log
72
- Foo::User.her_nearby_class("X").should be_nil
73
+ expect(Foo::User.her_nearby_class("AccessRecord")).to eq(Foo::AccessRecord)
74
+ expect(AccessRecord.her_nearby_class("Log")).to eq(Log)
75
+ expect(Foo::User.her_nearby_class("Log")).to eq(Log)
76
+ expect(Foo::User.her_nearby_class("X")).to be_nil
73
77
  end
74
78
  end
75
79
  end
@@ -4,40 +4,40 @@ require File.join(File.dirname(__FILE__), "../spec_helper.rb")
4
4
  describe Her::Model::NestedAttributes do
5
5
  context "with a belongs_to association" do
6
6
  before do
7
- Her::API.setup :url => "https://api.example.com" do |builder|
7
+ Her::API.setup url: "https://api.example.com" do |builder|
8
8
  builder.use Her::Middleware::FirstLevelParseJSON
9
9
  builder.use Faraday::Request::UrlEncoded
10
10
  end
11
11
 
12
12
  spawn_model "Foo::User" do
13
- belongs_to :company, :path => "/organizations/:id", :foreign_key => :organization_id
13
+ belongs_to :company, path: "/organizations/:id", foreign_key: :organization_id
14
14
  accepts_nested_attributes_for :company
15
15
  end
16
16
 
17
17
  spawn_model "Foo::Company"
18
18
 
19
- @user_with_data_through_nested_attributes = Foo::User.new :name => "Test", :company_attributes => { :name => "Example Company" }
19
+ @user_with_data_through_nested_attributes = Foo::User.new name: "Test", company_attributes: { name: "Example Company" }
20
20
  end
21
21
 
22
22
  context "when child does not yet exist" do
23
23
  it "creates an instance of the associated class" do
24
- @user_with_data_through_nested_attributes.company.should be_a(Foo::Company)
25
- @user_with_data_through_nested_attributes.company.name.should == "Example Company"
24
+ expect(@user_with_data_through_nested_attributes.company).to be_a(Foo::Company)
25
+ expect(@user_with_data_through_nested_attributes.company.name).to eq("Example Company")
26
26
  end
27
27
  end
28
28
 
29
29
  context "when child does exist" do
30
30
  it "updates the attributes of the associated object" do
31
- @user_with_data_through_nested_attributes.company_attributes = { :name => "Fünke's Company" }
32
- @user_with_data_through_nested_attributes.company.should be_a(Foo::Company)
33
- @user_with_data_through_nested_attributes.company.name.should == "Fünke's Company"
31
+ @user_with_data_through_nested_attributes.company_attributes = { name: "Fünke's Company" }
32
+ expect(@user_with_data_through_nested_attributes.company).to be_a(Foo::Company)
33
+ expect(@user_with_data_through_nested_attributes.company.name).to eq("Fünke's Company")
34
34
  end
35
35
  end
36
36
  end
37
37
 
38
38
  context "with a has_one association" do
39
39
  before do
40
- Her::API.setup :url => "https://api.example.com" do |builder|
40
+ Her::API.setup url: "https://api.example.com" do |builder|
41
41
  builder.use Her::Middleware::FirstLevelParseJSON
42
42
  builder.use Faraday::Request::UrlEncoded
43
43
  end
@@ -49,28 +49,28 @@ describe Her::Model::NestedAttributes do
49
49
 
50
50
  spawn_model "Foo::Pet"
51
51
 
52
- @user_with_data_through_nested_attributes = Foo::User.new :name => "Test", :pet_attributes => { :name => "Hasi" }
52
+ @user_with_data_through_nested_attributes = Foo::User.new name: "Test", pet_attributes: { name: "Hasi" }
53
53
  end
54
54
 
55
55
  context "when child does not yet exist" do
56
56
  it "creates an instance of the associated class" do
57
- @user_with_data_through_nested_attributes.pet.should be_a(Foo::Pet)
58
- @user_with_data_through_nested_attributes.pet.name.should == "Hasi"
57
+ expect(@user_with_data_through_nested_attributes.pet).to be_a(Foo::Pet)
58
+ expect(@user_with_data_through_nested_attributes.pet.name).to eq("Hasi")
59
59
  end
60
60
  end
61
61
 
62
62
  context "when child does exist" do
63
63
  it "updates the attributes of the associated object" do
64
- @user_with_data_through_nested_attributes.pet_attributes = { :name => "Rodriguez" }
65
- @user_with_data_through_nested_attributes.pet.should be_a(Foo::Pet)
66
- @user_with_data_through_nested_attributes.pet.name.should == "Rodriguez"
64
+ @user_with_data_through_nested_attributes.pet_attributes = { name: "Rodriguez" }
65
+ expect(@user_with_data_through_nested_attributes.pet).to be_a(Foo::Pet)
66
+ expect(@user_with_data_through_nested_attributes.pet.name).to eq("Rodriguez")
67
67
  end
68
68
  end
69
69
  end
70
70
 
71
71
  context "with a has_many association" do
72
72
  before do
73
- Her::API.setup :url => "https://api.example.com" do |builder|
73
+ Her::API.setup url: "https://api.example.com" do |builder|
74
74
  builder.use Her::Middleware::FirstLevelParseJSON
75
75
  builder.use Faraday::Request::UrlEncoded
76
76
  end
@@ -82,23 +82,23 @@ describe Her::Model::NestedAttributes do
82
82
 
83
83
  spawn_model "Foo::Pet"
84
84
 
85
- @user_with_data_through_nested_attributes = Foo::User.new :name => "Test", :pets_attributes => [{ :name => "Hasi" }, { :name => "Rodriguez" }]
85
+ @user_with_data_through_nested_attributes = Foo::User.new name: "Test", pets_attributes: [{ name: "Hasi" }, { name: "Rodriguez" }]
86
86
  end
87
87
 
88
88
  context "when children do not yet exist" do
89
89
  it "creates an instance of the associated class" do
90
- @user_with_data_through_nested_attributes.pets.length.should == 2
91
- @user_with_data_through_nested_attributes.pets[0].should be_a(Foo::Pet)
92
- @user_with_data_through_nested_attributes.pets[1].should be_a(Foo::Pet)
93
- @user_with_data_through_nested_attributes.pets[0].name.should == "Hasi"
94
- @user_with_data_through_nested_attributes.pets[1].name.should == "Rodriguez"
90
+ expect(@user_with_data_through_nested_attributes.pets.length).to eq(2)
91
+ expect(@user_with_data_through_nested_attributes.pets[0]).to be_a(Foo::Pet)
92
+ expect(@user_with_data_through_nested_attributes.pets[1]).to be_a(Foo::Pet)
93
+ expect(@user_with_data_through_nested_attributes.pets[0].name).to eq("Hasi")
94
+ expect(@user_with_data_through_nested_attributes.pets[1].name).to eq("Rodriguez")
95
95
  end
96
96
  end
97
97
  end
98
98
 
99
99
  context "with a has_many association as a Hash" do
100
100
  before do
101
- Her::API.setup :url => "https://api.example.com" do |builder|
101
+ Her::API.setup url: "https://api.example.com" do |builder|
102
102
  builder.use Her::Middleware::FirstLevelParseJSON
103
103
  builder.use Faraday::Request::UrlEncoded
104
104
  end
@@ -110,25 +110,25 @@ describe Her::Model::NestedAttributes do
110
110
 
111
111
  spawn_model "Foo::Pet"
112
112
 
113
- @user_with_data_through_nested_attributes_as_hash = Foo::User.new :name => "Test", :pets_attributes => { '0' => { :name => "Hasi" }, '1' => { :name => "Rodriguez" }}
113
+ @user_with_data_through_nested_attributes_as_hash = Foo::User.new name: "Test", pets_attributes: { "0" => { name: "Hasi" }, "1" => { name: "Rodriguez" } }
114
114
  end
115
115
 
116
116
  context "when children do not yet exist" do
117
117
  it "creates an instance of the associated class" do
118
- @user_with_data_through_nested_attributes_as_hash.pets.length.should == 2
119
- @user_with_data_through_nested_attributes_as_hash.pets[0].should be_a(Foo::Pet)
120
- @user_with_data_through_nested_attributes_as_hash.pets[1].should be_a(Foo::Pet)
121
- @user_with_data_through_nested_attributes_as_hash.pets[0].name.should == "Hasi"
122
- @user_with_data_through_nested_attributes_as_hash.pets[1].name.should == "Rodriguez"
118
+ expect(@user_with_data_through_nested_attributes_as_hash.pets.length).to eq(2)
119
+ expect(@user_with_data_through_nested_attributes_as_hash.pets[0]).to be_a(Foo::Pet)
120
+ expect(@user_with_data_through_nested_attributes_as_hash.pets[1]).to be_a(Foo::Pet)
121
+ expect(@user_with_data_through_nested_attributes_as_hash.pets[0].name).to eq("Hasi")
122
+ expect(@user_with_data_through_nested_attributes_as_hash.pets[1].name).to eq("Rodriguez")
123
123
  end
124
124
  end
125
125
  end
126
126
 
127
127
  context "with an unknown association" do
128
128
  it "raises an error" do
129
- expect {
129
+ expect do
130
130
  spawn_model("Foo::User") { accepts_nested_attributes_for :company }
131
- }.to raise_error(Her::Errors::AssociationUnknownError, 'Unknown association name :company')
131
+ end.to raise_error(Her::Errors::AssociationUnknownError, "Unknown association name :company")
132
132
  end
133
133
  end
134
134
  end
@@ -5,14 +5,14 @@ describe Her::Model::ORM do
5
5
  context "mapping data to Ruby objects" do
6
6
  before do
7
7
  api = Her::API.new
8
- api.setup :url => "https://api.example.com" do |builder|
8
+ api.setup url: "https://api.example.com" do |builder|
9
9
  builder.use Her::Middleware::FirstLevelParseJSON
10
10
  builder.use Faraday::Request::UrlEncoded
11
11
  builder.adapter :test do |stub|
12
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json] }
13
- stub.get("/users") { |env| [200, {}, [{ :id => 1, :name => "Tobias Fünke" }, { :id => 2, :name => "Lindsay Fünke" }].to_json] }
14
- stub.get("/admin_users") { |env| [200, {}, [{ :admin_id => 1, :name => "Tobias Fünke" }, { :admin_id => 2, :name => "Lindsay Fünke" }].to_json] }
15
- stub.get("/admin_users/1") { |env| [200, {}, { :admin_id => 1, :name => "Tobias Fünke" }.to_json] }
12
+ stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke" }.to_json] }
13
+ stub.get("/users") { [200, {}, [{ id: 1, name: "Tobias Fünke" }, { id: 2, name: "Lindsay Fünke" }].to_json] }
14
+ stub.get("/admin_users") { [200, {}, [{ admin_id: 1, name: "Tobias Fünke" }, { admin_id: 2, name: "Lindsay Fünke" }].to_json] }
15
+ stub.get("/admin_users/1") { [200, {}, { admin_id: 1, name: "Tobias Fünke" }.to_json] }
16
16
  end
17
17
  end
18
18
 
@@ -28,53 +28,55 @@ describe Her::Model::ORM do
28
28
 
29
29
  it "maps a single resource to a Ruby object" do
30
30
  @user = Foo::User.find(1)
31
- @user.id.should == 1
32
- @user.name.should == "Tobias Fünke"
31
+ expect(@user.id).to eq(1)
32
+ expect(@user.name).to eq("Tobias Fünke")
33
33
 
34
34
  @admin = Foo::AdminUser.find(1)
35
- @admin.id.should == 1
36
- @admin.name.should == "Tobias Fünke"
35
+ expect(@admin.id).to eq(1)
36
+ expect(@admin.name).to eq("Tobias Fünke")
37
37
  end
38
38
 
39
39
  it "maps a collection of resources to an array of Ruby objects" do
40
40
  @users = Foo::User.all
41
- @users.length.should == 2
42
- @users.first.name.should == "Tobias Fünke"
41
+ expect(@users.length).to eq(2)
42
+ expect(@users.first.name).to eq("Tobias Fünke")
43
43
 
44
44
  @users = Foo::AdminUser.all
45
- @users.length.should == 2
46
- @users.first.name.should == "Tobias Fünke"
45
+ expect(@users.length).to eq(2)
46
+ expect(@users.first.name).to eq("Tobias Fünke")
47
47
  end
48
48
 
49
49
  it "handles new resource" do
50
- @new_user = Foo::User.new(:fullname => "Tobias Fünke")
51
- @new_user.new?.should be_truthy
52
- @new_user.new_record?.should be_truthy
53
- @new_user.fullname.should == "Tobias Fünke"
50
+ @new_user = Foo::User.new(fullname: "Tobias Fünke")
51
+ expect(@new_user.new?).to be_truthy
52
+ expect(@new_user.new_record?).to be_truthy
53
+ expect(@new_user.fullname).to eq("Tobias Fünke")
54
54
 
55
55
  @existing_user = Foo::User.find(1)
56
- @existing_user.new?.should be_falsey
57
- @existing_user.new_record?.should be_falsey
56
+ expect(@existing_user.new?).to be_falsey
57
+ expect(@existing_user.new_record?).to be_falsey
58
58
  end
59
59
 
60
- it 'handles new resource with custom primary key' do
61
- @new_user = Foo::AdminUser.new(:fullname => 'Lindsay Fünke', :id => -1)
62
- @new_user.should be_new
60
+ it "handles new resource with custom primary key" do
61
+ @new_user = Foo::AdminUser.new(fullname: "Lindsay Fünke", id: -1)
62
+ expect(@new_user).to be_new
63
63
 
64
64
  @existing_user = Foo::AdminUser.find(1)
65
- @existing_user.should_not be_new
65
+ expect(@existing_user).not_to be_new
66
66
  end
67
67
  end
68
68
 
69
69
  context "mapping data, metadata and error data to Ruby objects" do
70
70
  before do
71
71
  api = Her::API.new
72
- api.setup :url => "https://api.example.com" do |builder|
72
+ api.setup url: "https://api.example.com" do |builder|
73
73
  builder.use Her::Middleware::SecondLevelParseJSON
74
74
  builder.use Faraday::Request::UrlEncoded
75
75
  builder.adapter :test do |stub|
76
+ stub.get("/users") { [200, {}, { data: [{ id: 1, name: "Tobias Fünke" }, { id: 2, name: "Lindsay Fünke" }], metadata: { total_pages: 10, next_page: 2 }, errors: %w(Oh My God) }.to_json] }
76
77
  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] }
77
78
  stub.post("/users") { |env| [200, {}, { :data => { :name => "George Michael Bluth" }, :metadata => { :foo => "bar" }, :errors => ["Yes", "Sir"] }.to_json] }
79
+ stub.delete("/users/1") { |env| [200, {}, { :data => { :id => 1 }, :metadata => { :foo => "bar" }, :errors => ["Yes", "Sir"] }.to_json] }
78
80
  end
79
81
  end
80
82
 
@@ -85,21 +87,31 @@ describe Her::Model::ORM do
85
87
 
86
88
  it "handles metadata on a collection" do
87
89
  @users = User.all
88
- @users.metadata[:total_pages].should == 10
90
+ expect(@users.metadata[:total_pages]).to eq(10)
89
91
  end
90
92
 
91
93
  it "handles error data on a collection" do
92
94
  @users = User.all
93
- @users.errors.length.should == 3
95
+ expect(@users.errors.length).to eq(3)
94
96
  end
95
97
 
96
98
  it "handles metadata on a resource" do
97
- @user = User.create(:name => "George Michael Bluth")
98
- @user.metadata[:foo].should == "bar"
99
+ @user = User.create(name: "George Michael Bluth")
100
+ expect(@user.metadata[:foo]).to eq("bar")
99
101
  end
100
102
 
101
103
  it "handles error data on a resource" do
102
- @user = User.create(:name => "George Michael Bluth")
104
+ @user = User.create(name: "George Michael Bluth")
105
+ expect(@user.response_errors).to eq(%w(Yes Sir))
106
+ end
107
+
108
+ it "handles metadata on a destroyed resource" do
109
+ @user = User.destroy_existing(1)
110
+ @user.metadata[:foo].should == "bar"
111
+ end
112
+
113
+ it "handles error data on a destroyed resource" do
114
+ @user = User.destroy_existing(1)
103
115
  @user.response_errors.should == ["Yes", "Sir"]
104
116
  end
105
117
  end
@@ -107,12 +119,12 @@ describe Her::Model::ORM do
107
119
  context "mapping data, metadata and error data in string keys to Ruby objects" do
108
120
  before do
109
121
  api = Her::API.new
110
- api.setup :url => "https://api.example.com" do |builder|
122
+ api.setup url: "https://api.example.com" do |builder|
111
123
  builder.use Her::Middleware::SecondLevelParseJSON
112
124
  builder.use Faraday::Request::UrlEncoded
113
125
  builder.adapter :test do |stub|
114
- 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] }
115
- stub.post("/users") { |env| [200, {}, { 'data' => { :name => "George Michael Bluth" }, 'metadata' => { :foo => "bar" }, 'errors' => ["Yes", "Sir"] }.to_json] }
126
+ stub.get("/users") { [200, {}, { data: [{ id: 1, name: "Tobias Fünke" }, { id: 2, name: "Lindsay Fünke" }], metadata: { total_pages: 10, next_page: 2 }, errors: %w(Oh My God) }.to_json] }
127
+ stub.post("/users") { [200, {}, { data: { name: "George Michael Bluth" }, metadata: { foo: "bar" }, errors: %w(Yes Sir) }.to_json] }
116
128
  end
117
129
  end
118
130
 
@@ -123,34 +135,34 @@ describe Her::Model::ORM do
123
135
 
124
136
  it "handles metadata on a collection" do
125
137
  @users = User.all
126
- @users.metadata[:total_pages].should == 10
138
+ expect(@users.metadata[:total_pages]).to eq(10)
127
139
  end
128
140
 
129
141
  it "handles error data on a collection" do
130
142
  @users = User.all
131
- @users.errors.length.should == 3
143
+ expect(@users.errors.length).to eq(3)
132
144
  end
133
145
 
134
146
  it "handles metadata on a resource" do
135
- @user = User.create(:name => "George Michael Bluth")
136
- @user.metadata[:foo].should == "bar"
147
+ @user = User.create(name: "George Michael Bluth")
148
+ expect(@user.metadata[:foo]).to eq("bar")
137
149
  end
138
150
 
139
151
  it "handles error data on a resource" do
140
- @user = User.create(:name => "George Michael Bluth")
141
- @user.response_errors.should == ["Yes", "Sir"]
152
+ @user = User.create(name: "George Michael Bluth")
153
+ expect(@user.response_errors).to eq(%w(Yes Sir))
142
154
  end
143
155
  end
144
156
 
145
157
  context "defining custom getters and setters" do
146
158
  before do
147
159
  api = Her::API.new
148
- api.setup :url => "https://api.example.com" do |builder|
160
+ api.setup url: "https://api.example.com" do |builder|
149
161
  builder.use Her::Middleware::FirstLevelParseJSON
150
162
  builder.use Faraday::Request::UrlEncoded
151
163
  builder.adapter :test do |stub|
152
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :friends => ["Maeby", "GOB", "Anne"] }.to_json] }
153
- stub.get("/users/2") { |env| [200, {}, { :id => 1 }.to_json] }
164
+ stub.get("/users/1") { [200, {}, { id: 1, friends: %w(Maeby GOB Anne) }.to_json] }
165
+ stub.get("/users/2") { [200, {}, { id: 1 }.to_json] }
154
166
  end
155
167
  end
156
168
 
@@ -159,7 +171,7 @@ describe Her::Model::ORM do
159
171
  belongs_to :organization
160
172
 
161
173
  def friends=(val)
162
- val = val.gsub("\r", "").split("\n").map { |friend| friend.gsub(/^\s*\*\s*/, "") } if val and val.is_a?(String)
174
+ val = val.delete("\r").split("\n").map { |friend| friend.gsub(/^\s*\*\s*/, "") } if val && val.is_a?(String)
163
175
  @attributes[:friends] = val
164
176
  end
165
177
 
@@ -171,18 +183,18 @@ describe Her::Model::ORM do
171
183
 
172
184
  it "handles custom setters" do
173
185
  @user = User.find(1)
174
- @user.friends.should == "* Maeby\n* GOB\n* Anne"
186
+ expect(@user.friends).to eq("* Maeby\n* GOB\n* Anne")
175
187
  @user.instance_eval do
176
- @attributes[:friends] = ["Maeby", "GOB", "Anne"]
188
+ @attributes[:friends] = %w(Maeby GOB Anne)
177
189
  end
178
190
  end
179
191
 
180
192
  it "handles custom getters" do
181
193
  @user = User.new
182
194
  @user.friends = "* George\n* Oscar\n* Lucille"
183
- @user.friends.should == "* George\n* Oscar\n* Lucille"
195
+ expect(@user.friends).to eq("* George\n* Oscar\n* Lucille")
184
196
  @user.instance_eval do
185
- @attributes[:friends] = ["George", "Oscar", "Lucille"]
197
+ @attributes[:friends] = %w(George Oscar Lucille)
186
198
  end
187
199
  end
188
200
  end
@@ -190,16 +202,16 @@ describe Her::Model::ORM do
190
202
  context "finding resources" do
191
203
  before do
192
204
  api = Her::API.new
193
- api.setup :url => "https://api.example.com" do |builder|
205
+ api.setup url: "https://api.example.com" do |builder|
194
206
  builder.use Her::Middleware::FirstLevelParseJSON
195
207
  builder.use Faraday::Request::UrlEncoded
196
208
  builder.adapter :test do |stub|
197
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :age => 42 }.to_json] }
198
- stub.get("/users/2") { |env| [200, {}, { :id => 2, :age => 34 }.to_json] }
199
- stub.get("/users?id[]=1&id[]=2") { |env| [200, {}, [{ :id => 1, :age => 42 }, { :id => 2, :age => 34 }].to_json] }
200
- stub.get("/users?age=42&foo=bar") { |env| [200, {}, [{ :id => 3, :age => 42 }].to_json] }
201
- stub.get("/users?age=42") { |env| [200, {}, [{ :id => 1, :age => 42 }].to_json] }
202
- stub.get("/users?age=40") { |env| [200, {}, [{ :id => 1, :age => 40 }].to_json] }
209
+ stub.get("/users/1") { [200, {}, { id: 1, age: 42 }.to_json] }
210
+ stub.get("/users/2") { [200, {}, { id: 2, age: 34 }.to_json] }
211
+ stub.get("/users?id[]=1&id[]=2") { [200, {}, [{ id: 1, age: 42 }, { id: 2, age: 34 }].to_json] }
212
+ stub.get("/users?age=42&foo=bar") { [200, {}, [{ id: 3, age: 42 }].to_json] }
213
+ stub.get("/users?age=42") { [200, {}, [{ id: 1, age: 42 }].to_json] }
214
+ stub.get("/users?age=40") { [200, {}, [{ id: 1, age: 40 }].to_json] }
203
215
  end
204
216
  end
205
217
 
@@ -210,58 +222,58 @@ describe Her::Model::ORM do
210
222
 
211
223
  it "handles finding by a single id" do
212
224
  @user = User.find(1)
213
- @user.id.should == 1
225
+ expect(@user.id).to eq(1)
214
226
  end
215
227
 
216
228
  it "handles finding by multiple ids" do
217
229
  @users = User.find(1, 2)
218
- @users.should be_kind_of(Array)
219
- @users.length.should == 2
220
- @users[0].id.should == 1
221
- @users[1].id.should == 2
230
+ expect(@users).to be_kind_of(Array)
231
+ expect(@users.length).to eq(2)
232
+ expect(@users[0].id).to eq(1)
233
+ expect(@users[1].id).to eq(2)
222
234
  end
223
235
 
224
236
  it "handles finding by an array of ids" do
225
237
  @users = User.find([1, 2])
226
- @users.should be_kind_of(Array)
227
- @users.length.should == 2
228
- @users[0].id.should == 1
229
- @users[1].id.should == 2
238
+ expect(@users).to be_kind_of(Array)
239
+ expect(@users.length).to eq(2)
240
+ expect(@users[0].id).to eq(1)
241
+ expect(@users[1].id).to eq(2)
230
242
  end
231
243
 
232
244
  it "handles finding by an array of ids of length 1" do
233
245
  @users = User.find([1])
234
- @users.should be_kind_of(Array)
235
- @users.length.should == 1
236
- @users[0].id.should == 1
246
+ expect(@users).to be_kind_of(Array)
247
+ expect(@users.length).to eq(1)
248
+ expect(@users[0].id).to eq(1)
237
249
  end
238
250
 
239
251
  it "handles finding by an array id param of length 2" do
240
252
  @users = User.find(id: [1, 2])
241
- @users.should be_kind_of(Array)
242
- @users.length.should == 2
243
- @users[0].id.should == 1
244
- @users[1].id.should == 2
253
+ expect(@users).to be_kind_of(Array)
254
+ expect(@users.length).to eq(2)
255
+ expect(@users[0].id).to eq(1)
256
+ expect(@users[1].id).to eq(2)
245
257
  end
246
258
 
247
- it 'handles finding with id parameter as an array' do
259
+ it "handles finding with id parameter as an array" do
248
260
  @users = User.where(id: [1, 2])
249
- @users.should be_kind_of(Array)
250
- @users.length.should == 2
251
- @users[0].id.should == 1
252
- @users[1].id.should == 2
261
+ expect(@users).to be_kind_of(Array)
262
+ expect(@users.length).to eq(2)
263
+ expect(@users[0].id).to eq(1)
264
+ expect(@users[1].id).to eq(2)
253
265
  end
254
266
 
255
267
  it "handles finding with other parameters" do
256
- @users = User.where(:age => 42, :foo => "bar").all
257
- @users.should be_kind_of(Array)
258
- @users.first.id.should == 3
268
+ @users = User.where(age: 42, foo: "bar").all
269
+ expect(@users).to be_kind_of(Array)
270
+ expect(@users.first.id).to eq(3)
259
271
  end
260
272
 
261
273
  it "handles finding with other parameters and scoped" do
262
274
  @users = User.scoped
263
- @users.where(:age => 42).should be_all { |u| u.age == 42 }
264
- @users.where(:age => 40).should be_all { |u| u.age == 40 }
275
+ expect(@users.where(age: 42)).to be_all { |u| u.age == 42 }
276
+ expect(@users.where(age: 40)).to be_all { |u| u.age == 40 }
265
277
  end
266
278
  end
267
279
 
@@ -272,20 +284,20 @@ describe Her::Model::ORM do
272
284
  end
273
285
 
274
286
  it "builds a new resource without requesting it" do
275
- Foo::User.should_not_receive(:request)
276
- @new_user = Foo::User.build(:fullname => "Tobias Fünke")
277
- @new_user.new?.should be_truthy
278
- @new_user.fullname.should == "Tobias Fünke"
287
+ expect(Foo::User).not_to receive(:request)
288
+ @new_user = Foo::User.build(fullname: "Tobias Fünke")
289
+ expect(@new_user.new?).to be_truthy
290
+ expect(@new_user.fullname).to eq("Tobias Fünke")
279
291
  end
280
292
  end
281
293
 
282
294
  context "when request_new_object_on_build is set" do
283
295
  before do
284
- Her::API.setup :url => "https://api.example.com" do |builder|
296
+ Her::API.setup url: "https://api.example.com" do |builder|
285
297
  builder.use Her::Middleware::FirstLevelParseJSON
286
298
  builder.use Faraday::Request::UrlEncoded
287
299
  builder.adapter :test do |stub|
288
- stub.get("/users/new") { |env| ok! :id => nil, :fullname => params(env)[:fullname], :email => "tobias@bluthcompany.com" }
300
+ stub.get("/users/new") { |env| ok! id: nil, fullname: params(env)[:fullname], email: "tobias@bluthcompany.com" }
289
301
  end
290
302
  end
291
303
 
@@ -293,23 +305,23 @@ describe Her::Model::ORM do
293
305
  end
294
306
 
295
307
  it "requests a new resource" do
296
- Foo::User.should_receive(:request).once.and_call_original
297
- @new_user = Foo::User.build(:fullname => "Tobias Fünke")
298
- @new_user.new?.should be_truthy
299
- @new_user.fullname.should == "Tobias Fünke"
300
- @new_user.email.should == "tobias@bluthcompany.com"
308
+ expect(Foo::User).to receive(:request).once.and_call_original
309
+ @new_user = Foo::User.build(fullname: "Tobias Fünke")
310
+ expect(@new_user.new?).to be_truthy
311
+ expect(@new_user.fullname).to eq("Tobias Fünke")
312
+ expect(@new_user.email).to eq("tobias@bluthcompany.com")
301
313
  end
302
314
  end
303
315
  end
304
316
 
305
317
  context "creating resources" do
306
318
  before do
307
- Her::API.setup :url => "https://api.example.com" do |builder|
319
+ Her::API.setup url: "https://api.example.com" do |builder|
308
320
  builder.use Her::Middleware::FirstLevelParseJSON
309
321
  builder.use Faraday::Request::UrlEncoded
310
322
  builder.adapter :test do |stub|
311
- stub.post("/users") { |env| [200, {}, { :id => 1, :fullname => Faraday::Utils.parse_query(env[:body])['fullname'], :email => Faraday::Utils.parse_query(env[:body])['email'] }.to_json] }
312
- stub.post("/companies") { |env| [200, {}, { :errors => ["name is required"] }.to_json] }
323
+ stub.post("/users") { |env| [200, {}, { id: 1, fullname: Faraday::Utils.parse_query(env[:body])["fullname"], email: Faraday::Utils.parse_query(env[:body])["email"] }.to_json] }
324
+ stub.post("/companies") { [200, {}, { errors: ["name is required"] }.to_json] }
313
325
  end
314
326
  end
315
327
 
@@ -318,27 +330,27 @@ describe Her::Model::ORM do
318
330
  end
319
331
 
320
332
  it "handle one-line resource creation" do
321
- @user = Foo::User.create(:fullname => "Tobias Fünke", :email => "tobias@bluth.com")
322
- @user.id.should == 1
323
- @user.fullname.should == "Tobias Fünke"
324
- @user.email.should == "tobias@bluth.com"
333
+ @user = Foo::User.create(fullname: "Tobias Fünke", email: "tobias@bluth.com")
334
+ expect(@user.id).to eq(1)
335
+ expect(@user.fullname).to eq("Tobias Fünke")
336
+ expect(@user.email).to eq("tobias@bluth.com")
325
337
  end
326
338
 
327
339
  it "handle resource creation through Model.new + #save" do
328
- @user = Foo::User.new(:fullname => "Tobias Fünke")
329
- @user.save.should be_truthy
330
- @user.fullname.should == "Tobias Fünke"
340
+ @user = Foo::User.new(fullname: "Tobias Fünke")
341
+ expect(@user.save).to be_truthy
342
+ expect(@user.fullname).to eq("Tobias Fünke")
331
343
  end
332
344
 
333
345
  it "handle resource creation through Model.new + #save!" do
334
- @user = Foo::User.new(:fullname => "Tobias Fünke")
335
- @user.save!.should be_truthy
336
- @user.fullname.should == "Tobias Fünke"
346
+ @user = Foo::User.new(fullname: "Tobias Fünke")
347
+ expect(@user.save!).to be_truthy
348
+ expect(@user.fullname).to eq("Tobias Fünke")
337
349
  end
338
350
 
339
351
  it "returns false when #save gets errors" do
340
352
  @company = Foo::Company.new
341
- @company.save.should be_falsey
353
+ expect(@company.save).to be_falsey
342
354
  end
343
355
 
344
356
  it "raises ResourceInvalid when #save! gets errors" do
@@ -347,20 +359,20 @@ describe Her::Model::ORM do
347
359
  end
348
360
 
349
361
  it "don't overwrite data if response is empty" do
350
- @company = Foo::Company.new(:name => 'Company Inc.')
351
- @company.save.should be_falsey
352
- @company.name.should == "Company Inc."
362
+ @company = Foo::Company.new(name: "Company Inc.")
363
+ expect(@company.save).to be_falsey
364
+ expect(@company.name).to eq("Company Inc.")
353
365
  end
354
366
  end
355
367
 
356
368
  context "updating resources" do
357
369
  before do
358
- Her::API.setup :url => "https://api.example.com" do |builder|
370
+ Her::API.setup url: "https://api.example.com" do |builder|
359
371
  builder.use Her::Middleware::FirstLevelParseJSON
360
372
  builder.use Faraday::Request::UrlEncoded
361
373
  builder.adapter :test do |stub|
362
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke" }.to_json] }
363
- stub.put("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke" }.to_json] }
374
+ stub.get("/users/1") { [200, {}, { id: 1, fullname: "Tobias Fünke" }.to_json] }
375
+ stub.put("/users/1") { [200, {}, { id: 1, fullname: "Lindsay Fünke" }.to_json] }
364
376
  end
365
377
  end
366
378
 
@@ -369,32 +381,32 @@ describe Her::Model::ORM do
369
381
 
370
382
  it "handle resource data update without saving it" do
371
383
  @user = Foo::User.find(1)
372
- @user.fullname.should == "Tobias Fünke"
384
+ expect(@user.fullname).to eq("Tobias Fünke")
373
385
  @user.fullname = "Kittie Sanchez"
374
- @user.fullname.should == "Kittie Sanchez"
386
+ expect(@user.fullname).to eq("Kittie Sanchez")
375
387
  end
376
388
 
377
389
  it "handle resource update through the .update class method" do
378
- @user = Foo::User.save_existing(1, { :fullname => "Lindsay Fünke" })
379
- @user.fullname.should == "Lindsay Fünke"
390
+ @user = Foo::User.save_existing(1, fullname: "Lindsay Fünke")
391
+ expect(@user.fullname).to eq("Lindsay Fünke")
380
392
  end
381
393
 
382
394
  it "handle resource update through #save on an existing resource" do
383
395
  @user = Foo::User.find(1)
384
396
  @user.fullname = "Lindsay Fünke"
385
397
  @user.save
386
- @user.fullname.should == "Lindsay Fünke"
398
+ expect(@user.fullname).to eq("Lindsay Fünke")
387
399
  end
388
400
  end
389
401
 
390
402
  context "deleting resources" do
391
403
  before do
392
- Her::API.setup :url => "https://api.example.com" do |builder|
404
+ Her::API.setup url: "https://api.example.com" do |builder|
393
405
  builder.use Her::Middleware::FirstLevelParseJSON
394
406
  builder.use Faraday::Request::UrlEncoded
395
407
  builder.adapter :test do |stub|
396
- stub.get("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Tobias Fünke", :active => true }.to_json] }
397
- stub.delete("/users/1") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :active => false }.to_json] }
408
+ stub.get("/users/1") { [200, {}, { id: 1, fullname: "Tobias Fünke", active: true }.to_json] }
409
+ stub.delete("/users/1") { [200, {}, { id: 1, fullname: "Lindsay Fünke", active: false }.to_json] }
398
410
  end
399
411
  end
400
412
 
@@ -403,103 +415,103 @@ describe Her::Model::ORM do
403
415
 
404
416
  it "handle resource deletion through the .destroy class method" do
405
417
  @user = Foo::User.destroy_existing(1)
406
- @user.active.should be_falsey
407
- @user.should be_destroyed
418
+ expect(@user.active).to be_falsey
419
+ expect(@user).to be_destroyed
408
420
  end
409
421
 
410
422
  it "handle resource deletion through #destroy on an existing resource" do
411
423
  @user = Foo::User.find(1)
412
424
  @user.destroy
413
- @user.active.should be_falsey
414
- @user.should be_destroyed
425
+ expect(@user.active).to be_falsey
426
+ expect(@user).to be_destroyed
415
427
  end
416
428
 
417
429
  context "with params" do
418
430
  before do
419
- Her::API.setup :url => "https://api.example.com" do |builder|
431
+ Her::API.setup url: "https://api.example.com" do |builder|
420
432
  builder.use Her::Middleware::FirstLevelParseJSON
421
433
  builder.use Faraday::Request::UrlEncoded
422
434
  builder.adapter :test do |stub|
423
- stub.delete("/users/1?delete_type=soft") { |env| [200, {}, { :id => 1, :fullname => "Lindsay Fünke", :active => false }.to_json] }
435
+ stub.delete("/users/1?delete_type=soft") { [200, {}, { id: 1, fullname: "Lindsay Fünke", active: false }.to_json] }
424
436
  end
425
437
  end
426
438
  end
427
439
 
428
440
  it "handle resource deletion through the .destroy class method" do
429
- @user = Foo::User.destroy_existing(1, delete_type: 'soft')
430
- @user.active.should be_false
431
- @user.should be_destroyed
441
+ @user = Foo::User.destroy_existing(1, delete_type: "soft")
442
+ expect(@user.active).to be_falsey
443
+ expect(@user).to be_destroyed
432
444
  end
433
445
 
434
446
  it "handle resource deletion through #destroy on an existing resource" do
435
447
  @user = Foo::User.find(1)
436
- @user.destroy(delete_type: 'soft')
437
- @user.active.should be_false
438
- @user.should be_destroyed
448
+ @user.destroy(delete_type: "soft")
449
+ expect(@user.active).to be_falsey
450
+ expect(@user).to be_destroyed
439
451
  end
440
452
  end
441
453
  end
442
454
 
443
- context 'customizing HTTP methods' do
455
+ context "customizing HTTP methods" do
444
456
  before do
445
- Her::API.setup :url => "https://api.example.com" do |builder|
457
+ Her::API.setup url: "https://api.example.com" do |builder|
446
458
  builder.use Her::Middleware::FirstLevelParseJSON
447
459
  builder.use Faraday::Request::UrlEncoded
448
460
  end
449
461
  end
450
462
 
451
- context 'create' do
463
+ context "create" do
452
464
  before do
453
465
  Her::API.default_api.connection.adapter :test do |stub|
454
- stub.put('/users') { |env| [200, {}, { :id => 1, :fullname => 'Tobias Fünke' }.to_json] }
466
+ stub.put("/users") { [200, {}, { id: 1, fullname: "Tobias Fünke" }.to_json] }
455
467
  end
456
- spawn_model 'Foo::User' do
468
+ spawn_model "Foo::User" do
457
469
  attributes :fullname, :email
458
- method_for :create, 'PUT'
470
+ method_for :create, "PUT"
459
471
  end
460
472
  end
461
473
 
462
- context 'for top-level class' do
463
- it 'uses the custom method (PUT) instead of default method (POST)' do
464
- user = Foo::User.new(:fullname => 'Tobias Fünke')
465
- user.should be_new
466
- user.save.should be_truthy
474
+ context "for top-level class" do
475
+ it "uses the custom method (PUT) instead of default method (POST)" do
476
+ user = Foo::User.new(fullname: "Tobias Fünke")
477
+ expect(user).to be_new
478
+ expect(user.save).to be_truthy
467
479
  end
468
480
  end
469
481
 
470
- context 'for children class' do
482
+ context "for children class" do
471
483
  before do
472
484
  class User < Foo::User; end
473
485
  @spawned_models << :User
474
486
  end
475
487
 
476
- it 'uses the custom method (PUT) instead of default method (POST)' do
477
- user = User.new(:fullname => 'Tobias Fünke')
478
- user.should be_new
479
- user.save.should be_truthy
488
+ it "uses the custom method (PUT) instead of default method (POST)" do
489
+ user = User.new(fullname: "Tobias Fünke")
490
+ expect(user).to be_new
491
+ expect(user.save).to be_truthy
480
492
  end
481
493
  end
482
494
  end
483
495
 
484
- context 'update' do
496
+ context "update" do
485
497
  before do
486
498
  Her::API.default_api.connection.adapter :test do |stub|
487
- stub.get('/users/1') { |env| [200, {}, { :id => 1, :fullname => 'Lindsay Fünke' }.to_json] }
488
- stub.post('/users/1') { |env| [200, {}, { :id => 1, :fullname => 'Tobias Fünke' }.to_json] }
499
+ stub.get("/users/1") { [200, {}, { id: 1, fullname: "Lindsay Fünke" }.to_json] }
500
+ stub.post("/users/1") { [200, {}, { id: 1, fullname: "Tobias Fünke" }.to_json] }
489
501
  end
490
502
 
491
- spawn_model 'Foo::User' do
503
+ spawn_model "Foo::User" do
492
504
  attributes :fullname, :email
493
505
  method_for :update, :post
494
506
  end
495
507
  end
496
508
 
497
- it 'uses the custom method (POST) instead of default method (PUT)' do
509
+ it "uses the custom method (POST) instead of default method (PUT)" do
498
510
  user = Foo::User.find(1)
499
- user.fullname.should eq 'Lindsay Fünke'
500
- user.fullname = 'Toby Fünke'
511
+ expect(user.fullname).to eq "Lindsay Fünke"
512
+ user.fullname = "Toby Fünke"
501
513
  user.save
502
- user.fullname.should eq 'Tobias Fünke'
514
+ expect(user.fullname).to eq "Tobias Fünke"
503
515
  end
504
516
  end
505
517
  end