massimo 0.5.5 → 0.5.6

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.5
1
+ 0.5.6
@@ -14,6 +14,8 @@ module Massimo
14
14
  :stylesheets_url => '/stylesheets'
15
15
  }.freeze
16
16
 
17
+ # Creates a new configuration. Takes either a hash of options
18
+ # or a file path to a .yaml file.
17
19
  def initialize(options = nil)
18
20
  hash = DEFAULT_OPTIONS.dup
19
21
 
@@ -23,14 +25,18 @@ module Massimo
23
25
  super hash
24
26
  end
25
27
 
28
+ # The full, expanded path to the source path.
26
29
  def source_path
27
30
  File.expand_path(super)
28
31
  end
29
32
 
33
+ # The full, expanded path to the output path.
30
34
  def output_path
31
35
  File.expand_path(super)
32
36
  end
33
37
 
38
+ # Get a full, expanded path for the given resource name. This is either set
39
+ # in the configuration or determined dynamically based on the name.
34
40
  def path_for(resource_name)
35
41
  path_method = "#{resource_name}_path"
36
42
  if resource_path = (respond_to?(path_method) and send(path_method))
@@ -40,6 +46,7 @@ module Massimo
40
46
  end
41
47
  end
42
48
 
49
+ # Get the configured URL for th given resource name.
43
50
  def url_for(resource_name)
44
51
  url_method = "#{resource_name}_url"
45
52
  resource_url = respond_to?(url_method) && send(url_method)
@@ -47,6 +54,8 @@ module Massimo
47
54
  File.join(base_url, resource_url)
48
55
  end
49
56
 
57
+ # Get an array of all the file paths found in the given resource name's path,
58
+ # restricted to the given extension.
50
59
  def files_in(resource_name, extension = '*')
51
60
  Dir.glob(File.join(path_for(resource_name), "**/*.#{extension}"))
52
61
  end
@@ -9,10 +9,12 @@ module Massimo
9
9
  include SinatraMore::FormHelpers
10
10
  include SinatraMore::FormatHelpers
11
11
 
12
+ # Returns an instance of the Site
12
13
  def site
13
14
  Massimo.site
14
15
  end
15
16
 
17
+ # Renders a view with the given locals. Kind of like `render :partial` in Rails
16
18
  def render(view_name, locals = {})
17
19
  view = Massimo::View.find(view_name)
18
20
  view && view.render(locals)
data/lib/massimo/page.rb CHANGED
@@ -1,19 +1,24 @@
1
1
  require 'active_support/core_ext/hash/keys'
2
+ require 'active_support/core_ext/string/starts_ends_with'
2
3
  require 'active_support/inflector'
3
4
  require 'tilt'
4
5
  require 'yaml'
5
6
 
6
- Tilt.register 'html', Tilt::StringTemplate
7
-
8
7
  module Massimo
9
8
  class Page < Resource
10
9
  def render
11
- template = Tilt.new(source_path.basename.to_s, @line || 1) { content }
12
- meta_data = @meta_data.merge(self.class.resource_name.singularize.to_sym => self)
13
- output = template.render(Massimo.site.template_scope, meta_data)
10
+ output = content
11
+
12
+ if template_type = Tilt[source_path.basename.to_s]
13
+ template = template_type.new(nil, @line || 1) { output }
14
+ meta_data = @meta_data.merge(self.class.resource_name.singularize.to_sym => self)
15
+ output = template.render(Massimo.site.template_scope, meta_data)
16
+ end
17
+
14
18
  if found_layout = Massimo::View.find("layouts/#{layout}")
15
19
  output = found_layout.render(:page => self) { output }
16
20
  end
21
+
17
22
  output
18
23
  end
19
24
 
@@ -42,7 +47,7 @@ module Massimo
42
47
  def output_path
43
48
  @output_path ||= begin
44
49
  output_path = super.to_s
45
- output_path << "index.html" if output_path =~ /\/$/
50
+ output_path << "index.html" if output_path.ends_with? '/'
46
51
  Pathname.new output_path
47
52
  end
48
53
  end
@@ -1,3 +1,4 @@
1
+ require 'active_support/core_ext/string/starts_ends_with'
1
2
  require 'active_support/inflector'
2
3
  require 'fileutils'
3
4
  require 'pathname'
@@ -5,29 +6,35 @@ require 'pathname'
5
6
  module Massimo
6
7
  class Resource
7
8
  class << self
9
+ # The underscored, pluralized name of the resource.
8
10
  def resource_name
