sunstone 6.0.0.5 → 6.0.0.8

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: 87a052085f5f1445d0e6cdea630054ba3a17aa742b679c539a87f03af8f018ee
4
- data.tar.gz: 50007447eb6c02ce55c90aebd7973190913f43183151a783eb9e3914c95e7ffc
3
+ metadata.gz: 6c4334de568780ae0f1bfff51878a34df6efc921931b3b8369d4c3dbf0212fc3
4
+ data.tar.gz: 16ffa50224484c100d4161a77cb9618ac206ab56b9c11dbf5f78e5d4863b693b
5
5
  SHA512:
6
- metadata.gz: aef51f99ea18ba631bdfe4dcfd95ac2133ad3e721ef97251ba53151fe7f9c3076fb942580cdf147f796fa9c6d75f59efabd1bfb0964f550c8fd484de5f267a4b
7
- data.tar.gz: 41786cdf195c547c7ec704c7dcd5e92c65e1441732e32da3adf3f8f13398baece163f583a7f953b3ea5ab7d411519643acb0b8acc27ec2d6aabad197f844dd3a
6
+ metadata.gz: 1ae9e8e867434bdaa2df09eda49c69d80394b1a3f662a2d1fe7e01ea506379e03ad1092782ce87d9059ad64bc84cee590b7c5e0bd4000245c15a0a143279d1c1
7
+ data.tar.gz: ca3fc4d00c10174a3ec7d6255e04f957e69ecaa9f0d3e6d2c7019774b42922980cafa574f90afeace08f6b35cbd7b79e9e7b22cc64e6a5ea964ab2bd77bb0e61
@@ -12,9 +12,9 @@ rvm:
12
12
 
13
13
  env:
14
14
  matrix:
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
15
+ - RAILS_VERSION=v6.0.0 GEM=activerecord:mysql2
16
+ - RAILS_VERSION=v6.0.0 GEM=activerecord:sqlite3
17
+ - RAILS_VERSION=v6.0.0 GEM=activerecord:postgresql
18
18
 
19
19
  services:
20
20
  - mysql
@@ -1,15 +1,3 @@
1
- module Arel
2
- module Visitors
3
- class ToSql < Arel::Visitors::Visitor
4
-
5
- def visit_Arel_Attributes_Relation o, collector
6
- visit(o.relation, collector)
7
- end
8
-
9
- end
10
- end
11
- end
12
-
13
1
  module ActiveRecord
14
2
  class PredicateBuilder # :nodoc:
15
3
 
@@ -202,7 +190,9 @@ module ActiveRecord
202
190
  relation = except(:includes, :eager_load, :preload)
203
191
  relation.arel.eager_load = Arel::Nodes::EagerLoad.new(eager_load_values)
204
192
  else
205
- join_dependency = construct_join_dependency(eager_load_values + includes_values)
193
+ join_dependency = construct_join_dependency(
194
+ eager_load_values + includes_values, Arel::Nodes::OuterJoin
195
+ )
206
196
  relation = except(:includes, :eager_load, :preload).joins!(join_dependency)
207
197
  end
208
198
 
@@ -5,10 +5,9 @@ module ActiveRecord
5
5
  def initialize(values, sunstone=false)
6
6
  @values = values
7
7
  @indexes = if sunstone
8
-
9
8
  else
