sunstone 6.1.3 → 7.1.0.1
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 +4 -4
- data/ext/active_record/associations/collection_association.rb +4 -26
- data/ext/active_record/associations.rb +5 -1
- data/ext/active_record/attribute_methods.rb +21 -14
- data/ext/active_record/callbacks.rb +4 -1
- data/ext/active_record/finder_methods.rb +26 -16
- data/ext/active_record/persistence.rb +58 -21
- data/ext/active_record/relation/calculations.rb +15 -5
- data/ext/active_record/relation/query_methods.rb +1 -1
- data/ext/active_record/statement_cache.rb +0 -1
- data/ext/active_record/transactions.rb +2 -2
- data/ext/arel/nodes/select_statement.rb +3 -3
- data/lib/active_record/connection_adapters/sunstone/column.rb +11 -1
- data/lib/active_record/connection_adapters/sunstone/database_statements.rb +54 -21
- data/lib/active_record/connection_adapters/sunstone/schema_statements.rb +35 -17
- data/lib/active_record/connection_adapters/sunstone/type/binary.rb +3 -3
- data/lib/active_record/connection_adapters/sunstone_adapter.rb +109 -60
- data/lib/arel/collectors/sunstone.rb +25 -4
- data/lib/arel/visitors/sunstone.rb +81 -75
- data/lib/sunstone/connection.rb +42 -15
- data/lib/sunstone/version.rb +1 -1
- metadata +11 -11
@@ -3,28 +3,24 @@ require 'arel/visitors/visitor'
|
|
3
3
|
module Arel
|
4
4
|
module Visitors
|
5
5
|
class Sunstone < Arel::Visitors::Visitor
|
6
|
-
|
6
|
+
|
7
7
|
def compile(node, collector = Arel::Collectors::Sunstone.new)
|
8
8
|
accept(node, collector).value
|
9
9
|
end
|
10
|
-
|
11
|
-
def preparable
|
12
|
-
false
|
13
|
-
end
|
14
|
-
|
10
|
+
|
15
11
|
private
|
16
|
-
|
12
|
+
|
17
13
|
def visit_Arel_Nodes_SelectStatement o, collector
|
18
14
|
collector.table = o.cores.first.source.left.name
|
19
15
|
|
20
16
|
collector = o.cores.inject(collector) { |c,x|
|
21
17
|
visit_Arel_Nodes_SelectCore(x, c)
|
22
18
|
}
|
23
|
-
|
19
|
+
|
24
20
|
if !o.orders.empty?
|
25
21
|
collector.order = o.orders.map { |x| visit(x, collector) }
|
26
22
|
end
|
27
|
-
|
23
|
+
|
28
24
|
collector = maybe_visit o.limit, collector
|
29
25
|
collector = maybe_visit o.offset, collector
|
30
26
|
collector = maybe_visit o.eager_load, collector
|
@@ -65,41 +61,36 @@ module Arel
|
|
65
61
|
collector.request_type = Net::HTTP::Post
|
66
62
|
collector.table = o.relation.name
|
67
63
|
collector.operation = :insert
|
68
|
-
|
64
|
+
|
69
65
|
if o.values
|
70
66
|
if o.values.is_a?(Arel::Nodes::SqlLiteral) && o.values == 'DEFAULT VALUES'
|
71
67
|
collector.updates = {}
|
72
68
|
else
|
73
|
-
|
74
|
-
|
75
|
-
o.values.expr[0].each_with_index do |value, i|
|
76
|
-
k = value.value.name
|
77
|
-
if k.is_a?(Hash)
|
78
|
-
add_to_bottom_of_hash_or_array(k, value)
|
79
|
-
collector.updates.deep_merge!(k) { |key, v1, v2|
|
80
|
-
if (v1.is_a?(Array) && v2.is_a?(Array))
|
81
|
-
v2.each_with_index do |v, j|
|
82
|
-
if v1[j].nil?
|
83
|
-
v1[j] = v2[j]
|
84
|
-
else
|
85
|
-
v1[j].deep_merge!(v2[j]) unless v2[j].nil?
|
86
|
-
end
|
87
|
-
end
|
88
|
-
v1
|
89
|
-
else
|
90
|
-
v2
|
91
|
-
end
|
92
|
-
}
|
93
|
-
else
|
94
|
-
collector.updates[k] = visit(value, collector)
|
95
|
-
end
|
96
|
-
end
|
69
|
+
values = visit(o.values, collector)
|
70
|
+
collector.updates = o.columns.map(&:name).zip(values).to_h
|
97
71
|
end
|
98
72
|
end
|
99
|
-
|
73
|
+
|
100
74
|
collector
|
101
75
|
end
|
102
|
-
|
76
|
+
|
77
|
+
def visit_Arel_Nodes_ValuesList o, collector
|
78
|
+
o.rows[0].map do |v|
|
79
|
+
visit_subrelation v, collector
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def visit_subrelation v, collector
|
84
|
+
case v
|
85
|
+
when Array
|
86
|
+
v.map { |v2| visit_subrelation v2, collector }
|
87
|
+
when Hash
|
88
|
+
v.transform_values { |v2| visit_subrelation v2, collector }
|
89
|
+
else
|
90
|
+
visit(v, collector)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
103
94
|
def find_bottom(hash)
|
104
95
|
if hash.is_a?(Hash)
|
105
96
|
if hash.values.first.is_a?(Array) || hash.values.first.is_a?(Hash)
|
@@ -116,10 +107,10 @@ module Arel
|
|
116
107
|
end
|
117
108
|
end
|
118
109
|
end
|
119
|
-
|
110
|
+
|
120
111
|
def add_to_bottom_of_hash_or_array(hash, value)
|
121
112
|
hash = find_bottom(hash)
|
122
|
-
|
113
|
+
|
123
114
|
if hash.is_a?(Hash)
|
124
115
|
nkey = hash.keys.first
|
125
116
|
nvalue = hash.values.first
|
@@ -165,26 +156,26 @@ module Arel
|
|
165
156
|
#
|
166
157
|
def visit_Arel_Nodes_UpdateStatement o, collector
|
167
158
|
collector.request_type = Net::HTTP::Patch
|
168
|
-
|
159
|
+
|
169
160
|
collector.table = o.relation.name
|
170
161
|
collector.operation = :update
|
171
|
-
|
162
|
+
|
172
163
|
# collector.id = o.wheres.first.children.first.right
|
173
164
|
if !o.wheres.empty?
|
174
165
|
collector.where = o.wheres.map { |x| visit(x, collector) }.inject([]) { |c, w|
|
175
166
|
w.is_a?(Array) ? c += w : c << w
|
176
167
|
}
|
177
168
|
end
|
178
|
-
|
169
|
+
|
179
170
|
if collector.where.size != 1 && collector.where.first.size != 1 && !collector.where.first['id']
|
180
171
|
raise 'Upsupported'
|
181
172
|
end
|
182
|
-
|
173
|
+
|
183
174
|
collector.where = collector.where.first
|
184
|
-
|
175
|
+
|
185
176
|
if o.values
|
186
177
|
collector.updates = {}
|
187
|
-
|
178
|
+
|
188
179
|
o.values.map { |x| visit(x, collector) }.each do |value|
|
189
180
|
value.each do |key, v|
|
190
181
|
if key.is_a?(Hash)
|
@@ -209,7 +200,7 @@ module Arel
|
|
209
200
|
end
|
210
201
|
end
|
211
202
|
end
|
212
|
-
|
203
|
+
|
213
204
|
collector
|
214
205
|
end
|
215
206
|
#
|
@@ -444,7 +435,7 @@ module Arel
|
|
444
435
|
def visit_Arel_Nodes_Descending o, collector
|
445
436
|
{ visit(o.expr, collector) => :desc }
|
446
437
|
end
|
447
|
-
|
438
|
+
|
448
439
|
def visit_Arel_Nodes_RandomOrdering o, collector
|
449
440
|
:random
|
450
441
|
end
|
@@ -486,7 +477,7 @@ module Arel
|
|
486
477
|
#
|
487
478
|
def visit_Arel_Nodes_Count o, collector
|
488
479
|
collector.operation = :calculate
|
489
|
-
|
480
|
+
|
490
481
|
collector.columns ||= []
|
491
482
|
collector.columns << {:count => (o.expressions.first.is_a?(Arel::Attributes::Attribute) ? o.expressions.first.name : o.expressions.first) }
|
492
483
|
# collector.columns = visit o.expressions.first, collector
|
@@ -494,7 +485,7 @@ module Arel
|
|
494
485
|
|
495
486
|
def visit_Arel_Nodes_Sum o, collector
|
496
487
|
collector.operation = :calculate
|
497
|
-
|
488
|
+
|
498
489
|
collector.columns ||= []
|
499
490
|
collector.columns << {:sum => (o.expressions.first.is_a?(Arel::Attributes::Attribute) ? o.expressions.first.name : o.expressions.first) }
|
500
491
|
# collector.columns = visit o.expressions.first, collector
|
@@ -502,7 +493,7 @@ module Arel
|
|
502
493
|
|
503
494
|
def visit_Arel_Nodes_Max o, collector
|
504
495
|
collector.operation = :calculate
|
505
|
-
|
496
|
+
|
506
497
|
collector.columns ||= []
|
507
498
|
if o.expressions.first.is_a?(Arel::Attributes::Attribute)
|
508
499
|
relation = o.expressions.first.relation
|
@@ -704,11 +695,11 @@ module Arel
|
|
704
695
|
end
|
705
696
|
end
|
706
697
|
alias_method :visit_Arel_Nodes_HomogeneousIn, :visit_Arel_Nodes_In
|
707
|
-
|
698
|
+
|
708
699
|
def visit_Arel_Nodes_NotIn o, collector
|
709
700
|
key = visit(o.left, collector)
|
710
701
|
value = {not_in: visit(o.right, collector)}
|
711
|
-
|
702
|
+
|
712
703
|
if hash.is_a?(Hash)
|
713
704
|
add_to_bottom_of_hash_or_array(key, value)
|
714
705
|
key
|
@@ -716,10 +707,10 @@ module Arel
|
|
716
707
|
{key => value}
|
717
708
|
end
|
718
709
|
end
|
719
|
-
|
710
|
+
|
720
711
|
# You merge a into b if a keys do not colid with b keys
|
721
712
|
def mergeable?(hash_a, hash_b)
|
722
|
-
|
713
|
+
|
723
714
|
hash_a.each do |key, value_a|
|
724
715
|
#TODO: one day maybe just use symbols for all keys?
|
725
716
|
if hash_b.has_key?(key.to_sym) || hash_b.has_key?(key.to_s)
|
@@ -733,7 +724,7 @@ module Arel
|
|
733
724
|
end
|
734
725
|
true
|
735
726
|
end
|
736
|
-
|
727
|
+
|
737
728
|
def visit_Arel_Nodes_And o, collector
|
738
729
|
ors = []
|
739
730
|
|
@@ -748,16 +739,16 @@ module Arel
|
|
748
739
|
ors << value
|
749
740
|
end
|
750
741
|
end
|
751
|
-
|
742
|
+
|
752
743
|
result = []
|
753
744
|
ors.each_with_index do |c, i|
|
754
745
|
result << c
|
755
746
|
result << 'AND' if ors.size != i + 1
|
756
747
|
end
|
757
|
-
|
748
|
+
|
758
749
|
result.size == 1 ? result.first : result
|
759
750
|
end
|
760
|
-
|
751
|
+
|
761
752
|
def visit_Arel_Nodes_Or o, collector
|
762
753
|
[visit(o.left, collector), 'OR', visit(o.right, collector)]
|
763
754
|
end
|
@@ -765,8 +756,15 @@ module Arel
|
|
765
756
|
def visit_Arel_Nodes_Assignment o, collector
|
766
757
|
case o.left
|
767
758
|
when Arel::Nodes::UnqualifiedColumn
|
768
|
-
|
769
|
-
|
759
|
+
case o.right
|
760
|
+
when Array
|
761
|
+
{ visit(o.left.expr, collector) => o.right.map { |i| i.transform_values { |v| visit(v, collector) } } }
|
762
|
+
when Hash
|
763
|
+
{ visit(o.left.expr, collector) => o.right.transform_values { |v| visit(v, collector) } }
|
764
|
+
else
|
765
|
+
{ visit(o.left.expr, collector) => visit(o.right, collector) }
|
766
|
+
end
|
767
|
+
when Arel::Attributes::Attribute, Arel::Nodes::BindParam, ActiveModel::Attribute
|
770
768
|
{ visit(o.left, collector) => visit(o.right, collector) }
|
771
769
|
else
|
772
770
|
collector = visit o.left, collector
|
@@ -783,7 +781,7 @@ module Arel
|
|
783
781
|
okey.merge!(value)
|
784
782
|
hash
|
785
783
|
end
|
786
|
-
|
784
|
+
|
787
785
|
def add_to_bottom_of_hash(hash, value)
|
788
786
|
okey = hash
|
789
787
|
while okey.is_a?(Hash) && (okey.values.first.is_a?(Hash) || okey.values.first.is_a?(Array))
|
@@ -798,11 +796,11 @@ module Arel
|
|
798
796
|
okey[nkey] = { nvalue => value }
|
799
797
|
hash
|
800
798
|
end
|
801
|
-
|
799
|
+
|
802
800
|
def visit_Arel_Nodes_Equality o, collector
|
803
801
|
key = visit(o.left, collector)
|
804
802
|
value = (o.right.nil? ? nil : visit(o.right, collector))
|
805
|
-
|
803
|
+
|
806
804
|
if key.is_a?(Hash)
|
807
805
|
add_to_bottom_of_hash(key, {eq: value})
|
808
806
|
elsif o.left.class.name == 'Arel::Attributes::Key'
|
@@ -811,7 +809,7 @@ module Arel
|
|
811
809
|
{ key => value }
|
812
810
|
end
|
813
811
|
end
|
814
|
-
|
812
|
+
|
815
813
|
def visit_Arel_Nodes_TSMatch(o, collector)
|
816
814
|
key = visit(o.left, collector)
|
817
815
|
value = { ts_match: (o.right.nil? ? nil : visit(o.right, collector)) }
|
@@ -827,11 +825,11 @@ module Arel
|
|
827
825
|
hash
|
828
826
|
end
|
829
827
|
end
|
830
|
-
|
828
|
+
|
831
829
|
def visit_Arel_Nodes_TSVector(o, collector)
|
832
830
|
visit(o.attribute, collector)
|
833
831
|
end
|
834
|
-
|
832
|
+
|
835
833
|
def visit_Arel_Nodes_TSQuery(o, collector)
|
836
834
|
if o.language
|
837
835
|
[visit(o.expression, collector), visit(o.language, collector)]
|
@@ -839,11 +837,11 @@ module Arel
|
|
839
837
|
visit(o.expression, collector)
|
840
838
|
end
|
841
839
|
end
|
842
|
-
|
840
|
+
|
843
841
|
def visit_Arel_Nodes_HasKey o, collector
|
844
842
|
key = visit(o.left, collector)
|
845
843
|
value = {has_key: (o.right.nil? ? nil : o.right.to_s)}
|
846
|
-
|
844
|
+
|
847
845
|
if key.is_a?(Hash)
|
848
846
|
okey = key
|
849
847
|
while okey.values.first.is_a?(Hash)
|
@@ -860,7 +858,7 @@ module Arel
|
|
860
858
|
def visit_Arel_Nodes_HasKeys o, collector
|
861
859
|
key = visit(o.left, collector)
|
862
860
|
value = { has_keys: visit(o.right, collector) }
|
863
|
-
|
861
|
+
|
864
862
|
if key.is_a?(Hash)
|
865
863
|
okey = key
|
866
864
|
while okey.values.first.is_a?(Hash)
|
@@ -877,7 +875,7 @@ module Arel
|
|
877
875
|
def visit_Arel_Nodes_HasAnyKey o, collector
|
878
876
|
key = visit(o.left, collector)
|
879
877
|
value = { has_any_key: visit(o.right, collector) }
|
880
|
-
|
878
|
+
|
881
879
|
if key.is_a?(Hash)
|
882
880
|
okey = key
|
883
881
|
while okey.values.first.is_a?(Hash)
|
@@ -907,11 +905,11 @@ module Arel
|
|
907
905
|
def visit_Arel_Nodes_UnqualifiedColumn o, collector
|
908
906
|
o.name
|
909
907
|
end
|
910
|
-
|
908
|
+
|
911
909
|
def visit_Arel_Attributes_Cast(o, collector)
|
912
910
|
visit(o.relation, collector) # No casting yet
|
913
911
|
end
|
914
|
-
|
912
|
+
|
915
913
|
def visit_Arel_Attributes_Key o, collector
|
916
914
|
"#{visit(o.relation, collector)}.#{o.name}"
|
917
915
|
end
|
@@ -951,7 +949,7 @@ module Arel
|
|
951
949
|
# def visit_Arel_Attributes_EmptyRelation o, collector, top=true
|
952
950
|
# o.for_write ? "#{o.name}_attributes" : o.name
|
953
951
|
# end
|
954
|
-
|
952
|
+
|
955
953
|
def visit_Arel_Attributes_Attribute o, collector
|
956
954
|
join_name = o.relation.table_alias || o.relation.name
|
957
955
|
|
@@ -968,6 +966,15 @@ module Arel
|
|
968
966
|
alias :visit_Arel_Attributes_Time :visit_Arel_Attributes_Attribute
|
969
967
|
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attributes_Attribute
|
970
968
|
|
969
|
+
def visit_ActiveModel_Attribute(o, collector)
|
970
|
+
if o.value.is_a?(ActiveRecord::StatementCache::Substitute)
|
971
|
+
a = collector.add_bind(o)
|
972
|
+
o
|
973
|
+
else
|
974
|
+
o.value_for_database
|
975
|
+
end
|
976
|
+
end
|
977
|
+
|
971
978
|
def visit_Arel_Nodes_BindParam o, collector
|
972
979
|
a = collector.add_bind(o.value)
|
973
980
|
o.is_a?(Arel::Nodes::BindParam) ? o : a
|
@@ -1064,12 +1071,11 @@ module Arel
|
|
1064
1071
|
collector
|
1065
1072
|
end
|
1066
1073
|
end
|
1067
|
-
|
1074
|
+
|
1068
1075
|
def maybe_visit thing, collector
|
1069
1076
|
return collector unless thing
|
1070
|
-
collector << " "
|
1071
1077
|
visit thing, collector
|
1072
1078
|
end
|
1073
1079
|
end
|
1074
1080
|
end
|
1075
|
-
end
|
1081
|
+
end
|
data/lib/sunstone/connection.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
module Sunstone
|
5
5
|
class Connection
|
6
6
|
|
7
|
-
attr_reader :api_key, :host, :port, :use_ssl
|
7
|
+
attr_reader :api_key, :host, :port, :use_ssl, :prefix
|
8
8
|
|
9
9
|
# Initialize a connection a Sunstone API server.
|
10
10
|
#
|
@@ -31,7 +31,7 @@ module Sunstone
|
|
31
31
|
self.instance_variable_set(:"@#{key}", config[key])
|
32
32
|
end
|
33
33
|
|
34
|
-
@connection = Net::HTTP.new(host, port)
|
34
|
+
@connection = Net::HTTP.new(host, port || (use_ssl ? 443 : 80))
|
35
35
|
@connection.max_retries = 0
|
36
36
|
@connection.open_timeout = 5
|
37
37
|
@connection.read_timeout = 30
|
@@ -132,25 +132,52 @@ module Sunstone
|
|
132
132
|
if Thread.current[:sunstone_transaction_count] == 1 && !Thread.current[:sunstone_request_sent]
|
133
133
|
Thread.current[:sunstone_request_sent] = request
|
134
134
|
elsif Thread.current[:sunstone_request_sent]
|
135
|
-
|
136
|
-
log_mess += Thread.current[:sunstone_request_sent].path.split('?', 2)
|
137
|
-
raise ActiveRecord::StatementInvalid, <<~MSG
|
135
|
+
message = <<~MSG
|
138
136
|
Cannot send multiple request in a transaction.
|
139
|
-
|
137
|
+
|
140
138
|
Trying to send:
|
141
|
-
#{request.method} #{log_mess[0]} #{(log_mess[1] && !log_mess[1].empty?) ? MessagePack.unpack(CGI.unescape(log_mess[1])) : '' }
|
142
|
-
|
143
|
-
Already sent:
|
144
|
-
#{Thread.current[:sunstone_request_sent].method} #{log_mess[2]} #{(log_mess[3] && !log_mess[3].empty?) ? MessagePack.unpack(CGI.unescape(log_mess[3])) : '' }
|
145
139
|
MSG
|
140
|
+
|
141
|
+
path_and_query = request.path.split('?', 2)
|
142
|
+
message << " #{request.method} #{path_and_query[0]}"
|
143
|
+
if path_and_query[1]
|
144
|
+
if request['Query-Encoding'] == 'application/msgpack'
|
145
|
+
message << " " << MessagePack.unpack(CGI.unescape(path_and_query[1])).inspect
|
146
|
+
else
|
147
|
+
message << " " << CGI.unescape(path_and_query[1])
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
message << "\n\nAlready sent:\n"
|
152
|
+
path_and_query = Thread.current[:sunstone_request_sent].path.split('?', 2)
|
153
|
+
message << " #{Thread.current[:sunstone_request_sent].method} #{path_and_query[0]}"
|
154
|
+
if path_and_query[1]
|
155
|
+
if request['Query-Encoding'] == 'application/msgpack'
|
156
|
+
message << " " << MessagePack.unpack(CGI.unescape(path_and_query[1]))
|
157
|
+
else
|
158
|
+
message << " " << CGI.unescape(path_and_query[1])
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
raise ActiveRecord::StatementInvalid, message
|
146
163
|
else
|
147
164
|
log_mess = request.path.split('?', 2)
|
148
|
-
|
149
|
-
|
165
|
+
message = if request['Query-Encoding'] == 'application/msgpack'
|
166
|
+
<<~MSG
|
167
|
+
Cannot send multiple request in a transaction.
|
150
168
|
|
151
|
-
|
152
|
-
|
153
|
-
|
169
|
+
Trying to send:
|
170
|
+
#{request.method} #{log_mess[0]} #{(log_mess[1] && !log_mess[1].empty?) ? MessagePack.unpack(CGI.unescape(log_mess[1])) : '' }
|
171
|
+
MSG
|
172
|
+
else
|
173
|
+
<<~MSG
|
174
|
+
Cannot send multiple request in a transaction.
|
175
|
+
|
176
|
+
Trying to send:
|
177
|
+
#{request.method} #{log_mess[0]} #{(log_mess[1] && !log_mess[1].empty?) ? CGI.unescape(log_mess[1]) : '' }
|
178
|
+
MSG
|
179
|
+
end
|
180
|
+
raise ActiveRecord::StatementInvalid, message
|
154
181
|
end
|
155
182
|
end
|
156
183
|
|
data/lib/sunstone/version.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:
|
4
|
+
version: 7.1.0.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: 2023-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -184,14 +184,14 @@ dependencies:
|
|
184
184
|
requirements:
|
185
185
|
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 7.1.0
|
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:
|
194
|
+
version: 7.1.0
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
196
|
name: msgpack
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,42 +226,42 @@ dependencies:
|
|
226
226
|
requirements:
|
227
227
|
- - ">="
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
229
|
+
version: 7.1.0
|
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:
|
236
|
+
version: 7.1.0
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
238
|
name: arel-extensions
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
241
|
- - ">="
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version:
|
243
|
+
version: 7.0.1
|
244
244
|
type: :runtime
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version:
|
250
|
+
version: 7.0.1
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: activerecord-filter
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|
254
254
|
requirements:
|
255
255
|
- - ">="
|
256
256
|
- !ruby/object:Gem::Version
|
257
|
-
version:
|
257
|
+
version: 7.0.0
|
258
258
|
type: :runtime
|
259
259
|
prerelease: false
|
260
260
|
version_requirements: !ruby/object:Gem::Requirement
|
261
261
|
requirements:
|
262
262
|
- - ">="
|
263
263
|
- !ruby/object:Gem::Version
|
264
|
-
version:
|
264
|
+
version: 7.0.0
|
265
265
|
description: A library for interacting with REST APIs. Similar to ActiveResource
|
266
266
|
email:
|
267
267
|
- jonbracy@gmail.com
|
@@ -323,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
323
323
|
- !ruby/object:Gem::Version
|
324
324
|
version: '0'
|
325
325
|
requirements: []
|
326
|
-
rubygems_version: 3.
|
326
|
+
rubygems_version: 3.4.13
|
327
327
|
signing_key:
|
328
328
|
specification_version: 4
|
329
329
|
summary: A library for interacting with REST APIs
|