Class: Webby::Apps::Main
- Inherits:
-
Object
- Object
- Webby::Apps::Main
- Defined in:
- lib/webby/apps/main.rb
Instance Attribute Summary (collapse)
-
- (Object) cmd_line_options
readonly
Returns the value of attribute cmd_line_options.
Class Method Summary (collapse)
-
+ (Object) run(args)
Create a new instance of Main, and run the webby application given the command line args.
Instance Method Summary (collapse)
-
- (Object) app
Return the Rake application object.
- - (Object) capture_command_line_args(args)
-
- (Object) find_sitefile
Search for the "Sitefile" starting in the current directory and working upwards through the filesystem until the root of the filesystem is reached.
- - (Object) import_default_tasks
- - (Object) import_website_tasks
-
- (Object) init(args)
Initialize the Rake application object and load the core rake tasks, the site specific rake tasks, and the site specific ruby code.
-
- (Main) initialize
constructor
Create a new Main webby object for building websites.
-
- (Object) load_command_line_options
Load options from the command line into the ::Webby.site struct.
-
- (Object) options
Returns the options hash from the Rake application object.
-
- (Object) parse(args)
Parse the command line args for options and commands to invoke.
-
- (Object) rake
Execute the rake command.
- - (Object) require_lib_files
-
- (Object) run(args)
Runs the main webby application.
-
- (Object) show_options(attribute = nil)
Print the available configuration options.
Constructor Details
- (Main) initialize
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
- (Object) cmd_line_options (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
+ (Object) run(args)
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
- (Object) app
Return the Rake application object.
151 152 153 |
# File 'lib/webby/apps/main.rb', line 151 def app Rake.application end |
- (Object) capture_command_line_args(args)
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 |
- (Object) find_sitefile
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 |
- (Object) import_default_tasks
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 |
- (Object) import_website_tasks
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 |
- (Object) init(args)
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 |
- (Object) load_command_line_options
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 |
- (Object) options
Returns the options hash from the Rake application object.
157 158 159 |
# File 'lib/webby/apps/main.rb', line 157 def app. end |
- (Object) parse(args)
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 |
- (Object) rake
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 |
- (Object) require_lib_files
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 |
- (Object) run(args)
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 |
- (Object) show_options(attribute = nil)
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 |