awestruct 0.5.4.beta1 → 0.5.4.rc
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/awestruct/cli/deploy.rb +2 -2
- data/lib/awestruct/cli/generate.rb +3 -3
- data/lib/awestruct/cli/init.rb +1 -1
- data/lib/awestruct/cli/invoker.rb +11 -10
- data/lib/awestruct/cli/manifest.rb +1 -1
- data/lib/awestruct/cli/options.rb +16 -6
- data/lib/awestruct/cli/server.rb +4 -1
- data/lib/awestruct/compatibility.rb +5 -0
- data/lib/awestruct/config/default-site.yml +7 -0
- data/lib/awestruct/deploy/base_deploy.rb +74 -7
- data/lib/awestruct/deploy/github_pages_deploy.rb +20 -7
- data/lib/awestruct/deploy/rsync_deploy.rb +1 -1
- data/lib/awestruct/deploy/s3_deploy.rb +1 -1
- data/lib/awestruct/engine.rb +34 -30
- data/lib/awestruct/frameworks/base_Rakefile +22 -3
- data/lib/awestruct/handlers/asciidoctor_handler.rb +38 -10
- data/lib/awestruct/handlers/front_matter_handler.rb +18 -13
- data/lib/awestruct/handlers/interpolation_handler.rb +1 -1
- data/lib/awestruct/handlers/template/asciidoc.rb +22 -1
- data/lib/awestruct/page_loader.rb +1 -1
- data/lib/awestruct/version.rb +1 -1
- data/spec/asciidoc_handler_spec.rb +51 -1
- data/spec/awestruct/scm/git_spec.rb +2 -2
- data/spec/coffeescript_handler_spec.rb +1 -3
- data/spec/deploy_spec.rb +66 -1
- data/spec/engine_spec.rb +10 -6
- data/spec/erb_handler_spec.rb +4 -6
- data/spec/front_matter_handler_spec.rb +14 -0
- data/spec/github_pages_deploy_spec.rb +14 -9
- data/spec/haml_handler_spec.rb +2 -5
- data/spec/invoker_spec.rb +1 -0
- data/spec/javascript_handler_spec.rb +3 -6
- data/spec/markdown_handler_spec.rb +0 -2
- data/spec/mustache_handler_spec.rb +5 -8
- data/spec/orgmode_handler_spec.rb +1 -3
- data/spec/page_loader_spec.rb +18 -0
- data/spec/redirect_handler_spec.rb +2 -6
- data/spec/restructuredtext_handler_spec.rb +1 -3
- data/spec/sass_handler_spec.rb +1 -3
- data/spec/scss_handler_spec.rb +1 -3
- data/spec/slim_handler_spec.rb +2 -5
- data/spec/support/shared_handler_example.rb +18 -10
- data/spec/test-data/engine/_config/site.yml +2 -0
- data/spec/test-data/front-matter-file-no-content.txt +1 -0
- data/spec/test-data/front-matter-looking.txt +9 -0
- data/spec/test-data/front-matter-middle.txt +12 -0
- data/spec/test-data/gzip/no.html.gz +0 -0
- data/spec/test-data/gzip/no.txt +0 -0
- data/spec/test-data/gzip/subdir/yes.css +3 -0
- data/spec/test-data/gzip/yes.html +10 -0
- data/spec/test-data/gzip/yes.js +1 -0
- data/spec/test-data/handlers/asciidoc_with_attributes.ad +3 -0
- data/spec/test-data/handlers/asciidoc_with_interpolation.ad +4 -0
- data/spec/test-data/handlers/asciidoc_without_interpolation.ad +3 -0
- data/spec/test-data/handlers/asciidoctor_with_headers.ad +7 -4
- data/spec/test-data/handlers/textile-page.textile +3 -1
- data/spec/textile_handler_spec.rb +16 -6
- metadata +28 -7
data/lib/awestruct/cli/deploy.rb
CHANGED
@@ -14,7 +14,7 @@ module Awestruct
|
|
14
14
|
@site_config = site_config
|
15
15
|
@deploy_config = deploy_config
|
16
16
|
@deploy_config['type'] ||= (is_github? ? :github_pages : :rsync)
|
17
|
-
|
17
|
+
$LOG.info "Deploying to #{deploy_type}" if $LOG.info?
|
18
18
|
end
|
19
19
|
|
20
20
|
def deploy_type
|
@@ -31,7 +31,7 @@ module Awestruct
|
|
31
31
|
end
|
32
32
|
|
33
33
|
deployer = deployer_class.new( site_config, deploy_config )
|
34
|
-
deployer.run
|
34
|
+
deployer.run
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -5,7 +5,7 @@ module Awestruct
|
|
5
5
|
module CLI
|
6
6
|
class Generate
|
7
7
|
|
8
|
-
def initialize(config, profile=nil, base_url=nil, default_base_url=
|
8
|
+
def initialize(config, profile=nil, base_url=nil, default_base_url=Options::DEFAULT_BASE_URL, force=false)
|
9
9
|
@profile = profile
|
10
10
|
@base_url = base_url
|
11
11
|
@default_base_url = default_base_url
|
@@ -15,9 +15,9 @@ module Awestruct
|
|
15
15
|
|
16
16
|
def run()
|
17
17
|
begin
|
18
|
-
base_url = @
|
18
|
+
base_url = @base_url || @default_base_url
|
19
19
|
$LOG.info "Generating site: #{base_url}" if $LOG.info?
|
20
|
-
@engine.run( @profile, @base_url,
|
20
|
+
@engine.run( @profile, @base_url, @default_base_url, @force )
|
21
21
|
rescue =>e
|
22
22
|
$LOG.error e if $LOG.error?
|
23
23
|
$LOG.error e.backtrace.join("\n") if $LOG.error?
|
data/lib/awestruct/cli/init.rb
CHANGED
@@ -22,7 +22,7 @@ module Awestruct
|
|
22
22
|
mkdir('stylesheets')
|
23
23
|
}
|
24
24
|
|
25
|
-
def initialize(
|
25
|
+
def initialize(dir = Dir.pwd, framework = 'compass', scaffold = true)
|
26
26
|
@dir = dir
|
27
27
|
@framework = framework
|
28
28
|
@scaffold = scaffold
|
@@ -1,13 +1,7 @@
|
|
1
|
-
require 'awestruct/cli/options'
|
2
|
-
|
3
|
-
require 'awestruct/cli/init'
|
4
|
-
require 'awestruct/cli/generate'
|
5
|
-
require 'awestruct/cli/auto'
|
6
|
-
require 'awestruct/cli/server'
|
7
|
-
require 'awestruct/logger'
|
8
|
-
|
9
1
|
require 'pathname'
|
10
2
|
require 'logger'
|
3
|
+
require 'awestruct/logger'
|
4
|
+
require 'awestruct/cli/options'
|
11
5
|
|
12
6
|
module Awestruct
|
13
7
|
module CLI
|
@@ -34,6 +28,12 @@ module Awestruct
|
|
34
28
|
$LOG = Logger.new(Awestruct::AwestructLoggerMultiIO.new(@options.verbose, STDOUT, File.open('.awestruct/debug.log', 'w')))
|
35
29
|
$LOG.level = @options.verbose ? Logger::DEBUG : Logger::INFO
|
36
30
|
$LOG.formatter = Awestruct::AwestructLogFormatter.new
|
31
|
+
|
32
|
+
# these requires are deferred until after $LOG is set
|
33
|
+
require 'awestruct/cli/init'
|
34
|
+
require 'awestruct/cli/generate'
|
35
|
+
require 'awestruct/cli/auto'
|
36
|
+
require 'awestruct/cli/server'
|
37
37
|
end
|
38
38
|
|
39
39
|
def invoke!
|
@@ -100,7 +100,8 @@ module Awestruct
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def invoke_generate()
|
103
|
-
|
103
|
+
base_url = profile['base_url'] || options.base_url
|
104
|
+
@success = Awestruct::CLI::Generate.new( config, options.profile, base_url, Options::DEFAULT_BASE_URL, options.force ).run
|
104
105
|
end
|
105
106
|
|
106
107
|
def invoke_deploy()
|
@@ -121,7 +122,7 @@ module Awestruct
|
|
121
122
|
end
|
122
123
|
|
123
124
|
def invoke_server()
|
124
|
-
run_in_thread( Awestruct::CLI::Server.new(
|
125
|
+
run_in_thread( Awestruct::CLI::Server.new( options.output_dir, options.bind_addr, options.port ) )
|
125
126
|
end
|
126
127
|
|
127
128
|
|
@@ -6,6 +6,16 @@ module Awestruct
|
|
6
6
|
module CLI
|
7
7
|
|
8
8
|
class Options
|
9
|
+
LOCAL_HOSTS = {
|
10
|
+
'localhost' => 'localhost',
|
11
|
+
'0.0.0.0' => 'localhost',
|
12
|
+
'127.0.0.1' => 'localhost',
|
13
|
+
'::1' => '[::1]',
|
14
|
+
'localhost6' => 'localhost6'
|
15
|
+
}
|
16
|
+
DEFAULT_BIND_ADDR = '0.0.0.0'
|
17
|
+
DEFAULT_PORT = 4242
|
18
|
+
DEFAULT_BASE_URL = %(http://#{LOCAL_HOSTS[DEFAULT_BIND_ADDR] || DEFAULT_BIND_ADDR}:#{DEFAULT_PORT})
|
9
19
|
|
10
20
|
attr_accessor :generate
|
11
21
|
attr_accessor :server
|
@@ -27,8 +37,8 @@ module Awestruct
|
|
27
37
|
def initialize()
|
28
38
|
@generate = nil
|
29
39
|
@server = false
|
30
|
-
@port =
|
31
|
-
@bind_addr =
|
40
|
+
@port = DEFAULT_PORT
|
41
|
+
@bind_addr = DEFAULT_BIND_ADDR
|
32
42
|
@auto = false
|
33
43
|
@force = false
|
34
44
|
@init = false
|
@@ -71,10 +81,10 @@ module Awestruct
|
|
71
81
|
opts.on( '-u', '--url URL', 'Set site.base_url' ) do |url|
|
72
82
|
self.base_url = url
|
73
83
|
end
|
74
|
-
opts.on( '-d', '--dev',
|
84
|
+
opts.on( '-d', '--dev', "Run site in development mode (--auto, --server, --port #{DEFAULT_PORT} and --profile development)" ) do |url|
|
75
85
|
self.server = true
|
76
86
|
self.auto = true
|
77
|
-
self.port =
|
87
|
+
self.port = DEFAULT_PORT
|
78
88
|
self.profile = 'development'
|
79
89
|
end
|
80
90
|
|
@@ -90,10 +100,10 @@ module Awestruct
|
|
90
100
|
opts.on( '-a', '--auto', 'Auto-generate when changes are noticed' ) do |a|
|
91
101
|
self.auto = a
|
92
102
|
end
|
93
|
-
opts.on( '-p', '--port PORT', Integer,
|
103
|
+
opts.on( '-p', '--port PORT', Integer, "Server port (default: #{DEFAULT_PORT})" ) do |port|
|
94
104
|
self.port = port
|
95
105
|
end
|
96
|
-
opts.on( '-b', '--bind ADDR',
|
106
|
+
opts.on( '-b', '--bind ADDR', "Server address (default: #{DEFAULT_BIND_ADDR})" ) do |bind_addr|
|
97
107
|
self.bind_addr = bind_addr
|
98
108
|
end
|
99
109
|
opts.on( '-g', '--[no-]generate', 'Generate site' ) do |g|
|
data/lib/awestruct/cli/server.rb
CHANGED
@@ -7,13 +7,16 @@ module Awestruct
|
|
7
7
|
class Server
|
8
8
|
attr_reader :server
|
9
9
|
|
10
|
-
def initialize(path, bind_addr=
|
10
|
+
def initialize(path, bind_addr=Options::DEFAULT_BIND_ADDR, port=Options::DEFAULT_PORT)
|
11
11
|
@path = path
|
12
12
|
@bind_addr = bind_addr
|
13
13
|
@port = port
|
14
14
|
end
|
15
15
|
|
16
16
|
def run
|
17
|
+
url = %(http://#{Options::LOCAL_HOSTS[@bind_addr] || @bind_addr}:#{@port})
|
18
|
+
msg = %(Starting preview server at #{url} (Press Ctrl-C to shutdown))
|
19
|
+
puts %(#{'*' * msg.length}\n#{msg}\n#{'*' * msg.length}\n)
|
17
20
|
::Rack::Server::start( :app => Awestruct::Rack::App.new( @path ),
|
18
21
|
:Port => @port,
|
19
22
|
:Host => @bind_addr
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'awestruct/deployers'
|
2
|
-
|
2
|
+
require 'awestruct/compatibility'
|
3
|
+
Dir[ File.join( File.dirname(__FILE__), '..', 'scm', '*.rb' ) ].each do |f|
|
3
4
|
begin
|
4
5
|
require f
|
5
6
|
rescue LoadError => e
|
@@ -12,14 +13,27 @@ module Awestruct
|
|
12
13
|
module Deploy
|
13
14
|
class Base
|
14
15
|
UNCOMMITTED_CHANGES = 'You have uncommitted changes in the working branch. Please commit or stash them.'
|
15
|
-
|
16
|
-
|
16
|
+
|
17
|
+
def initialize(site_config, deploy_config)
|
18
|
+
# Add a single front slash at the end of output dir
|
19
|
+
@site_path = File.join( site_config.output_dir, '/' ).gsub(/^\w:\//, '/')
|
20
|
+
@gzip = deploy_config['gzip']
|
21
|
+
@source_dir = deploy_config['source_dir'] || site_config.dir
|
22
|
+
@ignore_uncommitted = deploy_config['uncommitted']
|
23
|
+
init_scm(deploy_config['scm'] || 'git')
|
24
|
+
end
|
25
|
+
|
26
|
+
def run
|
27
|
+
if @ignore_uncommitted == true
|
28
|
+
compress_site
|
17
29
|
publish_site
|
18
30
|
else
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
31
|
+
if @scm.uncommitted_changes? @source_dir
|
32
|
+
existing_changes
|
33
|
+
else
|
34
|
+
compress_site
|
35
|
+
publish_site
|
36
|
+
end
|
23
37
|
end
|
24
38
|
end
|
25
39
|
|
@@ -30,6 +44,59 @@ module Awestruct
|
|
30
44
|
def existing_changes
|
31
45
|
$LOG.error UNCOMMITTED_CHANGES if $LOG.error?
|
32
46
|
end
|
47
|
+
|
48
|
+
def compress_site
|
49
|
+
if @gzip
|
50
|
+
gzip_site @site_path
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def gzip_site(site_path)
|
55
|
+
Dir.glob("#{site_path}/**/*") do |item|
|
56
|
+
next if item == '.' or item == '..'
|
57
|
+
ext = File.extname(item)
|
58
|
+
if !ext.empty?
|
59
|
+
ext_sym = ext[1..-1].to_sym
|
60
|
+
case ext_sym
|
61
|
+
when :css, :js, :html
|
62
|
+
require 'zlib'
|
63
|
+
if !is_gzipped item
|
64
|
+
gzip_file item
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def gzip_file(filename)
|
72
|
+
$LOG.debug "Gzipping File #{filename}"
|
73
|
+
Zlib::GzipWriter.open("#{filename}.gz") do |gz|
|
74
|
+
gz.mtime = File.mtime(filename)
|
75
|
+
gz.orig_name = filename
|
76
|
+
gz.write File.binread(filename)
|
77
|
+
end
|
78
|
+
File.rename("#{filename}.gz", "#{filename}")
|
79
|
+
end
|
80
|
+
|
81
|
+
def is_gzipped(filename)
|
82
|
+
begin
|
83
|
+
File.open("#{filename}") do |f|
|
84
|
+
Zlib::GzipReader.new(f)
|
85
|
+
true
|
86
|
+
end
|
87
|
+
rescue
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def init_scm type
|
93
|
+
begin
|
94
|
+
clazz = Object.const_get('Awestruct').const_get('Scm').const_get(type.capitalize)
|
95
|
+
@scm = clazz.new
|
96
|
+
rescue
|
97
|
+
$LOG.error( "Could not resolve class for scm type: #{type}" ) if $LOG.error?
|
98
|
+
end
|
99
|
+
end
|
33
100
|
end
|
34
101
|
end
|
35
102
|
end
|
@@ -5,22 +5,35 @@ module Awestruct
|
|
5
5
|
module Deploy
|
6
6
|
class GitHubPagesDeploy < Base
|
7
7
|
def initialize(site_config, deploy_config)
|
8
|
-
|
8
|
+
super
|
9
9
|
@branch = deploy_config['branch'] || 'gh-pages'
|
10
10
|
@repo = deploy_config['repository'] || 'origin'
|
11
11
|
end
|
12
12
|
|
13
13
|
def publish_site
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
tmp_branch = '__awestruct_deploy__'
|
15
|
+
detached_branch = nil
|
16
|
+
|
17
|
+
original_branch = git.current_branch
|
18
|
+
|
19
|
+
# detect a detached state
|
20
|
+
# values include (no branch), (detached from x), etc
|
21
|
+
if original_branch.start_with? '('
|
22
|
+
detached_branch = git.log(1).first.sha
|
23
|
+
git.branch(original_branch = tmp_branch).checkout
|
19
24
|
end
|
25
|
+
|
26
|
+
# work in a branch, then revert to current branch
|
20
27
|
git.branch(@branch).checkout
|
21
28
|
add_and_commit_site @site_path
|
22
29
|
git.push(@repo, @branch)
|
23
|
-
|
30
|
+
|
31
|
+
if detached_branch
|
32
|
+
git.checkout detached_branch
|
33
|
+
git.branch(original_branch).delete
|
34
|
+
else
|
35
|
+
git.checkout original_branch
|
36
|
+
end
|
24
37
|
end
|
25
38
|
|
26
39
|
private
|
@@ -7,7 +7,7 @@ module Awestruct
|
|
7
7
|
class RSyncDeploy < Base
|
8
8
|
|
9
9
|
def initialize(site_config, deploy_config)
|
10
|
-
|
10
|
+
super
|
11
11
|
@host = deploy_config['host']
|
12
12
|
@path = File.join( deploy_config['path'], '/' )
|
13
13
|
@exclude = deploy_config['exclude']
|
data/lib/awestruct/engine.rb
CHANGED
@@ -51,9 +51,9 @@ module Awestruct
|
|
51
51
|
$LOG.debug 'adjust_load_path' if $LOG.debug?
|
52
52
|
adjust_load_path
|
53
53
|
$LOG.debug 'load_default_site_yaml' if $LOG.debug?
|
54
|
-
load_default_site_yaml
|
55
|
-
$LOG.debug '
|
56
|
-
|
54
|
+
load_default_site_yaml( profile )
|
55
|
+
$LOG.debug 'load_user_site_yaml -- profile' if $LOG.debug?
|
56
|
+
load_user_site_yaml( profile )
|
57
57
|
$LOG.debug 'set_base_url' if $LOG.debug?
|
58
58
|
set_base_url( base_url, default_base_url )
|
59
59
|
$LOG.debug 'load_yamls' if $LOG.debug?
|
@@ -105,35 +105,14 @@ module Awestruct
|
|
105
105
|
|
106
106
|
end
|
107
107
|
|
108
|
-
def load_default_site_yaml
|
109
|
-
|
110
|
-
|
111
|
-
data = YAML.load( File.read( default_site_yaml ) )
|
112
|
-
data.each do |k,v|
|
113
|
-
site.send( "#{k}=", v )
|
114
|
-
end if data
|
115
|
-
end
|
108
|
+
def load_default_site_yaml(profile = nil)
|
109
|
+
default_site_yaml_path = File.join( File.dirname( __FILE__ ), 'config', 'default-site.yml' )
|
110
|
+
load_site_yaml( default_site_yaml_path, profile )
|
116
111
|
end
|
117
112
|
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
data = YAML.load( File.read( site_yaml ) )
|
122
|
-
site.interpolate = true
|
123
|
-
profile_data = {}
|
124
|
-
data.each do |k,v|
|
125
|
-
if ( ( k == 'profiles' ) && ( ! profile.nil? ) )
|
126
|
-
profile_data = ( v[profile] || {} )
|
127
|
-
else
|
128
|
-
site.send( "#{k}=", merge_data( site.send( "#{k}" ), v ) )
|
129
|
-
end
|
130
|
-
end if data
|
131
|
-
site.profile = profile
|
132
|
-
|
133
|
-
profile_data.each do |k,v|
|
134
|
-
site.send( "#{k}=", merge_data( site.send( "#{k}" ), v ) )
|
135
|
-
end
|
136
|
-
end
|
113
|
+
def load_user_site_yaml(profile = nil)
|
114
|
+
site_yaml_path = File.join( site.config.config_dir, 'site.yml' )
|
115
|
+
load_site_yaml( site_yaml_path, profile )
|
137
116
|
end
|
138
117
|
|
139
118
|
def load_yamls
|
@@ -142,6 +121,31 @@ module Awestruct
|
|
142
121
|
end
|
143
122
|
end
|
144
123
|
|
124
|
+
def load_site_yaml(yaml_path, profile = nil)
|
125
|
+
if ( File.exist?( yaml_path ) )
|
126
|
+
data = YAML.load( File.read( yaml_path ) )
|
127
|
+
if ( profile )
|
128
|
+
site.interpolate = true
|
129
|
+
profile_data = {}
|
130
|
+
data.each do |k,v|
|
131
|
+
if ( ( k == 'profiles' ) && ( ! profile.nil? ) )
|
132
|
+
profile_data = ( v[profile] || {} )
|
133
|
+
else
|
134
|
+
site.send( "#{k}=", merge_data( site.send( "#{k}" ), v ) )
|
135
|
+
end
|
136
|
+
end if data
|
137
|
+
site.profile = profile
|
138
|
+
profile_data.each do |k,v|
|
139
|
+
site.send( "#{k}=", merge_data( site.send( "#{k}" ), v ) )
|
140
|
+
end
|
141
|
+
else
|
142
|
+
data.each do |k,v|
|
143
|
+
site.send( "#{k}=", v )
|
144
|
+
end if data
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
145
149
|
def load_yaml(yaml_path)
|
146
150
|
data = YAML.load( File.read( yaml_path ) )
|
147
151
|
name = File.basename( yaml_path, '.yml' )
|