module Vinber
Constants
- VERSION
- VINBER_CONFLICT_MESSAGE
Public Class Methods
extended(base)
click to toggle source
# File lib/vinber.rb, line 10 def self.extended(base) base.class_attribute(:defined_vinbers, instance_writer: false) base.defined_vinbers = {} end
Public Instance Methods
inherited(base)
click to toggle source
Calls superclass method
# File lib/vinber.rb, line 15 def inherited(base) base.defined_vinbers = defined_vinbers.deep_dup super end
vinber(definitions)
click to toggle source
# File lib/vinber.rb, line 20 def vinber(definitions) need_validates = definitions.delete(:validates) need_scope = definitions.delete(:scope) definitions.each do |name, values| detect_vinber_conflict! name validates_from_vinber name, values if need_validates scope_from_vinber name, values if need_scope defined_vinbers[name.to_s] = case when values.is_a?(Hash) values.with_indifferent_access when values.is_a?(Array) values else Array.wrap values.to_s end end end
vinber_defined?(attr_key = nil)
click to toggle source
# File lib/vinber.rb, line 42 def vinber_defined?(attr_key = nil) attr_key ? defined_vinbers.has_key?(attr_key.to_s) : defined_vinbers.present? end
vinbers()
click to toggle source
# File lib/vinber.rb, line 38 def vinbers Vinber::CurrentVinbers.new defined_vinbers end
Private Instance Methods
detect_vinber_conflict!(name)
click to toggle source
# File lib/vinber.rb, line 51 def detect_vinber_conflict!(name) if vinber_defined?(name) raise_vinber_conflict_error(name, 'Vinber') elsif defined_enums[name.to_s] raise_vinber_conflict_error(name, 'Enum') end end
raise_vinber_conflict_error(name, source)
click to toggle source
# File lib/vinber.rb, line 72 def raise_vinber_conflict_error(name, source) raise ArgumentError, VINBER_CONFLICT_MESSAGE % { name: name, klass: self.name, source: source } end
scope_from_vinber(name, val)
click to toggle source
# File lib/vinber.rb, line 64 def scope_from_vinber(name, val) if val.is_a?(Hash) val.each do |key, value| class_eval { scope key, -> { where(name => value) } } end end end
validates_from_vinber(name, val)
click to toggle source
# File lib/vinber.rb, line 59 def validates_from_vinber(name, val) val = val.is_a?(Hash) ? val.values : Array.wrap(val).flatten class_eval { validates name.to_sym, inclusion: {in: val} } end