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

Version Path
biggs-0.3.3 lib/biggs/activerecord.rb
biggs-0.3.2 lib/biggs/activerecord.rb
biggs-0.3.1 lib/biggs/activerecord.rb
biggs-0.3.0 lib/biggs/activerecord.rb
biggs-0.2.2 lib/biggs/activerecord.rb