sunstone 5.1.0.3 → 5.1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36510647bb5cb8991c4133315ef746af7f2ad49b
4
- data.tar.gz: 668776a98974ad2685c9bf82f054258fb462cd55
3
+ metadata.gz: d53af8c7411662e7621971b1c2a3f39f130ea8c3
4
+ data.tar.gz: 8a61637315c7faf35265b47b8334901340b41798
5
5
  SHA512:
6
- metadata.gz: 26f5d6e7b9095a221b5c411b5b6d8f6b32a39a4629175f72750a19b23178684275385b26e76329b3b24af6e333f2566642ebb134be60be651e59ac15fa5e0811
7
- data.tar.gz: 9d000ed9a6e7647edb76e846f3fee0e3d31d64fd0ced01779dee814759885328d5dcb9b0ed26909bc3471d0c29d314e61d5509bde015615a0623732930c79eca
6
+ metadata.gz: 690936bd2ba33aab551c98da50ea1871e29fdfa9207dd71c7bcd78050bfa56f219ad859c068ac33346833ffb44feb058bc2f41a46ab7c2e4f70b11c0f1449a62
7
+ data.tar.gz: 6e9f804cc2b2e75584e184b9791dc3f5b2d0d682c71cd5ef1c60cb4ffdf1af23b6607bf3f650be218acb87f0173dad53b2621fffa3aa9dac40f72fc51efc4663
@@ -9,6 +9,7 @@ module ActiveRecord
9
9
  if owner.new_record?
10
10
  replace_records(other_array, original_target)
11
11
  elsif owner.class.connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter) && owner.instance_variable_defined?(:@updating) && owner.instance_variable_get(:@updating)
12
+ self.instance_variable_set(:@sunstone_changed, true)
12
13
  replace_common_records_in_memory(other_array, original_target)
13
14
 
14
15
  # Remove from target
@@ -71,7 +72,7 @@ module ActiveRecord
71
72
  # will fail and false will be returned.
72
73
  def update(attributes)
73
74
  @updating = :updating
74
- $updating_model = self
75
+ Thread.current[:sunstone_updating_model] = self
75
76
 
76
77
  # The following transaction covers any possible database side-effects of the
77
78
  # attributes assignment. For example, setting the IDs of a child collection.
@@ -81,7 +82,7 @@ module ActiveRecord
81
82
  end
82
83
  ensure
83
84
  @updating = false
84
- $updating_model = nil
85
+ Thread.current[:sunstone_updating_model] = nil
85
86
  end
86
87
 
87
88
  end
@@ -16,7 +16,7 @@ module ActiveRecord
16
16
  if self.class.connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter)
17
17
  self.class.reflect_on_all_associations.each do |reflection|
18
18
  if reflection.belongs_to?
19
- if association(reflection.name).loaded? && association(reflection.name).target == $updating_model
19
+ if association(reflection.name).loaded? && association(reflection.name).target == Thread.current[:sunstone_updating_model]
20
20
  attrs.delete(arel_table[reflection.foreign_key])
21
21
  else
22
22
  add_attributes_for_belongs_to_association(reflection, attrs)
@@ -109,25 +109,25 @@ module ActiveRecord
109
109
  if reflection.is_a?(ActiveRecord::Reflection::HasAndBelongsToManyReflection)
110
110
  @_already_called[:"autosave_associated_records_for_#{self.class.name.downcase.pluralize}_#{reflection.name}"] = true
111
111
  end
112
-
113
- if association = association_instance_get(reflection.name)
114
- autosave = reflection.options[:autosave]
115
112
 
116
- attrs[Arel::Attributes::EmptyRelation.new(arel_table, reflection.name, true, true)] = [] if association.target.empty?
113
+ if association = association_instance_get(reflection.name)
114
+ if new_record? || (association.instance_variable_defined?(:@sunstone_changed) && association.instance_variable_get(:@sunstone_changed)) || reflection.options[:autosave] || association.target.any?(&:changed_for_autosave?) || association.target.any?(&:new_record?)
115
+ attrs[Arel::Attributes::EmptyRelation.new(arel_table, reflection.name, true, true)] = [] if association.target.empty?
117
116
 
