calculated_attributes 0.1.4 → 0.1.5
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 +4 -4
- data/.ruby-version +1 -1
- data/Appraisals +4 -0
- data/gemfiles/rails3.gemfile.lock +2 -2
- data/gemfiles/rails4_1.gemfile.lock +2 -2
- data/gemfiles/rails4_2.gemfile.lock +2 -2
- data/gemfiles/rails5_0.gemfile +7 -0
- data/gemfiles/rails5_0.gemfile.lock +77 -0
- data/lib/calculated_attributes/rails_5_patches.rb +65 -0
- data/lib/calculated_attributes/rails_patches.rb +1 -1
- data/lib/calculated_attributes/version.rb +1 -1
- data/lib/calculated_attributes.rb +1 -1
- data/spec/lib/calculated_attributes_spec.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0940be8c91d38d2aec6592df3ab0ecb9d45cff3
|
4
|
+
data.tar.gz: 9d497e3a163e7447892aa73e81b0b647fa16d8ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 195341ee43dcb6b87fd1ca1a45c9c5eb41f26ad3bd9479c8aabc3cd96e131d1b5671276a20767f99d43e0c3c136d2b5188d988e481afa5045b21641956d7c50c
|
7
|
+
data.tar.gz: f9634c6a9762bfc550001d92b98f112dbcc51397e5f81f0e0fcbd4ca36508f45a28cd0d12ece28ab40919add24740c26b04f78bfe8f2cec193485db93c824483
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.1
|
data/Appraisals
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
calculated_attributes (0.1.5)
|
5
|
+
activerecord (>= 3.2.20)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (5.0.0)
|
11
|
+
activesupport (= 5.0.0)
|
12
|
+
activerecord (5.0.0)
|
13
|
+
activemodel (= 5.0.0)
|
14
|
+
activesupport (= 5.0.0)
|
15
|
+
arel (~> 7.0)
|
16
|
+
activesupport (5.0.0)
|
17
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
|
+
i18n (~> 0.7)
|
19
|
+
minitest (~> 5.1)
|
20
|
+
tzinfo (~> 1.1)
|
21
|
+
appraisal (1.0.3)
|
22
|
+
bundler
|
23
|
+
rake
|
24
|
+
thor (>= 0.14.0)
|
25
|
+
arel (7.1.1)
|
26
|
+
ast (2.3.0)
|
27
|
+
astrolabe (1.3.1)
|
28
|
+
parser (~> 2.2)
|
29
|
+
concurrent-ruby (1.0.2)
|
30
|
+
diff-lcs (1.2.5)
|
31
|
+
i18n (0.7.0)
|
32
|
+
minitest (5.9.0)
|
33
|
+
parser (2.3.1.2)
|
34
|
+
ast (~> 2.2)
|
35
|
+
powerpack (0.1.1)
|
36
|
+
rainbow (2.1.0)
|
37
|
+
rake (10.5.0)
|
38
|
+
rspec (3.5.0)
|
39
|
+
rspec-core (~> 3.5.0)
|
40
|
+
rspec-expectations (~> 3.5.0)
|
41
|
+
rspec-mocks (~> 3.5.0)
|
42
|
+
rspec-core (3.5.3)
|
43
|
+
rspec-support (~> 3.5.0)
|
44
|
+
rspec-expectations (3.5.0)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.5.0)
|
47
|
+
rspec-mocks (3.5.0)
|
48
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
+
rspec-support (~> 3.5.0)
|
50
|
+
rspec-support (3.5.0)
|
51
|
+
rubocop (0.32.1)
|
52
|
+
astrolabe (~> 1.3)
|
53
|
+
parser (>= 2.2.2.5, < 3.0)
|
54
|
+
powerpack (~> 0.1)
|
55
|
+
rainbow (>= 1.99.1, < 3.0)
|
56
|
+
ruby-progressbar (~> 1.4)
|
57
|
+
ruby-progressbar (1.8.1)
|
58
|
+
sqlite3 (1.3.11)
|
59
|
+
thor (0.19.1)
|
60
|
+
thread_safe (0.3.5)
|
61
|
+
tzinfo (1.2.2)
|
62
|
+
thread_safe (~> 0.1)
|
63
|
+
|
64
|
+
PLATFORMS
|
65
|
+
ruby
|
66
|
+
|
67
|
+
DEPENDENCIES
|
68
|
+
activerecord (= 5.0.0)
|
69
|
+
appraisal (~> 1.0.3)
|
70
|
+
calculated_attributes!
|
71
|
+
rake (~> 10.0)
|
72
|
+
rspec (~> 3.1)
|
73
|
+
rubocop (~> 0.32.0)
|
74
|
+
sqlite3 (~> 1.3.10)
|
75
|
+
|
76
|
+
BUNDLED WITH
|
77
|
+
1.12.5
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module AttributeMethods
|
3
|
+
module ClassMethods
|
4
|
+
# Generates all the attribute related methods for columns in the database
|
5
|
+
# accessors, mutators and query methods.
|
6
|
+
def define_attribute_methods # :nodoc:
|
7
|
+
return false if @attribute_methods_generated
|
8
|
+
# Use a mutex; we don't want two threads simultaneously trying to define
|
9
|
+
# attribute methods.
|
10
|
+
generated_attribute_methods.synchronize do
|
11
|
+
return false if @attribute_methods_generated
|
12
|
+
superclass.define_attribute_methods unless self == base_class
|
13
|
+
columns_to_define =
|
14
|
+
if defined?(calculated) && calculated.instance_variable_get('@calculations')
|
15
|
+
calculated_keys = calculated.instance_variable_get('@calculations').keys
|
16
|
+
column_names.reject { |c| calculated_keys.include? c.intern }
|
17
|
+
else
|
18
|
+
column_names
|
19
|
+
end
|
20
|
+
super(columns_to_define)
|
21
|
+
@attribute_methods_generated = true
|
22
|
+
end
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Associations
|
29
|
+
class JoinDependency
|
30
|
+
attr_writer :calculated_columns
|
31
|
+
|
32
|
+
def instantiate(result_set, aliases)
|
33
|
+
primary_key = aliases.column_alias(join_root, join_root.primary_key)
|
34
|
+
|
35
|
+
seen = Hash.new { |i, object_id|
|
36
|
+
i[object_id] = Hash.new { |j, child_class|
|
37
|
+
j[child_class] = {}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
model_cache = Hash.new { |h,klass| h[klass] = {} }
|
42
|
+
parents = model_cache[join_root]
|
43
|
+
column_aliases = aliases.column_aliases join_root
|
44
|
+
|
45
|
+
message_bus = ActiveSupport::Notifications.instrumenter
|
46
|
+
|
47
|
+
payload = {
|
48
|
+
record_count: result_set.length,
|
49
|
+
class_name: join_root.base_klass.name
|
50
|
+
}
|
51
|
+
|
52
|
+
message_bus.instrument("instantiation.active_record", payload) do
|
53
|
+
result_set.each { |row_hash|
|
54
|
+
parent_key = primary_key ? row_hash[primary_key] : row_hash
|
55
|
+
parent = parents[parent_key] ||= join_root.instantiate(row_hash, column_aliases)
|
56
|
+
@calculated_columns.each { |column| parent[column.right] = model[column.right] } if @calculated_columns
|
57
|
+
construct(parent, join_root, row_hash, result_set, seen, model_cache, aliases)
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
parents.values
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -15,7 +15,7 @@ module ActiveRecord
|
|
15
15
|
# Updates the attribute identified by <tt>attr_name</tt> with the specified +value+. Empty strings
|
16
16
|
# for fixnum and float columns are turned into +nil+.
|
17
17
|
def write_attribute(attr_name, value)
|
18
|
-
if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 2
|
18
|
+
if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 2 || ActiveRecord::VERSION::MAJOR == 5
|
19
19
|
write_attribute_with_type_cast(attr_name, value, true)
|
20
20
|
else
|
21
21
|
attr_name = attr_name.to_s
|
@@ -4,7 +4,7 @@ require 'active_record'
|
|
4
4
|
# Include patches.
|
5
5
|
require 'calculated_attributes/rails_patches'
|
6
6
|
require 'calculated_attributes/arel_patches'
|
7
|
-
fail "Unsupported ActiveRecord version: #{ActiveRecord::VERSION::MAJOR}" unless [3, 4].include? ActiveRecord::VERSION::MAJOR
|
7
|
+
fail "Unsupported ActiveRecord version: #{ActiveRecord::VERSION::MAJOR}" unless [3, 4, 5].include? ActiveRecord::VERSION::MAJOR
|
8
8
|
require "calculated_attributes/rails_#{ActiveRecord::VERSION::MAJOR}_patches"
|
9
9
|
|
10
10
|
# Include model code.
|
@@ -120,6 +120,7 @@ describe 'calculated_attributes' do
|
|
120
120
|
context 'when eager loading models' do
|
121
121
|
it 'includes calculated attributes' do
|
122
122
|
scope = case ActiveRecord::VERSION::MAJOR
|
123
|
+
when 5 then model_scoped(Post).includes(:comments).references(:comments)
|
123
124
|
when 4 then model_scoped(Post).includes(:comments).references(:comments)
|
124
125
|
when 3 then model_scoped(Post).eager_load(:comments)
|
125
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calculated_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Schneider
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: appraisal
|
@@ -118,11 +118,14 @@ files:
|
|
118
118
|
- gemfiles/rails4_1.gemfile.lock
|
119
119
|
- gemfiles/rails4_2.gemfile
|
120
120
|
- gemfiles/rails4_2.gemfile.lock
|
121
|
+
- gemfiles/rails5_0.gemfile
|
122
|
+
- gemfiles/rails5_0.gemfile.lock
|
121
123
|
- lib/calculated_attributes.rb
|
122
124
|
- lib/calculated_attributes/arel_patches.rb
|
123
125
|
- lib/calculated_attributes/model_methods.rb
|
124
126
|
- lib/calculated_attributes/rails_3_patches.rb
|
125
127
|
- lib/calculated_attributes/rails_4_patches.rb
|
128
|
+
- lib/calculated_attributes/rails_5_patches.rb
|
126
129
|
- lib/calculated_attributes/rails_patches.rb
|
127
130
|
- lib/calculated_attributes/version.rb
|
128
131
|
- spec/lib/calculated_attributes_spec.rb
|