Sha256: 63e565b88d22bcff199e19f93b32e6b00c33828c892917446381e96e08f81d93

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

require 'kangaroo/model/attributes'

module Kangaroo
  module Model
    class Field
      AssociationTypes = %w(many2one one2many one2one many2many)
      autoload :Readonly, 'kangaroo/model/field/readonly'
      
      include Attributes
      include Readonly

      attr_accessor :name
      define_multiple_accessors :change_default, :context, :digits, :domain, :fnct_inv, :fnct_inv_arg, 
                                :fnct_search, :func_method, :func_obj, :function, :help, :invisible, 
                                :readonly, :related_columns, :relation, :required, :select, :selectable, 
                                :selection, :size, :states, :store, :string, :third_table, :translate, 
                                :type, :namespace
                                
      def selection?
        type == 'selection'
      end
      
      def char?
        type == 'char'
      end
      
      def float?
        type == 'float'
      end
      
      def functional?
        !!function
      end
      
      def selectable?
        !!selectable
      end
      
      def association?
        AssociationTypes.include? type
      end
                                
      def initialize name, attributes = {}
        @attributes = {}
        @name = name
        
        attributes.each do |key, val|
          write_attribute key, val
        end
        
        self.states = attributes[:states] if attributes[:states]
      end
      
      def setter_name
        "#{name}="
      end
      
      def required?
        !!required
      end
      
      def states= states
        coerced_states = {}
        
        states.each do |name, effects|
          coerced_states[name.to_s] = Hash[effects]
        end
        write_attribute :states, coerced_states
      end
      
      def relation_class
        @relation_class ||= namespace.class_for relation rescue nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kangaroo-0.1.0.alpha1 lib/kangaroo/model/field.rb