9
11
  self.name.underscore.sub(/.*\//, '').pluralize
10
12
  end
11
13
 
14
+ # The path to the resource's directory.
12
15
  def path
13
16
  Massimo.config.path_for resource_name
14
17
  end
15
18
 
19
+ # The base url for the resource.
16
20
  def url
17
21
  Massimo.config.url_for resource_name
18
22
  end
19
23
 
24
+ # Finds a Resource by the given name.
20
25
  def find(name)
21
26
  resource_path = Dir.glob(File.join(path, "#{name}.*")).first
22
27
  resource_path && self.new(resource_path)
23
28
  end
24
29
 
30
+ # Finds all the Resources in the resource's directory.
25
31
  def all
26
32
  files = Massimo.config.files_in resource_name
27
- files.reject! { |file| File.basename(file) =~ /^_/ }
33
+ files.reject! { |file| File.basename(file).starts_with?('_') }
28
34
  files.map { |file| self.new(file) }
29
35
  end
30
36
 
37
+ # Whether or not massimo should process the resource's files.
31
38
  def processable?
32
39
  true
33
40
  end
@@ -42,24 +49,30 @@ module Massimo
42
49
 
43
50
  attr_reader :source_path, :content
44
51
 
52
+ # Creates a new resource for the given source file.
53
+ # The contents of the file will automatically be read.
45
54
  def initialize(source)
46
55
  @source_path = source.is_a?(Pathname) ? source.expand_path : Pathname.new(source).expand_path
47
56
  read_source
48
57
  end
49
58
 
59
+ # The basename of the source file.
50
60
  def filename
51
61
  @filename ||= source_path.basename.to_s
52
62
  end
53
63
 
64
+ # The extension to output with.
54
65
  def extension
55
66
  @extension ||= source_path.extname
56
67
  end
57
68
 
69
+ # The url to the resource. This is created by swiching the base path
70
+ # of the source file with the base url.
58
71
  def url
59
72
  @url ||= begin
60
73
  url = source_path.to_s.sub(/^#{Regexp.escape(self.class.path)}/, '')
61
74
  url = url.sub(/\.[^\.]+$/, extension)
62
- url = File.join(self.class.url, url) unless url.include? self.class.url
75
+ url = File.join(self.class.url, url) unless url.starts_with? self.class.url
63
76
  url = url.dasherize
64
77
  url
65
78
  end
data/lib/massimo/site.rb CHANGED
@@ -5,6 +5,8 @@ module Massimo
5
5
  class Site
6
6
  attr_accessor :config
7
7
 
8
+ # Creates a new Site, passing the given options to a new configuration.
9
+ # If a block is given, it is evaluated in the scope of the new Site.
8
10
  def initialize(options = nil, &block)
9
11
  @config = Config.new(options)
10
12
  @template_scope_blocks = []
@@ -14,10 +16,15 @@ module Massimo
14
16
  instance_eval(&block) if block_given?
15
17
  end
16
18
 
19
+ # The resources used in this Site.
17
20
  def resources
18
21
  @resources ||= [ Massimo::Page, Massimo::Javascript, Massimo::Stylesheet, Massimo::View ]
19
22
  end
20
23
 
24
+ # Adds a new, custom resource to the Site. If a Class constant is given,
25
+ # it is added to directly to the `#resources`. If a Symbol or String is given, a new
26
+ # Class (inheriting from Massimo::Page) is created using that name
27
+ # with the given block used as the Class body.
21
28
  def resource(name_or_class, &block)
22
29
  resource = case name_or_class
23
30
  when Class
@@ -28,6 +35,8 @@ module Massimo
28
35
  resources << resource
29
36
  end
30
37
 
38
+ # The scope used for templating. It includes helpers from Massimo::Helpers along
39
+ # with any custom helpers.
31
40
  def template_scope
32
41
  @template_scope ||= begin
33
42
  scope = Object.new.extend(Massimo::Helpers, Tilt::CompileSite)
@@ -38,11 +47,15 @@ module Massimo
38
47
  end
39
48
  end
40
49
 
50
+ # Adds custom helpers to the `#template_scope`. Takes either an array of Modules
51
+ # that will extend the scope, or a block of method definitions that will be added
52
+ # to the scope.
41
53
  def helpers(*extensions, &block)
42
54
  @template_scope_blocks << block if block_given?
43
55
  @template_scope_extensions += extensions
44
56
  end
45
57
 
58
+ # Processes all the current resources.
46
59
  def process
47
60
  @template_scope = nil
48
61
  reload_libs
@@ -11,6 +11,7 @@ module Massimo
11
11
  @files = []
12
12
  end
13
13
 
14
+ # Runs a loop, processing the whenever files have changed.
14
15
  def run
15
16
  loop do
16
17
  process
@@ -18,6 +19,7 @@ module Massimo
18
19
  end
19
20
  end
20
21
 
22
+ # Processes the Site if any of the files have changed.
21
23
  def process
22
24
  if changed?
23
25
  begin
@@ -31,6 +33,7 @@ module Massimo
31
33
  end
32
34
  end
33
35
 
36
+ # Determine if any of the Site's files have changed.
34
37
  def changed?
35
38
  @files != files
36
39
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 5
8
- - 5
9
- version: 0.5.5
8
+ - 6
9
+ version: 0.5.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Pete Browne