Sha256: 1f88176fb6d712779bf76d538196eba65bb8d17b3006e45533d1d1484659ef8b
Contents?: true
Size: 1.81 KB
Versions: 5
Compression:
Stored size: 1.81 KB
Contents
require 'active_support/core_ext/class/attribute' module Biggs module ActiveRecordAdapter def self.included(base) base.extend(InitialClassMethods) end module InitialClassMethods def biggs(method_name=nil, options={}) self.class_attribute :biggs_value_methods self.class_attribute :biggs_instance self.send(:include, Biggs::ActiveRecordAdapter::InstanceMethods) alias_method(method_name || :postal_address, :biggs_postal_address) value_methods = {} Biggs::Formatter::FIELDS.each do |field| value_methods[field] = options.delete(field) if options[field] end self.biggs_value_methods = value_methods self.biggs_instance = Biggs::Formatter.new(options) end end module InstanceMethods def biggs_postal_address self.class.biggs_instance.format(biggs_country, biggs_values) end private def biggs_country biggs_get_value(:country) end def biggs_values values = {} (Biggs::Formatter::FIELDS - [:country]).each do |field| values[field] = biggs_get_value(field) end values end def biggs_get_value(field) key = self.class.biggs_value_methods[field.to_sym] || field.to_sym case key when Symbol self.send(key.to_sym) when Proc key.call(self).to_s when Array if key.all?{|it| it.is_a?(Symbol) } key.map{|method| self.send(method) }.reject(&:blank?).join("\n") else raise "Biggs: Can't handle #{field} type Array with non-symbolic entries" end else raise "Biggs: Can't handle #{field} type #{key.class}" end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems