ar-ondemand 1.3.0 → 1.3.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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2c4521729983f1090784fec916b04caaaf25aa21
4
- data.tar.gz: f7bd9bdd35059b675d80aaf687b8e8e612da4ddf
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2NlZmEyMjljODU5YzNlZDlhMTVkN2VjZGYwNDc1ZDY0Zjg5YzRkOQ==
5
+ data.tar.gz: !binary |-
6
+ NmM3MWQ2N2ZhYWRiYjRmYTJmNGQ2NTI4YjY1NmE0MjQxYTNkODgzOA==
5
7
  SHA512:
6
- metadata.gz: 384adac8921cbbfcbf79145a5371e9424cc2c9e52713d07023f457db4647818d6fb999237c68be3035d93e199b58d41d04d1e9c2e388ba4aee14a4450ca480d6
7
- data.tar.gz: 8cc4b2d553068f51afeb8712f8f89787a0c4b81c7039e67d2bc695ccdd5aba2110dda633303a19379a0823a2fd1233679848041a08ce10887d4fcbd35d245526
8
+ metadata.gz: !binary |-
9
+ NzdlODIwMGM2YTRkNzIwMDhjNDg3MDJmNzBlOWNhNDAyYTkwYmJjZTAwNzg5
10
+ OGRmNmMwMWVmMDVhMGIxODdkNTk3OWJlYmU3NmQ0NTNiYzU1MmQ5ZTc1NjFj
11
+ OWJhM2M1YzFhYzgwNTJjY2IxYmY3NWJkNGRjOWUyZjA0OWYxYjg=
12
+ data.tar.gz: !binary |-
13
+ MTlkYTZhYzY5YjllOTM5NTc2ZDYxOWFjZDU3NjU5MmU4ZmMyMzZmZmM0NDhj
14
+ NDhlMTBjYTRmZTc5YmUyY2IxZTQxMDIxM2U4NTQwNDYyMWNmMDI1MTM2MTA5
15
+ ZDI5OWEzNTIwN2ZlMWRkZTBhNGI5NzQ5ZDE5ODNjMDBlOTMyM2E=
@@ -1,27 +1,29 @@
1
1
  module ActiveRecord
2
2
  module OnDemand
3
3
  class FastEnumeration
4
-
5
4
  def initialize(model, result_set)
6
5
  @result_set = result_set
7
6
  @column_models = model.columns.inject({}) { |h, c| h[c.name] = c; h }
8
7
  result_set.columns.each_with_index do |name, index|
9
8
  column_model = @column_models[name]
9
+
10
+ # For AR 5.x type casting
11
+ ar_type = ActiveRecord::Type.registry.lookup(column_model.type) if defined?(ActiveRecord::Type.registry.lookup)
10
12
  self.define_singleton_method(name) do
11
13
  raise 'Not accessible outside of enumeration' if @row.nil?
12
-
13
- if column_model.respond_to?(:type)
14
- # Rails 5+
15
- t = column_model.type
16
- t.is_a?(::Symbol) ? @row[index] : t.cast(@row[index])
17
- elsif column_model.respond_to?(:type_cast)
14
+ if column_model.respond_to?(:type_cast)
18
15
  # TODO Remove this when dropping support for Rails 3
19
16
  column_model.type_cast @row[index]
20
- else
17
+ elsif column_model.respond_to?(:type_cast_from_database)
21
18
  # Rails 4.2 renamed type_cast into type_cast_from_database
22
19
  # This is not documented in their upgrade docs or release notes.
23
20
  # See https://github.com/rails/rails/commit/d24e640
24
21
  column_model.type_cast_from_database @row[index]
22
+ elsif ar_type
23
+ # Rails 5+
24
+ ar_type.is_a?(::Symbol) ? @row[index] : ar_type.cast(@row[index])
25
+ else
26
+ raise 'Unable to determine type cast method for column'
25
27
  end
26
28
  end
27
29
  end
