class FixtureBuilder::Configuration

Constants

ACCESSIBLE_ATTRIBUTES
SCHEMA_FILES

Public Class Methods

new(opts={}) click to toggle source
# File lib/fixture_builder/configuration.rb, line 25
def initialize(opts={})
  @namer = Namer.new(self)
  @file_hashes = file_hashes
  @write_empty_files = true
end

Public Instance Methods

delete_sql() click to toggle source
# File lib/fixture_builder/configuration.rb, line 58
def delete_sql
  @delete_sql ||= "DELETE FROM %{table}"
end
delete_sql=(sql) click to toggle source
# File lib/fixture_builder/configuration.rb, line 62
def delete_sql=(sql)
  if sql =~ /%s/
    ActiveSupport::Deprecation.warn("Passing '%s' into delete_sql is deprecated. Please use '%{table}' instead.", caller)
    sql = sql.sub(/%s/, '%{table}')
  end
  @delete_sql = sql
end
factory(&block) click to toggle source
# File lib/fixture_builder/configuration.rb, line 39
def factory(&block)
  self.files_to_check += @legacy_fixtures.to_a
  return unless rebuild_fixtures?
  @builder = Builder.new(self, @namer, block).generate!
  write_config
end
files_to_check() click to toggle source
# File lib/fixture_builder/configuration.rb, line 74
def files_to_check
  @files_to_check ||= schema_definition_files
end
files_to_check=(files) click to toggle source
# File lib/fixture_builder/configuration.rb, line 85
def files_to_check=(files)
  @files_to_check = files
  @file_hashes = file_hashes
  @files_to_check
end
fixture_builder_file() click to toggle source
# File lib/fixture_builder/configuration.rb, line 95
def fixture_builder_file
  @fixture_builder_file ||= ::Rails.root.join('tmp', 'fixture_builder.yml')
end
fixture_directory() click to toggle source
# File lib/fixture_builder/configuration.rb, line 107
def fixture_directory
  @fixture_directory ||= FixturesPath.absolute_rails_fixtures_path
end
fixtures_dir(path = '') click to toggle source
# File lib/fixture_builder/configuration.rb, line 111
def fixtures_dir(path = '')
  File.expand_path(File.join(fixture_directory, path))
end
include(*args) click to toggle source
# File lib/fixture_builder/configuration.rb, line 31
def include(*args)
  class_eval do
    args.each do |arg|
      include arg
    end
  end
end
name_model_with(model_class, &block) click to toggle source
# File lib/fixture_builder/configuration.rb, line 99
def name_model_with(model_class, &block)
  @namer.name_model_with(model_class, &block)
end
record_name_fields() click to toggle source
# File lib/fixture_builder/configuration.rb, line 91
def record_name_fields
  @record_name_fields ||= %w{ unique_name display_name name title username login }
end
schema_definition_files() click to toggle source
# File lib/fixture_builder/configuration.rb, line 78
def schema_definition_files
  Dir['db/*'].inject([]) do |result, file|
    result << file if SCHEMA_FILES.include?(file)
    result
  end
end
select_sql() click to toggle source
# File lib/fixture_builder/configuration.rb, line 46
def select_sql
  @select_sql ||= "SELECT * FROM %{table}"
end
select_sql=(sql) click to toggle source
# File lib/fixture_builder/configuration.rb, line 50
def select_sql=(sql)
  if sql =~ /%s/
    ActiveSupport::Deprecation.warn("Passing '%s' into select_sql is deprecated. Please use '%{table}' instead.", caller)
    sql = sql.sub(/%s/, '%{table}')
  end
  @select_sql = sql
end
skip_tables() click to toggle source
# File lib/fixture_builder/configuration.rb, line 70
def skip_tables
  @skip_tables ||= %w{ schema_migrations }
end
tables() click to toggle source
# File lib/fixture_builder/configuration.rb, line 103
def tables
  ActiveRecord::Base.connection.tables - skip_tables
end

Private Instance Methods

file_hashes() click to toggle source
# File lib/fixture_builder/configuration.rb, line 117
def file_hashes
  files_to_check.inject({}) do |hash, filename|
    hash[filename] = Digest::MD5.hexdigest(File.read(filename))
    hash
  end
end
read_config() click to toggle source
# File lib/fixture_builder/configuration.rb, line 124
def read_config
  return {} unless File.exist?(fixture_builder_file)
  YAML.load_file(fixture_builder_file)
end
rebuild_fixtures?() click to toggle source
# File lib/fixture_builder/configuration.rb, line 134
def rebuild_fixtures?
  file_hashes_from_disk= @file_hashes
  file_hashes_from_config= read_config
  if Dir.glob("#{fixture_directory}/*.yml").blank?
    puts "=> rebuilding fixtures because fixture directory #{fixture_directory} has no *.yml files"
    return true
  elsif !::File.exist?(fixture_builder_file)
    puts "=> rebuilding fixtures because fixture_builder config file #{fixture_builder_file} does not exist"
    return true
  elsif file_hashes_from_disk != file_hashes_from_config
    puts '=> rebuilding fixtures because one or more of the following files have changed (see http://www.rubydoc.info/gems/hashdiff for diff syntax):'
    Differ.diff(file_hashes_from_disk, file_hashes_from_config).map {|diff| print '   '; p diff}
    return true
  end
  false
end
write_config() click to toggle source
# File lib/fixture_builder/configuration.rb, line 129
def write_config
  FileUtils.mkdir_p(File.dirname(fixture_builder_file))
  File.open(fixture_builder_file, 'w') { |f| f.write(YAML.dump(@file_hashes)) }
end