118
- association.target.each_with_index do |record, idx|
119
- next if record.destroyed?
117
+ association.target.each_with_index do |record, idx|
118
+ next if record.destroyed?
120
119
 
121
- if record.new_record?
122
- record.send(:arel_attributes_with_values_for_create, record.attribute_names).each do |k, v|
123
- attrs[Arel::Attributes::Relation.new(k, reflection.name, idx, true)] = v
124
- end
125
- else
126
- record.send(:arel_attributes_with_values_for_update, record.attribute_names).each do |k, v|
127
- attrs[Arel::Attributes::Relation.new(k, reflection.name, idx, true)] = v
120
+ if record.new_record?
121
+ record.send(:arel_attributes_with_values_for_create, record.send(:keys_for_partial_write) + [record.class.primary_key]).each do |k, v|
122
+ attrs[Arel::Attributes::Relation.new(k, reflection.name, idx, true)] = v
123
+ end
124
+ else
125
+ record.send(:arel_attributes_with_values_for_update, record.send(:keys_for_partial_write) + [record.class.primary_key]).each do |k, v|
126
+ attrs[Arel::Attributes::Relation.new(k, reflection.name, idx, true)] = v
127
+ end
128
128
  end
129
129
  end
130
-
130
+ association.instance_variable_set(:@sunstone_changed, false)
131
131
  end
132
132
 
133
133
  # reconstruct the scope now that we know the owner's id
@@ -16,7 +16,7 @@ module ActiveRecord
16
16
 
17
17
  def create_or_update(*args)
18
18
  @updating = new_record? ? :creating : :updating
19
- $updating_model = self
19
+ Thread.current[:sunstone_updating_model] = self
20
20
 
21
21
  raise ReadOnlyRecord, "#{self.class} is marked as readonly" if readonly?
22
22
  result = new_record? ? _create_record : _update_record(*args)
@@ -55,7 +55,7 @@ module ActiveRecord
55
55
  raise ActiveRecord::RecordInvalid
56
56
  ensure
57
57
  @updating = false
58
- $updating_model = nil
58
+ Thread.current[:sunstone_updating_model] = nil
59
59
  end
60
60
 
61
61
  # Creates a record with values matching those of the instance attributes
@@ -34,7 +34,7 @@ module Arel
34
34
  if !o.orders.empty?
35
35
  collector.order = o.orders.map { |x| visit(x, collector) }
36
36
  end
37
-
37
+
38
38
  collector = maybe_visit o.limit, collector
39
39
  collector = maybe_visit o.offset, collector
40
40
  collector = maybe_visit o.eager_load, collector
@@ -635,11 +635,20 @@ module Arel
635
635
  end
636
636
  end
637
637
 
638
- # def visit_Arel_Nodes_Matches o, collector
639
- # collector = visit o.left, collector
640
- # collector << " LIKE "
641
- # visit o.right, collector
642
- # end
638
+ def visit_Arel_Nodes_Matches o, collector
639
+ key = visit(o.left, collector)
640
+ value = { like: visit(o.right, collector) }
641
+
642
+ if key.is_a?(Hash)
643
+ if o.left.is_a?(Arel::Attributes::Cast)
644
+ merge_to_bottom_hash(key, value)
645
+ else
646
+ add_to_bottom_of_hash(key, value)
647
+ end
648
+ else
649
+ { key => value }
650
+ end
651
+ end
643
652
  #
644
653
  # def visit_Arel_Nodes_DoesNotMatch o, collector
645
654
  # collector = visit o.left, collector
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '5.1.0.3'
2
+ VERSION = '5.1.0.4'
3
3
  end
