activerecord-virtual_attributes 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d35dc5f3ef872b957e24553488667ea6e1f948e56d741d6f5dbf5a7612dc1208
4
- data.tar.gz: 8980c2297bb237b520aafd79177e727c29628b3e807349df8ec153e259f3ccb6
3
+ metadata.gz: 12889257087183346e6a2d382f1105adcd42dcf0d56e8cfb3174ad9bc03e93a4
4
+ data.tar.gz: 422aa8fc3a9115014feca968087c32f52641daaaab04db3308fe7382377b6b7d
5
5
  SHA512:
6
- metadata.gz: a42caa72fee1075051551c5c12c14b71696be135ed27eaf755936bde51b63a4953a51458ad22dd7fd40808c2aae9c661b93b0aee5e6a3d684acd85a21461f788
7
- data.tar.gz: 7ca0eb7fde02046e0921a81d84735be127cd068ee554550fd4dc903da2b105f025064ab3e8a728fb9e26d2586dbd892a569eb8a6cac6557d19770a9fc28945c0
6
+ metadata.gz: 92c23a0d47b390b39c1576e28ae444891dc7c4fda8b4ee493541d760aa7784442b6be95ea5f4dbd7d742feec949defd5640a5b923c755aa8162076a3fdd0700b
7
+ data.tar.gz: f2ee6541b6b0aaa5dcd6d25e2019bbd97ead4276495f688e71ff614463a1c818f12106a38bfb13c801e91880c8910fecd71878d9aee23f7e4c6d178010e06d91
data/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@ a nice looking [Changelog](http://keepachangelog.com).
5
5
 
6
6
  ## Version [Unreleased]
7
7
 
8
+ ## Version [1.4.0] <small>2019-07-13</small>
9
+
10
+ * fix includes to include all associations
11
+ * fix bin/console to now actually run
12
+ * select no longer munges field attribute
13
+ * support virtual attributes in left_outer_joins
14
+
8
15
  ## Version [1.3.1] <small>2019-06-06</small>
9
16
 
10
17
  * quote column aliases
@@ -38,7 +45,8 @@ a nice looking [Changelog](http://keepachangelog.com).
38
45
  * Initial Release
39
46
  * Extracted from ManageIQ/manageiq
40
47
 
41
- [Unreleased]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.3.1...HEAD
48
+ [Unreleased]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.4.0...HEAD
49
+ [1.4.0]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.3.1...v1.4.0
42
50
  [1.3.1]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.3.0...v1.3.1
43
51
  [1.3.0]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.2.0...v1.3.0
44
52
  [1.2.0]: https://github.com/ManageIQ/activerecord-virtual_attributes/compare/v1.1.0...v1.2.0
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency "activerecord", ">= 5.0"
29
29
 
30
30
  spec.add_development_dependency "appraisal"
31
+ spec.add_development_dependency "byebug"
31
32
  spec.add_development_dependency "rake", "~> 10.0"
32
33
  spec.add_development_dependency "rspec", "~> 3.0"
33
34
  spec.add_development_dependency "simplecov"
data/bin/console CHANGED
@@ -1,14 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "virtual_attributes"
4
+ require "active_record-virtual_attributes"
5
5
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
6
+ # models for local testing
7
+ require "rspec"
8
+ Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
12
9
 
13
10
  require "irb"
14
11
  IRB.start(__FILE__)
data/init.rb CHANGED
@@ -1 +1 @@
1
- require 'virtual_attributes'
1
+ require 'active_record-virtual_attributes'
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module VirtualAttributes
3
- VERSION = "1.3.1"
3
+ VERSION = "1.4.0".freeze
4
4
  end
5
5
  end
@@ -50,18 +50,46 @@ module ActiveRecord
50
50
  if virtual_field?(parent) # form virtual_attribute => {}
51
51
  case (new_includes = replace_virtual_fields(virtual_includes(parent)))
52
52
  when String, Symbol
53
- h[new_includes] = {}
53
+ merge_includes(h, new_includes)
54
54
  when Array
55
- new_includes.each { |association| h[association] = {} }
55
+ merge_includes(h, new_includes)
56
56
  when Hash
57
- h.deep_merge!(new_includes)
57
+ merge_includes(h, new_includes)
58
58
  end
59
59
  else
60
60
  reflection = reflect_on_association(parent.to_sym)
61
- h[parent] = reflection.nil? || reflection.options[:polymorphic] ? {} : reflection.klass.replace_virtual_fields(child) || {}
61
+ new_child = reflection.nil? || reflection.options[:polymorphic] ? {} : reflection.klass.replace_virtual_fields(child) || {}
62
+ merge_includes(h, parent => new_child)
62
63
  end
63
64
  end
64
65
  end
66
+
67
+ # @param [Hash, Array, String, Symbol] value
68
+ # @return [Hash]
69
+ def include_to_hash(value)
70
+ case value
71
+ when String, Symbol
72
+ {value => {}}
73
+ when Array
74
+ value.flatten.each_with_object({}) { |k, h| h[k] = {} }
75
+ when nil
76
+ {}
77
+ else
78
+ value
79
+ end
80
+ end
81
+
82
+ # @param [Hash] hash1
83
+ # @param [Hash] hash2
84
+ def merge_includes(hash1, hash2)
85
+ return hash1 if hash2.blank?
86
+
87
+ hash1 = include_to_hash(hash1)
88
+ hash2 = include_to_hash(hash2)
89
+ hash1.deep_merge!(hash2) do |_k, v1, v2|
90
+ merge_includes(v1, v2)
91
+ end
92
+ end
65
93
  end
66
94
  end
67
95
  end
@@ -209,8 +237,7 @@ module ActiveRecord
209
237
  # support virtual attributes by adding an alias to the sql phrase for the column
210
238
  # it does not add an as() if the column already has an as
211
239
  # this code is based upon _select()
212
- fields.flatten!
213
- fields.map! do |field|
240
+ fields = fields.flatten.map! do |field|
214
241
  if virtual_attribute?(field) && (arel = klass.arel_attribute(field)) && arel.respond_to?(:as)
215
242
  arel.as(connection.quote_column_name(field.to_s))
216
243
  else
@@ -221,6 +248,12 @@ module ActiveRecord
221
248
  super
222
249
  end
223
250
 
251
+ # From ActiveRecord::QueryMethods
252
+ def build_left_outer_joins(manager, outer_joins, *rest)
253
+ outer_joins = klass.replace_virtual_fields(outer_joins)
254
+ super if outer_joins.present?
255
+ end
256
+
224
257
  # From ActiveRecord::Calculations
225
258
  def calculate(operation, attribute_name)
226
259
  # work around 1 until https://github.com/rails/rails/pull/25304 gets merged
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-virtual_attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keenan Brock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-06 00:00:00.000000000 Z
11
+ date: 2019-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement