sunstone 6.0.0.5 → 6.1.3

Sign up to get free protection for your applications and to get access to all the features.
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: []