@@ -0,0 +1,162 @@
1
+ require 'test_helper'
2
+
3
+ class ActiveRecord::Associations::BelongsToTest < ActiveSupport::TestCase
4
+
5
+ schema do
6
+ create_table "ships" do |t|
7
+ t.string "name", limit: 255
8
+ t.integer "fleet_id"
9
+ end
10
+
11
+ create_table "fleets" do |t|
12
+ t.string "name", limit: 255
13
+ end
14
+ end
15
+
16
+ class Fleet < ActiveRecord::Base
17
+ has_many :ships
18
+ end
19
+
20
+ class Ship < ActiveRecord::Base
21
+ belongs_to :fleet
22
+ end
23
+
24
+ # Save includes =============================================================
25
+
26
+ test '#save new record includes new belongs_to associations' do
27
+ ship = Ship.new(name: 'Definant', fleet: Fleet.new(name: 'Armada Duo'))
28
+
29
+ req_stub = webmock(:post, '/ships', {include: :fleet}).with(
30
+ body: {
31
+ ship: { name: 'Definant', fleet_attributes: { name: 'Armada Duo' } }
32
+ }.to_json
33
+ ).to_return(
34
+ body: {
35
+ id: 2,
36
+ fleet_id: 3,
37
+ name: 'Definant 001',
38
+ fleet: { id: 3, name: 'Armada 2' }
39
+ }.to_json
40
+ )
41
+
42
+ assert ship.save
43
+ assert_equal 2, ship.id
44
+ assert_equal 3, ship.fleet_id
45
+ assert_equal 3, ship.fleet.id
46
+ assert_equal 'Definant 001', ship.name
47
+ assert_equal 'Armada 2', ship.fleet.name
48
+
49
+ assert_requested req_stub
50
+ end
51
+
52
+ test '#save new record doesnt include persisted/unmodified belongs_to associations' do
53
+ webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
54
+ body: [{id: 1, name: 'Armada Original'}].to_json
55
+ )
56
+
57
+ fleet = Fleet.find(1)
58
+ ship = Ship.new(name: 'Definant', fleet: fleet)
59
+
60
+ req_stub = webmock(:post, '/ships').with(
61
+ body: {
62
+ ship: { name: 'Definant', fleet_id: 1 }
63
+ }.to_json
64
+ ).to_return(
65
+ body: {
66
+ id: 2,
67
+ fleet_id: 1,
68
+ name: 'Definant 001'
69
+ }.to_json
70
+ )
71
+
72
+ assert ship.save
73
+ assert_equal 2, ship.id
74
+ assert_equal 1, ship.fleet_id
75
+
76
+ assert_requested req_stub
77
+ end
78
+
79
+ test '#save persisted record includes new belongs_to associations' do
80
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
81
+ body: [{id: 1, fleet_id: nil, name: 'Ship Uno'}].to_json
82
+ )
83
+
84
+ req_stub = webmock(:patch, '/ships/1', {include: :fleet}).with(
85
+ body: {
86
+ ship: { fleet_attributes: { name: 'Armada Duo' } }
87
+ }.to_json
88
+ ).to_return(
89
+ body: {
90
+ id: 1, fleet_id: 2, name: 'Ship Uno',
91
+ fleet: { id: 2, name: 'Armada Duo' }
92
+ }.to_json
93
+ )
94
+
95
+ ship = Ship.find(1)
96
+ ship.fleet = Fleet.new(name: 'Armada Duo')
97
+
98
+ ship.save
99
+
100
+ assert_requested req_stub
101
+ end
102
+
103
+ test '#save persisted record doesnt include persisted/unmodified belongs_to associations but updates belongs_to key' do
104
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
105
+ body: [{id: 1, fleet_id: nil, name: 'Ship Uno'}].to_json
106
+ )
107
+ webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
108
+ body: [{id: 1, name: 'Armada Original'}].to_json
109
+ )
110
+
111
+ fleet = Fleet.find(1)
112
+ ship = Ship.find(1)
113
+
114
+ req_stub = webmock(:patch, '/ships/1').with(
115
+ body: {
116
+ ship: { fleet_id: 1 }
117
+ }.to_json
118
+ ).to_return(
119
+ body: {
120
+ id: 1,
121
+ fleet_id: 1,
122
+ name: 'My Ship'
123
+ }.to_json
124
+ )
125
+
126
+ ship.fleet = fleet
127
+ assert ship.save
128
+ assert_equal 1, ship.id
129
+ assert_equal 1, ship.fleet_id
130
+ assert_equal 'My Ship', ship.name
131
+
132
+ assert_requested req_stub
133
+ end
134
+
135
+ test '#save persisted record doesnt include loaded belongs_to association' do
136
+ webmock(:get, "/ships", where: {id: 1}, limit: 1, include: [:fleet]).to_return(
137
+ body: [{id: 1, fleet_id: 1, name: 'Ship Uno', fleet: {id: 1, name: 'Armada Original'}}].to_json
138
+ )
139
+
140
+ ship = Ship.eager_load(:fleet).find(1)
141
+
142
+ req_stub = webmock(:patch, '/ships/1').with(
143
+ body: {
144
+ ship: { name: 'New NAME!!' }
145
+ }.to_json
146
+ ).to_return(
147
+ body: {
148
+ id: 1,
149
+ fleet_id: 1,
150
+ name: 'New NAME!!'
151
+ }.to_json
152
+ )
153
+
154
+
155
+ assert ship.association(:fleet).loaded?
156
+ ship.name = 'New NAME!!'
157
+ assert ship.save
158
+
159
+ assert_requested req_stub
160
+ end
161
+
162
+ end
@@ -32,4 +32,94 @@ class ActiveRecord::Associations::HasAndBelongsToManyTest < ActiveSupport::TestC
32
32
  assert_equal [43], Ship.find(42).sailor_ids
