Module: Poly::Owners
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/poly/owners.rb
Class Method Summary collapse
- .apply_owner(record, owner, type_column, id_column, allow_nil: true) ⇒ Object
- .assign_nil_owner(record, type_column, id_column, allow_nil:) ⇒ Object
- .resolve_owner(record, owner) ⇒ Object
Class Method Details
.apply_owner(record, owner, type_column, id_column, allow_nil: true) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/poly/owners.rb', line 34 def self.apply_owner(record, owner, type_column, id_column, allow_nil: true) resolved = resolve_owner(record, owner) if resolved.nil? assign_nil_owner(record, type_column, id_column, allow_nil: allow_nil) elsif resolved.is_a?(ActiveRecord::Base) raise ArgumentError, 'owner must be persisted' unless resolved.persisted? record.public_send(:"#{type_column}=", resolved.class.base_class.name) record.public_send(:"#{id_column}=", resolved.id) else raise ArgumentError, "owner must resolve to an ActiveRecord::Base, got #{resolved.class}" end end |
.assign_nil_owner(record, type_column, id_column, allow_nil:) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/poly/owners.rb', line 48 def self.assign_nil_owner(record, type_column, id_column, allow_nil:) raise ArgumentError, 'owner resolved to nil' unless allow_nil record.public_send(:"#{type_column}=", nil) record.public_send(:"#{id_column}=", nil) end |
.resolve_owner(record, owner) ⇒ Object
55 56 57 58 59 60 61 62 63 64 |
# File 'lib/poly/owners.rb', line 55 def self.resolve_owner(record, owner) case owner when Proc record.instance_exec(&owner) when Symbol, String record.public_send(owner) else owner end end |