sunstone 6.0.0.5 → 6.1.3

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/ext/active_record/associations.rb +2 -2
  3. data/ext/active_record/attribute_methods.rb +2 -2
  4. data/ext/active_record/callbacks.rb +1 -1
  5. data/ext/active_record/finder_methods.rb +42 -36
  6. data/ext/active_record/persistence.rb +2 -0
  7. data/ext/active_record/relation/calculations.rb +2 -2
  8. data/ext/active_record/statement_cache.rb +9 -5
  9. data/ext/active_record/transactions.rb +8 -15
  10. data/ext/arel/attributes/empty_relation.rb +31 -31
  11. data/ext/arel/nodes/select_statement.rb +1 -1
  12. data/lib/active_record/connection_adapters/sunstone/column.rb +3 -3
  13. data/lib/active_record/connection_adapters/sunstone/database_statements.rb +5 -5
  14. data/lib/active_record/connection_adapters/sunstone/schema_statements.rb +18 -8
  15. data/lib/active_record/connection_adapters/sunstone/type/binary.rb +34 -0
  16. data/lib/active_record/connection_adapters/sunstone_adapter.rb +39 -26
  17. data/lib/arel/visitors/sunstone.rb +13 -15
  18. data/lib/sunstone.rb +16 -2
  19. data/lib/sunstone/connection.rb +1 -1
  20. data/lib/sunstone/version.rb +1 -1
  21. metadata +40 -64
  22. data/.gitignore +0 -31
  23. data/.tm_properties +0 -1
  24. data/.travis.yml +0 -49
  25. data/Gemfile +0 -4
  26. data/README.md +0 -10
  27. data/Rakefile +0 -37
  28. data/TODO.md +0 -89
  29. data/ext/arel/attributes/relation.rb +0 -31
  30. data/sunstone.gemspec +0 -39
  31. data/test/active_record/associations/belongs_to_test.rb +0 -162
  32. data/test/active_record/associations/has_and_belongs_to_many_test.rb +0 -125
  33. data/test/active_record/associations/has_many_test.rb +0 -244
  34. data/test/active_record/eager_loading_test.rb +0 -62
  35. data/test/active_record/persistance_test.rb +0 -159
  36. data/test/active_record/preload_test.rb +0 -51
  37. data/test/active_record/query/all_test.rb +0 -33
  38. data/test/active_record/query/count_test.rb +0 -51
  39. data/test/active_record/query/distinct_test.rb +0 -30
  40. data/test/active_record/query/find_test.rb +0 -37
  41. data/test/active_record/query/limit_test.rb +0 -19
  42. data/test/active_record/query/order_test.rb +0 -27
  43. data/test/active_record/query/where_test.rb +0 -79
  44. data/test/active_record/query_test.rb +0 -123
  45. data/test/active_record/rpc_test.rb +0 -30
  46. data/test/schema_mock.rb +0 -117
  47. data/test/sunstone/connection/configuration_test.rb +0 -44
  48. data/test/sunstone/connection/cookie_store_test.rb +0 -37
  49. data/test/sunstone/connection/request_helper_test.rb +0 -105
  50. data/test/sunstone/connection/send_request_test.rb +0 -164
  51. data/test/sunstone/connection_test.rb +0 -23
  52. data/test/test_helper.rb +0 -152
@@ -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 }
@@ -46,7 +50,9 @@ module ActiveRecord
46
50
  # - format_type includes the column size constraint, e.g. varchar(50)
47
51
  # - ::regclass is a function that gives the id for a table name
48
52
  def column_definitions(table_name) # :nodoc:
49
- definition(table_name)['columns']
53
+ # First check for attributes and then for the deprecated columns field
54
+ # TODO: Remove after 0.3
55
+ definition(table_name)['attributes'] || definition(table_name)['columns']
50
56
  end
51
57
 
52
58
  # Returns the limit definition of the table (the maximum limit that can
@@ -58,28 +64,32 @@ module ActiveRecord
58
64
  def tables
59
65
  JSON.parse(@connection.get('/tables').body)
60
66
  end
61
-
67
+
62
68
  def views
63
69
  []
64
70
  end
65
-
71
+
66
72
  def new_column(name, options)
67
73
  sql_type_metadata = fetch_type_metadata(options)
68
74
  SunstoneColumn.new(name, sql_type_metadata, options)
69
75
  end
70
-
76
+
77
+ def lookup_cast_type(options)
78
+ type_map.lookup(options['type'], options.symbolize_keys)
79
+ end
80
+
71
81
  def fetch_type_metadata(options)
72
- cast_type = lookup_cast_type(options['type'])
82
+ cast_type = lookup_cast_type(options)
73
83
  simple_type = SqlTypeMetadata.new(
74
84
  sql_type: options['type'],
75
85
  type: cast_type.type,
76
86
  limit: cast_type.limit,
77
87
  precision: cast_type.precision,
78
- scale: cast_type.scale,
88
+ scale: cast_type.scale
79
89
  )
80
90
  SunstoneSQLTypeMetadata.new(simple_type, options)
81
91
  end
