massimo 0.5.6 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.6
1
+ 0.6.0
data/lib/massimo/cli.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'optparse'
2
- require 'ostruct'
3
1
  require 'thor'
4
2
 
5
3
  module Massimo
@@ -13,25 +11,21 @@ module Massimo
13
11
 
14
12
  desc 'build', 'Builds the site'
15
13
  def build
16
- site.process
17
- say 'massimo has built your site'
14
+ Massimo::UI.report_errors do
15
+ site.process
16
+ Massimo::UI.say 'massimo has built your site', :growl => true
17
+ end
18
18
  end
19
19
  map 'b' => :build
20
20
 
21
21
  desc 'watch', 'Watches your files for changes and rebuilds'
22
22
  def watch
23
- begin
24
- say 'massimo is watching your files for changes'
25
- Massimo::Watcher.start(site)
26
- rescue Interrupt
27
- exit
28
- end
23
+ Massimo::Watcher.start(site)
29
24
  end
30
25
  map 'w' => :watch
31
26
 
32
27
  desc 'server [PORT]', 'Runs a local web server and processes the site on save'
33
28
  def server(port = 3000)
34
- say "massimo is serving your site at http://localhost:#{port}"
35
29
  Massimo::Server.start(site, port.to_i)
36
30
  end
37
31
  map 's' => :server
@@ -72,7 +66,7 @@ module Massimo
72
66
 
73
67
  desc 'version', 'Displays current version'
74
68
  def version
75
- say Massimo::VERSION
69
+ Massimo::UI.say Massimo::VERSION
76
70
  end
77
71
  map %w( -v --version ) => :version
78
72
 
data/lib/massimo/page.rb CHANGED
@@ -9,8 +9,8 @@ module Massimo
9
9
  def render
10
10
  output = content
11
11
 
12
- if template_type = Tilt[source_path.basename.to_s]
13
- template = template_type.new(nil, @line || 1) { output }
12
+ if template_type = Tilt[filename]
13
+ template = template_type.new(source_path.to_s, @line || 1) { output }
14
14
  meta_data = @meta_data.merge(self.class.resource_name.singularize.to_sym => self)
15
15
  output = template.render(Massimo.site.template_scope, meta_data)
16
16
  end
@@ -23,7 +23,7 @@ module Massimo
23
23
  end
24
24
 
25
25
  def title
26
- @meta_data[:title] ||= source_path.basename.to_s.chomp(source_path.extname.to_s).titleize
26
+ @meta_data[:title] ||= filename.chomp(source_path.extname.to_s).titleize
27
27
  end
28
28
 
29
29
  def extension
@@ -31,12 +31,7 @@ module Massimo
31
31
  end
32
32
 
33
33
  def url
34
- @meta_data[:url] ||= begin
35
- url = super
36
- url.chomp!('index.html')
37
- url.sub!(/\.html$/, '/')
38
- url
39
- end
34
+ @meta_data[:url] ||= super.chomp('index.html').sub(/\.html$/, '/')
40
35
  end
41
36
 
42
37
  def layout
@@ -4,6 +4,7 @@ module Massimo
4
4
  class Server
5
5
  class << self
6
6
  def start(site, port = 3000)
7
+ Massimo::UI.say "massimo is serving your site at http://localhost:#{port}", :growl => true
7
8
  app = Rack::Builder.new do
8
9
  use Rack::ShowExceptions
9
10
  run Massimo::Server.new(site)
data/lib/massimo/ui.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'active_support/core_ext/array/extract_options'
2
+
3
+ module Massimo
4
+ module UI
5
+ extend self
6
+
7
+ COLOR_CODES = {
8
+ :black => 30,
9
+ :red => 31,
10
+ :green => 32,
11
+ :yellow => 33,
12
+ :blue => 34,
13
+ :magenta => 35,
14
+ :cyan => 36
15
+ }.freeze
16
+
17
+ # Say (print) something to the user.
18
+ def say(message, *args)
19
+ options = args.extract_options!
20
+ color = args.first
21
+
22
+ growl(message) if options[:growl]
23
+ message = (' ' * padding) + message.to_s
24
+ message = self.color(message, color) if color
25
+
26
+ $stdout.puts(message)
27
+ end
28
+
29
+ # Color the given message with the given color
30
+ def color(message, color)
31
+ "\e[#{COLOR_CODES[color.to_sym]}m#{message}\e[0m"
32
+ end
33
+
34
+ # Run the given block and cleanly report any errors
35
+ def report_errors
36
+ begin
37
+ yield
38
+ rescue Exception => error
39
+ say 'massimo had a problem', :red
40
+ indent do
41
+ say error.message, :magenta
42
+ say error.backtrace.first, :magenta
43
+ end
44
+ growl "#{error.message}\n#{error.backtrace.first}", 'massimo problem'
45
+ end
46
+ end
47
+
48
+ # Indents the messages within the block by the given amount.
49
+ def indent(amount = 2)
50
+ self.padding += amount
51
+ yield
52
+ self.padding -= amount
53
+ end
54
+
55
+ protected
56
+
57
+ def growl(message, title = 'massimo')
58
+ Growl.notify(message, :title => title) if defined?(Growl)
59
+ end
60
+
61
+ def padding
62
+ @padding ||= 0
63
+ end
64
+
65
+ def padding=(value)
66
+ @padding = [ 0, value.to_i ].max
67
+ end
68
+
69
+ end
70
+ end
data/lib/massimo/view.rb CHANGED
@@ -5,7 +5,7 @@ module Massimo
5
5
  unprocessable
