module Countrizable::ActiveRecord::ClassMethods
Public Instance Methods
columns_hash()
click to toggle source
Calls superclass method
# File lib/countrizable/active_record/class_methods.rb, line 7 def columns_hash super.except(*country_attribute_names.map(&:to_s)) end
country_attributed?(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 37 def country_attributed?(name) country_attribute_names.include?(name.to_sym) end
country_column_name(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 72 def country_column_name(name) "#{country_value_class.table_name}.#{name}" end
country_value_class()
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 51 def country_value_class @country_value_class ||= begin if self.const_defined?(:CountryValue, false) klass = self.const_get(:CountryValue, false) else klass = self.const_set(:CountryValue, Class.new(Countrizable::ActiveRecord::CountryValue)) end klass.belongs_to :countrizable_model, class_name: self.name, foreign_key: country_value_options[:foreign_key], inverse_of: :country_values, touch: country_value_options.fetch(:touch, false) klass end end
country_values_table_name()
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 68 def country_values_table_name country_value_class.table_name end
required_attributes()
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 41 def required_attributes warn 'required_attributes is deprecated and will be removed in the next release of Countrizable.' validators.map { |v| v.attributes if v.is_a?(ActiveModel::Validations::PresenceValidator) }.flatten end
required_country_attributes()
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 46 def required_country_attributes warn 'required_country_attributes is deprecated and will be removed in the next release of Countrizable.' country_attribute_names & required_attributes end
with_country_attribute(name, value, country = Countrizable.fallbacks)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 30 def with_country_attribute(name, value, country = Countrizable.fallbacks) with_country_values.where( country_column_name(name) => value, country_column_name(:country_code) => Array(country_codes).map(&:to_s) ) end
with_country_codes(*country_code)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 12 def with_country_codes(*country_code) all.merge country_value_class.with_country_codes(*country_codes) end
with_country_values(*country_codes)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 16 def with_country_values(*country_codes) country_codes = values_country_codes if country_codes.empty? preload(:country_values).joins(:country_values).readonly(false).with_country_codes(country_codes).tap do |query| query.distinct! unless country_codes.flatten.one? end end
with_required_attributes()
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 23 def with_required_attributes warn 'with_required_attributes is deprecated and will be removed in the next release of Countrizable.' required_country_attributes.inject(all) do |scope, name| scope.where("#{country_column_name(name)} IS NOT NULL") end end
Protected Instance Methods
define_country_attr_accessor(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 100 def define_country_attr_accessor(name) attribute(name, ::ActiveRecord::Type::Value.new) define_country_attr_reader(name) define_country_attr_writer(name) end
define_country_attr_reader(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 87 def define_country_attr_reader(name) define_method(name) do |*args| Countrizable::Interpolation.interpolate(name, self, args) end alias_method :"#{name}_before_type_cast", name end
define_country_attr_writer(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 94 def define_country_attr_writer(name) define_method(:"#{name}=") do |value| write_attribute(name, value) end end
define_country_values_accessor(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 123 def define_country_values_accessor(name) define_country_values_reader(name) define_country_values_writer(name) end
define_country_values_reader(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 106 def define_country_values_reader(name) define_method(:"#{name}_country_values") do hash = country_attribute_by_country_code(name) countrizable.stash.keys.each_with_object(hash) do |country_code, result| result[country_code] = countrizable.fetch_stash(country_code, name) if countrizable.stash_contains?(country_code, name) end end end
define_country_values_writer(name)
click to toggle source
# File lib/countrizable/active_record/class_methods.rb, line 115 def define_country_values_writer(name) define_method(:"#{name}_country_values=") do |value| value.each do |(country_code, _value)| write_attribute name, _value, :country_code => country_code end end end
Private Instance Methods
relation()
click to toggle source
Override the default relation method in order to return a subclass of ActiveRecord::Relation with custom finder and calculation methods for country attributes.
Calls superclass method
# File lib/countrizable/active_record/class_methods.rb, line 81 def relation super.extending!(CountryAttributesQuery) end