Sha256: e547031c71930f2216668cadb782cded8d0fbcb3da9a1f3fcd092ee18f7ff020

Contents?: true

Size: 1.93 KB

Versions: 43

Compression:

Stored size: 1.93 KB

Contents

require 'active_record/fixtures'

module Dataset
  module Record # :nodoc:
    
    class Fixture # :nodoc:
      attr_reader :meta, :symbolic_name, :session_binding
      
      def initialize(meta, attributes, symbolic_name, session_binding)
        @meta            = meta
        @attributes      = attributes.stringify_keys
        @symbolic_name   = symbolic_name || object_id
        @session_binding = session_binding
        
        install_default_attributes!
      end
      
      def create
        record_class.connection.insert_fixture to_fixture, meta.table_name
        id
      end
      
      def id
        @attributes['id']
      end
      
      def record_class
        meta.record_class
      end
      
      def to_fixture
        ::Fixture.new(to_hash, meta.class_name)
      end
      
      def to_hash
        hash = @attributes.dup
        hash[meta.inheritance_column] = meta.sti_name if meta.inheriting_record?
        record_class.reflections.each do |name, reflection|
          name = name.to_s
          add_reflection_attributes(hash, name, reflection) if hash[name]
        end
        hash
      end
      
      def install_default_attributes!
        @attributes['id'] ||= symbolic_name.to_s.hash.abs
        install_timestamps!
      end
      
      def install_timestamps!
        meta.timestamp_columns.each do |column|
          @attributes[column.name] = now(column) unless @attributes.key?(column.name)
        end
      end
      
      def now(column)
        (ActiveRecord::Base.default_timezone == :utc ? Time.now.utc : Time.now).to_s(:db)
      end
      
      private
        def add_reflection_attributes(hash, name, reflection)
          value = hash.delete(name)
          case value
          when Symbol
            hash[reflection.primary_key_name] = session_binding.find_id(reflection.klass, value)
          else
            hash[reflection.primary_key_name] = value
          end
        end
    end
    
  end
end

Version data entries

43 entries across 43 versions & 8 rubygems

Version Path
aiwilliams-dataset-1.2.0 lib/dataset/record/fixture.rb
aiwilliams-dataset-1.3.0 lib/dataset/record/fixture.rb
aiwilliams-dataset-1.3.1 lib/dataset/record/fixture.rb
karsthammer-dataset-1.2.0 lib/dataset/record/fixture.rb
radiant-1.1.4 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.3 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.2 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.1 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.0 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.0.rc1 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.0.beta vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.1 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.1.0.alpha vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0.rc5 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0.rc4 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0.rc3 vendor/plugins/dataset/lib/dataset/record/fixture.rb
kajam-1.0.3.rc2 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0.rc2 vendor/plugins/dataset/lib/dataset/record/fixture.rb
radiant-1.0.0.rc1 vendor/plugins/dataset/lib/dataset/record/fixture.rb