33
33
  end
34
34
 
35
+ test '#update habtm relationships' do
36
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
37
+ body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
38
+ )
39
+ webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
40
+ body: [{id: 1, name: 'Captain'}].to_json
41
+ )
42
+ webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
43
+ body: [].to_json
44
+ )
45
+ req_stub = webmock(:patch, '/ships/1').with(
46
+ body: {ship: {sailors_attributes: [{id: 1}]}}.to_json
47
+ ).to_return(
48
+ body: {id: 1, name: 'Armada Uno'}.to_json
49
+ )
50
+
51
+ ship = Ship.find(1)
52
+ assert ship.update(sailors: [Sailor.find(1)])
53
+ assert_requested req_stub
54
+ end
55
+
56
+ test '#update clears habtm relationship' do
57
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
58
+ body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
59
+ )
60
+ webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
61
+ body: [{id: 1, name: 'Captain'}].to_json
62
+ )
63
+ webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
64
+ body: [{id: 1, name: 'Captain'}].to_json
65
+ )
66
+ req_stub = webmock(:patch, '/ships/1').with(
67
+ body: {ship: {sailors_attributes: []}}.to_json
68
+ ).to_return(
69
+ body: {id: 1, name: 'Armada Uno'}.to_json
70
+ )
71
+
72
+ ship = Ship.find(1)
73
+ assert ship.update(sailors: [])
74
+ assert_requested req_stub
75
+ end
76
+
77
+ test '#save persisted record doesnt include loaded habtm association' do
78
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
79
+ body: [{id: 1, name: 'Armada Uno'}].to_json
80
+ )
81
+ webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
82
+ body: [{id: 1, name: 'Captain'}].to_json
83
+ )
84
+ webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
85
+ body: [{id: 1, name: 'Captain'}].to_json
86
+ )
87
+
88
+ ship = Ship.find(1)
89
+
90
+
91
+ req_stub = webmock(:patch, '/ships/1').with(
92
+ body: {
93
+ ship: { name: 'New NAME!!' }
94
+ }.to_json
95
+ ).to_return(
96
+ body: {
97
+ id: 1,
98
+ name: 'New NAME!!'
99
+ }.to_json
100
+ )
101
+
102
+ ship.sailors.load
103
+ assert ship.sailors.loaded?
104
+ ship.name = 'New NAME!!'
105
+ assert ship.save
106
+
107
+ assert_requested req_stub
108
+ end
109
+
110
+
111
+ test "#destroy with habtm relationship" do
112
+ webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
113
+ body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
114
+ )
115
+ req_stub = webmock(:delete, '/ships/1').to_return(
116
+ status: 204
117
+ )
118
+
119
+ ship = Ship.find(1)
120
+ assert ship.destroy
121
+ assert_requested req_stub
122
+ end
123
+
124
+
35
125
  end
@@ -21,13 +21,15 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
21
21
  belongs_to :fleet
22
22
  end
23
23
 
24
+ # ID Setters ================================================================
25
+
24
26
  test '#create with has_many_ids=' do
25
27
  webmock(:get, "/ships", where: {id: 2}).to_return(body: [{id: 2, fleet_id: nil, name: 'Duo'}].to_json)
