Sha256: 9f0a63fb20cf0f08cb7ad6996c78122239c44fd119251bc2599a419a472f50a5

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

module Coupler
  module Models
    class Field < Sequel::Model
      include CommonModel
      many_to_one :resource
      one_to_many :transformations, :key => :source_field_id

      TYPES = {
        'integer'  => {:type => Integer},
        'string'   => {:type => String, :size => 255},
        'datetime' => {:type => DateTime}
      }

      def local_column_options
        { :name => name, :primary_key => is_primary_key }.merge!(TYPES[final_type])
      end

      def final_type
        local_type || self[:type]
      end

      def final_db_type
        local_db_type || db_type
      end

      def scenarios_dataset
        marshalled_id = [Marshal.dump(id)].pack('m')
        Scenario.
          select(:scenarios.*).
          filter({:project_id => resource.project_id} & ({:resource_1_id => resource_id} | {:resource_2_id => resource_id})).
          join(Matcher, :scenario_id => :id).
          join(Comparison, :matcher_id => :id).
          filter({:lhs_type => 'field', :raw_lhs_value => marshalled_id} | {:rhs_type => 'field', :raw_rhs_value => marshalled_id})
      end

      def name_sym
        @name_sym ||= name.to_sym
      end

      private
        def validate
          super
          validates_presence [:name, :resource_id]
          validates_unique [:name, :resource_id]
        end

        def before_save
          super
          case is_primary_key
          when TrueClass, 1
            self.is_selected = 1
          end
        end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
coupler-0.0.9-java lib/coupler/models/field.rb
coupler-0.0.8-java lib/coupler/models/field.rb