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 +13 -5
- data/lib/ar-ondemand/fast_enumeration.rb +10 -8
- data/lib/ar-ondemand/result.rb +9 -5
- data/lib/ar-ondemand/version.rb +1 -1
- data/spec/lib/for_enumeration_reading_spec.rb +6 -0
- data/spec/lib/for_reading_spec.rb +6 -0
- metadata +14 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
Y2NlZmEyMjljODU5YzNlZDlhMTVkN2VjZGYwNDc1ZDY0Zjg5YzRkOQ==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
NmM3MWQ2N2ZhYWRiYjRmYTJmNGQ2NTI4YjY1NmE0MjQxYTNkODgzOA==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
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
|
-
|
|
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
|
data/lib/ar-ondemand/result.rb
CHANGED
|
@@ -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?(:
|
|
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 = @
|
|
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
|
data/lib/ar-ondemand/version.rb
CHANGED
|
@@ -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
|
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.
|
|
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-
|
|
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
|
-
-
|
|
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.
|
|
136
|
+
rubygems_version: 2.6.11
|
|
137
137
|
signing_key:
|
|
138
138
|
specification_version: 4
|
|
139
139
|
summary: ActiveRecord On-demand
|