class ModularizeSinatra::AppGenerator
Attributes
app_name[RW]
app_root[RW]
controller_module_name[RW]
controller_name[RW]
module_name[RW]
test_framework[RW]
Public Class Methods
new(app_name, controller_name)
click to toggle source
# File lib/modularize_sinatra/app_generator.rb, line 5 def initialize app_name, controller_name @app_name = app_name @controller_name = controller_name @controller_module_name = controller_name.camelize @module_name = app_name.camelize @templates_path = File.join(File.expand_path(File.dirname(__FILE__)), 'templates') @test_framework = "rspec" end
Public Instance Methods
add_dir(destination)
click to toggle source
this method adds directory w.r.t root path of the app
# File lib/modularize_sinatra/app_generator.rb, line 43 def add_dir destination destination_path = full_path(destination) Dir.mkdir(destination_path) unless Dir.exists?(destination_path) puts "creating directory #{@app_name}/#{destination}" end
add_file(source, destination)
click to toggle source
# File lib/modularize_sinatra/app_generator.rb, line 18 def add_file source, destination destination_path = full_path(destination) input = File.read(File.join(@templates_path, source)) eruby = Erubis::Eruby.new(input) already_exists = false overwrite = true if File.exists?(destination_path) print "File #{destination_path} already exists. Overwrite(Y/n)? " user_says = STDIN.gets.chomp overwrite = false unless user_says.downcase == 'y' already_exists = true end if overwrite puts "#{already_exists ? 'overwriting' : 'creating'}" << " #{destination_path}" File.open(destination_path, 'w') { |file| file.write(eruby.result(binding())) } else puts "skipping #{destination_path}" end end
create_app_dir()
click to toggle source
# File lib/modularize_sinatra/app_generator.rb, line 49 def create_app_dir Dir.mkdir(@app_name) unless Dir.exists?(@app_name) @app_root = File.join(Dir.pwd, @app_name) end
full_path(destination)
click to toggle source
# File lib/modularize_sinatra/app_generator.rb, line 14 def full_path destination File.join(@app_root, destination) end
generate()
click to toggle source
# File lib/modularize_sinatra/app_generator.rb, line 54 def generate # generate root directory create_app_dir # create all directories # order is important here dirs = [ "config", "lib", "lib/controllers", "lib/views", "spec", "spec/controllers" ] # if controller is not default if @controller_name != "ping" dirs << "lib/views/#{@controller_name.pluralize}" end dirs.each do |dir| add_dir(dir) end # create all files files = { "config/environment.rb" => "config/environment.rb", "lib/app.rb" => "lib/app.rb", "spec/spec_helper.rb" => "spec/spec_helper.rb", "config.ru" => "config.ru", "Gemfile" => "Gemfile", "module.rb" => "#{@app_name}.rb", "Rakefile" => "Rakefile" } # add default ping controller if @controller_name == "ping" files["lib/controllers/ping.rb"] = "lib/controllers/ping.rb" files["spec/controllers/ping_spec.rb"] = "spec/controllers/ping_spec.rb" else files["lib/controllers/controller.rb"] = "lib/controllers/#{@controller_name}.rb" files["lib/views/index.erb"] = "lib/views/#{@controller_name.pluralize}/index.erb" files["spec/controllers/controller_spec.rb"] = "spec/controllers/#{@controller_name}_spec.rb" end files.each do |src, dest| add_file src, dest end end