module Rack::Blogengine::CommandLineInterface
This Module handles all cli input (running the app, generate folder skeleton)
@author [benny]
Public Class Methods
Command to generate the folder skeleton @param [String] folder
# File lib/rack/blogengine/command_line_interface.rb, line 45 def self.generate(folder) puts "\tGenerating folder skeleton\n" system("mkdir #{folder}") system("mkdir #{folder}/assets") system("mkdir #{folder}/assets/layout") system("mkdir #{folder}/assets/js") system("mkdir #{folder}/assets/style") system("mkdir #{folder}/assets/images") system("mkdir #{folder}/operator") puts "\n\tSetting up essential Files\n" setup('operator.rb', "#{folder}/operator", true) setup('config.yml', "#{folder}", true) setup('index.content', "#{folder}", true) setup('layout.html', "#{folder}/assets/layout", true) setup('style.css', "#{folder}/assets/style", false) setup('script.js', "#{folder}/assets/js", false) setup('Gemfile', "#{folder}", true) puts "\n\tSetup finished! Have Fun\n" puts "\tTo test it type rack-blogengine run #{folder}" end
Handle unavailable methods @param [String] name [called Methodname] @param [Array] *args [Available args]
# File lib/rack/blogengine/command_line_interface.rb, line 15 def self.method_missing(name, *args) puts "Command #{name} not available" print "Available Commands are: \n\n" print "\t generate -- Generates a blog folder with a basic blog skeleton\n" print "\t run -- Runs the given rack app\n" print "\n" end
Method to run the rack Application
@param [String] target
# File lib/rack/blogengine/command_line_interface.rb, line 26 def self.run(target) if target.empty? print 'Specify a targetfolder!' else if Dir.exist?("#{target}") config = get_config(target) generate_highlight_css(target) app = build_rack_app(target, config) Rack::Server.start(app: app, Port: config['Port'], server: config['Server']) else print "#{target} is not a folder!\n" end end end
Display Version @return [String] VERSION
# File lib/rack/blogengine/command_line_interface.rb, line 70 def self.version puts "\n\tVERSION: #{Rack::Blogengine::VERSION}\n" end
Private Class Methods
Build rack app via Rack::Builder @param [String] target [The Targetfolder where all relevant files are located] @param [Hash] config [Config via get_config
-> parses in config.yml]
@return [Rack::Builder] Rack
Application
# File lib/rack/blogengine/command_line_interface.rb, line 95 def self.build_rack_app(target, config) Rack::Builder.new do map '/assets' do run Rack::Directory.new("#{target}/assets") end if config['Usage'] == 'yes' use Rack::Auth::Basic, 'Protected Area' do |username, password| username == config['Username'] && password == config['Password'] end end Rack::Blogengine.documents = DocumentParser.parse_in_documents(target) run Application.new end end
Populates highlight.css with specific highlight css @param [String] target [Targetfolder in which highlight.css lives]
# File lib/rack/blogengine/command_line_interface.rb, line 78 def self.generate_highlight_css(target) system("rm #{target}/assets/style/highlight.css") if ::File.exist?("#{target}/assets/style/highlight.css") setup('highlight.css', "#{target}/assets/style", false) path = "#{target}/assets/style" css = Pygments.css(style: Rack::Blogengine.config['pygments_style']) ::File.open("#{path}/highlight.css", 'w') { |file| file.write(css) } end
Get YAML Config settings for Server.start && HTTPauth @param [String] target @return [Hash] Config
# File lib/rack/blogengine/command_line_interface.rb, line 130 def self.get_config(target) config_yaml = YAML.load(::File.open("#{target}/config.yml")) port = config_yaml['Port'] server = config_yaml['Server'] username = config_yaml['HTTPauth']['username'].to_s.strip password = config_yaml['HTTPauth']['password'].to_s.strip usage = config_yaml['HTTPauth']['usage'] pygments_style = config_yaml['Pygments']['style'] pygments_seperator = config_yaml['Pygments']['seperator'] Rack::Blogengine.config = { 'Port' => port, 'Server' => server, 'Username' => username, 'Password' => password, 'Usage' => usage, 'pygments_style' => pygments_style, 'pygments_seperator' => pygments_seperator } end
Helper method for generate to set up all essential files @param [String] name @param [String] path @param [boolean] essential
# File lib/rack/blogengine/command_line_interface.rb, line 117 def self.setup(name, path, essential) puts "\tSet up #{path}/#{name}\n" system("touch #{path}/#{name}") if essential assetspath = "#{Rack::Blogengine.root}/assets/#{name}" content = IO.read(assetspath) ::File.open("#{path}/#{name}", 'w') { |file| file.write(content) } end end