sunstone 5.2.1 → 6.0.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
  SHA256:
3
- metadata.gz: f235687b97d48caa7ecf7a231928452bbaf807b8d2e6e6508a7f9159372dc600
4
- data.tar.gz: 94eec63ac1c23762404058fe37b1558a62ec7ad564e262977e1534721949c149
3
+ metadata.gz: 5ecbeb6967817d2f58c9602526839eeee2b9aa161dc00adf1f962549874c49af
4
+ data.tar.gz: 7759fa8e537ae1dd04009dca78ae7ffad19cbb6166629e99778f2b22aa982837
5
5
  SHA512:
6
- metadata.gz: c16d5374f32074dcd7a9e96ecf7f01dc6c77848df299454a5209913f25cdb23b333f4cc6b9a93e6f58d25b6681a11f54b8124f8352427702b22301e81a98a6a7
7
- data.tar.gz: fb6512b92823f37cac2477010df776a703f12a3f13f455a6d7388c8edffe4a59192fa3aa2114b4f62e244aa4b9a771f32e01718e5c5f2a0ddf2ed382fe49390a
6
+ metadata.gz: c72e778804a92ea85dadd3f7adbae2f5171ca63c47da09b065dcb9c14202a8d78e9ecd95ad15f7b2f0bfe7384a858497a1758b056112f703cc87fb8dd91607dd
7
+ data.tar.gz: 26d94406a0f9b50ad8429c0dd5d49d3da1fd182e1b8b12d87d6e0f0604f343f0920a10b6f0597b4830e3d6856cf62e36b65382e081381f6d5e9b196e94f28c72
@@ -1,3 +1,4 @@
1
+ dist: xenial
1
2
  language: ruby
2
3
  sudo: false
3
4
 
@@ -7,17 +8,18 @@ cache:
7
8
  - /home/travis/.rvm/gems
8
9
 
9
10
  rvm:
10
- - 2.4.4
11
- - 2.5.1
11
+ - 2.6
12
12
 
13
13
  env:
14
14
  matrix:
15
- - RAILS_VERSION=v5.2.0 GEM=ar:mysql2
16
- - RAILS_VERSION=v5.2.0 GEM=ar:sqlite3
17
- - RAILS_VERSION=v5.2.0 GEM=ar:postgresql
15
+ - RAILS_VERSION=v6.0.0.rc1 GEM=activerecord:mysql2
16
+ - RAILS_VERSION=v6.0.0.rc1 GEM=activerecord:sqlite3
17
+ - RAILS_VERSION=v6.0.0.rc1 GEM=activerecord:postgresql
18
18
 
19
+ services:
20
+ - mysql
19
21
  addons:
20
- postgresql: "9.4"
22
+ postgresql: "10"
21
23
 
22
24
  before_install:
23
25
  - unset BUNDLE_GEMFILE
@@ -46,11 +46,7 @@ module ActiveRecord
46
46
  record.destroy
47
47
  elsif autosave != false
48
48
  if record.new_record? || (autosave && record.changed_for_autosave?)
49
- if record.new_record?
50
- attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values_for_create, record.attribute_names)
51
- else
52
- attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values_for_update, record.attribute_names)
53
- end
49
+ attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values, record.new_record? ? (record.attribute_names - ['id']) : record.attribute_names)
54
50
  end
55
51
  end
56
52
  end
@@ -79,11 +75,7 @@ module ActiveRecord
79
75
  record[reflection.foreign_key] = key
80
76
  end
81
77
 
82
- if record.new_record?
83
- attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values_for_create, record.attribute_names)
84
- else
85
- attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values_for_update, record.attribute_names)
86
- end
78
+ attrs["#{reflection.name}_attributes"] = record.send(:attributes_with_values, record.new_record? ? (record.attribute_names - ['id']): record.attribute_names)
87
79
  end
88
80
  end
89
81
  end
@@ -105,11 +97,7 @@ module ActiveRecord
105
97
  []
106
98
  else
107
99
  association.target.select { |r| !r.destroyed? }.map do |record|
