module FixtureGroup::FixtureGroupMethod

Public Instance Methods

fixture_group(fixture_set_dirname, *fixture_set_names) click to toggle source

@param [String, Symbol] fixture_set_dirname @param [Array<String, Symbol>] fixture_set_names @example See `*_test.rb` in github.com/hidakatsuya/fixture_group/tree/master/test/integration

# File lib/fixture_group/fixture_group_method.rb, line 9
def fixture_group(fixture_set_dirname, *fixture_set_names)
  fixture_set_path = Pathname(fixture_path).join(fixture_set_dirname.to_s)

  if fixture_set_names.first == :all
    fixture_set_names = Pathname.glob("#{fixture_set_path}/**/*.yml")
    fixture_set_names.map! do |f|
      f.relative_path_from(fixture_set_path).to_path[0..-5]
    end
  else
    fixture_set_names = fixture_set_names.map(&:to_s)
  end

  paths, classes = [], {}

  fixture_set_names.each do |fixture_name|
    path = "#{fixture_set_dirname}/#{fixture_name}"

    unless self.fixture_class_names.key?(path)
      classes[path] = fixture_name.singularize.camelize.constantize
    end
    paths << path
  end

  set_fixture_class(classes)
  fixtures(paths)
  setup_fixture_group_accessors(paths, fixture_set_names)

  register_fixture_group_dirname(fixture_set_dirname.to_s)
end
register_fixture_group_dirname(dirname) click to toggle source
# File lib/fixture_group/fixture_group_method.rb, line 51
def register_fixture_group_dirname(dirname)
  return if FixtureGroup.fixture_group_dirnames.include?(dirname)
  FixtureGroup.fixture_group_dirnames << dirname
end
setup_fixture_group_accessors(paths, fixture_set_names) click to toggle source
# File lib/fixture_group/fixture_group_method.rb, line 41
def setup_fixture_group_accessors(paths, fixture_set_names)
  current_accessor_names = paths.map { |path| path.tr('/', '_').to_sym }
  new_accessor_names = fixture_set_names.map(&:to_sym)

  alias_accessor_names = Hash[current_accessor_names.zip(new_accessor_names)]
  alias_accessor_names.each do |current_name, new_name|
    alias_method new_name, current_name
  end
end