better_record 0.6.1 → 0.7.0

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,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80a3a6bdb64b0eb2d6790cd73b4282a370c7535eb132d34b3272729147b87834
4
- data.tar.gz: b25f2d1f2a18e75a62d90cba238c5345bbb93a672efe734280f6cf3aa0d1a147
3
+ metadata.gz: c4e3bcdf03926a87f91b4b0b55b8c34f686142904671b0434ae92fec0e4a5ced
4
+ data.tar.gz: 1a87533db8f024b44e0cc0c159ecd8392d91c96ee66094b51f7dedc606ea10e1
5
5
  SHA512:
6
- metadata.gz: '049a1286206330904f6eee21f2f259ff6618902545608ed1f43004a3b5f7a5600edb150ecbc99238f727edb2cc913e95f16596c3e19929d36fdae3fb1ef402d6'
7
- data.tar.gz: ef6cbf4188368b06f35ff34e785d9edf2f167d738097f68ffc6b90d88393c5259493be8b46712d2327e5ba4dc89868d46ed09a5c0f65a5db90dfda35a7bcc931
6
+ metadata.gz: ad743dbfece1c278d146ae8bffdc8ae9d924f97b8214e13834f1161a0bb49b5fd4dcc52487d7aacc0b8263660eb34ced8fc460d374f2622789f272dc49e8dcf4
7
+ data.tar.gz: 1deddcfcb7b45e90cfdef429b0413db7e1d35685524c09a8c1c375d604a7706748a36b7f4cf8dbbcf22bb18c7fc3c6a802a377d188c9013f85509054f5afa355
@@ -7,12 +7,12 @@ module ActiveRecord
7
7
 
8
8
  binds << last_reflection.join_id_for(owner)
9
9
  if last_reflection.type
10
- binds << owner.class.__send__(last_reflection.options[:primary_type].presence || :table_name)
10
+ binds << BetterRecord::PolymorphicOverride.polymorphic_value(owner.class, last_reflection.options.presence)
11
11
  end
12
12
 
13
13
  chain.each_cons(2).each do |reflection, next_reflection|
14
14
  if reflection.type
15
- binds << next_reflection.klass.__send__(reflection.options[:primary_type].presence || next_reflection[:primary_type].presence || :table_name)
15
+ binds << BetterRecord::PolymorphicOverride.polymorphic_value(next_reflection.klass, (reflection.options[:primary_type].present? ? reflection.options : next_reflection.options))
16
16
  end
17
17
  end
18
18
  binds
@@ -29,7 +29,7 @@ module ActiveRecord
29
29
  scope = apply_scope(scope, table, key, value)
30
30
 
31
31
  if reflection.type
32
- polymorphic_type = transform_value(owner.class.__send__(reflection.options[:primary_type].presence || :table_name))
32
+ polymorphic_type = transform_value(BetterRecord::PolymorphicOverride.polymorphic_value(owner.class, reflection.options))
33
33
  scope = apply_scope(scope, table, reflection.type, polymorphic_type)
34
34
  end
35
35
 
@@ -46,7 +46,7 @@ module ActiveRecord
46
46
  constraint = table[key].eq(foreign_table[foreign_key])
47
47
 
48
48
  if reflection.type
49
- value = transform_value(next_reflection.klass.__send__(reflection.options[:primary_type].presence || :table_name))
49
+ value = transform_value(BetterRecord::PolymorphicOverride.polymorphic_value(next_reflection.klass, reflection.options))
50
50
  scope = apply_scope(scope, table, reflection.type, value)
51
51
  end
52
52
 
@@ -57,7 +57,7 @@ module ActiveRecord
57
57
  module Builder
58
58
  class Association
59
59
  def self.valid_options(options)
60
- VALID_OPTIONS + [ :primary_type ] + Association.extensions.flat_map(&:valid_options)
60
+ VALID_OPTIONS + [ :primary_type, :strict_primary_type ] + Association.extensions.flat_map(&:valid_options)
61
61
  end
62
62
  end
63
63
  end
@@ -67,6 +67,16 @@ module ActiveRecord
67
67
  type = owner[reflection.foreign_type]
68
68
  type.presence && type.capitalize.singularize.constantize
69
69
  end
70
+
71
+ private
72
+ def replace_keys(record)
73
+ super
74
+ owner[reflection.foreign_type] = record ? get_type_value(record) : nil
75
+ end
76
+
77
+ def get_type_value(record)
78
+ BetterRecord::PolymorphicOverride.polymorphic_value(record.class, reflection.options)
79
+ end
70
80
  end
71
81
  end
72
82
  end
@@ -7,7 +7,11 @@ module ActiveRecord
7
7
  klass_scope = klass_join_scope(table, predicate_builder)
8
8
 
9
9
  if type
10
- klass_scope.where!(type => foreign_klass.__send__(options[:primary_type] || :table_name))
10
+ if options[:strict_primary_type]
11
+ klass_scope.where!(type => BetterRecord::PolymorphicOverride.polymorphic_value(foreign_klass, options))
12
+ else
13
+ klass_scope.where!(type => BetterRecord::PolymorphicOverride.all_types(foreign_klass))
14
+ end
11
15
  end
12
16
 
13
17
  scope_chain_items.inject(klass_scope, &:merge!)