82
-
92
+
83
93
  def column_name_for_operation(operation, node) # :nodoc:
84
94
  visitor.accept(node, collector).first[operation.to_sym]
85
95
  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,33 +179,43 @@ 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
200
213
  end
201
214
 
202
- def create_table_definition(name, temporary, options, as = nil) # :nodoc:
203
- SunstoneAPI::TableDefinition.new native_database_types, name, temporary, options, as
215
+ def create_table_definition(name, **options)
216
+ SunstoneAPI::TableDefinition.new(self, name, **options)
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
@@ -1,19 +1,13 @@
1
1
  require 'arel/visitors/visitor'
2
- class Arel::Visitors::Dot
3
- def visit_Arel_Nodes_Casted o
4
- # collector << quoted(o.val, o.attribute).to_s
5
- visit_String o.val
6
- end
7
- end
8
2
 
9
3
  module Arel
10
4
  module Visitors
11
5
  class Sunstone < Arel::Visitors::Visitor
12
6
 
13
- def compile node, &block
14
- accept(node, Arel::Collectors::SQLString.new, &block).value
7
+ def compile(node, collector = Arel::Collectors::Sunstone.new)
8
+ accept(node, collector).value
15
9
  end
16
-
10
+
17
11
  def preparable
18
12
  false
19
13
  end
@@ -233,7 +227,7 @@ module Arel
233
227
  #
234
228
  def visit_Arel_Nodes_Casted o, collector
235
229
  # collector << quoted(o.val, o.attribute).to_s
236
- o.val
230
+ o.value
237
231
  end
238
232
 
239
233
  def visit_Arel_Nodes_Quoted o, collector
@@ -709,6 +703,7 @@ module Arel
709
703
  {key => value}
710
704
  end
711
705
  end
706
+ alias_method :visit_Arel_Nodes_HomogeneousIn, :visit_Arel_Nodes_In
712
707
 
713
708
  def visit_Arel_Nodes_NotIn o, collector
714
709
  key = visit(o.left, collector)
@@ -925,9 +920,12 @@ module Arel
925
920
  value = if o.relation.is_a?(Arel::Attributes::Relation)
926
921
  { o.name => visit_Arel_Attributes_Relation(o.relation, collector, false) }
927
922
  else
928
- visit(o.relation, collector)
923
+ if o.relation.is_a?(Arel::Attributes::Attribute)
924
+ { o.name => o.relation.name }
925
+ else
926
+ visit(o.relation, collector)
927
+ end
929
928
  end
930
- # value = value.to_s.split('.').last if !value.is_a?(Hash)
931
929
 
932
930
  if o.collection
933
931
  ary = []
@@ -950,9 +948,9 @@ module Arel
950
948
  end
951
949
  end
952
950
 
953
- def visit_Arel_Attributes_EmptyRelation o, collector, top=true
954
- o.for_write ? "#{o.name}_attributes" : o.name
955
- end
951
+ # def visit_Arel_Attributes_EmptyRelation o, collector, top=true
952
+ # o.for_write ? "#{o.name}_attributes" : o.name
953
+ # end
956
954
 
957
955
  def visit_Arel_Attributes_Attribute o, collector
958
956
  join_name = o.relation.table_alias || o.relation.name
data/lib/sunstone.rb CHANGED
@@ -35,7 +35,21 @@ 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
- require File.expand_path(File.join(__FILE__, '../../ext/active_record/finder_methods'))
40
+ require File.expand_path(File.join(__FILE__, '../../ext/active_record/finder_methods'))
41
+
42
+ if ActiveRecord::VERSION::MAJOR == 6 && ActiveRecord::VERSION::MINOR == 1
43
+ # Patch to allow Rails 6.1 pass url to adapter, all other versions work
44
+ require 'active_record/database_configurations'
45
+ class ActiveRecord::DatabaseConfigurations::UrlConfig
46
+ private
47
+ def build_url_hash
48
+ if url.nil? || %w(jdbc: http: https:).any? { |protocol| url.start_with?(protocol) }
49
+ { url: url }
50
+ else
51
+ ConnectionUrlResolver.new(url).to_hash
52
+ end
53
+ end
54
+ end
55
+ end
@@ -348,7 +348,7 @@ module Sunstone
348
348
  headers = Thread.current[:sunstone_headers]&.clone || {}
349
349
  headers['Accept'] = 'application/json'
350
350
  headers['User-Agent'] = user_agent
351
- headers['Api-Version'] = '0.1.0'
351
+ headers['Api-Version'] = '0.2.0'
352
352
  headers['Connection'] = 'keep-alive'
353
353
 
354
354
  request_api_key = Thread.current[:sunstone_api_key] || api_key
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '6.0.0.5'
2
+ VERSION = '6.1.3'
3
3
  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: 6.0.0.5
4
+ version: 6.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-26 00:00:00.000000000 Z
11
+ date: 2021-05-15 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.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: 6.0.0.rc1
194
+ version: 6.1.0
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: msgpack
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -226,14 +226,42 @@ dependencies:
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 6.0.0.rc1
229
+ version: 6.1.3
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.1.3
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.1.0
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 6.1.0
251
+ - !ruby/object:Gem::Dependency
252
+ name: activerecord-filter
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: 6.1.0
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: 6.1.0
237
265
  description: A library for interacting with REST APIs. Similar to ActiveResource