26
28
  webmock(:post, "/fleets").with(
27
29
  body: {
28
30
  fleet: {
29
31
  name: 'Spanish Armada',
30
- ships_attributes: [{id: 2, name: 'Duo'}]
32
+ ships_attributes: [{id: 2}]
31
33
  }
32
34
  }
33
35
  ).to_return(body: {id: 42, name: "Spanish Armada"}.to_json)
@@ -44,14 +46,52 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
44
46
  webmock(:patch, "/fleets/42").with(
45
47
  body: {
46
48
  fleet: {
47
- ships_attributes: [{id: 2, name: 'Duo'}]
49
+ ships_attributes: [{id: 2}]
48
50
  }
49
51
  }).to_return(body: {id: 42, name: "Spanish Armada"}.to_json)
50
52
 
51
53
  Fleet.find(42).update(ship_ids: ["2"])
52
54
  end
55
+
56
+ # Modifing relationship ====================================================
53
57
 
54
- test '#save includes modified has_many associations' do
58
+ test '#save persisted records includes has_many associations when new record added' do
59
+ webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
60
+ body: [{
61
+ id: 1,
62
+ name: 'Armada Trio',
63
+ ships: [
64
+ {id: 2, fleet_id: 1, name: 'Definant'}
65
+ ]
66
+ }].to_json
67
+ })
68
+
69
+ webmock(:get, '/ships', where: {id: 3}, limit: 1).to_return({
70
+ body: [{id: 3, fleet_id: nil, name: 'Enterprise'}].to_json
71
+ })
72
+
73
+ req_stub = webmock(:patch, '/fleets/1').with(
74
+ body: {
75
+ fleet: {
76
+ ships_attributes: [{ id: 2 }, {id: 3 }]
77
+ }
78
+ }.to_json
79
+ ).to_return(
80
+ body: {
81
+ id: 1,
82
+ name: 'Armada Trio',
83
+ ships: [{ id: 2, fleet_id: 1, name: 'Voyager' }]
84
+ }.to_json
85
+ )
86
+
87
+ # fleet.ships = [ship]
88
+ fleet = Fleet.eager_load(:ships).find(1)
89
+ fleet.update(ships: fleet.ships + [Ship.find(3)])
90
+
91
+ assert_requested req_stub
92
+ end
93
+
94
+ test '#save persisted records includes has_many associations when replaced with new record' do
55
95
  webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
56
96
  body: [{
57
97
  id: 1,
@@ -81,13 +121,93 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
81
121
  assert fleet.update(ships: [Ship.new(name: 'Voyager')])
82
122
  assert_equal 1, fleet.id
83
123
  assert_equal [3], fleet.ships.map(&:id)
84
- # assert_equal 3, ship.fleet.id
85
- # assert_equal 'Definant 001', ship.name
86
- # assert_equal 'Armada 2', ship.fleet.name
87
124
 
88
125
  assert_requested req_stub
89
126
  end
90
127
 
128
+ test '#save persisted records includes has_many associations when updating record in relationship' do
129
+ webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
130
+ body: [{
131
+ id: 1,
132
+ name: 'Armada Trio',
133
+ ships: [
134
+ {id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
135
+ ]
136
+ }].to_json
137
+ })
138
+
139
+ req_stub = webmock(:patch, '/fleets/1').with(
140
+ body: {
141
+ fleet: {
142
+ ships_attributes: [{ name: 'Voyager', id: 2 }, {id: 3}]
143
+ }
144
+ }.to_json
145
+ ).to_return(
146
+ body: {
147
+ id: 1,
148
+ name: 'Armada Trio',
149
+ ships: [{ id: 2, fleet_id: 1, name: 'Voyager' }, {id: 3, fleet_id: 1, name: 'Enterprise'}]
150
+ }.to_json
151
+ )
152
+
153
+ # fleet.ships = [ship]
154
+ fleet = Fleet.eager_load(:ships).find(1)
155
+ fleet.ships.first.name = 'Voyager'
156
+ fleet.save
157
+
158
+ assert_requested req_stub
159
+ end
160
+
161
+ test '#save persisted records doesnt include any loaded has_many associations' do
162
+ webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
163
+ body: [{
164
+ id: 1,
165
+ name: 'Armada Trio',
166
+ ships: [
167
+ {id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
168
+ ]
169
+ }].to_json
170
+ })
171
+
172
+ req_stub = webmock(:patch, '/fleets/1').with(
173
+ body: { fleet: { name: 'New NAME!!' } }.to_json
174
+ ).to_return(
175
+ body: {
176
+ id: 1,
177
+ name: 'New NAME!!'
178
+ }.to_json
179
+ )
180
+
181
+ # fleet.ships = [ship]
182
+ fleet = Fleet.eager_load(:ships).find(1)
183
+ assert fleet.ships.loaded?
184
+ fleet.name = 'New NAME!!'
185
+ fleet.save
186
+
187
+ assert_requested req_stub
188
+ end
189
+
190
+ # Clearing the relationship =================================================
191
+
192
+ test '#update clears has_many relationship' do
193
+ webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
194
+ body: [{id: 1, name: 'Armada Uno'}].to_json
195
+ )
196
+ webmock(:get, "/ships", where: {fleet_id: 1}).to_return(
197
+ body: [{id: 1, name: 'Saucer Trio'}].to_json
198
+ )
199
+ req_stub = webmock(:patch, '/fleets/1').with(
200
+ body: {fleet: {ships_attributes: []}}.to_json
201
+ ).to_return(
202
+ body: {id: 1, name: 'Armada Uno'}.to_json
203
+ )
204
+
205
+ fleet = Fleet.find(1)
206
+ assert fleet.update(ships: [])
207
+ assert_requested req_stub
208
+ end
209
+
210
+
91
211
  # test 'relation#delete_all' do