108
- if record.new_record?
109
- record.send(:attributes_with_values_for_create, record.send(:keys_for_partial_write) + [record.class.primary_key])
110
- else
111
- record.send(:attributes_with_values_for_update, record.send(:keys_for_partial_write) + [record.class.primary_key])
112
- end
100
+ record.send(:attributes_with_values, record.send(:attribute_names_for_partial_writes) + (record.new_record? ? [] : [record.class.primary_key]))
113
101
  end
114
102
  end
115
103
 
@@ -1,6 +1,6 @@
1
1
  module Arel
2
2
  module Visitors
3
- class ToSql < Arel::Visitors::Reduce
3
+ class ToSql < Arel::Visitors::Visitor
4
4
 
5
5
  def visit_Arel_Attributes_Relation o, collector
6
6
  visit(o.relation, collector)
@@ -19,7 +19,7 @@ module ActiveRecord
19
19
  attributes.flat_map do |key, value|
20
20
  if value.is_a?(Hash) && !table.has_column?(key)
21
21
  ka = associated_predicate_builder(key).expand_from_hash(value)
22
- if self.table.instance_variable_get(:@klass).connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter)
22
+ if self.send(:table).instance_variable_get(:@klass).connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter)
23
23
  ka.each { |k|
24
24
  if k.left.is_a?(Arel::Attributes::Attribute) || k.left.is_a?(Arel::Attributes::Relation)
25
25
  k.left = Arel::Attributes::Relation.new(k.left, key)
@@ -49,16 +49,21 @@ module ActiveRecord
49
49
  queries.reduce(&:or)
50
50
  elsif table.aggregated_with?(key)
51
51
  mapping = table.reflect_on_aggregation(key).mapping
52
- queries = Array.wrap(value).map do |object|
53
- mapping.map do |field_attr, aggregate_attr|
54
- if mapping.size == 1 && !object.respond_to?(aggregate_attr)
55
- build(table.arel_attribute(field_attr), object)
56
- else
57
- build(table.arel_attribute(field_attr), object.send(aggregate_attr))
58
- end
59
- end.reduce(&:and)
52
+ values = value.nil? ? [nil] : Array.wrap(value)
53
+ if mapping.length == 1 || values.empty?
54
+ column_name, aggr_attr = mapping.first
55
+ values = values.map do |object|
56
+ object.respond_to?(aggr_attr) ? object.public_send(aggr_attr) : object
57
+ end
58
+ build(table.arel_attribute(column_name), values)
59
+ else
60
+ queries = values.map do |object|
61
+ mapping.map do |field_attr, aggregate_attr|
62
+ build(table.arel_attribute(field_attr), object.try!(aggregate_attr))
63
+ end.reduce(&:and)
64
+ end
65
+ queries.reduce(&:or)
60
66
  end
61
- queries.reduce(&:or)
62
67
  else
63
68
  build(table.arel_attribute(key), value)
64
69
  end
@@ -197,7 +202,7 @@ module ActiveRecord
197
202
  relation = except(:includes, :eager_load, :preload)
198
203
  relation.arel.eager_load = Arel::Nodes::EagerLoad.new(eager_load_values)
199
204
  else
200
- join_dependency = construct_join_dependency
205
+ join_dependency = construct_join_dependency(eager_load_values + includes_values)
201
206
  relation = except(:includes, :eager_load, :preload).joins!(join_dependency)
202
207
  end
203
208
 
@@ -2,6 +2,22 @@ module ActiveRecord
2
2
  # = Active Record \Persistence
3
3
  module Persistence
4
4
 
5
+ module ClassMethods
6
+ def rpc(name)
7
+ define_method("#{name}!") do
8
+ req = Net::HTTP::Post.new("/#{self.class.table_name}/#{CGI.escape(id.to_s)}/#{CGI.escape(name.to_s)}")
9
+ self.class.connection.instance_variable_get(:@connection).send_request(req) do |response|
10
+ JSON.parse(response.body).each do |k,v|
11
+ if self.class.column_names.include?(k)
12
+ @attributes.write_from_database(k, v)
13
+ end
14
+ end
15
+ end
16
+ true
17
+ end
18
+ end
19
+ end
20
+
5
21
  def update!(attributes)
6
22
  @no_save_transaction = true
7
23
  with_transaction_returning_status do
@@ -14,14 +30,14 @@ module ActiveRecord
14
30
 
15
31
  private
16
32
 
17
- def create_or_update(*args, &block)
33
+ def create_or_update(**, &block)
18
34
  _raise_readonly_record_error if readonly?
19
35
  return false if destroyed?
20
36
 
21
37
  @updating = new_record? ? :creating : :updating
22
38
  Thread.current[:sunstone_updating_model] = self
23
39
 
24
- result = new_record? ? _create_record(&block) : _update_record(*args, &block)
40
+ result = new_record? ? _create_record(&block) : _update_record(&block)
25
41
 
26
42
  if self.class.connection.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter) && result != 0