238
266
  email:
239
267
  - jonbracy@gmail.com
@@ -241,14 +269,7 @@ executables: []
241
269
  extensions: []
242
270
  extra_rdoc_files: []
243
271
  files:
244
- - ".gitignore"
245
- - ".tm_properties"
246
- - ".travis.yml"
247
- - Gemfile
248
272
  - LICENSE
249
- - README.md
250
- - Rakefile
251
- - TODO.md
252
273
  - ext/active_record/associations.rb
253
274
  - ext/active_record/associations/collection_association.rb
254
275
  - ext/active_record/attribute_methods.rb
@@ -262,7 +283,6 @@ files:
262
283
  - ext/active_record/transactions.rb
263
284
  - ext/active_support/core_ext/object/to_query.rb
264
285
  - ext/arel/attributes/empty_relation.rb
265
- - ext/arel/attributes/relation.rb
266
286
  - ext/arel/nodes/eager_load.rb
267
287
  - ext/arel/nodes/select_statement.rb
268
288
  - ext/arel/select_manager.rb
@@ -271,6 +291,7 @@ files:
271
291
  - lib/active_record/connection_adapters/sunstone/schema_dumper.rb
272
292
  - lib/active_record/connection_adapters/sunstone/schema_statements.rb
273
293
  - lib/active_record/connection_adapters/sunstone/type/array.rb
294
+ - lib/active_record/connection_adapters/sunstone/type/binary.rb
274
295
  - lib/active_record/connection_adapters/sunstone/type/date_time.rb
275
296
  - lib/active_record/connection_adapters/sunstone/type/ewkb.rb
276
297
  - lib/active_record/connection_adapters/sunstone/type/json.rb
@@ -284,33 +305,10 @@ files:
284
305
  - lib/sunstone/exception.rb
285
306
  - lib/sunstone/gis.rb
286
307
  - lib/sunstone/version.rb
287
- - sunstone.gemspec
288
- - test/active_record/associations/belongs_to_test.rb
289
- - test/active_record/associations/has_and_belongs_to_many_test.rb
290
- - test/active_record/associations/has_many_test.rb
291
- - test/active_record/eager_loading_test.rb
292
- - test/active_record/persistance_test.rb
293
- - test/active_record/preload_test.rb
294
- - test/active_record/query/all_test.rb
295
- - test/active_record/query/count_test.rb
296
- - test/active_record/query/distinct_test.rb
297
- - test/active_record/query/find_test.rb
298
- - test/active_record/query/limit_test.rb
299
- - test/active_record/query/order_test.rb
300
- - test/active_record/query/where_test.rb
301
- - test/active_record/query_test.rb
302
- - test/active_record/rpc_test.rb
303
- - test/schema_mock.rb
304
- - test/sunstone/connection/configuration_test.rb
305
- - test/sunstone/connection/cookie_store_test.rb
306
- - test/sunstone/connection/request_helper_test.rb
307
- - test/sunstone/connection/send_request_test.rb
308
- - test/sunstone/connection_test.rb
309
- - test/test_helper.rb
310
308
  homepage: http://sunstonerb.com
311
309
  licenses: []
312
310
  metadata: {}
313
- post_install_message:
311
+ post_install_message:
314
312
  rdoc_options: []
315
313
  require_paths:
316
314
  - lib
@@ -325,30 +323,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
325
323
  - !ruby/object:Gem::Version
326
324
  version: '0'
327
325
  requirements: []
328
- rubygems_version: 3.0.3
329
- signing_key:
326
+ rubygems_version: 3.2.3
327
+ signing_key:
330
328
  specification_version: 4
331
329
  summary: A library for interacting with REST APIs
332
- test_files:
333
- - test/active_record/associations/belongs_to_test.rb
334
- - test/active_record/associations/has_and_belongs_to_many_test.rb
335
- - test/active_record/associations/has_many_test.rb
336
- - test/active_record/eager_loading_test.rb
337
- - test/active_record/persistance_test.rb
338
- - test/active_record/preload_test.rb
339
- - test/active_record/query/all_test.rb
340
- - test/active_record/query/count_test.rb
341
- - test/active_record/query/distinct_test.rb
342
- - test/active_record/query/find_test.rb
343
- - test/active_record/query/limit_test.rb
344
- - test/active_record/query/order_test.rb
345
- - test/active_record/query/where_test.rb
346
- - test/active_record/query_test.rb
347
- - test/active_record/rpc_test.rb
348
- - test/schema_mock.rb
349
- - test/sunstone/connection/configuration_test.rb
350
- - test/sunstone/connection/cookie_store_test.rb
351
- - test/sunstone/connection/request_helper_test.rb
352
- - test/sunstone/connection/send_request_test.rb
353
- - test/sunstone/connection_test.rb
354
- - test/test_helper.rb
330
+ test_files: []