class Ella::RackfileGenerator
The nature of Sinatra
and Puma means that the config.ru file must initialize certain files. To make Ella
work, this must be updated before the server is started. This is essentially a hack to deal with the fact that Sinatra
was designed, apparently, to run one single controller file.
Public Instance Methods
run(mode = 'development')
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 10 def run(mode = 'development') @mode = mode Ella.find_root Log.info('Generating rack.ru...') write end
Private Instance Methods
generate()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 64 def generate "# WARNING: This file is autmatically generated by Ella, and may be rewritten\n" \ "# at any time. Any changes you make here may vanish. The appropriate place for\n" \ "# general changes is 'main.rb', which will never be overritten by Ella.)\n" \ "require 'ella'\n\n" \ "require './main'\n\n" \ "#{require_all_models}\n" \ "#{require_all_controllers}\n\n" \ "#{use_all_controllers}\n\n" \ "run #{project_name.pascal_case}\n" end
get_controllers()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 32 def get_controllers @controllers = Dir.entries('controllers').select { |e| e =~ /\.rb$/ }.map { |e| e[0..-4] } rescue SystemCallError make_directory('controllers') retry end
get_models()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 39 def get_models @models = Dir.entries('models').select { |e| e =~ /\.rb$/ }.map { |e| e[0..-4] } rescue SystemCallError make_directory('models') retry end
main_project_file_content()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 19 def main_project_file_content Ella.abort('Warning: "main.rb" not found. Aborting.') unless File.exist?('main.rb') @main_file_content ||= File.open('main.rb').read @main_file_content end
project_name()
click to toggle source
This looks bad, but adds a good deal of flexibility for the user, should they ever be desperate to change the project name of an already-generated project.
# File lib/ella/generator/rackfile_generator.rb, line 27 def project_name raw_project_name = main_project_file_content.scan(/class (.*) < Ella::Controller/).first.first NameFormatter.new(raw_project_name) end
require_all_controllers()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 51 def require_all_controllers get_controllers @controllers && @controllers.map { |e| "require_relative 'controllers/#{e}'" }.join("\n") end
require_all_models()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 46 def require_all_models get_models @models && @models.map { |e| "require_relative 'models/#{e}'" }.join("\n") end
use_all_controllers()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 56 def use_all_controllers @controllers && @controllers.map { |e| "use #{e.capitalize}Controller" }.join("\n") end
write()
click to toggle source
# File lib/ella/generator/rackfile_generator.rb, line 60 def write File.open('rack.ru', 'w') { |f| f.puts(generate) } end