27
43
  row_hash = result.rows.first
@@ -64,7 +80,7 @@ module ActiveRecord
64
80
  # and returns its id.
65
81
  def _create_record(attribute_names = self.attribute_names)
66
82
  attribute_names &= self.class.column_names
67
- attributes_values = attributes_with_values_for_create(attribute_names)
83
+ attributes_values = attributes_with_values(attribute_names)
68
84
 
69
85
  new_id = self.class._insert_record(attributes_values)
70
86
 
@@ -79,14 +95,13 @@ module ActiveRecord
79
95
  end
80
96
 
81
97
  def _update_record(attribute_names = self.attribute_names)
82
- attribute_names &= self.class.column_names
83
- attributes_values = attributes_with_values_for_update(attribute_names)
98
+ attribute_values = attributes_with_values(attribute_names)
84
99
 
85
- if attributes_values.empty?
100
+ if attribute_values.empty?
86
101
  affected_rows = 0
87
102
  @_trigger_update_callback = true
88
103
  else
89
- affected_rows = self.class._update_record( attributes_values, self.class.primary_key => id_in_database )
104
+ affected_rows = self.class._update_record( attribute_values, self.class.primary_key => id_in_database )
90
105
  @_trigger_update_callback = affected_rows == 1
91
106
  end
92
107
 
@@ -94,7 +109,7 @@ module ActiveRecord
94
109
 
95
110
  affected_rows
96
111
  end
97
-
112
+
98
113
  #!!!! TODO: I am duplicated from finder_methods.....
99
114
  def construct(parent, relations, seen, model_cache)
100
115
  relations.each do |key, attributes|
@@ -13,11 +13,9 @@ module ActiveRecord
13
13
  load