10
- values.each_with_index.find_all { |thing,i|
11
- Arel::Nodes::BindParam === thing
9
+ values.each_with_index.find_all { |thing, i|
10
+ Substitute === thing
12
11
  }.map(&:last)
13
12
  end
14
13
  end
@@ -47,15 +47,15 @@ module ActiveRecord
47
47
  # can be used to query the database repeatedly.
48
48
  def cacheable_query(klass, arel) # :nodoc:
49
49
  if prepared_statements
50
- sql, binds = visitor.accept(arel.ast, collector).value
50
+ sql, binds = visitor.compile(arel.ast, collector)
51
51
  query = klass.query(sql)
52
52
  elsif self.is_a?(ActiveRecord::ConnectionAdapters::SunstoneAPIAdapter)
53
53
  collector = SunstonePartialQueryCollector.new(self.collector)
54
- parts, binds = visitor.accept(arel.ast, collector).value
54
+ parts, binds = visitor.compile(arel.ast, collector)
55
55
  query = StatementCache::PartialQuery.new(parts, true)
56
56
  else
57
- collector = PartialQueryCollector.new
58
- parts, binds = visitor.accept(arel.ast, collector).value
57
+ collector = klass.partial_query_collector
58
+ parts, binds = visitor.compile(arel.ast, collector)
59
59
  query = klass.partial_query(parts)
60
60
  end
61
61
  [query, binds]
@@ -142,7 +142,7 @@ module ActiveRecord
142
142
 
143
143
  if sars[0].instance_variable_defined?(:@sunstone_calculation) && sars[0].instance_variable_get(:@sunstone_calculation)
144
144
  # this is a count, min, max.... yea i know..
145
- ActiveRecord::Result.new(['all'], [result], {:all => type_map.lookup('integer')})
145
+ ActiveRecord::Result.new(['all'], [result], {:all => type_map.lookup('integer', {})})
146
146
  elsif result.is_a?(Array)
147
147
  ActiveRecord::Result.new(result[0] ? result[0].keys : [], result.map{|r| r.values})
148
148
  else
@@ -31,7 +31,11 @@ module ActiveRecord
31
31
 
32
32
  version = Gem::Version.create(response['StandardAPI-Version'] || '5.0.0.4')
33
33
 
34
- @definitions[table_name] = if (version >= Gem::Version.create('5.0.0.5'))
34
+ @definitions[table_name] = if (version >= Gem::Version.create('6.0.0.29'))
35
+ schema = JSON.parse(response.body)
36
+ schema['columns'] = schema.delete('attributes')
37
+ schema
38
+ elsif (version >= Gem::Version.create('5.0.0.5'))
35
39
  JSON.parse(response.body)
36
40
  else
37
41
  { 'columns' => JSON.parse(response.body), 'limit' => nil }
@@ -58,28 +62,32 @@ module ActiveRecord
58
62
  def tables
59
63
  JSON.parse(@connection.get('/tables').body)
60
64
  end
61
-
65
+
62
66
  def views
63
67
  []
64
68
  end
65
-
69
+
66
70
  def new_column(name, options)
67
71
  sql_type_metadata = fetch_type_metadata(options)
68
72
  SunstoneColumn.new(name, sql_type_metadata, options)
69
73
  end
70
-
74
+
75
+ def lookup_cast_type(options)
76
+ type_map.lookup(options['type'], options.symbolize_keys)
77
+ end
78
+
71
79
  def fetch_type_metadata(options)
72
- cast_type = lookup_cast_type(options['type'])
80
+ cast_type = lookup_cast_type(options)
73
81
  simple_type = SqlTypeMetadata.new(
74
82
  sql_type: options['type'],
75
83
  type: cast_type.type,
76
84
  limit: cast_type.limit,
77
85
  precision: cast_type.precision,
78
- scale: cast_type.scale,
86
+ scale: cast_type.scale
79
87
  )
80
88
  SunstoneSQLTypeMetadata.new(simple_type, options)
81
89
  end
82
-
90
+
83
91
  def column_name_for_operation(operation, node) # :nodoc:
84
92
  visitor.accept(node, collector).first[operation.to_sym]
85
93
  end
@@ -0,0 +1,34 @@
1
+ require 'base64'
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module Sunstone
6
+ module Type
7
+ class Binary < ActiveRecord::Type::Binary
8
+
9
+ # Converts a value from database input to the appropriate ruby type. The
10
+ # return value of this method will be returned from
11
+ # ActiveRecord::AttributeMethods::Read#read_attribute. The default
12
+ # implementation just calls Value#cast.
13
+ #
14
+ # +value+ The raw input, as provided from the database.
15
+ def deserialize(value)
16
+ value.nil? ? nil : Base64.strict_decode64(value)
17
+ end
18
+
19
+ # Casts a value from the ruby type to a type that the database knows how
20
+ # to understand. The returned value from this method should be a
21
+ # +String+, +Numeric+, +Date+, +Time+, +Symbol+, +true+, +false+, or
22
+ # +nil+.
23
+ def serialize(value)
24
+ if limit && value.bytesize > limit
25
+ raise ActiveModel::RangeError, "value is out of range for #{self.class} with limit #{limit} bytes"
26
+ end
27
+ Base64.strict_encode64(value)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,6 +1,7 @@
1
1
  require 'active_record/connection_adapters/abstract_adapter'
2
2
 
3
- #require 'active_record/connection_adapters/statement_pool'
3
+ require 'arel/nodes/relation'
4
+ require 'arel/visitors/to_sql_extensions'
4
5
 
5
6
  require 'active_record/connection_adapters/sunstone/database_statements'
6
7
  require 'active_record/connection_adapters/sunstone/schema_statements'
@@ -9,6 +10,7 @@ require 'active_record/connection_adapters/sunstone/column'
9
10
 
10
11
  require 'active_record/connection_adapters/sunstone/type/date_time'
11
12
  require 'active_record/connection_adapters/sunstone/type/array'
13
+ require 'active_record/connection_adapters/sunstone/type/binary'
12
14
  require 'active_record/connection_adapters/sunstone/type/uuid'
13
15
  require 'active_record/connection_adapters/sunstone/type/json'
14
16
 
@@ -30,7 +32,7 @@ module ActiveRecord
30
32
  conn_params[:port] ||= uri.port
31
33
  conn_params[:use_ssl] ||= (uri.scheme == 'https')
32
34
  end
33
-
35
+
34
36
  # Forward only valid config params to Sunstone::Connection
35
37
  conn_params.slice!(*VALID_SUNSTONE_CONN_PARAMS)
36
38
 
@@ -78,9 +80,9 @@ module ActiveRecord
78
80
 
79
81
  # Initializes and connects a SunstoneAPI adapter.
80
82
  def initialize(connection, logger, connection_parameters, config)
81
- super(connection, logger, config)
83
+ super(connection, logger, config.reverse_merge(prepared_statements: false))
82
84
 
83
- @prepared_statements = false
85
+ @prepared_statement_status = Concurrent::ThreadLocalVar.new(false)
84
86
  @connection_parameters = connection_parameters
85
87
 
86
88
  # @type_map = Type::HashLookupTypeMap.new
@@ -95,12 +97,12 @@ module ActiveRecord
95
97
  super
96
98
  @connection.reconnect!
97
99
  end
98
-
100
+
99
101
  def disconnect!
100
102
  super
101
103
  @connection.disconnect!
102
104
  end
103
-
105
+
104
106
  # Executes the delete statement and returns the number of rows affected.
105
107
  def delete(arel, name = nil, binds = [])
106
108
  r = exec_delete(arel, name, binds)
@@ -122,27 +124,28 @@ module ActiveRecord
122
124
  def update_table_definition(table_name, base) #:nodoc:
123
125
  SunstoneAPI::Table.new(table_name, base)
124
126
  end
125
-
127
+
126
128
  def arel_visitor
127
129
  Arel::Visitors::Sunstone.new
128
130
  end
129
-
131
+
130
132
  def collector
131
133
  Arel::Collectors::Sunstone.new
132
134
  end
133
-
135
+
134
136
  def server_config
135
137
  JSON.parse(@connection.get("/configuration").body)
136
138
  end
137
-
139
+
138
140
  def lookup_cast_type_from_column(column) # :nodoc:
139
- if column.array
140
- Sunstone::Type::Array.new(type_map.lookup(column.sql_type))
141
- else
142
- type_map.lookup(column.sql_type)
143
- end
141
+ cast_type = type_map.lookup(column.sql_type, {
142
+ limit: column.limit,
143
+ precision: column.precision,
144
+ scale: column.scale
145
+ })
146
+ column.array ? Sunstone::Type::Array.new(cast_type) : cast_type
144
147
  end
145
-
148
+
146
149
  def transaction(requires_new: nil, isolation: nil, joinable: true)
147
150
  Thread.current[:sunstone_transaction_count] ||= 0
148
151
  Thread.current[:sunstone_request_sent] = nil if Thread.current[:sunstone_transaction_count] == 0
@@ -159,7 +162,7 @@ module ActiveRecord
159
162
  rescue ActiveRecord::Rollback
160
163
  # rollbacks are silently swallowed
161
164
  end
162
-
165
+
163
166
  def supports_json?
164
167
  true
165
168
  end
@@ -176,24 +179,34 @@ module ActiveRecord
176
179
  exec_insert(arel, name, binds, pk, sequence_name)
177
180
  end
178
181
  alias create insert
179
-
182
+
180
183
  # Should be the defuat insert, but rails escapes if for SQL so we'll just
181
184
  # catch the string "DEFATUL VALUES" in the visitor
182
185
  # def empty_insert_statement_value
183
186
  # {}
184
187
  # end
185
-
188
+
186
189
  private
187
190
 
188
191
  def initialize_type_map(m) # :nodoc:
189
192
  m.register_type 'boolean', Type::Boolean.new
190
- m.register_type 'string', Type::String.new
191
- m.register_type 'integer', Type::Integer.new
192
- m.register_type 'decimal', Type::Decimal.new
193
+ m.register_type 'string' do |_, options|
194
+ Type::String.new(**options.slice(:limit))
195
+ end
196
+ m.register_type 'integer' do |_, options|
197
+ Type::Integer.new(**options.slice(:limit))
198
+ end
199
+ m.register_type 'decimal' do |_, options|
200
+ Type::Decimal.new(**options.slice(:precision, :scale))
201
+ end
202
+ m.register_type 'binary' do |_, options|
203
+ Sunstone::Type::Binary.new(**options.slice(:limit))
204
+ end
205
+
193
206
  m.register_type 'datetime', Sunstone::Type::DateTime.new
194
207
  m.register_type 'json', Sunstone::Type::Json.new
195
208
  m.register_type 'uuid', Sunstone::Type::Uuid.new
196
-
209
+
197
210
  if defined?(Sunstone::Type::EWKB)
198
211
  m.register_type 'ewkb', Sunstone::Type::EWKB.new
199
212
  end
@@ -202,7 +215,7 @@ module ActiveRecord
202
215
  def create_table_definition(name, temporary, options, as = nil) # :nodoc:
203
216
  SunstoneAPI::TableDefinition.new native_database_types, name, temporary, options, as
204
217
  end
205
-
218
+
206
219
  ActiveRecord::Type.add_modifier({ array: true }, Sunstone::Type::Array, adapter: :sunstone)
207
220
  # ActiveRecord::Type.add_modifier({ range: true }, OID::Range, adapter: :postgresql)
208
221
  end
@@ -10,10 +10,10 @@ module Arel
10
10
  module Visitors
11
11
  class Sunstone < Arel::Visitors::Visitor
12
12
 
13
- def compile node, &block
14
- accept(node, Arel::Collectors::SQLString.new, &block).value
13
+ def compile(node, collector = Arel::Collectors::Sunstone.new)
14
+ accept(node, collector).value
15
15
  end
16
-
16
+
17
17
  def preparable
18
18
  false
19
19
  end
@@ -925,9 +925,12 @@ module Arel
925
925
  value = if o.relation.is_a?(Arel::Attributes::Relation)
926
926
  { o.name => visit_Arel_Attributes_Relation(o.relation, collector, false) }
927
927
  else
928
- visit(o.relation, collector)
928
+ if o.relation.is_a?(Arel::Attributes::Attribute)
929
+ { o.name => o.relation.name }
930
+ else
931
+ visit(o.relation, collector)
932
+ end
929
933
  end
930
- # value = value.to_s.split('.').last if !value.is_a?(Hash)
931
934
 
932
935
  if o.collection
933
936
  ary = []
@@ -35,7 +35,6 @@ require File.expand_path(File.join(__FILE__, '../../ext/active_support/core_ext/
35
35
 
36
36
  require File.expand_path(File.join(__FILE__, '../../ext/arel/select_manager'))
37
37
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/eager_load'))
38
- require File.expand_path(File.join(__FILE__, '../../ext/arel/attributes/relation'))
39
38
  require File.expand_path(File.join(__FILE__, '../../ext/arel/attributes/empty_relation'))
40
39
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/select_statement'))
41
40
  require File.expand_path(File.join(__FILE__, '../../ext/active_record/finder_methods'))
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '6.0.0.5'
2
+ VERSION = '6.0.0.8'
3
3
  end
@@ -30,10 +30,11 @@ Gem::Specification.new do |s|
30
30
  s.add_development_dependency 'rgeo'
31
31
  s.add_development_dependency 'simplecov'
32
32
  s.add_development_dependency 'byebug'
33
- s.add_development_dependency 'activesupport', '>= 6.0.0.rc1'
33
+ s.add_development_dependency 'activesupport', '>= 6.0.0'
34
34
 
35
35
  # Runtime
36
36
  s.add_runtime_dependency 'msgpack'
37
37
  s.add_runtime_dependency 'cookie_store'
38
- s.add_runtime_dependency 'activerecord', '>= 6.0.0.rc1'
38
+ s.add_runtime_dependency 'activerecord', '>= 6.0.0'
39
+ s.add_runtime_dependency 'arel-extensions', '>= 6.0.0.5'
39
40
  end
@@ -11,7 +11,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
11
11
  create_table "fleets" do |t|
12
12
  t.string "name", limit: 255
13
13
  end
14
-
14
+
15
15
  create_table "sailors" do |t|
16
16
  t.string "name", limit: 255
17
17
  end
@@ -22,7 +22,7 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
22
22
  end
23
23
 
24
24
  end
25
-
25
+
26
26
  class Fleet < ActiveRecord::Base
27
27
  has_many :ships
28
28
  end
@@ -36,16 +36,19 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
36
36
  class Sailor < ActiveRecord::Base
37
37
  has_and_belongs_to_many :ships
38
38
  end
39
-
39
+
40
40
  class TestModelA < ActiveRecord::Base
41
41
  end
42
-
42
+
43
43
  class TestModelB < ActiveRecord::Base
44
44
  before_save do
45
45
  TestModelA.create
46
46
  end
47
47
  end
48
48
 
49
+ class TestModelC < ActiveRecord::Base
50
+ end
51
+
49
52
  test '#create with errors' do
50
53
  req_stub = webmock(:post, "/fleets").with(
51
54
  body: { fleet: {} }.to_json
@@ -85,6 +88,15 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
85
88
  end
86
89
 
87
90
  test '#save attempts another request while in transaction' do
91
+ webmock(:get, '/test_model_cs/schema').to_return(
92
+ body: {
93
+ attributes: {
94
+ id: {type: 'integer', primary_key: true, null: false, array: false},
95
+ name: {type: 'string', primary_key: false, null: true, array: false}
96
+ }
97
+ }.to_json,
98
+ headers: { 'StandardAPI-Version' => '6.0.0.29' }
99
+ )
88
100
  webmock(:get, '/test_model_bs/schema').to_return(
89
101
  body: {
90
102
  columns: {
@@ -156,4 +168,4 @@ class ActiveRecord::PersistanceTest < ActiveSupport::TestCase
156
168
  assert_requested req_stub
157
169
  end
158
170
 
159
- end
171
+ end
@@ -1,23 +1,23 @@
1
1
  class ActiveSupport::TestCase
2
2
  class Schema
3
-
3
+
4
4
  class Table
5
-
5
+
6
6
  class Column
7
-
7
+
8
8
  def initialize(name, type, options={})
9
9
  @name = name
10
10
  @type = type
11
11
  @options = options
12
12
  end
13
-
13
+
14
14
  def as_json
15
15
  {type: @type, primary_key: false, null: true, array: false}.merge(@options)
16
16
  end
17
17
  end
18
-
18
+
19
19
  attr_accessor :name, :options, :columns
20
-
20
+
21
21
  def initialize(name, options={}, &block)
22
22
  @name = name
23
23
  @options = options
@@ -30,7 +30,7 @@ class ActiveSupport::TestCase
30
30
 
31
31
  block.call(self)
32
32
  end
33
-
33
+
34
34
  def string(name, options={})
35
35
  @columns[name] = Column.new(name, :string, options)
36
36
  end
@@ -38,28 +38,28 @@ class ActiveSupport::TestCase
38
38
  def datetime(name, options={})
39
39
  @columns[name] = Column.new(name, :datetime, options)
40
40
  end
41
-
41
+
42
42
  def integer(name, options={})
43
43
  @columns[name] = Column.new(name, :integer, options)
44
44
  end
45
-
45
+
46
46
  def to_json
47
47
  json = @options.slice(:limit)
48
- json[:columns] = {}
48
+ json[:attributes] = {}
49
49
  @columns.each do |name, column|
50
- json[:columns][name] = column.as_json
50
+ json[:attributes][name] = column.as_json
51
51
  end
52
52
  json.to_json
53
53
  end
54
-
54
+
55
55
  end
56
-
56
+
57
57
  attr_accessor :tables
58
-
58
+
59
59
  def initialize
60
60
  @tables = {}
61
61
  end
62
-
62
+
63
63
  def self.define(&block)
64
64
  i = new
65
65
  i.define(&block)
@@ -69,21 +69,21 @@ class ActiveSupport::TestCase
69
69
  def define(&block)
70
70
  instance_eval(&block)
71
71
  end
72
-
72
+
73
73
  def create_table(name, options={}, &block)
74
74
  @tables[name] = Table.new(name, options, &block)
75
75
  end
76
-
76
+
77
77
  end
78
-
78
+
79
79
  def self.schema(&block)
80
80
  self.class_variable_set(:@@schema, Schema.define(&block))
81
81
  end
82
-
82
+
83
83
  set_callback(:setup, :before) do
84
84
  if !instance_variable_defined?(:@suite_setup_run) && self.class.class_variable_defined?(:@@schema)
85
85
  ActiveRecord::Base.establish_connection(adapter: 'sunstone', url: 'http://example.com')
86
-
86
+
87
87
  req_stub = stub_request(:get, /^http:\/\/example.com/).with do |req|
88
88
  case req.uri.path
89
89
  when '/tables'
@@ -94,24 +94,24 @@ class ActiveSupport::TestCase
94
94
  false
95
95
  end
96
96
  end
97
-
97
+
98
98
  req_stub.to_return do |req|
99
99
  case req.uri.path
100
100
  when '/tables'
101
101
  {
102
102
  body: self.class.class_variable_get(:@@schema).tables.keys.to_json,
103
- headers: { 'StandardAPI-Version' => '5.0.0.5' }
103
+ headers: { 'StandardAPI-Version' => '6.0.0.29' }
104
104
  }
105
105
  when /^\/(\w+)\/schema$/i
106
106
  {
107
107
  body: self.class.class_variable_get(:@@schema).tables[$1].to_json,
108
- headers: { 'StandardAPI-Version' => '5.0.0.5' }
108
+ headers: { 'StandardAPI-Version' => '6.0.0.29' }
109
109
  }
110
110
  end
111
111
  end
112
-
112
+
113
113
  end
114
114
  @suite_setup_run = true
115
115
  end
116
-
117
- end
116
+
117
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class Sunstone::Connection::ColumnDefinitionTest < ActiveSupport::TestCase
4
+
5
+ schema do
6
+ create_table "ships", limit: 100 do |t|
7
+ t.string "name", limit: 255
8
+ t.integer "guns", limit: 8
9
+ t.integer "sailor_count"
10
+ end
11
+ end
12
+
13
+ class Ship < ActiveRecord::Base
14
+ end
15
+
16
+ test "default limit on column" do
17
+ assert_nil Ship.columns_hash['sailor_count'].limit
18
+ end
19
+
20
+ test "custom limit on column" do
21
+ assert_equal 8, Ship.columns_hash['guns'].limit
22
+ end
23
+
24
+ test "custom limit on string column" do
25
+ assert_equal 255, Ship.columns_hash['name'].limit
26
+ end
27
+
28
+ end
29
+
30
+
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: 6.0.0.5
4
+ version: 6.0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-26 00:00:00.000000000 Z
11
+ date: 2019-12-12 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: 6.0.0.rc1
187
+ version: 6.0.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: 6.0.0.rc1
194
+ version: 6.0.0
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: msgpack
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,28 @@ dependencies:
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 6.0.0.rc1
229
+ version: 6.0.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: 6.0.0.rc1
236
+ version: 6.0.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: arel-extensions
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: 6.0.0.5
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 6.0.0.5
237
251
  description: A library for interacting with REST APIs. Similar to ActiveResource
238
252
  email:
239
253
  - jonbracy@gmail.com
@@ -262,7 +276,6 @@ files:
262
276
  - ext/active_record/transactions.rb
263
277
  - ext/active_support/core_ext/object/to_query.rb
264
278
  - ext/arel/attributes/empty_relation.rb
265
- - ext/arel/attributes/relation.rb
266
279
  - ext/arel/nodes/eager_load.rb
267
280
  - ext/arel/nodes/select_statement.rb
268
281
  - ext/arel/select_manager.rb
@@ -271,6 +284,7 @@ files:
271
284
  - lib/active_record/connection_adapters/sunstone/schema_dumper.rb
272
285
  - lib/active_record/connection_adapters/sunstone/schema_statements.rb
273
286
  - lib/active_record/connection_adapters/sunstone/type/array.rb
287
+ - lib/active_record/connection_adapters/sunstone/type/binary.rb
274
288
  - lib/active_record/connection_adapters/sunstone/type/date_time.rb
275
289
  - lib/active_record/connection_adapters/sunstone/type/ewkb.rb
276
290
  - lib/active_record/connection_adapters/sunstone/type/json.rb
@@ -301,6 +315,7 @@ files:
301
315
  - test/active_record/query_test.rb
302
316
  - test/active_record/rpc_test.rb
303
317
  - test/schema_mock.rb
318
+ - test/sunstone/connection/column_definition_test.rb
304
319
  - test/sunstone/connection/configuration_test.rb
305
320
  - test/sunstone/connection/cookie_store_test.rb
306
321
  - test/sunstone/connection/request_helper_test.rb
@@ -346,6 +361,7 @@ test_files:
346
361
  - test/active_record/query_test.rb
347
362
  - test/active_record/rpc_test.rb
348
363
  - test/schema_mock.rb
364
+ - test/sunstone/connection/column_definition_test.rb
349
365
  - test/sunstone/connection/configuration_test.rb
350
366
  - test/sunstone/connection/cookie_store_test.rb
351
367
  - test/sunstone/connection/request_helper_test.rb
@@ -1,31 +0,0 @@
1
- module Arel
2
- module Attributes
3
- class Relation < Attribute
4
-
5
- attr_accessor :collection, :for_write
6
-
7
- def initialize(relation, name, collection = false, for_write=false)
8
- self[:relation] = relation
9
- self[:name] = name
10
- @collection = collection
11
- @for_write = for_write
12
- end
13
-
14
- def able_to_type_cast?
15
- false
16
- end
17
-
18
- def table_name
19
- nil
20
- end
21
-
22
- def eql? other
23
- self.class == other.class &&
24
- self.relation == other.relation &&
25
- self.name == other.name &&
26
- self.collection == other.collection
27
- end
28
-
29
- end
30
- end
31
- end