sunstone 5.1.0.4 → 5.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +5 -13
- data/ext/active_record/associations.rb +2 -7
- data/ext/active_record/associations/collection_association.rb +25 -18
- data/ext/active_record/attribute_methods.rb +19 -35
- data/ext/active_record/finder_methods.rb +138 -90
- data/ext/active_record/persistence.rb +16 -11
- data/ext/active_record/relation.rb +7 -47
- data/ext/active_record/relation/calculations.rb +5 -3
- data/ext/active_record/relation/query_methods.rb +9 -0
- data/ext/active_record/statement_cache.rb +4 -6
- data/ext/active_record/transactions.rb +9 -19
- data/ext/arel/nodes/select_statement.rb +26 -12
- data/lib/active_record/connection_adapters/sunstone/database_statements.rb +76 -25
- data/lib/active_record/connection_adapters/sunstone/type/json.rb +1 -1
- data/lib/active_record/connection_adapters/sunstone_adapter.rb +2 -3
- data/lib/arel/collectors/sunstone.rb +21 -19
- data/lib/arel/visitors/sunstone.rb +4 -8
- data/lib/sunstone.rb +2 -3
- data/lib/sunstone/connection.rb +2 -2
- data/lib/sunstone/exception.rb +8 -1
- data/lib/sunstone/version.rb +1 -1
- data/sunstone.gemspec +3 -3
- data/test/active_record/associations/has_many_test.rb +30 -2
- data/test/active_record/eager_loading_test.rb +10 -0
- data/test/active_record/persistance_test.rb +7 -7
- data/test/active_record/query/count_test.rb +13 -0
- data/test/active_record/query_test.rb +6 -6
- data/test/sunstone/connection/send_request_test.rb +1 -1
- data/test/test_helper.rb +1 -1
- metadata +9 -10
- data/ext/active_record/associations/association.rb +0 -16
- data/ext/active_record/batches.rb +0 -12
@@ -1,7 +1,7 @@
|
|
1
1
|
module Arel
|
2
2
|
module Collectors
|
3
3
|
class Sunstone < Arel::Collectors::Bind
|
4
|
-
|
4
|
+
|
5
5
|
MAX_URI_LENGTH = 2083
|
6
6
|
|
7
7
|
attr_accessor :request_type, :table, :where, :limit, :offset, :order, :operation, :columns, :updates, :eager_loads, :id, :distinct, :distinct_on
|
@@ -9,24 +9,23 @@ module Arel
|
|
9
9
|
# This is used to removed an bind values. It is not used in the request
|
10
10
|
attr_accessor :join_source
|
11
11
|
|
12
|
+
attr_reader :binds
|
13
|
+
|
12
14
|
def initialize
|
13
15
|
@join_source = []
|
14
|
-
|
16
|
+
@binds = []
|
15
17
|
end
|
16
|
-
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
else
|
21
|
-
v
|
22
|
-
end
|
18
|
+
|
19
|
+
def add_bind(bind)
|
20
|
+
@binds << bind.value_for_database
|
21
|
+
bind
|
23
22
|
end
|
24
23
|
|
25
24
|
def substitute_binds hash, bvs
|
26
25
|
if hash.is_a?(Array)
|
27
26
|
hash.map do |v|
|
28
27
|
if v.is_a?(Arel::Nodes::BindParam)
|
29
|
-
|
28
|
+
bvs.shift#.value_for_database
|
30
29
|
elsif v.is_a?(Hash) || v.is_a?(Array)
|
31
30
|
substitute_binds(v, bvs)
|
32
31
|
else
|
@@ -37,7 +36,7 @@ module Arel
|
|
37
36
|
newhash = {}
|
38
37
|
hash.each do |k, v|
|
39
38
|
if v.is_a?(Arel::Nodes::BindParam)
|
40
|
-
newhash[k] =
|
39
|
+
newhash[k] = bvs.shift || v.value.value_for_database
|
41
40
|
elsif v.is_a?(Hash)
|
42
41
|
newhash[k] = substitute_binds(v, bvs)
|
43
42
|
elsif v.is_a?(Array)
|
@@ -48,16 +47,12 @@ module Arel
|
|
48
47
|
end
|
49
48
|
newhash
|
50
49
|
elsif hash.is_a?(Arel::Nodes::BindParam)
|
51
|
-
|
50
|
+
bvs.shift || hash.value.value_for_database
|
52
51
|
else
|
53
|
-
|
52
|
+
bvs.shift || hash.value.value_for_database
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
57
|
-
def value
|
58
|
-
flatten_nested(where).flatten
|
59
|
-
end
|
60
|
-
|
61
56
|
def flatten_nested(obj)
|
62
57
|
if obj.is_a?(Array)
|
63
58
|
obj.map { |w| flatten_nested(w) }
|
@@ -68,6 +63,13 @@ module Arel
|
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|
66
|
+
def value
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
def sql_for(bvs, conn = nil)
|
71
|
+
compile(bvs, conn)
|
72
|
+
end
|
71
73
|
def compile bvs, conn = nil
|
72
74
|
path = "/#{table}"
|
73
75
|
headers = {}
|
@@ -110,7 +112,7 @@ module Arel
|
|
110
112
|
elsif offset
|
111
113
|
params[:offset] = offset
|
112
114
|
end
|
113
|
-
|
115
|
+
|
114
116
|
case operation
|
115
117
|
when :count
|
116
118
|
path += "/#{operation}"
|
@@ -121,7 +123,7 @@ module Arel
|
|
121
123
|
path += "/#{params[:where]['id']}"
|
122
124
|
params.delete(:where)
|
123
125
|
end
|
124
|
-
|
126
|
+
|
125
127
|
if params.size > 0 && request_type == Net::HTTP::Get
|
126
128
|
newpath = path + "?#{CGI.escape(MessagePack.pack(params))}"
|
127
129
|
if newpath.length > MAX_URI_LENGTH
|
@@ -10,10 +10,6 @@ module Arel
|
|
10
10
|
module Visitors
|
11
11
|
class Sunstone < Arel::Visitors::Reduce
|
12
12
|
|
13
|
-
def initialize
|
14
|
-
@dispatch = get_dispatch_cache
|
15
|
-
end
|
16
|
-
|
17
13
|
def compile node, &block
|
18
14
|
accept(node, Arel::Collectors::SQLString.new, &block).value
|
19
15
|
end
|
@@ -81,7 +77,6 @@ module Arel
|
|
81
77
|
collector.operation = :insert
|
82
78
|
|
83
79
|
if o.values
|
84
|
-
|
85
80
|
if o.values.is_a?(Arel::Nodes::SqlLiteral) && o.values == 'DEFAULT VALUES'
|
86
81
|
collector.updates = {}
|
87
82
|
else
|
@@ -108,7 +103,7 @@ module Arel
|
|
108
103
|
end
|
109
104
|
}
|
110
105
|
else
|
111
|
-
collector.updates[k] = values[i]
|
106
|
+
collector.updates[k] = visit(values[i], collector)
|
112
107
|
end
|
113
108
|
end
|
114
109
|
end
|
@@ -818,7 +813,7 @@ module Arel
|
|
818
813
|
def visit_Arel_Nodes_Equality o, collector
|
819
814
|
key = visit(o.left, collector)
|
820
815
|
value = (o.right.nil? ? nil : visit(o.right, collector))
|
821
|
-
|
816
|
+
|
822
817
|
if key.is_a?(Hash)
|
823
818
|
add_to_bottom_of_hash(key, {eq: value})
|
824
819
|
elsif o.left.class.name == 'Arel::Attributes::Key'
|
@@ -948,7 +943,8 @@ module Arel
|
|
948
943
|
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attributes_Attribute
|
949
944
|
|
950
945
|
def visit_Arel_Nodes_BindParam o, collector
|
951
|
-
o
|
946
|
+
a = collector.add_bind(o.value)
|
947
|
+
o.is_a?(Arel::Nodes::BindParam) ? o : a
|
952
948
|
end
|
953
949
|
|
954
950
|
def literal(o, collector)
|
data/lib/sunstone.rb
CHANGED
@@ -24,11 +24,11 @@ require File.expand_path(File.join(__FILE__, '../../ext/active_record/statement_
|
|
24
24
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/associations'))
|
25
25
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/relation'))
|
26
26
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/relation/calculations'))
|
27
|
+
require File.expand_path(File.join(__FILE__, '../../ext/active_record/relation/query_methods'))
|
27
28
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/persistence'))
|
28
29
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/callbacks'))
|
29
30
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/attribute_methods'))
|
30
31
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/transactions'))
|
31
|
-
require File.expand_path(File.join(__FILE__, '../../ext/active_record/associations/association'))
|
32
32
|
require File.expand_path(File.join(__FILE__, '../../ext/active_record/associations/collection_association'))
|
33
33
|
|
34
34
|
require File.expand_path(File.join(__FILE__, '../../ext/active_support/core_ext/object/to_query'))
|
@@ -38,5 +38,4 @@ require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/eager_load'))
|
|
38
38
|
require File.expand_path(File.join(__FILE__, '../../ext/arel/attributes/relation'))
|
39
39
|
require File.expand_path(File.join(__FILE__, '../../ext/arel/attributes/empty_relation'))
|
40
40
|
require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/select_statement'))
|
41
|
-
require File.expand_path(File.join(__FILE__, '../../ext/active_record/finder_methods'))
|
42
|
-
require File.expand_path(File.join(__FILE__, '../../ext/active_record/batches'))
|
41
|
+
require File.expand_path(File.join(__FILE__, '../../ext/active_record/finder_methods'))
|
data/lib/sunstone/connection.rb
CHANGED
@@ -397,8 +397,8 @@ module Sunstone
|
|
397
397
|
raise Sunstone::Exception::MovedPermanently, response.body
|
398
398
|
when 502
|
399
399
|
raise ActiveRecord::ConnectionNotEstablished, response.body
|
400
|
-
when
|
401
|
-
raise Sunstone::
|
400
|
+
when 500..599
|
401
|
+
raise Sunstone::ServerError, response.body
|
402
402
|
else
|
403
403
|
raise Sunstone::Exception, response.body
|
404
404
|
end
|
data/lib/sunstone/exception.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
module Sunstone
|
2
2
|
|
3
|
-
class
|
3
|
+
class ServerError < ::RuntimeError
|
4
|
+
end
|
5
|
+
|
6
|
+
# RuntimeErrors don't get translated by Rails into
|
7
|
+
# ActiveRecord::StatementInvalid which StandardError do. Would rather
|
8
|
+
# use StandardError, but it's usefull with Sunstone to know when something
|
9
|
+
# raises a Sunstone::Exception::NotFound or Forbidden
|
10
|
+
class Exception < ::RuntimeError
|
4
11
|
|
5
12
|
class UnexpectedResponse < Sunstone::Exception
|
6
13
|
end
|
data/lib/sunstone/version.rb
CHANGED
data/sunstone.gemspec
CHANGED
@@ -23,16 +23,16 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency 'minitest-reporters'
|
24
24
|
s.add_development_dependency 'mocha'
|
25
25
|
s.add_development_dependency 'faker'
|
26
|
-
s.add_development_dependency '
|
26
|
+
s.add_development_dependency 'factory_bot'
|
27
27
|
s.add_development_dependency 'webmock'
|
28
28
|
#s.add_development_dependency 'sdoc-templates-42floors'
|
29
29
|
s.add_development_dependency 'rgeo'
|
30
30
|
s.add_development_dependency 'simplecov'
|
31
31
|
s.add_development_dependency 'byebug'
|
32
|
-
s.add_development_dependency 'activesupport', '~> 5.1
|
32
|
+
s.add_development_dependency 'activesupport', '~> 5.2.1'
|
33
33
|
|
34
34
|
# Runtime
|
35
35
|
s.add_runtime_dependency 'msgpack'
|
36
36
|
s.add_runtime_dependency 'cookie_store'
|
37
|
-
s.add_runtime_dependency 'activerecord', '~> 5.1
|
37
|
+
s.add_runtime_dependency 'activerecord', '~> 5.2.1'
|
38
38
|
end
|
@@ -116,7 +116,6 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
|
|
116
116
|
}.to_json
|
117
117
|
)
|
118
118
|
|
119
|
-
# fleet.ships = [ship]
|
120
119
|
fleet = Fleet.eager_load(:ships).find(1)
|
121
120
|
assert fleet.update(ships: [Ship.new(name: 'Voyager')])
|
122
121
|
assert_equal 1, fleet.id
|
@@ -150,7 +149,6 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
|
|
150
149
|
}.to_json
|
151
150
|
)
|
152
151
|
|
153
|
-
# fleet.ships = [ship]
|
154
152
|
fleet = Fleet.eager_load(:ships).find(1)
|
155
153
|
fleet.ships.first.name = 'Voyager'
|
156
154
|
fleet.save
|
@@ -187,6 +185,36 @@ class ActiveRecord::Associations::HasManyTest < ActiveSupport::TestCase
|
|
187
185
|
assert_requested req_stub
|
188
186
|
end
|
189
187
|
|
188
|
+
test '#update persisted record doesnt include any unchanged associations' do
|
189
|
+
webmock(:get, '/fleets', where: {id: 1}, limit: 1, include: [:ships]).to_return({
|
190
|
+
body: [{
|
191
|
+
id: 1,
|
192
|
+
name: 'Armada Trio',
|
193
|
+
ships: [
|
194
|
+
{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}
|
195
|
+
]
|
196
|
+
}].to_json
|
197
|
+
})
|
198
|
+
|
199
|
+
req_stub = webmock(:patch, '/fleets/1').with(
|
200
|
+
body: { fleet: { name: 'New NAME!!' } }.to_json
|
201
|
+
).to_return(
|
202
|
+
body: {
|
203
|
+
id: 1,
|
204
|
+
name: 'New NAME!!'
|
205
|
+
}.to_json
|
206
|
+
)
|
207
|
+
|
208
|
+
# fleet.ships = [ship]
|
209
|
+
fleet = Fleet.eager_load(:ships).find(1)
|
210
|
+
assert fleet.ships.loaded?
|
211
|
+
#[{id: 2, fleet_id: 1, name: 'Definant'}, {id: 3, fleet_id: 1, name: 'Enterprise'}]
|
212
|
+
fleet.update(name: 'New NAME!!', ships: fleet.ships)
|
213
|
+
fleet.save
|
214
|
+
|
215
|
+
assert_requested req_stub
|
216
|
+
end
|
217
|
+
|
190
218
|
# Clearing the relationship =================================================
|
191
219
|
|
192
220
|
test '#update clears has_many relationship' do
|
@@ -47,4 +47,14 @@ class ActiveRecord::EagerLoadingTest < ActiveSupport::TestCase
|
|
47
47
|
assert_equal [1], fleets.first.ships.map(&:id)
|
48
48
|
end
|
49
49
|
|
50
|
+
|
51
|
+
test '#eager_loads' do
|
52
|
+
webmock(:get, "/fleets", include: [{:ships => :sailors}]).to_return(body: [{
|
53
|
+
id: 1, ships: [{id: 1, fleet_id: 1}]
|
54
|
+
}].to_json)
|
55
|
+
|
56
|
+
fleets = Fleet.eager_load(:ships, :sailors).limit(2).to_sql
|
57
|
+
assert_equal '', fleets
|
58
|
+
end
|
59
|
+
|
50
60
|
end
|
@@ -45,7 +45,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
|
|
45
45
|
TestModelA.create
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
test '#create with errors' do
|
50
50
|
req_stub = webmock(:post, "/fleets").with(
|
51
51
|
body: { fleet: {} }.to_json
|
@@ -78,7 +78,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
|
|
78
78
|
|
79
79
|
fleet = Fleet.find(1)
|
80
80
|
fleet.save
|
81
|
-
|
81
|
+
|
82
82
|
assert fleet.save
|
83
83
|
assert_equal 1, fleet.id
|
84
84
|
assert_equal 'Armada Duo', fleet.name
|
@@ -108,9 +108,9 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
|
|
108
108
|
TestModelB.create
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
112
|
-
|
113
|
-
|
111
|
+
|
112
|
+
|
113
|
+
|
114
114
|
test '#update clears belongs_to relationship' do
|
115
115
|
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
116
116
|
body: [{id: 1, fleet_id: 1, name: 'Armada Uno'}].to_json
|
@@ -125,7 +125,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
|
|
125
125
|
assert ship.update(fleet: nil)
|
126
126
|
assert_requested req_stub
|
127
127
|
end
|
128
|
-
|
128
|
+
|
129
129
|
test '#update' do
|
130
130
|
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
131
131
|
body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
|
@@ -140,7 +140,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
|
|
140
140
|
|
141
141
|
assert_requested req_stub
|
142
142
|
end
|
143
|
-
|
143
|
+
|
144
144
|
test '#update!' do
|
145
145
|
webmock(:get, "/ships", where: {id: 1}, limit: 1).to_return(
|
146
146
|
body: [{id: 1, fleet_id: nil, name: 'Armada Uno'}].to_json
|
@@ -8,7 +8,12 @@ class ActiveRecord::QueryCountTest < ActiveSupport::TestCase
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
class Fleet < ActiveRecord::Base
|
12
|
+
has_many :ships
|
13
|
+
end
|
14
|
+
|
11
15
|
class Ship < ActiveRecord::Base
|
16
|
+
belongs_to :fleet
|
12
17
|
end
|
13
18
|
|
14
19
|
test '::count' do
|
@@ -27,6 +32,14 @@ class ActiveRecord::QueryCountTest < ActiveSupport::TestCase
|
|
27
32
|
assert_equal 10, Ship.count(:id)
|
28
33
|
end
|
29
34
|
|
35
|
+
test '::count with eager_load' do
|
36
|
+
webmock(:get, "/ships/calculate", select: [{count: "id"}], limit: 100, offset: 0).to_return({
|
37
|
+
body: [10].to_json
|
38
|
+
})
|
39
|
+
|
40
|
+
assert_equal 10, Ship.eager_load(:fleet).count
|
41
|
+
end
|
42
|
+
|
30
43
|
test '::sum(:column)' do
|
31
44
|
webmock(:get, "/ships/calculate", select: [{sum: "weight"}], limit: 100, offset: 0).to_return({
|
32
45
|
body: [10].to_json
|
@@ -28,7 +28,7 @@ class ActiveRecord::QueryTest < ActiveSupport::TestCase
|
|
28
28
|
|
29
29
|
assert_nil Ship.first
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
test '::first!' do
|
33
33
|
webmock(:get, "/ships", { limit: 1, order: [{id: :asc}] }).to_return({
|
34
34
|
body: [].to_json
|
@@ -46,23 +46,23 @@ class ActiveRecord::QueryTest < ActiveSupport::TestCase
|
|
46
46
|
|
47
47
|
assert_nil Ship.last
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
test '::where on the same column multiple times with symbols and strings' do
|
51
51
|
webmock(:get, "/ships", { where: [{ id: {gt: 10} }, 'AND', {id: {gt: 11}}], limit: 100, offset: 0 }).to_return(body: [].to_json)
|
52
52
|
|
53
53
|
arel_table = Ship.arel_table
|
54
54
|
assert_equal [], Ship.where(arel_table[:id].gt(10)).where(arel_table['id'].gt(11)).to_a
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
test '::where(AND CONDITION)' do
|
58
58
|
webmock(:get, "/ships", { where: {id: 10, name: 'name'}, limit: 1, order: [{id: :asc}] }).to_return({
|
59
59
|
body: [{id: 42}].to_json
|
60
60
|
})
|
61
|
-
|
61
|
+
|
62
62
|
arel_table = Ship.arel_table
|
63
63
|
assert_equal 42, Ship.where(arel_table[:id].eq(10).and(arel_table[:name].eq('name'))).first.id
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
test '::where(OR CONDITION)' do
|
67
67
|
webmock(:get, "/ships", { where: [{id: 10}, 'OR', {name: 'name'}], limit: 1, order: [{id: :asc}] }).to_return({
|
68
68
|
body: [{id: 42}].to_json
|
@@ -90,7 +90,7 @@ class ActiveRecord::QueryTest < ActiveSupport::TestCase
|
|
90
90
|
|
91
91
|
assert_equal 42, Ship.where(name: name)[0].id
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
test '::where with JOIN' do
|
95
95
|
webmock(:get, "/ships", {where: { ownerships: {id: {eq: 1}} }, limit: 100, offset: 0 }).to_return({
|
96
96
|
body: [{id: 42}].to_json
|
@@ -89,7 +89,7 @@ class Sunstone::Connection::SendRequestTest < ActiveSupport::TestCase
|
|
89
89
|
assert_raises(Sunstone::Exception::ApiVersionUnsupported) { connection.send_request(Net::HTTP::Get.new('/422')) }
|
90
90
|
assert_raises(Sunstone::Exception) { connection.send_request(Net::HTTP::Get.new('/450')) }
|
91
91
|
assert_raises(Sunstone::Exception::ServiceUnavailable) { connection.send_request(Net::HTTP::Get.new('/503')) }
|
92
|
-
assert_raises(Sunstone::
|
92
|
+
assert_raises(Sunstone::ServerError) { connection.send_request(Net::HTTP::Get.new('/550')) }
|
93
93
|
end
|
94
94
|
|
95
95
|
test '#send_request(#<Net::HTTPRequest>, &block) returns value returned from &block' do
|
data/test/test_helper.rb
CHANGED
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
|
4
|
+
version: 5.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: factory_bot
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -184,14 +184,14 @@ dependencies:
|
|
184
184
|
requirements:
|
185
185
|
- - "~>"
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version: 5.1
|
187
|
+
version: 5.2.1
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - "~>"
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version: 5.1
|
194
|
+
version: 5.2.1
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: msgpack
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,14 +226,14 @@ dependencies:
|
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: 5.1
|
229
|
+
version: 5.2.1
|
230
230
|
type: :runtime
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: 5.1
|
236
|
+
version: 5.2.1
|
237
237
|
description: A library for interacting with REST APIs. Similar to ActiveResource
|
238
238
|
email:
|
239
239
|
- jonbracy@gmail.com
|
@@ -250,15 +250,14 @@ files:
|
|
250
250
|
- Rakefile
|
251
251
|
- TODO.md
|
252
252
|
- ext/active_record/associations.rb
|
253
|
-
- ext/active_record/associations/association.rb
|
254
253
|
- ext/active_record/associations/collection_association.rb
|
255
254
|
- ext/active_record/attribute_methods.rb
|
256
|
-
- ext/active_record/batches.rb
|
257
255
|
- ext/active_record/callbacks.rb
|
258
256
|
- ext/active_record/finder_methods.rb
|
259
257
|
- ext/active_record/persistence.rb
|
260
258
|
- ext/active_record/relation.rb
|
261
259
|
- ext/active_record/relation/calculations.rb
|
260
|
+
- ext/active_record/relation/query_methods.rb
|
262
261
|
- ext/active_record/statement_cache.rb
|
263
262
|
- ext/active_record/transactions.rb
|
264
263
|
- ext/active_support/core_ext/object/to_query.rb
|
@@ -326,7 +325,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
325
|
version: '0'
|
327
326
|
requirements: []
|
328
327
|
rubyforge_project:
|
329
|
-
rubygems_version: 2.
|
328
|
+
rubygems_version: 2.7.4
|
330
329
|
signing_key:
|
331
330
|
specification_version: 4
|
332
331
|
summary: A library for interacting with REST APIs
|