14
14
  return records.pluck(*column_names.map{|n| n.sub(/^#{klass.table_name}\./, "")})
15
15
  else
16
- enforce_raw_sql_whitelist(column_names)
16
+ klass.disallow_raw_sql!(column_names)
17
17
  relation = spawn
18
- relation.select_values = column_names.map { |cn|
19
- @klass.has_attribute?(cn) || @klass.attribute_alias?(cn) ? arel_attribute(cn) : cn
20
- }
18
+ relation.select_values = column_names
21
19
  result = skip_query_cache_if_necessary { klass.connection.select_all(relation.arel, nil) }
22
20
  result.cast_values(klass.attribute_types)
23
21
  end
@@ -18,8 +18,8 @@ module ActiveRecord
18
18
  binds.map!(&:value_for_database)
19
19
  @values
20
20
  else
21
- casted_binds = binds.map(&:value_for_database)
22
21
  val = @values.dup
22
+ casted_binds = binds.map(&:value_for_database)
23
23
  @indexes.each { |i| val[i] = connection.quote(casted_binds.shift) }
24
24
  val.join
25
25
  end
@@ -41,7 +41,14 @@ module ActiveRecord
41
41
  status
42
42
  else
43
43
  self.class.transaction do
44
- add_to_transaction
44
+ if has_transactional_callbacks?
45
+ add_to_transaction
46
+ else
47
+ sync_with_transaction_state if @transaction_state&.finalized?
48
+ @transaction_state = self.class.connection.transaction_state
49
+ end
50
+ remember_transaction_record_state
51
+
45
52
  status = yield
46
53
  raise ActiveRecord::Rollback unless status
47
54
  end
@@ -1,6 +1,6 @@
1
1
  module Arel
2
2
  module Nodes
3
- class SelectStatement < Arel::Nodes::Node
3
+ class SelectStatement < Arel::Nodes::NodeExpression
4
4
 
5
5
  attr_accessor :eager_load
6
6
 
@@ -3,10 +3,10 @@ module ActiveRecord
3
3
  module Sunstone
4
4
  module Type
5
5
  class Array < ActiveRecord::Type::Value
6
- include ActiveRecord::Type::Helpers::Mutable
6
+ include ActiveModel::Type::Helpers::Mutable
7
7
 
8
8
  attr_reader :subtype
9
- delegate :type, :user_input_in_time_zone, :limit, to: :subtype
9
+ delegate :type, :user_input_in_time_zone, :limit, :precision, :scale, to: :subtype
10
10
 
11
11
  def initialize(subtype)
12
12
  @subtype = subtype
@@ -47,13 +47,14 @@ module ActiveRecord
47
47
  def map(value, &block)
48
48
  value.map(&block)
49
49
  end
50
+
51
+ def changed_in_place?(raw_old_value, new_value)
52
+ deserialize(raw_old_value) != new_value
53
+ end
50
54
 
51
- # def cast_value(string)
52
- # return string unless string.is_a?(::String)
53
- # return if string.empty?
54
- #
55
- # JSON.parse(string)
56
- # end
55
+ def force_equality?(value)
56
+ value.is_a?(::Array)
57
+ end
57
58
 
58
59
  private
59
60
 
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  module Arel
10
10
  module Visitors
11
- class Sunstone < Arel::Visitors::Reduce
11
+ class Sunstone < Arel::Visitors::Visitor
12
12
 
13
13
  def compile node, &block
14
14
  accept(node, Arel::Collectors::SQLString.new, &block).value
@@ -66,11 +66,29 @@ module Arel
66
66
 
67
67
  collector
68
68
  end
69
-
69
+
70
70
  def visit_Arel_Nodes_Overlaps o, collector
71
- { visit(o.left, collector) => {overlaps: o.left.type_cast_for_database(o.right) }}
71
+ key = visit(o.left, collector)
72
+ value = { overlaps: visit(o.right, collector) }
73
+ if key.is_a?(Hash)
74
+ add_to_bottom_of_hash_or_array(key, value)
75
+ key
76
+ else
77
+ {key => value}
78
+ end
72
79
  end
73
-
80
+
81
+ def visit_Arel_Nodes_NotOverlaps o, collector
82
+ key = visit(o.left, collector)
83
+ value = { not_overlaps: visit(o.right, collector) }
84
+ if key.is_a?(Hash)
85
+ add_to_bottom_of_hash_or_array(key, value)
86
+ key
87
+ else
88
+ {key => value}
89
+ end
90
+ end
91
+
74
92
  def visit_Arel_Nodes_InsertStatement o, collector
75
93
  collector.request_type = Net::HTTP::Post
76
94
  collector.table = o.relation.name
@@ -80,14 +98,12 @@ module Arel
80
98
  if o.values.is_a?(Arel::Nodes::SqlLiteral) && o.values == 'DEFAULT VALUES'
81
99
  collector.updates = {}
82
100
  else
83
- keys = o.values.right.map { |x| visit(x, collector) }
84
- values = o.values.left
85
101
  collector.updates = {}
86
-
87
-
88
- keys.each_with_index do |k, i|
102
+
103
+ o.values.expr[0].each_with_index do |value, i|
104
+ k = value.value.name
89
105
  if k.is_a?(Hash)
90
- add_to_bottom_of_hash_or_array(k, values[i])
106
+ add_to_bottom_of_hash_or_array(k, value)
91
107
  collector.updates.deep_merge!(k) { |key, v1, v2|
92
108
  if (v1.is_a?(Array) && v2.is_a?(Array))
93
109
  v2.each_with_index do |v, j|
@@ -103,7 +119,7 @@ module Arel
103
119
  end
104
120
  }
105
121
  else
106
- collector.updates[k] = visit(values[i], collector)
122
+ collector.updates[k] = visit(value, collector)
107
123
  end
108
124
  end
109
125
  end
@@ -867,7 +883,41 @@ module Arel
867
883
  { key => value }
868
884
  end
869
885
  end
870
-
886
+
887
+ def visit_Arel_Nodes_HasKeys o, collector
888
+ key = visit(o.left, collector)
889
+ value = { has_keys: visit(o.right, collector) }
890
+
891
+ if key.is_a?(Hash)
892
+ okey = key
893
+ while okey.values.first.is_a?(Hash)
894
+ okey = okey.values.first
895
+ end
896
+ nkey = okey.keys.first
897
+ nvalue = okey.values.first
898
+ okey[nkey] = { nvalue => value }
899
+ else
900
+ { key => value }
901
+ end
902
+ end
903
+
904
+ def visit_Arel_Nodes_HasAnyKey o, collector
905
+ key = visit(o.left, collector)
906
+ value = { has_any_key: visit(o.right, collector) }
907
+
908
+ if key.is_a?(Hash)
909
+ okey = key
910
+ while okey.values.first.is_a?(Hash)
911
+ okey = okey.values.first
912
+ end
913
+ nkey = okey.keys.first
914
+ nvalue = okey.values.first
915
+ okey[nkey] = { nvalue => value }
916
+ else
917
+ { key => value }
918
+ end
919
+ end
920
+
871
921
  def visit_Arel_Nodes_NotEqual o, collector
872
922
  {
873
923
  visit(o.left, collector) => { :not => visit(o.right, collector) }
@@ -32,6 +32,12 @@ module Sunstone
32
32
  end
33
33
 
34
34
  @connection = Net::HTTP.new(host, port)
35
+ @connection.max_retries = 0
36
+ @connection.open_timeout = 5
37
+ @connection.read_timeout = 30
38
+ @connection.write_timeout = 5
39
+ @connection.ssl_timeout = 5
40
+ @connection.keep_alive_timeout = 30
35
41
  @connection.use_ssl = use_ssl
36
42
  if use_ssl && config[:ca_cert]
37
43
  @connection.cert_store = OpenSSL::X509::Store.new
@@ -166,7 +172,6 @@ module Sunstone
166
172
  end
167
173
 
168
174
  return_value = nil
169
- retry_count = 0
170
175
  begin
171
176
  close_connection = false
172
177
  @connection.request(request) do |response|
@@ -195,9 +200,6 @@ module Sunstone
195
200
  end
196
201
  end
197
202
  @connection.finish if close_connection
198
- rescue ActiveRecord::ConnectionNotEstablished
199
- retry_count += 1
200
- retry_count == 1 ? retry : raise
201
203
  end
202
204
 
203
205
  return_value
@@ -396,7 +398,7 @@ module Sunstone
396
398
  when 301
397
399
  raise Sunstone::Exception::MovedPermanently, response.body
398
400
  when 502
399
- raise ActiveRecord::ConnectionNotEstablished, response.body
401
+ raise Sunstone::Exception::BadGateway, response.body
400
402
  when 500..599
401
403
  raise Sunstone::ServerError, response.body
402
404
  else
@@ -29,6 +29,9 @@ module Sunstone
29
29
 
30
30
  class MovedPermanently < Sunstone::Exception
31
31
  end
32
+
33
+ class BadGateway < Sunstone::Exception
34
+ end
32
35
 
33
36
  class ApiVersionUnsupported < Sunstone::Exception
34
37
  end
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '5.2.1'
2
+ VERSION = '6.0.0.4'
3
3
  end
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
13
13
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
14
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
15
  s.require_paths = ["lib"]
16
+ s.required_ruby_version = '>= 2.6'
16
17
 
17
18
  # Developoment
18
19
  s.add_development_dependency 'rake'
@@ -29,10 +30,10 @@ Gem::Specification.new do |s|
29
30
  s.add_development_dependency 'rgeo'
30
31
  s.add_development_dependency 'simplecov'
31
32
  s.add_development_dependency 'byebug'
32
- s.add_development_dependency 'activesupport', '~> 5.2.1'
33
+ s.add_development_dependency 'activesupport', '>= 6.0.0.rc1'
33
34
 
34
35
  # Runtime
35
36
  s.add_runtime_dependency 'msgpack'
36
37
  s.add_runtime_dependency 'cookie_store'
37
- s.add_runtime_dependency 'activerecord', '~> 5.2.1'
38
+ s.add_runtime_dependency 'activerecord', '>= 6.0.0.rc1'
38
39
  end
@@ -42,19 +42,21 @@ class ActiveRecord::EagerLoadingTest < ActiveSupport::TestCase
42
42
  id: 1, ships: [{id: 1, fleet_id: 1}]
43
43
  }].to_json)
44
44
 
45
- fleets = Fleet.eager_load(:ships => :sailors)
45
+ fleets = Fleet.eager_load(ships: :sailors)
46
46
  assert_equal [1], fleets.map(&:id)
47
47
  assert_equal [1], fleets.first.ships.map(&:id)
48
48
  end
49
49
 
50
50
 
51
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
52
+ skip
53
+ assert_equal <<-SQL, Fleet.eager_load(ships: :sailors).limit(2).to_sql
54
+ SELECT DISTINCT "fleets"."id"
55
+ FROM "fleets"
56
+ LEFT OUTER JOIN "ships" ON "ships"."fleet_id" = "fleets"."id"
57
+ LEFT OUTER JOIN "sailors" ON "sailors"."ship_id" = "ships"."id"
58
+ LIMIT 2
59
+ SQL
58
60
  end
59
-
61
+
60
62
  end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class ActiveRecord::RPCTest < ActiveSupport::TestCase
4
+
5
+ schema do
6
+ create_table "ships", limit: 100 do |t|
7
+ t.string "name", limit: 255
8
+ end
9
+ end
10
+
11
+ class Ship < ActiveRecord::Base
12
+ rpc :self_destruct
13
+ end
14
+
15
+ test '::rpc calls custom controller function' do
16
+ webmock(:get, "/ships", { limit: 1, order: [{id: :asc}] }).to_return({
17
+ body: [{id: 3, name: 'Sivar'}].to_json
18
+ })
19
+
20
+ webmock(:post, '/ships/3/self_destruct').to_return({
21
+ body: {name: 'DESTROYED'}.to_json
22
+ })
23
+
24
+ ship = Ship.first
25
+ assert ship.self_destruct!
26
+ assert_equal 'DESTROYED', ship.name
27
+ assert ship.changes.empty?
28
+ end
29
+
30
+ 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.2.1
4
+ version: 6.0.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: 2018-10-08 00:00:00.000000000 Z
11
+ date: 2019-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -182,16 +182,16 @@ dependencies:
182
182
  name: activesupport
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - "~>"
185
+ - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: 5.2.1
187
+ version: 6.0.0.rc1
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.2.1
194
+ version: 6.0.0.rc1
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: msgpack
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -224,16 +224,16 @@ dependencies:
224
224
  name: activerecord
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - "~>"
227
+ - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 5.2.1
229
+ version: 6.0.0.rc1
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.2.1
236
+ version: 6.0.0.rc1
237
237
  description: A library for interacting with REST APIs. Similar to ActiveResource
238
238
  email:
239
239
  - jonbracy@gmail.com
@@ -299,6 +299,7 @@ files:
299
299
  - test/active_record/query/order_test.rb
300
300
  - test/active_record/query/where_test.rb
301
301
  - test/active_record/query_test.rb
302
+ - test/active_record/rpc_test.rb
302
303
  - test/schema_mock.rb
303
304
  - test/sunstone/connection/configuration_test.rb
304
305
  - test/sunstone/connection/cookie_store_test.rb
@@ -317,15 +318,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
317
318
  requirements:
318
319
  - - ">="
319
320
  - !ruby/object:Gem::Version
320
- version: '0'
321
+ version: '2.6'
321
322
  required_rubygems_version: !ruby/object:Gem::Requirement
322
323
  requirements:
323
324
  - - ">="
324
325
  - !ruby/object:Gem::Version
325
326
  version: '0'
326
327
  requirements: []
327
- rubyforge_project:
328
- rubygems_version: 2.7.4
328
+ rubygems_version: 3.0.3
329
329
  signing_key:
330
330
  specification_version: 4
331
331
  summary: A library for interacting with REST APIs
@@ -344,6 +344,7 @@ test_files:
344
344
  - test/active_record/query/order_test.rb
345
345
  - test/active_record/query/where_test.rb
346
346
  - test/active_record/query_test.rb
347
+ - test/active_record/rpc_test.rb
347
348
  - test/schema_mock.rb
348
349
  - test/sunstone/connection/configuration_test.rb
349
350
  - test/sunstone/connection/cookie_store_test.rb