class Napa::CLI::Model

Note: This currently does not support namespaced model creation.

Public Instance Methods

generate_model() click to toggle source
# File lib/napa/cli/model.rb, line 33
def generate_model
  # In order to check for class collisions, the Grape environment needs to be loaded.
  say 'Generating model...'
  self.class.source_root "#{File.dirname(__FILE__)}/templates"
  create_migration_file
  create_model_file
  create_factory_file
  create_model_spec_file
  say 'Done!', :green
end
parse_attributes!() click to toggle source
# File lib/napa/cli/model.rb, line 27
def parse_attributes!
  self.attributes = (attributes || []).map do |attr|
    GeneratedAttribute.parse(attr)
  end
end

Protected Instance Methods

attributes_with_index() click to toggle source
# File lib/napa/cli/model.rb, line 120
def attributes_with_index
  attributes.select { |a| !a.reference? && a.has_index? }
end
create_factory_file() click to toggle source
# File lib/napa/cli/model.rb, line 64
def create_factory_file
  template factory_template, "#{factory_output_directory}/#{table_name}.rb"
end
create_migration_file() click to toggle source
# File lib/napa/cli/model.rb, line 50
def create_migration_file
  return unless options[:migration] && options[:parent].nil?
  attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false

  # This does not currently check for similar migrations.
  #   This can be done by overriding the CreateFile Thor action and
  #   implementing the exists? and on_conflict_behavior methods.
  template migration_template, "#{migration_output_directory}/#{version}_#{migration_name}.rb"
end
create_model_file() click to toggle source
# File lib/napa/cli/model.rb, line 60
def create_model_file
  template model_template, "#{model_output_directory}/#{model_name}.rb"
end
create_model_spec_file() click to toggle source
# File lib/napa/cli/model.rb, line 68
def create_model_spec_file
  template model_spec_template, "#{model_spec_output_directory}/#{model_name}_spec.rb"
end
factory_output_directory() click to toggle source
# File lib/napa/cli/model.rb, line 108
def factory_output_directory
  './spec/factories'
end
factory_template() click to toggle source
# File lib/napa/cli/model.rb, line 104
def factory_template
  "model/spec/factories/factory.rb.tt"
end
migration_name() click to toggle source
# File lib/napa/cli/model.rb, line 76
def migration_name
  "create_#{table_name}"
end
migration_output_directory() click to toggle source
# File lib/napa/cli/model.rb, line 92
def migration_output_directory
  './db/migrate'
end
migration_template() click to toggle source
# File lib/napa/cli/model.rb, line 84
def migration_template
  "model/db/migrate/migration.rb.tt"
end
model_name() click to toggle source
# File lib/napa/cli/model.rb, line 72
def model_name
  name.underscore
end
model_output_directory() click to toggle source
# File lib/napa/cli/model.rb, line 100
def model_output_directory
  './app/models'
end
model_spec_output_directory() click to toggle source
# File lib/napa/cli/model.rb, line 116
def model_spec_output_directory
  './spec/models'
end
model_spec_template() click to toggle source
# File lib/napa/cli/model.rb, line 112
def model_spec_template
  "model/spec/models/model_spec.rb.tt"
end
model_template() click to toggle source
# File lib/napa/cli/model.rb, line 96
def model_template
  "model/app/models/model.rb.tt"
end
parent_class_name() click to toggle source
# File lib/napa/cli/model.rb, line 88
def parent_class_name
  options[:parent] || "ActiveRecord::Base"
end
table_name() click to toggle source
# File lib/napa/cli/model.rb, line 80
def table_name
  model_name.pluralize
end
version() click to toggle source
# File lib/napa/cli/model.rb, line 46
def version
  Time.now.utc.strftime("%Y%m%d%H%M%S")
end