spinto 0.2.3
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/Gemfile +2 -0
- data/Rakefile +151 -0
- data/_plugins/coffeescript_converter.rb +29 -0
- data/_plugins/include_tree.rb +87 -0
- data/_plugins/include_watcher.rb +78 -0
- data/_plugins/less_converter.rb +26 -0
- data/_plugins/sass_converter.rb +26 -0
- data/_plugins/scss_converter.rb +26 -0
- data/bin/spinto-site +147 -0
- data/lib/spinto.rb +4 -0
- data/spinto.gemspec +50 -0
- metadata +138 -0
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rdoc'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), *%w[lib]))
|
7
|
+
|
8
|
+
#############################################################################
|
9
|
+
#
|
10
|
+
# Helper functions
|
11
|
+
#
|
12
|
+
#############################################################################
|
13
|
+
|
14
|
+
def name
|
15
|
+
@name ||= Dir['*.gemspec'].first.split('.').first
|
16
|
+
end
|
17
|
+
|
18
|
+
def version
|
19
|
+
line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
|
20
|
+
line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
def date
|
24
|
+
Date.today.to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
def rubyforge_project
|
28
|
+
name
|
29
|
+
end
|
30
|
+
|
31
|
+
def gemspec_file
|
32
|
+
"#{name}.gemspec"
|
33
|
+
end
|
34
|
+
|
35
|
+
def gem_file
|
36
|
+
"#{name}-#{version}.gem"
|
37
|
+
end
|
38
|
+
|
39
|
+
def replace_header(head, header_name)
|
40
|
+
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
41
|
+
end
|
42
|
+
|
43
|
+
#############################################################################
|
44
|
+
#
|
45
|
+
# Standard tasks
|
46
|
+
#
|
47
|
+
#############################################################################
|
48
|
+
|
49
|
+
task :default => [:test, :features]
|
50
|
+
|
51
|
+
require 'rake/testtask'
|
52
|
+
Rake::TestTask.new(:test) do |test|
|
53
|
+
if `which pygmentize` == ''
|
54
|
+
puts "You must have Pygments installed to run the tests."
|
55
|
+
exit 1
|
56
|
+
end
|
57
|
+
test.libs << 'lib' << 'test'
|
58
|
+
test.pattern = 'test/**/test_*.rb'
|
59
|
+
test.verbose = true
|
60
|
+
end
|
61
|
+
|
62
|
+
desc "Generate RCov test coverage and open in your browser"
|
63
|
+
task :coverage do
|
64
|
+
require 'rcov'
|
65
|
+
sh "rm -fr coverage"
|
66
|
+
sh "rcov test/test_*.rb"
|
67
|
+
sh "open coverage/index.html"
|
68
|
+
end
|
69
|
+
|
70
|
+
require 'rdoc/task'
|
71
|
+
Rake::RDocTask.new do |rdoc|
|
72
|
+
rdoc.rdoc_dir = 'rdoc'
|
73
|
+
rdoc.title = "#{name} #{version}"
|
74
|
+
rdoc.rdoc_files.include('README*')
|
75
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
76
|
+
end
|
77
|
+
|
78
|
+
desc "Open an irb session preloaded with this library"
|
79
|
+
task :console do
|
80
|
+
sh "irb -rubygems -r ./lib/#{name}.rb"
|
81
|
+
end
|
82
|
+
|
83
|
+
#############################################################################
|
84
|
+
#
|
85
|
+
# Custom tasks (add your own tasks here)
|
86
|
+
#
|
87
|
+
#############################################################################
|
88
|
+
|
89
|
+
begin
|
90
|
+
require 'cucumber/rake/task'
|
91
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
92
|
+
t.cucumber_opts = "--format progress"
|
93
|
+
end
|
94
|
+
rescue LoadError
|
95
|
+
desc 'Cucumber rake task not available'
|
96
|
+
task :features do
|
97
|
+
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
#############################################################################
|
102
|
+
#
|
103
|
+
# Packaging tasks
|
104
|
+
#
|
105
|
+
#############################################################################
|
106
|
+
|
107
|
+
task :release => :build do
|
108
|
+
unless `git branch` =~ /^\* master$/
|
109
|
+
puts "You must be on the master branch to release!"
|
110
|
+
exit!
|
111
|
+
end
|
112
|
+
sh "git commit --allow-empty -m 'Release #{version}'"
|
113
|
+
sh "git tag v#{version}"
|
114
|
+
sh "git push origin master"
|
115
|
+
sh "git push origin v#{version}"
|
116
|
+
sh "gem push pkg/#{name}-#{version}.gem"
|
117
|
+
end
|
118
|
+
|
119
|
+
task :build => :gemspec do
|
120
|
+
sh "mkdir -p pkg"
|
121
|
+
sh "gem build #{gemspec_file}"
|
122
|
+
sh "mv #{gem_file} pkg"
|
123
|
+
end
|
124
|
+
|
125
|
+
task :gemspec do
|
126
|
+
# read spec file and split out manifest section
|
127
|
+
spec = File.read(gemspec_file)
|
128
|
+
head, manifest, tail = spec.split(" # = MANIFEST =\n")
|
129
|
+
|
130
|
+
# replace name version and date
|
131
|
+
replace_header(head, :name)
|
132
|
+
replace_header(head, :version)
|
133
|
+
replace_header(head, :date)
|
134
|
+
#comment this out if your rubyforge_project has a different name
|
135
|
+
# replace_header(head, :rubyforge_project)
|
136
|
+
|
137
|
+
# determine file list from git ls-files
|
138
|
+
files = `git ls-files`.
|
139
|
+
split("\n").
|
140
|
+
sort.
|
141
|
+
reject { |file| file =~ /^\./ }.
|
142
|
+
reject { |file| file =~ /^(rdoc|pkg|coverage)/ }.
|
143
|
+
map { |file| " #{file}" }.
|
144
|
+
join("\n")
|
145
|
+
|
146
|
+
# piece file back together and write
|
147
|
+
manifest = " s.files = %w[\n#{files}\n ]\n"
|
148
|
+
spec = [head, manifest, tail].join(" # = MANIFEST =\n")
|
149
|
+
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
150
|
+
puts "Updated #{gemspec_file}"
|
151
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Build .coffee and .coffeescript files into
|
2
|
+
# Javascript.
|
3
|
+
#
|
4
|
+
# From: https://gist.github.com/959938
|
5
|
+
#
|
6
|
+
|
7
|
+
module Jekyll
|
8
|
+
require 'coffee-script'
|
9
|
+
class CoffeeScriptConverter < Converter
|
10
|
+
safe true
|
11
|
+
priority :normal
|
12
|
+
|
13
|
+
def matches(ext)
|
14
|
+
ext =~ /coffee/i
|
15
|
+
end
|
16
|
+
|
17
|
+
def output_ext(ext)
|
18
|
+
".js"
|
19
|
+
end
|
20
|
+
|
21
|
+
def convert(content)
|
22
|
+
begin
|
23
|
+
CoffeeScript.compile content
|
24
|
+
rescue StandardError => e
|
25
|
+
puts "CoffeeScript error:" + e.message
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
Jekyll::Post.class_eval do
|
2
|
+
|
3
|
+
def location_on_server
|
4
|
+
to_liquid['url']
|
5
|
+
end
|
6
|
+
|
7
|
+
def path_to_source
|
8
|
+
"/_posts/#{File.join(@name)}"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
Jekyll::Page.class_eval do
|
14
|
+
|
15
|
+
# It is important that this is the same
|
16
|
+
# as the key used on the hash in the watcher.
|
17
|
+
def location_on_server
|
18
|
+
to_liquid['url']
|
19
|
+
end
|
20
|
+
|
21
|
+
def path_to_source
|
22
|
+
File.join(@dir, @name)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
Jekyll::StaticFile.class_eval do
|
28
|
+
|
29
|
+
def location_on_server
|
30
|
+
File.join(@dir, @name)
|
31
|
+
end
|
32
|
+
|
33
|
+
def path_to_source
|
34
|
+
File.join(@dir, @name)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
Jekyll::Site.class_eval do
|
40
|
+
require 'json'
|
41
|
+
|
42
|
+
alias :render_without_include_tree :render
|
43
|
+
def render
|
44
|
+
# First, render like Jekyll normally does
|
45
|
+
render_without_include_tree
|
46
|
+
|
47
|
+
# Set a blank array for files that did not have
|
48
|
+
# inclusions fired.
|
49
|
+
(pages + posts + static_files).each do |file|
|
50
|
+
Jekyll::IncludeWatcher.inclusions[file.location_on_server] ||= {}
|
51
|
+
Jekyll::IncludeWatcher.inclusions[file.location_on_server].merge!(source: file.path_to_source)
|
52
|
+
if file.respond_to?(:data) && file.data
|
53
|
+
data = {}
|
54
|
+
['editable', '_content', 'title', 'description'].each do |key|
|
55
|
+
data[key] = file.data[key] if file.data[key]
|
56
|
+
end
|
57
|
+
Jekyll::IncludeWatcher.inclusions[file.location_on_server].merge!(data)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Clean up index.html to be '/'
|
62
|
+
Jekyll::IncludeWatcher.inclusions.keys.each do |key|
|
63
|
+
matches = key.match(/^(.*\/)index.html$/)
|
64
|
+
if matches
|
65
|
+
clean_name = if matches[1] == '/'
|
66
|
+
matches[1]
|
67
|
+
else
|
68
|
+
matches[1].gsub(/\/$/, '')
|
69
|
+
end
|
70
|
+
Jekyll::IncludeWatcher.inclusions[clean_name] = \
|
71
|
+
Jekyll::IncludeWatcher.inclusions.delete(key)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Write our inclusions to a dot-file
|
76
|
+
filename = '.include_tree'
|
77
|
+
|
78
|
+
File.open(File.join(source, filename), "w") do |f|
|
79
|
+
f.write JSON.dump( Jekyll::IncludeWatcher.inclusions )
|
80
|
+
end
|
81
|
+
|
82
|
+
# Ensure Jekyll doesn't clean ths up.
|
83
|
+
static_files << Jekyll::StaticFile.new(self, source, "/", filename)
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Jekyll
|
2
|
+
|
3
|
+
class IncludeWatcher < Jekyll::IncludeTag
|
4
|
+
|
5
|
+
@@inclusions = {}
|
6
|
+
def self.inclusions; @@inclusions; end
|
7
|
+
|
8
|
+
def render(context)
|
9
|
+
Jekyll::IncludeWatcher.inclusions[context.registers[:page]['url']] ||= {}
|
10
|
+
Jekyll::IncludeWatcher.inclusions[context.registers[:page]['url']][:includes] ||= {}
|
11
|
+
Jekyll::IncludeWatcher.inclusions[context.registers[:page]['url']][:includes] = \
|
12
|
+
(Jekyll::IncludeWatcher.inclusions[context.registers[:page]['url']][:includes] || {}).merge(
|
13
|
+
@file => { 'editable' => true }
|
14
|
+
)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
module Convertible
|
21
|
+
|
22
|
+
# Add any necessary layouts to this convertible document.
|
23
|
+
#
|
24
|
+
# payload - The site payload Hash.
|
25
|
+
# layouts - A Hash of {"name" => "layout"}.
|
26
|
+
#
|
27
|
+
# Returns nothing.
|
28
|
+
|
29
|
+
# Monkey patched for page passing to tags.
|
30
|
+
#
|
31
|
+
# https://github.com/mojombo/jekyll/pull/413
|
32
|
+
#
|
33
|
+
def do_layout(payload, layouts)
|
34
|
+
info = { :filters => [Jekyll::Filters], :registers => { :site => self.site, :page => payload['page'] } }
|
35
|
+
|
36
|
+
# render and transform content (this becomes the final content of the object)
|
37
|
+
payload["pygments_prefix"] = converter.pygments_prefix
|
38
|
+
payload["pygments_suffix"] = converter.pygments_suffix
|
39
|
+
|
40
|
+
begin
|
41
|
+
self.content = Liquid::Template.parse(self.content).render(payload, info)
|
42
|
+
rescue => e
|
43
|
+
puts "Liquid Exception: #{e.message} in #{self.name}"
|
44
|
+
end
|
45
|
+
|
46
|
+
self.transform
|
47
|
+
|
48
|
+
# output keeps track of what will finally be written
|
49
|
+
self.output = self.content
|
50
|
+
|
51
|
+
# recursively render layouts
|
52
|
+
layout = layouts[self.data["layout"]]
|
53
|
+
used = Set.new([layout])
|
54
|
+
|
55
|
+
while layout
|
56
|
+
payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
|
57
|
+
|
58
|
+
begin
|
59
|
+
self.output = Liquid::Template.parse(layout.content).render(payload, info)
|
60
|
+
rescue => e
|
61
|
+
puts "Liquid Exception: #{e.message} in #{self.data["layout"]}"
|
62
|
+
end
|
63
|
+
|
64
|
+
if layout = layouts[layout.data["layout"]]
|
65
|
+
if used.include?(layout)
|
66
|
+
layout = nil # avoid recursive chain
|
67
|
+
else
|
68
|
+
used << layout
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
Liquid::Template.register_tag('include', Jekyll::IncludeWatcher)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Build .less files into CSS
|
2
|
+
#
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
require 'less'
|
6
|
+
class LessConverter < Converter
|
7
|
+
safe true
|
8
|
+
priority :normal
|
9
|
+
|
10
|
+
def matches(ext)
|
11
|
+
ext =~ /less/i
|
12
|
+
end
|
13
|
+
|
14
|
+
def output_ext(ext)
|
15
|
+
".css"
|
16
|
+
end
|
17
|
+
|
18
|
+
def convert(content)
|
19
|
+
begin
|
20
|
+
Less::Engine.new(content).to_css
|
21
|
+
rescue StandardError => e
|
22
|
+
puts "Less error:" + e.message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Build .sass files into CSS
|
2
|
+
#
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
require 'sass'
|
6
|
+
class SassConverter < Converter
|
7
|
+
safe true
|
8
|
+
priority :normal
|
9
|
+
|
10
|
+
def matches(ext)
|
11
|
+
ext =~ /sass/i
|
12
|
+
end
|
13
|
+
|
14
|
+
def output_ext(ext)
|
15
|
+
".css"
|
16
|
+
end
|
17
|
+
|
18
|
+
def convert(content)
|
19
|
+
begin
|
20
|
+
Sass::Engine.new(content, :syntax => :sass).render
|
21
|
+
rescue StandardError => e
|
22
|
+
puts "Sass error:" + e.message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Build .scss files into CSS
|
2
|
+
#
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
require 'scss'
|
6
|
+
class ScssConverter < Converter
|
7
|
+
safe true
|
8
|
+
priority :normal
|
9
|
+
|
10
|
+
def matches(ext)
|
11
|
+
ext =~ /scss/i
|
12
|
+
end
|
13
|
+
|
14
|
+
def output_ext(ext)
|
15
|
+
".css"
|
16
|
+
end
|
17
|
+
|
18
|
+
def convert(content)
|
19
|
+
begin
|
20
|
+
Sass::Engine.new(content, :syntax => :scss).render
|
21
|
+
rescue StandardError => e
|
22
|
+
puts "Scss error:" + e.message
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/bin/spinto-site
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
|
+
|
5
|
+
help = <<HELP
|
6
|
+
Spinto-site is the spintoapp.com wrapper of jekyll,
|
7
|
+
the blog-aware, static site generator.
|
8
|
+
|
9
|
+
Basic Command Line Usage:
|
10
|
+
spinto-site # . -> ./_site
|
11
|
+
spinto-site <path to write generated site> # . -> <path>
|
12
|
+
spinto-site <path to source> <path to write generated site> # <path> -> <path>
|
13
|
+
spinto-site --auto --server # Host your site locally
|
14
|
+
|
15
|
+
Configuration is read from '<source>/_config.yml' but can be overriden
|
16
|
+
using the following options:
|
17
|
+
|
18
|
+
HELP
|
19
|
+
|
20
|
+
require 'optparse'
|
21
|
+
require 'jekyll'
|
22
|
+
require 'spinto'
|
23
|
+
|
24
|
+
exec = {}
|
25
|
+
options = {}
|
26
|
+
opts = OptionParser.new do |opts|
|
27
|
+
opts.banner = help
|
28
|
+
|
29
|
+
opts.on("--[no-]auto", "Auto-regenerate") do |auto|
|
30
|
+
options['auto'] = auto
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on("--server [PORT]", "Start web server (default port 4000)") do |port|
|
34
|
+
options['server'] = true
|
35
|
+
options['server_port'] = port unless port.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on("--no-server", "Do not start a web server") do |part|
|
39
|
+
options['server'] = false
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on("--url [URL]", "Set custom site.url") do |url|
|
43
|
+
options['url'] = url
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on("--version", "Display current version") do
|
47
|
+
puts "Spinto " + Spinto::VERSION
|
48
|
+
exit 0
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Read command line options into `options` hash
|
53
|
+
opts.parse!
|
54
|
+
|
55
|
+
|
56
|
+
# Get source and destintation from command line
|
57
|
+
case ARGV.size
|
58
|
+
when 0
|
59
|
+
when 1
|
60
|
+
options['destination'] = ARGV[0]
|
61
|
+
when 2
|
62
|
+
options['source'] = ARGV[0]
|
63
|
+
options['destination'] = ARGV[1]
|
64
|
+
else
|
65
|
+
puts "Invalid options. Run `spinto-site --help` for assistance."
|
66
|
+
exit(1)
|
67
|
+
end
|
68
|
+
|
69
|
+
options['safe'] = false
|
70
|
+
options['plugins'] = File.join(File.dirname(__FILE__), '..', '_plugins')
|
71
|
+
|
72
|
+
options = Jekyll.configuration(options)
|
73
|
+
|
74
|
+
# Get source and destination directories (possibly set by config file)
|
75
|
+
source = options['source']
|
76
|
+
destination = options['destination']
|
77
|
+
|
78
|
+
# Files to watch
|
79
|
+
def globs(source)
|
80
|
+
Dir.chdir(source) do
|
81
|
+
dirs = Dir['*'].select { |x| File.directory?(x) }
|
82
|
+
dirs -= ['_site']
|
83
|
+
dirs = dirs.map { |x| "#{x}/**/*" }
|
84
|
+
dirs += ['*']
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Create the Site
|
89
|
+
site = Jekyll::Site.new(options)
|
90
|
+
|
91
|
+
# Run the directory watcher for auto-generation, if required
|
92
|
+
if options['auto']
|
93
|
+
require 'directory_watcher'
|
94
|
+
|
95
|
+
puts "Auto-regenerating enabled: #{source} -> #{destination}"
|
96
|
+
|
97
|
+
dw = DirectoryWatcher.new(source)
|
98
|
+
dw.interval = 1
|
99
|
+
dw.glob = globs(source)
|
100
|
+
|
101
|
+
dw.add_observer do |*args|
|
102
|
+
t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
103
|
+
puts "[#{t}] regeneration: #{args.size} files changed"
|
104
|
+
site.process
|
105
|
+
end
|
106
|
+
|
107
|
+
dw.start
|
108
|
+
|
109
|
+
unless options['server']
|
110
|
+
loop { sleep 1000 }
|
111
|
+
end
|
112
|
+
else
|
113
|
+
puts "Building site: #{source} -> #{destination}"
|
114
|
+
begin
|
115
|
+
site.process
|
116
|
+
rescue Jekyll::FatalException => e
|
117
|
+
puts
|
118
|
+
puts "ERROR: YOUR SITE COULD NOT BE BUILT:"
|
119
|
+
puts "------------------------------------"
|
120
|
+
puts e.message
|
121
|
+
exit(1)
|
122
|
+
end
|
123
|
+
puts "Successfully generated site: #{source} -> #{destination}"
|
124
|
+
end
|
125
|
+
|
126
|
+
# Run the server on the specified port, if required
|
127
|
+
if options['server']
|
128
|
+
require 'webrick'
|
129
|
+
include WEBrick
|
130
|
+
|
131
|
+
FileUtils.mkdir_p(destination)
|
132
|
+
|
133
|
+
mime_types = WEBrick::HTTPUtils::DefaultMimeTypes
|
134
|
+
mime_types.store 'js', 'application/javascript'
|
135
|
+
|
136
|
+
s = HTTPServer.new(
|
137
|
+
:Port => options['server_port'],
|
138
|
+
:MimeTypes => mime_types
|
139
|
+
)
|
140
|
+
s.mount(options['baseurl'], HTTPServlet::FileHandler, destination)
|
141
|
+
t = Thread.new {
|
142
|
+
s.start
|
143
|
+
}
|
144
|
+
|
145
|
+
trap("INT") { s.shutdown }
|
146
|
+
t.join()
|
147
|
+
end
|
data/lib/spinto.rb
ADDED
data/spinto.gemspec
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
3
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
|
+
s.rubygems_version = '1.3.5'
|
5
|
+
|
6
|
+
s.name = 'spinto'
|
7
|
+
s.version = '0.2.3'
|
8
|
+
s.date = '2012-02-09'
|
9
|
+
|
10
|
+
s.summary = "The site generator used at spintoapp.com"
|
11
|
+
s.description = "Spinto uses Jekyll and plugins to build static sites, this gem provides the spinto-site builder."
|
12
|
+
|
13
|
+
s.authors = ["Matthew Beale"]
|
14
|
+
s.email = 'matt.beale@madhatted.com'
|
15
|
+
s.homepage = 'http://github.com/mixonic/spinto'
|
16
|
+
|
17
|
+
s.require_paths = %w[lib]
|
18
|
+
|
19
|
+
s.executables = ["spinto-site"]
|
20
|
+
|
21
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
22
|
+
s.extra_rdoc_files = %w[]
|
23
|
+
|
24
|
+
s.add_runtime_dependency('jekyll', "0.11.0")
|
25
|
+
s.add_runtime_dependency('coffee-script', "2.2.0")
|
26
|
+
s.add_runtime_dependency('sass', "3.1.15")
|
27
|
+
s.add_runtime_dependency('less', "2.0.9")
|
28
|
+
s.add_runtime_dependency('RedCloth', "4.2.9")
|
29
|
+
|
30
|
+
s.add_development_dependency('rake', "~> 0.9")
|
31
|
+
s.add_development_dependency('rdoc', "~> 3.11")
|
32
|
+
|
33
|
+
# = MANIFEST =
|
34
|
+
s.files = %w[
|
35
|
+
Gemfile
|
36
|
+
Rakefile
|
37
|
+
_plugins/coffeescript_converter.rb
|
38
|
+
_plugins/include_tree.rb
|
39
|
+
_plugins/include_watcher.rb
|
40
|
+
_plugins/less_converter.rb
|
41
|
+
_plugins/sass_converter.rb
|
42
|
+
_plugins/scss_converter.rb
|
43
|
+
bin/spinto-site
|
44
|
+
lib/spinto.rb
|
45
|
+
spinto.gemspec
|
46
|
+
]
|
47
|
+
# = MANIFEST =
|
48
|
+
|
49
|
+
s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spinto
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matthew Beale
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-09 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jekyll
|
16
|
+
requirement: &2153561060 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.11.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153561060
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: coffee-script
|
27
|
+
requirement: &2153560600 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.2.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2153560600
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sass
|
38
|
+
requirement: &2153560140 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.1.15
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2153560140
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: less
|
49
|
+
requirement: &2153559680 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - =
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.9
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2153559680
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: RedCloth
|
60
|
+
requirement: &2153559220 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - =
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 4.2.9
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2153559220
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &2153558760 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.9'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2153558760
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rdoc
|
82
|
+
requirement: &2153558300 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '3.11'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2153558300
|
91
|
+
description: Spinto uses Jekyll and plugins to build static sites, this gem provides
|
92
|
+
the spinto-site builder.
|
93
|
+
email: matt.beale@madhatted.com
|
94
|
+
executables:
|
95
|
+
- spinto-site
|
96
|
+
extensions: []
|
97
|
+
extra_rdoc_files: []
|
98
|
+
files:
|
99
|
+
- Gemfile
|
100
|
+
- Rakefile
|
101
|
+
- _plugins/coffeescript_converter.rb
|
102
|
+
- _plugins/include_tree.rb
|
103
|
+
- _plugins/include_watcher.rb
|
104
|
+
- _plugins/less_converter.rb
|
105
|
+
- _plugins/sass_converter.rb
|
106
|
+
- _plugins/scss_converter.rb
|
107
|
+
- bin/spinto-site
|
108
|
+
- lib/spinto.rb
|
109
|
+
- spinto.gemspec
|
110
|
+
homepage: http://github.com/mixonic/spinto
|
111
|
+
licenses: []
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options:
|
114
|
+
- --charset=UTF-8
|
115
|
+
require_paths:
|
116
|
+
- lib
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ! '>='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
segments:
|
124
|
+
- 0
|
125
|
+
hash: -379297724553837064
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
requirements: []
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 1.8.15
|
135
|
+
signing_key:
|
136
|
+
specification_version: 2
|
137
|
+
summary: The site generator used at spintoapp.com
|
138
|
+
test_files: []
|