class BrainDamage::ResourceGenerator

Attributes

resource[RW]
resource_root[RW]

Public Class Methods

start(args, config) click to toggle source
Calls superclass method
# File lib/generators/brain_damage/resource/resource_generator.rb, line 24
def self.start(args, config)
  self.resource = get_resource_description args

  args = resource.parametizer.as_cmd_parameters + ['--force', '--no-test-framework', '--no-routes'] # always force views
  @ignore_migration = self.resource.migration.skip?

  if @ignore_migration
    args << '--no-migration'
  end

  hook_for :resource_route, required: true, in: :rails unless self.has_already_added_route?

  model_file_name = File.join('app/models', "#{@resource.name.underscore.downcase}.rb")
  resource.model.setup model_file_name

  super
end

Protected Class Methods

get_base_file() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 85
def self.get_base_file
  base_file = Rails.root+'desc/base.rb'
  return File.open base_file if File.exists? base_file
end
get_description_file_from_args(args) click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 90
def self.get_description_file_from_args(args)
  description = args.select{ |arg|
    arg.starts_with? '--description' or arg.starts_with? '-d'
  }.first

  return nil unless description

  file_name = description.split('=').last.strip

  if file_name =~ /^\d+/
    full_file_name = Rails.root+'desc/'+file_name

  else
    # Try to find a directory
    file_glob = '*.'+file_name
    full_file_name = Dir[Rails.root+'desc/'+file_glob].first

    if full_file_name.blank?
      # No directory? Try a file
      file_glob += '.rb'
      full_file_name = Dir[Rails.root+'desc/'+file_glob].first
    end
  end

  if full_file_name.blank?
    raise "Couldn't find any file related with #{description}"
  else
    if File.directory? full_file_name
      self.resource_root = full_file_name
      return File.open "#{resource_root}/#{file_name.gsub(/^\d+\./, '')}.rb"
    end

    return File.open full_file_name
  end
end
get_resource_description(args) click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 80
def self.get_resource_description(args)
  initializers = [get_base_file, get_description_file_from_args(args)].reject(&:nil?)
  BrainDamage::Resource.new initializers, { root: resource_root }
end
has_already_added_route?() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 126
def self.has_already_added_route?
  File.read(Rails.root+'config/routes.rb').include? "resources :#{resource.name.pluralize.underscore}"
end

Public Instance Methods

generate_controller() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 47
def generate_controller
  file_name = File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
  @resource.controller.setup file_name
  create_file(@resource.controller.current_file_name) { @resource.controller.generate }
end
generate_model() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 53
def generate_model
  create_file(@resource.model.current_file_name) { @resource.model.generate }
end
generate_views() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 57
def generate_views
  @resource.views.views.each do |view|
    target_file_name = File.join('app/views/', controller_file_name, view.file_name)

    unless Templateable::ViewTemplateable.skip_overwrite? target_file_name
      create_file(target_file_name) { view.render }
    end
  end
end
improve_migration_code() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 67
def improve_migration_code
  return if @ignore_migration
  file_name = @resource.migration.migration_file_full_path

  return unless file_name and File.exists? file_name
  file_contents = File.read file_name

  File.open(file_name, 'w+') do |f|
    f.write @resource.migration.improve_code file_contents
  end
end
set_resource_object() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 42
def set_resource_object
  @resource = self.class.resource
  @resource.setup self
end

Protected Instance Methods

handler() click to toggle source
# File lib/generators/brain_damage/resource/resource_generator.rb, line 130
def handler
  :haml
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/generators/brain_damage/resource/resource_generator.rb, line 134
def method_missing(method, *args, &block)
  puts "BrainDamage: Failed to delegate #{method} (on: #{self.class.to_s})"
  super
end