Module: DataMapper::TestFixtures::ClassMethods

Defined in:
lib/dm-fixtures/fixtures.rb

Instance Method Summary collapse

Instance Method Details

#fixtures(*fixture_names) ⇒ Object



814
815
816
817
818
819
820
821
822
823
824
825
# File 'lib/dm-fixtures/fixtures.rb', line 814

def fixtures(*fixture_names)
  if fixture_names.first == :all
    fixture_names = Dir["#{fixture_path}/**/*.{yml}"]
    fixture_names.map! { |f| f[(fixture_path.size + 1)..-5] }
  else
    fixture_names = fixture_names.flatten.map { |n| n.to_s }
  end

  self.fixture_table_names |= fixture_names
  require_fixture_classes(fixture_names)
  setup_fixture_accessors(fixture_names)
end

#require_fixture_classes(fixture_names = nil) ⇒ Object



839
840
841
842
843
844
845
# File 'lib/dm-fixtures/fixtures.rb', line 839

def require_fixture_classes(fixture_names = nil)
  (fixture_names || fixture_table_names).each do |fixture_name|
    file_name = fixture_name.to_s
    file_name = file_name.singularize if DataMapper.repository.adapter.resource_naming_convention != DataMapper::NamingConventions::Resource::Underscored
    try_to_load_dependency(file_name)
  end
end

#set_fixture_class(class_names = {}) ⇒ Object



810
811
812
# File 'lib/dm-fixtures/fixtures.rb', line 810

def set_fixture_class(class_names = {})
  self.fixture_class_names = self.fixture_class_names.merge(class_names)
end

#setup_fixture_accessors(fixture_names = nil) ⇒ Object



847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
# File 'lib/dm-fixtures/fixtures.rb', line 847

def setup_fixture_accessors(fixture_names = nil)
  fixture_names = Array.wrap(fixture_names || fixture_table_names)
  methods = Module.new do
    fixture_names.each do |fixture_name|
      fixture_name = fixture_name.to_s.tr('./', '_')

      define_method(fixture_name) do |*fixtures|
        force_reload = fixtures.pop if fixtures.last == true || fixtures.last == :reload

        @fixture_cache[fixture_name] ||= {}

        instances = fixtures.map do |fixture|
          @fixture_cache[fixture_name].delete(fixture) if force_reload

          if @loaded_fixtures[fixture_name][fixture.to_s]
            ActiveRecord::IdentityMap.without do
              @fixture_cache[fixture_name][fixture] ||= @loaded_fixtures[fixture_name][fixture.to_s].find
            end
          else
            raise StandardError, "No fixture with name '#{fixture}' found for table '#{fixture_name}'"
          end
        end

        instances.size == 1 ? instances.first : instances
      end
      private fixture_name
    end
  end
  include methods
end

#try_to_load_dependency(file_name) ⇒ Object



827
828
829
830
831
832
833
834
835
836
837
# File 'lib/dm-fixtures/fixtures.rb', line 827

def try_to_load_dependency(file_name)
  require_dependency file_name
rescue LoadError => e
  # Let's hope the developer has included it himself

  # Let's warn in case this is a subdependency, otherwise
  # subdependency error messages are totally cryptic
  if DataMapper.logger
    DataMapper.logger.push("Unable to load #{file_name}, underlying cause #{e.message} \n\n #{e.backtrace.join("\n")}")
  end
end

#uses_transaction(*methods) ⇒ Object



878
879
880
881
# File 'lib/dm-fixtures/fixtures.rb', line 878

def uses_transaction(*methods)
  @uses_transaction = [] unless defined?(@uses_transaction)
  @uses_transaction.concat methods.map { |m| m.to_s }
end

#uses_transaction?(method) ⇒ Boolean

Returns:

  • (Boolean)


883
884
885
886
# File 'lib/dm-fixtures/fixtures.rb', line 883

def uses_transaction?(method)
  @uses_transaction = [] unless defined?(@uses_transaction)
  @uses_transaction.include?(method.to_s)
end