Sha256: 0c9d8be9258ace97e33acc0abebf5acc475022b3944d697e22d1d5a7325e25eb

Contents?: true

Size: 985 Bytes

Versions: 4

Compression:

Stored size: 985 Bytes

Contents

# Provides a method to setup a field on a model.
module FieldHelpers
  class InvalidFieldClass < RuntimeError ; end

  module ClassMethods
    # field lets you declare your fields instead of using the underscore syntax.
    # An optional class restriction can be passed in.
    def field(name, klass=nil)
      if klass && ![String, Numeric].include?(klass)
        raise FieldHelpers::InvalidFieldClass, "valid field types is currently limited to String or Numeric"
      end

      define_method(name) do
        read_attribute(name)
      end

      define_method(:"#{name}=") do |val|
        # Check if the value assigned matches the class restriction
        if klass
          # Cast to the right type
          if klass == String
            val = val.to_s
          elsif klass == Numeric
            val = val.to_f
          end
        end

        assign_attribute(name, val)
      end
    end
  end

  def self.included(base)
    base.send :extend, ClassMethods
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
volt-0.8.27.beta2 lib/volt/models/field_helpers.rb
volt-0.8.27.beta1 lib/volt/models/field_helpers.rb
volt-0.8.26.beta1 lib/volt/models/field_helpers.rb
volt-0.8.26 lib/volt/models/field_helpers.rb