92
212
  # webmock(:get, "/fleets", where: {id: 42}, limit: 1).to_return(body: [{id: 42, name: "Spanish Armada"}].to_json)
93
213
  # Fleet.find(42).ships.delete_all
@@ -84,7 +84,6 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
84
84
  assert_equal 'Armada Duo', fleet.name
85
85
  end
86
86
 
87
-
88
87
  test '#save attempts another request while in transaction' do
89
88
  webmock(:get, '/test_model_bs/schema').to_return(
90
89
  body: {
@@ -110,33 +109,6 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
110
109
  end
111
110
  end
112
111
 
113
- test '#save includes modified belongs_to associations' do
114
- ship = Ship.new(name: 'Definant', fleet: Fleet.new(name: 'Armada Duo'))
115
-
116
- req_stub = webmock(:post, '/ships', {include: :fleet}).with(
117
- body: {
118
- ship: {
119
- name: 'Definant', fleet_attributes: { name: 'Armada Duo' }
120
- }
121
- }.to_json
122
- ).to_return(
123
- body: {
124
- id: 2,
125
- fleet_id: 3,
126
- name: 'Definant 001',
127
- fleet: { id: 3, name: 'Armada 2' }
128
- }.to_json
129
- )
130
-
131
- assert ship.save
132
- assert_equal 2, ship.id
133
- assert_equal 3, ship.fleet_id
134
- assert_equal 3, ship.fleet.id
135
- assert_equal 'Definant 001', ship.name
136
- assert_equal 'Armada 2', ship.fleet.name
137
-
138
- assert_requested req_stub
139
- end
140
112
 
141
113
 
142
114
  test '#update clears belongs_to relationship' do
@@ -184,77 +156,4 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
184
156
  assert_requested req_stub
185
157
  end
186
158
 
187
- test '#update habtm relationships' do
188
- webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
189
- body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
190
- )
191
- webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
192
- body: [{id: 1, name: 'Captain'}].to_json
193
- )
194
- webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
195
- body: [].to_json
196
- )
197
- req_stub = webmock(:patch, '/ships/1').with(
198
- body: {ship: {sailors_attributes: [{id: 1, name: "Captain"}]}}.to_json
199
- ).to_return(
200
- body: {id: 1, name: 'Armada Uno'}.to_json
201
- )
202
-
203
- ship = Ship.find(1)
204
- assert ship.update(sailors: [Sailor.find(1)])
205
- assert_requested req_stub
206
- end
207
-
208
- test '#update clears habtm relationship' do
209
- webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
210
- body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
211
- )
212
- webmock(:get, "/sailors", where: {id: 1}, limit: 1).to_return(
213
- body: [{id: 1, name: 'Captain'}].to_json
214
- )
215
- webmock(:get, "/sailors", where: {sailors_ships: {ship_id: {eq: 1}}}).to_return(
216
- body: [{id: 1, name: 'Captain'}].to_json
217
- )
218
- req_stub = webmock(:patch, '/ships/1').with(
219
- body: {ship: {sailors_attributes: []}}.to_json
220
- ).to_return(
221
- body: {id: 1, name: 'Armada Uno'}.to_json
222
- )
223
-
224
- ship = Ship.find(1)
225
- assert ship.update(sailors: [])
226
- assert_requested req_stub
227
- end
228
-
229
- test '#update clears has_many relationship' do
230
- webmock(:get, "/fleets", where: {id: 1}, limit: 1).to_return(
231
- body: [{id: 1, name: 'Armada Uno'}].to_json
232
- )
233
- webmock(:get, "/ships", where: {fleet_id: 1}).to_return(
234
- body: [{id: 1, name: 'Saucer Trio'}].to_json
235
- )
236
- req_stub = webmock(:patch, '/fleets/1').with(
237
- body: {fleet: {ships_attributes: []}}.to_json
238
- ).to_return(
239
- body: {id: 1, name: 'Armada Uno'}.to_json
240
- )
241
-
242
- fleet = Fleet.find(1)
243
- assert fleet.update(ships: [])
244
- assert_requested req_stub
245
- end
246
-
247
- test "#destroy with habtm relationship" do
248
- webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
249
- body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
250
- )
251
- req_stub = webmock(:delete, '/ships/1').to_return(
252
- status: 204
253
- )
254
-
255
- ship = Ship.find(1)
256
- assert ship.destroy
257
- assert_requested req_stub
258
- end
259
-
260
159
  end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class ActiveRecord::LimitTest < ActiveSupport::TestCase