@@ -0,0 +1,37 @@
1
+ module BetterRecord
2
+ class PolymorphicOverride
3
+ def self.polymorphic_value(klass, options = nil)
4
+ type_val = nil
5
+ type_method = polymorphic_method(options.presence || {})
6
+ begin
7
+ type_val = klass.__send__(type_method)
8
+ rescue
9
+ if type_val == :table_name_without_schema
10
+ type_val = klass.table_name
11
+ else
12
+ type_val = klass.polymorphic_name
13
+ end
14
+ end
15
+ type_val
16
+ end
17
+
18
+ def self.polymorphic_method(options = {})
19
+ (options[:primary_type].presence) || BetterRecord.default_polymorphic_method.presence || :polymorphic_name
20
+ end
21
+
22
+ def self.all_types(klass)
23
+ keys = [ :polymorphic_name, :table_name ]
24
+ key |= [BetterRecord.default_polymorphic_method] if BetterRecord.default_polymorphic_method.present?
25
+ values = []
26
+ keys.each do |k|
27
+ val = nil
28
+ begin
29
+ val = klass.__send__(k)
30
+ values << val if val.present?
31
+ rescue
32
+ end
33
+ end
34
+ values
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module BetterRecord
2
- VERSION = '0.6.1'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -31,6 +31,7 @@ class BetterRecord::SetupGenerator < ActiveRecord::Generators::Base
31
31
  template 'rspec', '.rspec'
32
32
  template 'ruby-version', '.ruby-version'
33
33
  template 'initializer.rb', 'config/initializers/better_record.rb'
34
+ template 'current.rb', 'app/models/current.rb'
34
35
  directory "#{BetterRecord::Engine.root}/lib/templates", 'lib/templates'
35
36
 
36
37
  eject_files if !!options['eject']
@@ -49,7 +50,6 @@ class BetterRecord::SetupGenerator < ActiveRecord::Generators::Base
49
50
  end
50
51
 
51
52
  gsub_file 'app/models/application_record.rb', /(#{Regexp.escape("class ApplicationRecord < ActiveRecord::Base")})/mi do |match|
52
- p match
53
53
  "class ApplicationRecord < BetterRecord::Base"
54
54
  end
55
55
  end
@@ -0,0 +1,37 @@
1
+ module Current
2
+ # == Constants ============================================================
3
+
4
+ # == Attributes ===========================================================
5
+
6
+ # == Extensions ===========================================================
7
+
8
+ # == Relationships ========================================================
9
+
10
+ # == Validations ==========================================================
11
+
12
+ # == Scopes ===============================================================
13
+
14
+ # == Callbacks ============================================================
15
+
16
+ # == Class Methods ========================================================
17
+ def self.user=(user)
18
+ set_user(user)
19
+ end
20
+
21
+ def self.ip_address=(user)
22
+ set_user(user)
23
+ end
24
+
25
+ def self.set(user, ip)
26
+ BetterRecord::Current.user = user.presence || nil
27
+ BetterRecord::Current.ip_address = ip.presence || nil
28
+ end
29
+
30
+ def self.drop_values
31
+ BetterRecord::Current.user = nil
32
+ BetterRecord::Current.ip_address = nil
33
+ end
34
+
35
+ # == Instance Methods =====================================================
36
+
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sampson Crowley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-26 00:00:00.000000000 Z
11
+ date: 2018-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -193,8 +193,8 @@ files:
193
193
  - lib/better_record/fake_redis.rb
194
194
  - lib/better_record/migration.rb
195
195
  - lib/better_record/nullify_blank_attributes.rb
196
+ - lib/better_record/polymorphic_override.rb
196
197
  - lib/better_record/railtie.rb
197
- - lib/better_record/reflection.rb
198
198
  - lib/better_record/relation.rb
199
199
  - lib/better_record/rspec/extensions.rb
200
200
  - lib/better_record/rspec/extensions/boolean_column.rb
@@ -208,6 +208,7 @@ files:
208
208
  - lib/generators/better_record/eject_rspec_extensions/eject_rspec_extensions_generator.rb
209
209
  - lib/generators/better_record/setup/USAGE
210
210
  - lib/generators/better_record/setup/setup_generator.rb
211
+ - lib/generators/better_record/setup/templates/current.rb
211
212
  - lib/generators/better_record/setup/templates/gitattributes
212
213
  - lib/generators/better_record/setup/templates/gitignore
213
214
  - lib/generators/better_record/setup/templates/initializer.rb
@@ -1,21 +0,0 @@
1
- module BetterRecord
2
- module Reflection
3
- class AbstractReflection
4
- def join_scope(table, foreign_klass)
5
- predicate_builder = predicate_builder(table)
6
- scope_chain_items = join_scopes(table, predicate_builder)
7
- klass_scope = klass_join_scope(table, predicate_builder)
8
-
9
- if type
10
- klass_scope.where!(type => foreign_klass.__send__(options[:primary_type] || :table_name))
11
- end
12
-
13
- scope_chain_items.inject(klass_scope, &:merge!)
14
- end
15
- end
16
-
17
- class RuntimeReflection < AbstractReflection # :nodoc:
18
- delegate :scope, :type, :constraints, :get_join_keys, :options, to: :@reflection
19
- end
20
- end
21
- end