class ActiveMocker::Generate

Attributes

display_errors[R]
progress[R]

Public Class Methods

new() click to toggle source
# File lib/active_mocker/generate.rb, line 6
def initialize
  check_directory!(:mock_dir)
  create_mock_dir
  check_directory!(:model_dir)
  raise_missing_arg(:model_dir) unless Dir.exist?(config.model_dir)

  @display_errors = DisplayErrors.new(models_paths.count)
end

Public Instance Methods

active_record_models() click to toggle source
# File lib/active_mocker/generate.rb, line 30
def active_record_models
  @active_record_models ||= active_record_models_with_files.map(&:first)
end
call() click to toggle source

@return self

# File lib/active_mocker/generate.rb, line 16
def call
  clean_up
  progress_init

  active_record_models_with_files.each do |model, file|
    write_file(model, file)

    progress.increment
  end

  display_errors.display_errors
  self
end

Private Instance Methods

active_record_models_with_files() click to toggle source
# File lib/active_mocker/generate.rb, line 69
def active_record_models_with_files
  @active_record_models_with_files ||= models_paths.map do |file|
    model = constant_from(model_name_from(file))
    [model, file] if model
  end.compact
end
check_directory!(type) click to toggle source
# File lib/active_mocker/generate.rb, line 38
def check_directory!(type)
  value = config.send(type)

  if value.nil? || value.empty?
    raise_missing_arg(type)
  end
end
clean_up() click to toggle source
# File lib/active_mocker/generate.rb, line 104
def clean_up
  delete_mocks unless config.single_model_path
end
config() click to toggle source
# File lib/active_mocker/generate.rb, line 96
def config
  ActiveMocker::Config
end
constant_from(model_name) click to toggle source
# File lib/active_mocker/generate.rb, line 80
def constant_from(model_name)
  constant = model_name.constantize
  return unless constant.ancestors.include?(ActiveRecord::Base)
  constant
rescue NameError, LoadError => e
  display_errors.wrap_an_exception(e, model_name)
  nil
end
create_mock_dir() click to toggle source
# File lib/active_mocker/generate.rb, line 100
def create_mock_dir
  FileUtils.mkdir_p(config.mock_dir) unless Dir.exist?(config.mock_dir)
end
delete_mocks() click to toggle source
# File lib/active_mocker/generate.rb, line 108
def delete_mocks
  FileUtils.rm Dir.glob(File.join(config.mock_dir, "/**/*_#{config.mock_append_name.underscore}.rb"))
end
model_name_from(file) click to toggle source
# File lib/active_mocker/generate.rb, line 89
def model_name_from(file)
  FilePathToRubyClass.new(
    base_path: config.model_dir,
    class_path: file
  ).to_s
end
model_names() click to toggle source
# File lib/active_mocker/generate.rb, line 65
def model_names
  @model_names ||= active_record_models.map(&:name)
end
models_paths() click to toggle source
# File lib/active_mocker/generate.rb, line 76
def models_paths
  @models_paths ||= Dir.glob(config.single_model_path || File.join(config.model_dir, "**/*.rb"))
end
progress_init() click to toggle source
# File lib/active_mocker/generate.rb, line 61
def progress_init
  @progress = config.progress_class.create(active_record_models.count)
end
raise_missing_arg(type) click to toggle source
# File lib/active_mocker/generate.rb, line 46
def raise_missing_arg(type)
  raise ArgumentError, "#{type} is missing a valued value!"
end
write_file(model, file) click to toggle source
# File lib/active_mocker/generate.rb, line 50
def write_file(model, file)
  writer = FileWriter.new(
    model: model,
    file: file,
    display_errors: display_errors,
    config: config,
    model_names: model_names)

  writer.write!
end