4
+ schema do
5
+ create_table "ships" do |t|
6
+ t.string "name", limit: 255
7
+ end
8
+ end
9
+
10
+ class Ship < ActiveRecord::Base
11
+ end
12
+
13
+ test '::limit' do
14
+ webmock(:get, "/ships", {limit: 5000}).to_return(body: [{id: 42}].to_json)
15
+ assert_equal Ship.limit(5000).map(&:id), [42]
16
+ end
17
+
18
+
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunstone
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0.3
4
+ version: 5.1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-08 00:00:00.000000000 Z
11
+ date: 2017-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -286,6 +286,7 @@ files:
286
286
  - lib/sunstone/gis.rb
287
287
  - lib/sunstone/version.rb
288
288
  - sunstone.gemspec
289
+ - test/active_record/associations/belongs_to_test.rb
289
290
  - test/active_record/associations/has_and_belongs_to_many_test.rb
290
291
  - test/active_record/associations/has_many_test.rb
291
292
  - test/active_record/eager_loading_test.rb
@@ -295,6 +296,7 @@ files:
295
296
  - test/active_record/query/count_test.rb
296
297
  - test/active_record/query/distinct_test.rb
297
298
  - test/active_record/query/find_test.rb
299
+ - test/active_record/query/limit_test.rb
298
300
  - test/active_record/query/order_test.rb
299
301
  - test/active_record/query/where_test.rb
300
302
  - test/active_record/query_test.rb
@@ -324,11 +326,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
324
326
  version: '0'
325
327
  requirements: []
326
328
  rubyforge_project:
327
- rubygems_version: 2.6.13
329
+ rubygems_version: 2.6.11
328
330
  signing_key:
329
331
  specification_version: 4
330
332
  summary: A library for interacting with REST APIs
331
333
  test_files:
334
+ - test/active_record/associations/belongs_to_test.rb
332
335
  - test/active_record/associations/has_and_belongs_to_many_test.rb
333
336
  - test/active_record/associations/has_many_test.rb
334
337
  - test/active_record/eager_loading_test.rb
@@ -338,6 +341,7 @@ test_files:
338
341
  - test/active_record/query/count_test.rb
339
342
  - test/active_record/query/distinct_test.rb
340
343
  - test/active_record/query/find_test.rb
344
+ - test/active_record/query/limit_test.rb
341
345
  - test/active_record/query/order_test.rb
342
346
  - test/active_record/query/where_test.rb
343
347
  - test/active_record/query_test.rb