6
6
 
7
7
  def render(locals = {}, &block)
8
- template = Tilt.new(source_path.basename.to_s) { content }
8
+ template = Tilt.new(source_path.to_s) { content }
9
9
  template.render(Massimo.site.template_scope, locals, &block)
10
10
  end
11
11
  end
@@ -2,6 +2,7 @@ module Massimo
2
2
  class Watcher
3
3
  class << self
4
4
  def start(site)
5
+ Massimo::UI.say 'massimo is watching your files for changes', :growl => true
5
6
  self.new(site).run
6
7
  end
7
8
  end
@@ -11,24 +12,25 @@ module Massimo
11
12
  @files = []
12
13
  end
13
14
 
14
- # Runs a loop, processing the whenever files have changed.
15
+ # Runs a loop, processing the Site whenever files have changed.
15
16
  def run
16
- loop do
17
- process
18
- sleep 0.5
17
+ begin
18
+ loop do
19
+ process
20
+ sleep 0.5
21
+ end
22
+ rescue Interrupt
23
+ exit
19
24
  end
20
25
  end
21
26
 
22
27
  # Processes the Site if any of the files have changed.
23
28
  def process
24
29
  if changed?
25
- begin
26
- puts 'massimo has noticed a change'
30
+ Massimo::UI.report_errors do
31
+ Massimo::UI.say 'massimo has noticed a change'
27
32
  @site.process
28
- puts 'massimo has built your site'
29
- rescue Exception => e
30
- puts e.message
31
- puts e.backtrace
33
+ Massimo::UI.say 'massimo has built your site', :growl => true
32
34
  end
33
35
  end
34
36
  end
data/lib/massimo.rb CHANGED
@@ -8,6 +8,7 @@ module Massimo
8
8
  autoload :Server, 'massimo/server'
9
9
  autoload :Site, 'massimo/site'
10
10
  autoload :Stylesheet, 'massimo/stylesheet'
11
+ autoload :UI, 'massimo/ui'
11
12
  autoload :View, 'massimo/view'
12
13
  autoload :Watcher, 'massimo/watcher'
13
14
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 5
8
7
  - 6
9
- version: 0.5.6
8
+ - 0
9
+ version: 0.6.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Pete Browne
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-28 00:00:00 -05:00
17
+ date: 2010-04-30 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -229,6 +229,20 @@ dependencies:
229
229
  version: 0.9.0
230
230
  type: :development
231
231
  version_requirements: *id015
232
+ - !ruby/object:Gem::Dependency
233
+ name: growl
234
+ prerelease: false
235
+ requirement: &id016 !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ~>
238
+ - !ruby/object:Gem::Version
239
+ segments:
240
+ - 1
241
+ - 0
242
+ - 0
243
+ version: 1.0.0
244
+ type: :development
245
+ version_requirements: *id016
232
246
  description: Massimo builds HTML, Javascript, and CSS Files from your source.
233
247
  email: me@petebrowne.com
234
248
  executables:
@@ -239,17 +253,18 @@ extra_rdoc_files: []
239
253
 
240
254
  files:
241
255
  - bin/massimo
242
- - lib/massimo/stylesheet.rb
243
- - lib/massimo/server.rb
244
- - lib/massimo/view.rb
245
- - lib/massimo/page.rb
246
- - lib/massimo/resource.rb
247
256
  - lib/massimo/cli.rb
248
257
  - lib/massimo/config.rb
249
- - lib/massimo/watcher.rb
250
- - lib/massimo/site.rb
251
- - lib/massimo/javascript.rb
252
258
  - lib/massimo/helpers.rb
259
+ - lib/massimo/javascript.rb
260
+ - lib/massimo/page.rb
261
+ - lib/massimo/resource.rb
262
+ - lib/massimo/server.rb
263
+ - lib/massimo/site.rb
264
+ - lib/massimo/stylesheet.rb
265
+ - lib/massimo/ui.rb
266
+ - lib/massimo/view.rb
267
+ - lib/massimo/watcher.rb
253
268
  - lib/massimo.rb
254
269
  - LICENSE
255
270
  - README.md