massimo 0.3.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +25 -0
- data/LICENSE +20 -0
- data/README.md +108 -0
- data/Rakefile +62 -0
- data/VERSION +1 -0
- data/bin/massimo +6 -0
- data/lib/massimo/command.rb +242 -0
- data/lib/massimo/helpers.rb +26 -0
- data/lib/massimo/javascript.rb +38 -0
- data/lib/massimo/page.rb +113 -0
- data/lib/massimo/resource.rb +52 -0
- data/lib/massimo/site.rb +186 -0
- data/lib/massimo/stylesheet.rb +46 -0
- data/lib/massimo/templates.rb +20 -0
- data/lib/massimo/view.rb +30 -0
- data/lib/massimo.rb +38 -0
- data/massimo.gemspec +130 -0
- data/test/assertions.rb +8 -0
- data/test/helper.rb +54 -0
- data/test/source/config.yml +4 -0
- data/test/source/helpers/test_helper.rb +5 -0
- data/test/source/javascripts/_plugin.js +1 -0
- data/test/source/javascripts/application.js +3 -0
- data/test/source/javascripts/lib.js +1 -0
- data/test/source/lib/site.rb +5 -0
- data/test/source/pages/_skipped_page.haml +0 -0
- data/test/source/pages/about_us.erb +5 -0
- data/test/source/pages/erb.erb +5 -0
- data/test/source/pages/erb_with_layout.erb +4 -0
- data/test/source/pages/feed.haml +6 -0
- data/test/source/pages/haml.haml +5 -0
- data/test/source/pages/html.html +4 -0
- data/test/source/pages/index.erb +4 -0
- data/test/source/pages/markdown.markdown +5 -0
- data/test/source/pages/posts/first-post.haml +1 -0
- data/test/source/pages/with_extension.haml +4 -0
- data/test/source/pages/with_meta_data.haml +7 -0
- data/test/source/pages/with_title.haml +4 -0
- data/test/source/pages/with_url.haml +4 -0
- data/test/source/pages/without_extension.haml +0 -0
- data/test/source/pages/without_meta_data.haml +1 -0
- data/test/source/pages/without_title.haml +1 -0
- data/test/source/pages/without_url.haml +1 -0
- data/test/source/stylesheets/_base.sass +2 -0
- data/test/source/stylesheets/application.sass +4 -0
- data/test/source/stylesheets/basic.css +3 -0
- data/test/source/stylesheets/less_file.less +5 -0
- data/test/source/views/layouts/application.haml +2 -0
- data/test/source/views/with_helper.haml +1 -0
- data/test/source/views/with_locals.haml +1 -0
- data/test/source/views/without_locals.haml +1 -0
- data/test/test_javascript.rb +30 -0
- data/test/test_page.rb +136 -0
- data/test/test_resource.rb +27 -0
- data/test/test_site.rb +126 -0
- data/test/test_stylesheet.rb +40 -0
- data/test/test_view.rb +46 -0
- metadata +191 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
module Massimo
|
2
|
+
class Resource
|
3
|
+
attr_reader :source_path, :body
|
4
|
+
|
5
|
+
# Creates a new page associated with the given file path.
|
6
|
+
def initialize(source_path)
|
7
|
+
@source_path = ::Pathname.new(source_path)
|
8
|
+
# read and parse the source file
|
9
|
+
self.read_source!
|
10
|
+
end
|
11
|
+
|
12
|
+
# Renders the page using the registered filters.
|
13
|
+
def render(locals = {})
|
14
|
+
@body
|
15
|
+
end
|
16
|
+
|
17
|
+
# Gets the resource's file name.
|
18
|
+
def file_name
|
19
|
+
@source_path.basename.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
# Gets the resource type, based on the file's extension
|
23
|
+
def resource_type
|
24
|
+
@source_path.extname.to_s[1..-1]
|
25
|
+
end
|
26
|
+
|
27
|
+
# Gets the site instance
|
28
|
+
def site
|
29
|
+
::Massimo::Site()
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
# Reads the source page file, and populates the meta_data and
|
35
|
+
# body attributes.
|
36
|
+
def read_source!
|
37
|
+
raise ::Massimo::MissingResource unless @source_path.exist?
|
38
|
+
# try to read it now
|
39
|
+
begin
|
40
|
+
@line = 1
|
41
|
+
@body = @source_path.read
|
42
|
+
rescue
|
43
|
+
raise ::Massimo::InvalidResource
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Get the options from the Site's config for the current resource type.
|
48
|
+
def options_for_resource_type
|
49
|
+
self.site.options[self.resource_type.to_sym]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/massimo/site.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
module Massimo
|
2
|
+
class Site
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
# Default options. Overriden by values given when creating a Site.
|
6
|
+
DEFAULT_OPTIONS = {
|
7
|
+
:source => ".",
|
8
|
+
:output => ::File.join(".", "public"),
|
9
|
+
:server_port => "1984"
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
SOURCE_DIRS = [ :pages, :views, :stylesheets, :javascripts, :helpers, :lib ].freeze # :nodoc:
|
13
|
+
|
14
|
+
attr_accessor :options, :helpers
|
15
|
+
|
16
|
+
# Setup the Site with the given options. These options may be overridden by the config file.
|
17
|
+
def setup(options = {})
|
18
|
+
@options = DEFAULT_OPTIONS.dup.merge(options.symbolize_keys)
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
# Processes all the Pages, Stylesheets, and Javascripts and outputs
|
23
|
+
# them to the output dir.
|
24
|
+
def process!
|
25
|
+
reload_helpers
|
26
|
+
reload_libs
|
27
|
+
pages(true).each(&:process!)
|
28
|
+
stylesheets(true).each(&:process!)
|
29
|
+
javascripts(true).each(&:process!)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get all the Pages in the pages dir.
|
33
|
+
def pages(reload = false)
|
34
|
+
return @pages if defined?(@pages) && !reload
|
35
|
+
page_paths = self.find_files_in(:pages)
|
36
|
+
@pages = page_paths.collect { |path| ::Massimo::Page.new(path) }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Get all the Stylesheets in the stylesheets dir.
|
40
|
+
def stylesheets(reload = false)
|
41
|
+
return @stylesheets if defined?(@stylesheets) && !reload
|
42
|
+
stylesheet_paths = self.find_files_in(:stylesheets, [ :css, :sass, :less ])
|
43
|
+
@stylesheets = stylesheet_paths.collect { |path| ::Massimo::Stylesheet.new(path) }
|
44
|
+
end
|
45
|
+
|
46
|
+
# Get all the Javascripts in the javascripts dir.
|
47
|
+
def javascripts(reload = false)
|
48
|
+
return @javascripts if defined?(@javascripts) && !reload
|
49
|
+
javascript_paths = self.find_files_in(:javascripts, [ :js ])
|
50
|
+
@javascripts = javascript_paths.collect { |path| ::Massimo::Javascript.new(path) }
|
51
|
+
end
|
52
|
+
|
53
|
+
# Finds a view by the given name
|
54
|
+
def find_view(name, meta_data = {})
|
55
|
+
view_path = Dir.glob(self.views_dir("#{name}.*")).first
|
56
|
+
view_path && ::Massimo::View.new(view_path, meta_data)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Finds a view then renders it with the given locals
|
60
|
+
def render_view(name, locals = {}, &block)
|
61
|
+
view = self.find_view(name)
|
62
|
+
view && view.render(locals, &block)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Determines if the Site is in development mode.
|
66
|
+
def development?
|
67
|
+
@options[:environment].nil? || @options[:environment].to_sym == :development || @options[:development]
|
68
|
+
end
|
69
|
+
|
70
|
+
# Determines if the Site is in production mode.
|
71
|
+
def production?
|
72
|
+
(@options[:environment] && @options[:environment].to_sym == :production) || @options[:production]
|
73
|
+
end
|
74
|
+
|
75
|
+
#------------------------------------
|
76
|
+
# Directory Path Methods
|
77
|
+
#------------------------------------
|
78
|
+
|
79
|
+
# The path to the source dir
|
80
|
+
def source_dir(*path)
|
81
|
+
::File.join(@options[:source], *path)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Get all the source directories as an array.
|
85
|
+
def all_source_dirs
|
86
|
+
SOURCE_DIRS.collect { |d| dir_for(d) }
|
87
|
+
end
|
88
|
+
|
89
|
+
SOURCE_DIRS.each do |d|
|
90
|
+
define_method("#{d}_dir") do |*path|
|
91
|
+
dir_for(d, *path)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# The path to the output dir
|
96
|
+
def output_dir(*path)
|
97
|
+
::File.join(@options[:output], *path)
|
98
|
+
end
|
99
|
+
|
100
|
+
protected
|
101
|
+
|
102
|
+
# Get the directory to the given resource type (pages, views, etc.).
|
103
|
+
# If the path has been manually set in the options, you will get that
|
104
|
+
# path. Otherwise you will get the path relative to the source directory.
|
105
|
+
def dir_for(type, *path)
|
106
|
+
if type_path = @options["#{type}_path".to_sym]
|
107
|
+
::File.join(type_path, *path)
|
108
|
+
else
|
109
|
+
self.source_dir(type.to_s, *path)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Find all the files in the given resouce type's directory, optionally
|
114
|
+
# selecting only those with the given extensions. This will return
|
115
|
+
# an array with the full path to the files.
|
116
|
+
def find_files_in(type, extensions = nil)
|
117
|
+
# the directory where these files will be found
|
118
|
+
type_dir = self.dir_for(type)
|
119
|
+
|
120
|
+
# By default get the file list from the options
|
121
|
+
files = @options[type] && @options[type].dup
|
122
|
+
|
123
|
+
unless files && files.is_a?(::Array)
|
124
|
+
# If files aren't listed in the options, get them
|
125
|
+
# from the given block
|
126
|
+
glob = (extensions.nil? || extensions.empty?) ? "*" : "*.{#{extensions.join(",")}}"
|
127
|
+
files = ::Dir.glob(::File.join(type_dir, "**", glob))
|
128
|
+
|
129
|
+
# normalize the files by removing the directory from the path
|
130
|
+
files.collect! { |file| file.gsub("#{type_dir}/", "") }
|
131
|
+
|
132
|
+
# reject the files in the skip_files option, which can
|
133
|
+
# either be an array or a Proc.
|
134
|
+
if skip_files = @options["skip_#{type}".to_sym]
|
135
|
+
files.reject! do |file|
|
136
|
+
case skip_files
|
137
|
+
when ::Array
|
138
|
+
skip_files.include?(file)
|
139
|
+
else ::Proc
|
140
|
+
skip_files.call(file)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Reject all files that begin with _ (like partials) and directories
|
147
|
+
files.reject! { |file| ::File.basename(file) =~ /^_/ }
|
148
|
+
|
149
|
+
# now add the directory back to the path
|
150
|
+
files.collect! { |file| ::File.join(type_dir, file) }
|
151
|
+
|
152
|
+
# And make sure we don't find directories
|
153
|
+
files.reject! { |file| ::File.directory?(file) }
|
154
|
+
files
|
155
|
+
end
|
156
|
+
|
157
|
+
# Reload the Helpers instance with the helper modules
|
158
|
+
def reload_helpers
|
159
|
+
@helpers = ::Massimo::Helpers.new(self.helper_modules.compact)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Reload all the files in the source lib dir.
|
163
|
+
def reload_libs
|
164
|
+
reload_files ::Dir.glob(lib_dir("**", "*.rb"))
|
165
|
+
end
|
166
|
+
|
167
|
+
# Find all the helper modules
|
168
|
+
def helper_modules
|
169
|
+
reload_files ::Dir.glob(helpers_dir("*.rb"))
|
170
|
+
end
|
171
|
+
|
172
|
+
# Relod the given file by removing their constants and loading the file again.
|
173
|
+
# Return an Array of the reloaded Constants.
|
174
|
+
def reload_files(files)
|
175
|
+
files.collect do |file|
|
176
|
+
class_name = ::File.basename(file).gsub(::File.extname(file), "").classify
|
177
|
+
# Unload the constant if it already exists
|
178
|
+
::Object.class_eval { remove_const(class_name) if const_defined?(class_name) }
|
179
|
+
# Load the constant
|
180
|
+
load(file)
|
181
|
+
# return the constant
|
182
|
+
class_name.constantize rescue nil
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Massimo
|
2
|
+
class Stylesheet < Resource
|
3
|
+
# Render the css based on the type of resource
|
4
|
+
def render
|
5
|
+
case resource_type.to_sym
|
6
|
+
when :css
|
7
|
+
@body.to_s
|
8
|
+
when :sass
|
9
|
+
require "sass" unless defined? ::Sass
|
10
|
+
::Sass::Files.tree_for(@source_path, sass_options).render
|
11
|
+
when :less
|
12
|
+
require "less" unless defined? ::Less
|
13
|
+
::Less.parse(@body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Writes the rendered css to the output file.
|
18
|
+
def process!
|
19
|
+
# Make the full path to the directory of the output file
|
20
|
+
::FileUtils.mkdir_p(self.output_path.dirname)
|
21
|
+
# write the filtered data to the output file
|
22
|
+
self.output_path.open("w") do |file|
|
23
|
+
file.write self.render
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
# Determine the output file path
|
30
|
+
def output_path
|
31
|
+
@output_path ||= ::Pathname.new(@source_path.to_s.
|
32
|
+
sub(self.site.source_dir, self.site.output_dir). # move to output dir
|
33
|
+
sub(/#{@source_path.extname}$/, ".css")) # replace extension with .css
|
34
|
+
end
|
35
|
+
|
36
|
+
# Gets the Sass options, with Site options merged in.
|
37
|
+
def sass_options
|
38
|
+
options = {
|
39
|
+
:style => site.production? ? :compressed : :nested
|
40
|
+
}
|
41
|
+
options.merge!(self.site.options[:sass]) if self.site.options[:sass].is_a?(Hash)
|
42
|
+
options.merge(:css_filename => self.output_path)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Tilt
|
2
|
+
register :html, ::Tilt::ERBTemplate
|
3
|
+
register :php, ::Tilt::ERBTemplate
|
4
|
+
|
5
|
+
# My Markdown implementation.
|
6
|
+
class MarkdownTemplate < Template
|
7
|
+
def compile!
|
8
|
+
@erb_engine = ::Tilt::ERBTemplate.new { data }
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluate(scope, locals, &block)
|
12
|
+
# First evaluate the code using ERB
|
13
|
+
erb_output = @erb_engine.render(scope, locals, &block)
|
14
|
+
# Then evaluate the code using the RDiscountTemplate
|
15
|
+
::Tilt::RDiscountTemplate.new { erb_output }.render
|
16
|
+
end
|
17
|
+
end
|
18
|
+
register :markdown, MarkdownTemplate
|
19
|
+
register :md, MarkdownTemplate
|
20
|
+
end
|
data/lib/massimo/view.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module Massimo
|
2
|
+
class View < Resource
|
3
|
+
attr_reader :meta_data
|
4
|
+
|
5
|
+
# Creates a new page associated with the given file path.
|
6
|
+
def initialize(source_path, meta_data = {})
|
7
|
+
@meta_data = meta_data
|
8
|
+
super(source_path)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Renders the page using the registered filters.
|
12
|
+
def render(locals = {}, &block)
|
13
|
+
template = ::Tilt.new(self.file_name, @line || 1, self.options_for_resource_type) { @body }
|
14
|
+
template.render(self.site.helpers, @meta_data.merge(locals), &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
# All undefined methods are sent to the meta_data hash.
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
if method.to_s.match(/(.*)\=$/) && args.length == 1
|
22
|
+
@meta_data[$1.to_sym] = args.first
|
23
|
+
elsif args.empty? && @meta_data.key?(method)
|
24
|
+
@meta_data[method]
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/massimo.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
libdir = ::File.dirname(__FILE__)
|
2
|
+
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
|
3
|
+
|
4
|
+
# Rubygems
|
5
|
+
require "rubygems"
|
6
|
+
|
7
|
+
# External
|
8
|
+
require "pathname"
|
9
|
+
require "fileutils"
|
10
|
+
require "singleton"
|
11
|
+
require "active_support"
|
12
|
+
require "sinatra_more"
|
13
|
+
require "sprockets"
|
14
|
+
require "jsmin"
|
15
|
+
require "tilt"
|
16
|
+
|
17
|
+
# Internal
|
18
|
+
require "massimo/helpers"
|
19
|
+
require "massimo/templates"
|
20
|
+
require "massimo/site"
|
21
|
+
require "massimo/resource"
|
22
|
+
require "massimo/view"
|
23
|
+
require "massimo/page"
|
24
|
+
require "massimo/stylesheet"
|
25
|
+
require "massimo/javascript"
|
26
|
+
|
27
|
+
module Massimo
|
28
|
+
VERSION = ::File.read(::File.join(::File.dirname(__FILE__), *%w{.. VERSION})) # :nodoc:
|
29
|
+
|
30
|
+
MissingResource = ::Class.new(StandardError) # :nodoc:
|
31
|
+
InvalidResource = ::Class.new(StandardError) # :nodoc:
|
32
|
+
|
33
|
+
#
|
34
|
+
def self.Site(options = {})
|
35
|
+
return @site if defined?(@site) && options.empty?
|
36
|
+
@site = ::Massimo::Site.instance.setup(options)
|
37
|
+
end
|
38
|
+
end
|
data/massimo.gemspec
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{massimo}
|
8
|
+
s.version = "0.3.9"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Peter Browne"]
|
12
|
+
s.date = %q{2009-12-24}
|
13
|
+
s.default_executable = %q{massimo}
|
14
|
+
s.description = %q{Massimo builds HTML, Javascript, and CSS Files from your source.}
|
15
|
+
s.email = %q{peter@peterbrowne.net}
|
16
|
+
s.executables = ["massimo"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".gitignore",
|
24
|
+
"LICENSE",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"bin/massimo",
|
29
|
+
"lib/massimo.rb",
|
30
|
+
"lib/massimo/command.rb",
|
31
|
+
"lib/massimo/helpers.rb",
|
32
|
+
"lib/massimo/javascript.rb",
|
33
|
+
"lib/massimo/page.rb",
|
34
|
+
"lib/massimo/resource.rb",
|
35
|
+
"lib/massimo/site.rb",
|
36
|
+
"lib/massimo/stylesheet.rb",
|
37
|
+
"lib/massimo/templates.rb",
|
38
|
+
"lib/massimo/view.rb",
|
39
|
+
"massimo.gemspec",
|
40
|
+
"test/assertions.rb",
|
41
|
+
"test/helper.rb",
|
42
|
+
"test/source/config.yml",
|
43
|
+
"test/source/helpers/test_helper.rb",
|
44
|
+
"test/source/javascripts/_plugin.js",
|
45
|
+
"test/source/javascripts/application.js",
|
46
|
+
"test/source/javascripts/lib.js",
|
47
|
+
"test/source/lib/site.rb",
|
48
|
+
"test/source/pages/_skipped_page.haml",
|
49
|
+
"test/source/pages/about_us.erb",
|
50
|
+
"test/source/pages/erb.erb",
|
51
|
+
"test/source/pages/erb_with_layout.erb",
|
52
|
+
"test/source/pages/feed.haml",
|
53
|
+
"test/source/pages/haml.haml",
|
54
|
+
"test/source/pages/html.html",
|
55
|
+
"test/source/pages/index.erb",
|
56
|
+
"test/source/pages/markdown.markdown",
|
57
|
+
"test/source/pages/posts/first-post.haml",
|
58
|
+
"test/source/pages/with_extension.haml",
|
59
|
+
"test/source/pages/with_meta_data.haml",
|
60
|
+
"test/source/pages/with_title.haml",
|
61
|
+
"test/source/pages/with_url.haml",
|
62
|
+
"test/source/pages/without_extension.haml",
|
63
|
+
"test/source/pages/without_meta_data.haml",
|
64
|
+
"test/source/pages/without_title.haml",
|
65
|
+
"test/source/pages/without_url.haml",
|
66
|
+
"test/source/stylesheets/_base.sass",
|
67
|
+
"test/source/stylesheets/application.sass",
|
68
|
+
"test/source/stylesheets/basic.css",
|
69
|
+
"test/source/stylesheets/less_file.less",
|
70
|
+
"test/source/views/layouts/application.haml",
|
71
|
+
"test/source/views/with_helper.haml",
|
72
|
+
"test/source/views/with_locals.haml",
|
73
|
+
"test/source/views/without_locals.haml",
|
74
|
+
"test/test_javascript.rb",
|
75
|
+
"test/test_page.rb",
|
76
|
+
"test/test_resource.rb",
|
77
|
+
"test/test_site.rb",
|
78
|
+
"test/test_stylesheet.rb",
|
79
|
+
"test/test_view.rb"
|
80
|
+
]
|
81
|
+
s.homepage = %q{http://github.com/peterbrowne/massimo}
|
82
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
83
|
+
s.require_paths = ["lib"]
|
84
|
+
s.rubygems_version = %q{1.3.5}
|
85
|
+
s.summary = %q{Massimo is a static website builder.}
|
86
|
+
s.test_files = [
|
87
|
+
"test/assertions.rb",
|
88
|
+
"test/helper.rb",
|
89
|
+
"test/source/helpers/test_helper.rb",
|
90
|
+
"test/source/lib/site.rb",
|
91
|
+
"test/test_javascript.rb",
|
92
|
+
"test/test_page.rb",
|
93
|
+
"test/test_resource.rb",
|
94
|
+
"test/test_site.rb",
|
95
|
+
"test/test_stylesheet.rb",
|
96
|
+
"test/test_view.rb"
|
97
|
+
]
|
98
|
+
|
99
|
+
if s.respond_to? :specification_version then
|
100
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
101
|
+
s.specification_version = 3
|
102
|
+
|
103
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
104
|
+
s.add_development_dependency(%q<shoulda>, [">= 2.10.2"])
|
105
|
+
s.add_development_dependency(%q<yard>, [">= 0.5.2"])
|
106
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.3.5"])
|
107
|
+
s.add_runtime_dependency(%q<sinatra_more>, [">= 0.3.26"])
|
108
|
+
s.add_runtime_dependency(%q<directory_watcher>, [">= 1.3.1"])
|
109
|
+
s.add_runtime_dependency(%q<sprockets>, [">= 1.0.2"])
|
110
|
+
s.add_runtime_dependency(%q<jsmin>, [">= 1.0.1"])
|
111
|
+
else
|
112
|
+
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
113
|
+
s.add_dependency(%q<yard>, [">= 0.5.2"])
|
114
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.5"])
|
115
|
+
s.add_dependency(%q<sinatra_more>, [">= 0.3.26"])
|
116
|
+
s.add_dependency(%q<directory_watcher>, [">= 1.3.1"])
|
117
|
+
s.add_dependency(%q<sprockets>, [">= 1.0.2"])
|
118
|
+
s.add_dependency(%q<jsmin>, [">= 1.0.1"])
|
119
|
+
end
|
120
|
+
else
|
121
|
+
s.add_dependency(%q<shoulda>, [">= 2.10.2"])
|
122
|
+
s.add_dependency(%q<yard>, [">= 0.5.2"])
|
123
|
+
s.add_dependency(%q<activesupport>, [">= 2.3.5"])
|
124
|
+
s.add_dependency(%q<sinatra_more>, [">= 0.3.26"])
|
125
|
+
s.add_dependency(%q<directory_watcher>, [">= 1.3.1"])
|
126
|
+
s.add_dependency(%q<sprockets>, [">= 1.0.2"])
|
127
|
+
s.add_dependency(%q<jsmin>, [">= 1.0.1"])
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
data/test/assertions.rb
ADDED
data/test/helper.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "test/unit"
|
5
|
+
require "shoulda"
|
6
|
+
# begin require "redgreen"; rescue LoadError; end
|
7
|
+
begin require "turn"; rescue LoadError; end
|
8
|
+
require "assertions"
|
9
|
+
require "rr"
|
10
|
+
|
11
|
+
# Load Massimo
|
12
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
13
|
+
require "massimo"
|
14
|
+
|
15
|
+
class Test::Unit::TestCase
|
16
|
+
include Assertions
|
17
|
+
include RR::Adapters::TestUnit
|
18
|
+
|
19
|
+
#
|
20
|
+
def source_dir(*subdirs)
|
21
|
+
File.join(File.dirname(__FILE__), "source", *subdirs)
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
def output_dir(*subdirs)
|
26
|
+
File.join(File.dirname(__FILE__), "output", *subdirs)
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
def clear_output
|
31
|
+
FileUtils.rm_rf(output_dir)
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
def site(options = {})
|
36
|
+
@site = Massimo::Site({
|
37
|
+
:source => source_dir,
|
38
|
+
:output => output_dir,
|
39
|
+
:sass => { :cache => false }
|
40
|
+
}.merge(options))
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
def page(*path)
|
45
|
+
@page ||= Massimo::Page.new(source_dir("pages", *path))
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
def view(*path)
|
50
|
+
return @view if defined?(@view)
|
51
|
+
meta_data = path.extract_options!
|
52
|
+
@view = Massimo::View.new(source_dir("views", *path), meta_data)
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
var plugin = "plugin";
|
@@ -0,0 +1 @@
|
|
1
|
+
var lib = "lib";
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
%h1 First Post
|