stack 0.0.6 → 0.0.7
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/README.markdown +21 -10
- data/Rakefile +1 -0
- data/VERSION.yml +1 -1
- data/lib/core_ext/hash.rb +0 -6
- data/lib/core_ext/string.rb +5 -0
- data/lib/stack/configuration.rb +14 -0
- data/lib/stack/generator.rb +8 -0
- data/lib/stack/runner.rb +11 -3
- data/lib/stack/server.rb +1 -1
- data/lib/stack/utils/standard.rb +7 -0
- data/lib/stack/watcher.rb +3 -1
- data/lib/stack.rb +28 -9
- metadata +14 -2
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
stack
|
2
2
|
=====
|
3
3
|
|
4
4
|
Generates a static site from template files with YAML and Liquid. Stack supports template transformation through Markdown, Textile and Less CSS.
|
@@ -35,9 +35,13 @@ Usage
|
|
35
35
|
|
36
36
|
Generate runs through the source and transforms the templates, if no source is specified the current directory will be used.
|
37
37
|
|
38
|
+
gen
|
39
|
+
|
40
|
+
Alias of `generate`.
|
41
|
+
|
38
42
|
server
|
39
43
|
|
40
|
-
Runs a web server serving the output of the transformed source, by default when running
|
44
|
+
Runs a web server serving the output of the transformed source, by default when running stack in server mode your templates will be automatically transformed when changed (this can be disabled).
|
41
45
|
|
42
46
|
watch
|
43
47
|
|
@@ -45,17 +49,24 @@ Watches a directory and re-builds whenever theres file changes.
|
|
45
49
|
|
46
50
|
#### Options
|
47
51
|
|
48
|
-
--source
|
52
|
+
--source [DIR]
|
53
|
+
|
54
|
+
Directory to use as the source for generating a site with stack, by default the current directory will be used.
|
55
|
+
|
56
|
+
--target [DIR]
|
49
57
|
|
50
|
-
|
58
|
+
Directory to use as the target directory, if none is specified the target will be a folder called `_stack` in the source directory.
|
51
59
|
|
52
60
|
##### Server Options
|
53
61
|
|
54
|
-
--port
|
62
|
+
--port [PORT]
|
55
63
|
|
56
|
-
|
64
|
+
Specifies the port number the server should use when serving content through the `server` command.
|
65
|
+
|
66
|
+
--disable-watch
|
67
|
+
|
68
|
+
Disables automatic transformation when serving content through the `server` command.
|
57
69
|
|
58
|
-
|
59
70
|
### Ruby
|
60
71
|
|
61
72
|
require 'stack'
|
@@ -65,7 +76,7 @@ Watches a directory and re-builds whenever theres file changes.
|
|
65
76
|
Templates and YAML
|
66
77
|
------------------
|
67
78
|
|
68
|
-
Template files can contain YAML block's that are processed by
|
79
|
+
Template files can contain YAML block's that are processed by stack and can be used to define Liquid variables for use in your templates. A YAML block can be something like;
|
69
80
|
|
70
81
|
---
|
71
82
|
layout: application
|
@@ -80,11 +91,11 @@ This specifies the layout file to use around the content, theres no need to spec
|
|
80
91
|
|
81
92
|
generator
|
82
93
|
|
83
|
-
This variable holds the current
|
94
|
+
This variable holds the current hash used to transform the current template. You should not override this from the YAML block.
|
84
95
|
|
85
96
|
generator.time
|
86
97
|
|
87
|
-
The current Time from when the
|
98
|
+
The current Time from when the stack processed and transformed the templates.
|
88
99
|
|
89
100
|
generator.processed_at
|
90
101
|
|
data/Rakefile
CHANGED
@@ -20,6 +20,7 @@ begin
|
|
20
20
|
gem.add_dependency "maruku", ">= 0.5.9"
|
21
21
|
gem.add_dependency "less", ">= 1.0.0"
|
22
22
|
gem.add_dependency "directory_watcher", ">= 1.2.0"
|
23
|
+
gem.add_dependency "mash", ">= 0.0.3"
|
23
24
|
|
24
25
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
25
26
|
end
|
data/VERSION.yml
CHANGED
data/lib/core_ext/hash.rb
CHANGED
data/lib/stack/configuration.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Stack
|
2
2
|
class Configuration
|
3
3
|
attr_accessor :source, :target
|
4
|
+
attr_accessor :server_port, :server_watch
|
4
5
|
|
5
6
|
def initialize(hash = nil)
|
6
7
|
self.from_hash(hash)
|
@@ -10,7 +11,20 @@ module Stack
|
|
10
11
|
if (hash != nil)
|
11
12
|
@source = hash[:source]
|
12
13
|
@target = hash[:target]
|
14
|
+
@server_port = hash[:server][:port]
|
15
|
+
@server_watch = hash[:server][:watch]
|
13
16
|
end
|
14
17
|
end
|
18
|
+
|
19
|
+
def to_hash
|
20
|
+
{
|
21
|
+
:source => self.source,
|
22
|
+
:target => self.target,
|
23
|
+
:server => {
|
24
|
+
:port => self.server_port,
|
25
|
+
:watch => self.server_watch
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
15
29
|
end
|
16
30
|
end
|
data/lib/stack/generator.rb
CHANGED
@@ -7,6 +7,8 @@ module Stack
|
|
7
7
|
attr_accessor :layouts
|
8
8
|
attr_accessor :pages
|
9
9
|
|
10
|
+
attr_accessor :remove_first
|
11
|
+
|
10
12
|
attr_accessor :processed_at, :transformed_at
|
11
13
|
|
12
14
|
def initialize(source, target, parent = nil)
|
@@ -14,6 +16,8 @@ module Stack
|
|
14
16
|
self.target = target
|
15
17
|
self.parent = parent
|
16
18
|
|
19
|
+
self.remove_first = false
|
20
|
+
|
17
21
|
self.layouts = (parent) ? parent.layouts.dup : { }
|
18
22
|
|
19
23
|
self.children = [ ]
|
@@ -54,6 +58,10 @@ module Stack
|
|
54
58
|
end
|
55
59
|
|
56
60
|
def transform!
|
61
|
+
if self.remove_first
|
62
|
+
FileUtils.rm_r self.target
|
63
|
+
end
|
64
|
+
|
57
65
|
self.transformed_at = Time.now
|
58
66
|
|
59
67
|
self.pages.each do |name, page|
|
data/lib/stack/runner.rb
CHANGED
@@ -44,9 +44,11 @@ module Stack
|
|
44
44
|
@generator.transform!
|
45
45
|
when /(server)/
|
46
46
|
# make a watcher
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
if Stack::runner.configuration.server_watch
|
48
|
+
watcher = Stack::Watcher.new(@generator)
|
49
|
+
watcher.keep_alive = false
|
50
|
+
watcher.observe
|
51
|
+
end
|
50
52
|
# and a server
|
51
53
|
server = Stack::Server.new(@generator)
|
52
54
|
server.observe
|
@@ -54,6 +56,12 @@ module Stack
|
|
54
56
|
# setup a watcher
|
55
57
|
watcher = Stack::Watcher.new(@generator)
|
56
58
|
watcher.observe
|
59
|
+
when /(create)/
|
60
|
+
File.open("#{Stack::runner.configuration.source}/_stack.yml", "w") { |file|
|
61
|
+
YAML.dump(Stack::runner.configuration.to_hash, file)
|
62
|
+
}
|
63
|
+
|
64
|
+
puts "Created configuration file at '#{Stack::runner.configuration.source}/_stack.yml'"
|
57
65
|
end
|
58
66
|
end
|
59
67
|
end
|
data/lib/stack/server.rb
CHANGED
data/lib/stack/watcher.rb
CHANGED
@@ -28,11 +28,13 @@ module Stack
|
|
28
28
|
self.directory_watcher.glob = dirs
|
29
29
|
|
30
30
|
self.directory_watcher.add_observer do |*args|
|
31
|
+
time = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
32
|
+
puts "[#{time}] #{args.size} files changed."
|
31
33
|
self.generator.process!
|
32
34
|
self.generator.transform!
|
33
35
|
|
34
36
|
time = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
35
|
-
puts "[#{time}] #{args.size} files
|
37
|
+
puts "[#{time}] #{args.size} files processed."
|
36
38
|
end
|
37
39
|
|
38
40
|
self.directory_watcher.start
|
data/lib/stack.rb
CHANGED
@@ -10,6 +10,7 @@ require 'RedCloth'
|
|
10
10
|
require 'less'
|
11
11
|
require 'webrick'
|
12
12
|
|
13
|
+
require 'core_ext/string'
|
13
14
|
require 'core_ext/hash'
|
14
15
|
|
15
16
|
require 'stack/configuration'
|
@@ -21,27 +22,33 @@ require 'stack/parsable'
|
|
21
22
|
require 'stack/server'
|
22
23
|
require 'stack/watcher'
|
23
24
|
|
24
|
-
require 'stack/templates/page'
|
25
|
-
require 'stack/templates/layout'
|
26
|
-
|
27
25
|
require 'stack/filters/register'
|
28
26
|
require 'stack/filters/standard'
|
29
27
|
require 'stack/filters/convertors'
|
30
28
|
require 'stack/filters/datetime'
|
31
29
|
require 'stack/filters/string'
|
32
30
|
|
31
|
+
require 'stack/templates/page'
|
32
|
+
require 'stack/templates/layout'
|
33
|
+
|
34
|
+
require 'stack/utils/standard'
|
35
|
+
|
33
36
|
module Stack
|
34
37
|
# Default options used by stack, overridden from the command line or YML configration file.
|
35
38
|
DEFAULTS = {
|
36
39
|
:source => '.',
|
37
|
-
:target => File.join('.', '_stack')
|
40
|
+
:target => File.join('.', '_stack'),
|
41
|
+
:server => {
|
42
|
+
:port => 4000,
|
43
|
+
:watch => true
|
44
|
+
}
|
38
45
|
}.freeze
|
39
46
|
|
40
47
|
# Array of valid commands stack can use
|
41
|
-
COMMANDS = %w(create generate server watch)
|
48
|
+
COMMANDS = %w(create generate gen server watch)
|
42
49
|
|
43
50
|
# Array of transformable extensions (these extensions go through the liquid transformer)
|
44
|
-
EXTENSIONS = %w(.html .markdown .mdown .mkdn .md .textile .js .css)
|
51
|
+
EXTENSIONS = %w(.html .markdown .mdown .mkdn .md .textile .js .less .css)
|
45
52
|
|
46
53
|
class << self
|
47
54
|
attr_accessor :runner
|
@@ -49,19 +56,31 @@ module Stack
|
|
49
56
|
|
50
57
|
# Parses the options configuration from the command line
|
51
58
|
def self.parse!(argv)
|
52
|
-
config =
|
59
|
+
config = Stack::DEFAULTS.dup
|
53
60
|
|
54
61
|
parser = OptionParser.new do |opts|
|
55
|
-
opts.banner = "Usage: stack
|
62
|
+
opts.banner = "Usage: stack #{Stack::COMMANDS.join('|')} [options...]"
|
56
63
|
|
64
|
+
opts.separator ""
|
65
|
+
opts.separator "Generator options:"
|
66
|
+
|
57
67
|
opts.on("-s", "--source [DIR]", "Directory to use as the source for generating a stack") do |l|
|
58
68
|
if !l.nil?
|
59
69
|
config[:source] = l
|
60
|
-
config[:target] =
|
70
|
+
config[:target] = File.join(config[:source], "_stack")
|
61
71
|
end
|
62
72
|
end
|
63
73
|
opts.on("-t", "--target [DIR]", "Directory to use as the target directory") do |l| config[:target] = l unless l.nil? end
|
64
74
|
|
75
|
+
opts.separator ""
|
76
|
+
opts.separator "Server options:"
|
77
|
+
|
78
|
+
opts.on("-p", "--port [PORT]", "Port number to use when serving content") do |l| config[:server][:port] = l unless l.nil? end
|
79
|
+
opts.on("--disable-watch", "--disable-watch", "Disables automatic transformation when serving content") do |l| config[:server][:watch] = false end
|
80
|
+
|
81
|
+
opts.separator ""
|
82
|
+
opts.separator "Common options:"
|
83
|
+
|
65
84
|
opts.on_tail("-h", "--help", "Show this message") { puts opts; exit }
|
66
85
|
opts.on_tail("-v", "--version", "Show version") do puts "stack #{Stack::version}"; exit; end
|
67
86
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sixones
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-01 00:00:00 +00:00
|
13
13
|
default_executable: stack
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -72,6 +72,16 @@ dependencies:
|
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 1.2.0
|
74
74
|
version:
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: mash
|
77
|
+
type: :runtime
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.0.3
|
84
|
+
version:
|
75
85
|
description: Generates a static site from template files with YAML and Liquid. Stack supports template transformation through Markdown, Textile and Less CSS.
|
76
86
|
email: dev@sixones.com
|
77
87
|
executables:
|
@@ -88,6 +98,7 @@ files:
|
|
88
98
|
- VERSION.yml
|
89
99
|
- bin/stack
|
90
100
|
- lib/core_ext/hash.rb
|
101
|
+
- lib/core_ext/string.rb
|
91
102
|
- lib/stack.rb
|
92
103
|
- lib/stack/configuration.rb
|
93
104
|
- lib/stack/filters/convertors.rb
|
@@ -102,6 +113,7 @@ files:
|
|
102
113
|
- lib/stack/template.rb
|
103
114
|
- lib/stack/templates/layout.rb
|
104
115
|
- lib/stack/templates/page.rb
|
116
|
+
- lib/stack/utils/standard.rb
|
105
117
|
- lib/stack/watcher.rb
|
106
118
|
- test/helper.rb
|
107
119
|
- test/test_stack.rb
|