@@ -9,6 +9,10 @@ module ActiveRecord
9
9
  @model = model
10
10
  @results = results
11
11
  @column_types = Hash[@model.columns.map { |x| [x.name, x] }]
12
+
13
+ # For AR 5.x capture the types from registry to use for conversion
14
+ @ar_types = defined?(ActiveRecord::Type.registry.lookup) ? Hash[@model.columns.map { |x| [x.name, ActiveRecord::Type.registry.lookup(x.type)] }] : nil
15
+
12
16
  determine_type_cast_method
13
17
  @col_indexes = HashWithIndifferentAccess[@results.columns.each_with_index.map { |x, i| [x,i] }]
14
18
  @raw = options.delete :raw
@@ -60,10 +64,7 @@ module ActiveRecord
60
64
  def determine_type_cast_method
61
65
  _, col = @column_types.first
62
66
  return if col.nil?
63
- @type_cast = if col.respond_to?(:type)
64
- # Rails 5+
65
- :type
66
- elsif col.respond_to?(:type_cast)
67
+ @type_cast = if col.respond_to?(:type_cast)
67
68
  # Rails 3
68
69
  :type_cast
69
70
  elsif col.respond_to?(:type_cast_from_database)
@@ -71,6 +72,9 @@ module ActiveRecord
71
72
  # This is not documented in their upgrade docs or release notes.
72
73
  # See https://github.com/rails/rails/commit/d24e640
73
74
  :type_cast_from_database
75
+ elsif @ar_types
76
+ # Rails 5+
77
+ :type
74
78
  else
75
79
  raise 'Unable to determine type cast method for column'
76
80
  end
@@ -96,7 +100,7 @@ module ActiveRecord
96
100
  def cast_value(k, v)
97
101
  return v unless @column_types[k]
98
102
  if @type_cast == :type
99
- t = @column_types[k].type
103
+ t = @ar_types[k]
100
104
  t.is_a?(::Symbol) ? v : t.cast(v)
101
105
  elsif @type_cast == :type_cast
102
106
  @column_types[k].type_cast v
@@ -1,3 +1,3 @@
1
1
  module ArOnDemand
2
- VERSION = '1.3.0'
2
+ VERSION = '1.3.1'
3
3
  end
@@ -73,6 +73,12 @@ describe 'ForEnumerationReading' do
73
73
  expect(AuditRecord.where(customer_id: 1).for_enumeration_reading.size).to be 25
74
74
  end
75
75
 
76
+ it 'should convert date/time fields properly' do
77
+ AuditRecord.where(customer_id: 1).for_enumeration_reading.each do |r|
78
+ expect(r.created_at.class).to be Time
79
+ end
80
+ end
81
+
76
82
  end
77
83
  end
78
84
  end
@@ -54,6 +54,12 @@ describe 'ForReading' do
54
54
  expect(records_a).to eq records_b
55
55
  end
56
56
 
57
+ it 'should convert date/time fields properly' do
58
+ AuditRecord.for_reading.each do |r|
59
+ expect(r.created_at.class).to be Time
60
+ end
61
+ end
62
+
57
63
  end
58
64
  end
59
65
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-ondemand
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-14 00:00:00.000000000 Z
11
+ date: 2017-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '12.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '12.0'
69
69
  description: Fast access to database results without the memory overhead of ActiveRecord
@@ -75,7 +75,7 @@ executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - ".gitignore"
78
+ - .gitignore
79
79
  - CHANGELOG.md
80
80
  - CONTRIBUTORS.md
81
81
  - Gemfile
@@ -123,17 +123,17 @@ require_paths:
123
123
  - lib
124
124
  required_ruby_version: !ruby/object:Gem::Requirement
125
125
  requirements:
126
- - - ">="
126
+ - - ! '>='
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - ">="
131
+ - - ! '>='
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.5.2
136
+ rubygems_version: 2.6.11
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: ActiveRecord On-demand