Class: Webby::Apps::Main
- Inherits:
-
Object
- Object
- Webby::Apps::Main
- Defined in:
- lib/webby/apps/main.rb
Instance Attribute Summary collapse
-
#cmd_line_options ⇒ Object
readonly
Returns the value of attribute cmd_line_options.
Class Method Summary collapse
-
.run(args) ⇒ Object
Create a new instance of Main, and run the
webby
application given the command line args.
Instance Method Summary collapse
-
#app ⇒ Object
Return the Rake application object.
- #capture_command_line_args(args) ⇒ Object
-
#find_sitefile ⇒ Object
Search for the “Sitefile” starting in the current directory and working upwards through the filesystem until the root of the filesystem is reached.
- #import_default_tasks ⇒ Object
- #import_website_tasks ⇒ Object
-
#init(args) ⇒ Object
Initialize the Rake application object and load the core rake tasks, the site specific rake tasks, and the site specific ruby code.
-
#initialize ⇒ Main
constructor
Create a new Main webby object for building websites.
-
#load_command_line_options ⇒ Object
Load options from the command line into the ::Webby.site struct.
-
#options ⇒ Object
Returns the options hash from the Rake application object.
-
#parse(args) ⇒ Object
Parse the command line args for options and commands to invoke.
-
#rake ⇒ Object
Execute the rake command.
- #require_lib_files ⇒ Object
-
#run(args) ⇒ Object
Runs the main webby application.
-
#show_options(attribute = nil) ⇒ Object
Print the available configuration options.
Constructor Details
#initialize ⇒ Main
Create a new Main webby object for building websites.
19 20 21 22 23 |
# File 'lib/webby/apps/main.rb', line 19 def initialize @stdout = $stdout @cmd_line_options = {} @command = %w[rake] end |
Instance Attribute Details
#cmd_line_options ⇒ Object (readonly)
Returns the value of attribute cmd_line_options.
15 16 17 |
# File 'lib/webby/apps/main.rb', line 15 def @cmd_line_options end |
Class Method Details
.run(args) ⇒ Object
Create a new instance of Main, and run the webby
application given the command line args.
11 12 13 |
# File 'lib/webby/apps/main.rb', line 11 def self.run( args ) self.new.run args end |
Instance Method Details
#app ⇒ Object
Return the Rake application object.
151 152 153 |
# File 'lib/webby/apps/main.rb', line 151 def app Rake.application end |
#capture_command_line_args(args) ⇒ Object
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/webby/apps/main.rb', line 188 def capture_command_line_args(args) args = OpenStruct.new( :raw => args, :rake => ARGV.dup ) if args.raw.size > 1 ::Webby.deprecated "multiple arguments used for page title", "please quote the page title" end dashed = args.raw.join('-').downcase spaced = args.raw.join(' ') dir = ::File.dirname(dashed) args.dir = ('.' == dir ? '' : dir) args.slug = ::Webby::Resources.basename(dashed).to_url args.title = ::Webby::Resources.basename(spaced).titlecase # page should be dir/slug without leading / args.page = ::File.join(args.dir, args.slug).gsub(/^\//, '') ext = ::File.extname(dashed) args.page << ext unless ext.empty? ::Webby.site.args = args Object.const_set(:SITE, Webby.site) args end |
#find_sitefile ⇒ Object
Search for the “Sitefile” starting in the current directory and working upwards through the filesystem until the root of the filesystem is reached. If a “Sitefile” is not found, a RuntimeError is raised.
165 166 167 168 169 170 171 172 173 174 |
# File 'lib/webby/apps/main.rb', line 165 def find_sitefile here = Dir.pwd while ! app.have_rakefile Dir.chdir("..") if Dir.pwd == here || .nosearch fail "No Sitefile found" end here = Dir.pwd end end |
#import_default_tasks ⇒ Object
176 177 178 |
# File 'lib/webby/apps/main.rb', line 176 def import_default_tasks Dir.glob(::Webby.libpath(%w[webby tasks *.rake])).sort.each {|fn| import fn} end |
#import_website_tasks ⇒ Object
180 181 182 |
# File 'lib/webby/apps/main.rb', line 180 def import_website_tasks Dir.glob(::File.join(%w[tasks *.rake])).sort.each {|fn| import fn} end |
#init(args) ⇒ Object
Initialize the Rake application object and load the core rake tasks, the site specific rake tasks, and the site specific ruby code. Any extra command line arguments are converted into a page name and directory that might get created (depending upon the task invoked).
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/webby/apps/main.rb', line 96 def init( args ) # Make sure we're in a folder with a Sitefile = app. [['--rakefile', 'Sitefile'], ['--no-search', nil], ['--silent', nil]].each {|opt, value| .assoc(opt).last.call(value)} unless app.have_rakefile raise RuntimeError, "Sitefile not found" end import_default_tasks import_website_tasks require_lib_files capture_command_line_args(args) args end |
#load_command_line_options ⇒ Object
Load options from the command line into the ::Webby.site struct
220 221 222 223 224 |
# File 'lib/webby/apps/main.rb', line 220 def .each do |key, value| ::Webby.site.__send__("#{key}=", value) end end |
#options ⇒ Object
Returns the options hash from the Rake application object.
157 158 159 |
# File 'lib/webby/apps/main.rb', line 157 def app. end |
#parse(args) ⇒ Object
Parse the command line args for options and commands to invoke.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/webby/apps/main.rb', line 39 def parse( args ) opts = OptionParser.new opts. = 'Usage: webby [options] target [target args]' opts.separator '' desired_opts = %[--describe --prereqs --tasks --trace] app..each do || next unless desired_opts.include?(.first) opts.on(*) end opts.on('-o', '--options [PATTERN]', 'Show configuration options (matching optional pattern), then exit.') { |value| @command = [:show_options, value] } opts.separator '' opts.separator 'autobuild options:' opts.on('--web-server', 'Start a local web server') { [:use_web_server] = true } opts.on('--no-web-server', 'Do not start a local web server') { [:use_web_server] = false } opts.separator '' opts.separator 'common options:' opts.on_tail( '-h', '--help', 'show this message' ) do @stdout.puts opts exit end opts.on_tail( '--version', 'show version' ) do @stdout.puts "Webby #{::Webby::VERSION}" exit end opts.parse! args ARGV.replace Array(args.shift) args.delete_if do |arg| if %r/^[A-Z_]+=/ =~ arg ARGV << arg next true end false end args end |
#rake ⇒ Object
Execute the rake command.
116 117 118 119 120 121 |
# File 'lib/webby/apps/main.rb', line 116 def rake app.init 'webby' app.load_rakefile app.top_level end |
#require_lib_files ⇒ Object
184 185 186 |
# File 'lib/webby/apps/main.rb', line 184 def require_lib_files Dir.glob(::File.join(%w[lib ** *.rb])).sort.each {|fn| require fn} end |
#run(args) ⇒ Object
Runs the main webby application. The command line arguments are passed in to this method as an array of strings. The command line arguments are parsed to figure out which rake task to invoke.
29 30 31 32 33 34 35 |
# File 'lib/webby/apps/main.rb', line 29 def run( args ) args = args.dup parse args init args self.__send__(*@command) end |
#show_options(attribute = nil) ⇒ Object
Print the available configuration options.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/webby/apps/main.rb', line 125 def ( attribute = nil ) app.init 'webby' app.load_rakefile desc = <<-__ The following options can be used to control Webby functionality. Options are configured in the 'Sitefile'. A few examples are shown below: | | SITE.create_mode = 'directory' | SITE.base = 'http://www.example.com' | SITE.uv.theme = 'twilight' | =======< OPTIONS >======= | __ @stdout.puts desc.gutter! help = Loquacious.help_for( :webby, :io => @stdout, :colorize => ENV.key?('TERM') ) help.show attribute, :values => true @stdout.puts end |