Sha256: 4162893d8df32ce56b790f2d68f0fae2986843381f0ca36dc99643d8a1d615aa

Contents?: true

Size: 1015 Bytes

Versions: 82

Compression:

Stored size: 1015 Bytes

Contents

# frozen_string_literal: true

class Integer
  def self.models
    @@record_models ||= Hash[*Dir[Rails.root.join('app', 'models', '**.rb')].map do |file|
      @str_idx ||= Rails.root.join('app', 'models').to_s.size + 1
      str = file[@str_idx..-4]
      [str, str]
    end.flatten]
  end

  def self.add_lookup_method(method_name, klass)
    self.__send__ :define_method, method_name.to_sym do
      klass.find_by(id: self)
    end
  end

  def cents
    StoreAsInt.money(self)
  end

  def percentage
    StoreAsInt.exchange_rate(self)
  end

  def method_missing(method, *args)
    begin
      if m = is_model_lookup?(method)
        m = m.classify.constantize
        Integer.add_lookup_method method, m
        m.find_by(id: self)
      else
        raise NoMethodError
      end
    rescue NoMethodError
      super(method, *args)
    end
  end

  private
    def is_model_lookup?(method = nil)
      (method.to_s =~ /^to\_[a-zA-Z\_0-9]+$/) &&
      (Integer.models[method.to_s.sub("to_", '')])
    end
end

Version data entries

82 entries across 82 versions & 1 rubygems

Version Path
better_record-0.25.2 config/initializers/core_ext/integer.rb
better_record-0.25.1 config/initializers/core_ext/integer.rb
better_record-0.25.0 config/initializers/core_ext/integer.rb
better_record-0.24.4 config/initializers/core_ext/integer.rb
better_record-0.24.3 config/initializers/core_ext/integer.rb
better_record-0.23.7 config/initializers/core_ext/integer.rb
better_record-0.23.6 config/initializers/core_ext/integer.rb
better_record-0.23.5 config/initializers/core_ext/integer.rb
better_record-0.23.4 config/initializers/core_ext/integer.rb
better_record-0.23.3 config/initializers/core_ext/integer.rb
better_record-0.22.9 config/initializers/core_ext/integer.rb
better_record-0.22.8 config/initializers/core_ext/integer.rb
better_record-0.22.7 config/initializers/core_ext/integer.rb
better_record-0.22.6 config/initializers/core_ext/integer.rb
better_record-0.22.5 config/initializers/core_ext/integer.rb
better_record-0.22.4 config/initializers/core_ext/integer.rb
better_record-0.22.3 config/initializers/core_ext/integer.rb
better_record-0.21.3 config/initializers/core_ext/integer.rb
better_record-0.22.2 config/initializers/core_ext/integer.rb
better_record-0.22.0 config/initializers/core_ext/integer.rb