ar-ondemand 1.3.0 → 1.3.1

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