awestruct 0.1.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/awestruct +38 -33
- data/lib/awestruct/blueclothable.rb +7 -1
- data/lib/awestruct/commands/deploy.rb +14 -5
- data/lib/awestruct/commands/generate.rb +6 -1
- data/lib/awestruct/config.rb +1 -1
- data/lib/awestruct/context_helper.rb +27 -5
- data/lib/awestruct/engine.rb +43 -38
- data/lib/awestruct/erb_file.rb +2 -2
- data/lib/awestruct/extensions/atomizer.rb +15 -2
- data/lib/awestruct/extensions/disqus.rb +3 -2
- data/lib/awestruct/extensions/google_analytics.rb +9 -10
- data/lib/awestruct/extensions/pipeline.rb +6 -0
- data/lib/awestruct/extensions/template.atom.haml +19 -10
- data/lib/awestruct/front_matter_file.rb +3 -3
- data/lib/awestruct/haml_file.rb +2 -2
- data/lib/awestruct/hamlable.rb +2 -1
- data/lib/awestruct/maruku_file.rb +2 -2
- data/lib/awestruct/org_mode_file.rb +2 -2
- data/lib/awestruct/renderable_file.rb +2 -5
- data/lib/awestruct/sass_file.rb +2 -2
- data/lib/awestruct/sassable.rb +9 -1
- data/lib/awestruct/scss_file.rb +2 -2
- data/lib/awestruct/site.rb +3 -3
- data/lib/awestruct/textile_file.rb +2 -2
- data/lib/awestruct/verbatim_file.rb +2 -2
- metadata +5 -6
- data/lib/awestruct/extensions/collection.rb +0 -52
data/bin/awestruct
CHANGED
@@ -104,14 +104,23 @@ unless options.init
|
|
104
104
|
site_yaml = YAML.load( File.read( site_yaml_file ) )
|
105
105
|
if site_yaml
|
106
106
|
@profiles_data = site_yaml['profiles'] || {}
|
107
|
-
@profile_data
|
107
|
+
@profile_data = if @profiles_data.nil?
|
108
|
+
nil
|
109
|
+
else
|
110
|
+
if options.profile
|
111
|
+
@profiles_data[options.profile]
|
112
|
+
else
|
113
|
+
# if no profile given, pick the first with deploy config
|
114
|
+
options.profile, profile_data = @profiles_data.select { |k,v| v['deploy'] }.first
|
115
|
+
profile_data
|
116
|
+
end
|
117
|
+
end
|
108
118
|
end
|
109
119
|
end
|
110
120
|
|
111
121
|
config = Awestruct::Config.new(Dir.pwd)
|
112
122
|
# config.input_dir = File.join(Dir.pwd, '_root')
|
113
123
|
|
114
|
-
|
115
124
|
if ( options.init )
|
116
125
|
if ( options.generate || options.auto || options.server )
|
117
126
|
$stderr.puts "--init may not be used with --generate, --auto or --server"
|
@@ -122,6 +131,31 @@ if ( options.init )
|
|
122
131
|
exit
|
123
132
|
end
|
124
133
|
|
134
|
+
default_base_url = 'http://localhost:4242'
|
135
|
+
|
136
|
+
def camelize(str)
|
137
|
+
str.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
138
|
+
end
|
139
|
+
|
140
|
+
if ( options.script )
|
141
|
+
puts "Running #{options.script} and exiting"
|
142
|
+
require "awestruct/scripts/#{options.script}"
|
143
|
+
script_class = eval "Awestruct::Scripts::#{camelize(options.script)}"
|
144
|
+
script = script_class.new(*ARGV)
|
145
|
+
script.run
|
146
|
+
exit
|
147
|
+
end
|
148
|
+
|
149
|
+
if ( options.server )
|
150
|
+
hostname = ( options.bind_addr == '0.0.0.0' ? 'localhost' : options.bind_addr )
|
151
|
+
default_base_url = "http://#{hostname}:#{options.port}"
|
152
|
+
end
|
153
|
+
|
154
|
+
if ( options.generate )
|
155
|
+
cmd = Awestruct::Commands::Generate.new( config, options.profile, options.base_url, default_base_url, options.force )
|
156
|
+
cmd.run
|
157
|
+
end
|
158
|
+
|
125
159
|
if ( options.deploy )
|
126
160
|
if ( options.auto || options.server )
|
127
161
|
$stderr.puts "--deploy may not be used with --auto or --server"
|
@@ -133,13 +167,11 @@ if ( options.deploy )
|
|
133
167
|
exit
|
134
168
|
end
|
135
169
|
|
136
|
-
|
137
170
|
if ( @profiles_data.nil? )
|
138
171
|
$stderr.puts "_config/site.yml must define a 'profiles' section"
|
139
172
|
exit
|
140
173
|
end
|
141
174
|
|
142
|
-
|
143
175
|
if ( @profile_data.nil? )
|
144
176
|
$stderr.puts "Unknown profile '#{options.profile}'"
|
145
177
|
exit
|
@@ -156,39 +188,15 @@ if ( options.deploy )
|
|
156
188
|
exit
|
157
189
|
end
|
158
190
|
|
191
|
+
puts "deploying to '#{options.profile}'"
|
159
192
|
cmd = Awestruct::Commands::Deploy.new( site_path, deploy_data )
|
160
|
-
|
161
193
|
cmd.run
|
162
|
-
|
163
|
-
end
|
164
|
-
|
165
|
-
default_base_url = 'http://localhost:4242'
|
166
|
-
|
167
|
-
def camelize(str)
|
168
|
-
str.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
169
|
-
end
|
170
|
-
|
171
|
-
if ( options.script )
|
172
|
-
puts "Running #{options.script} and exiting"
|
173
|
-
require "awestruct/scripts/#{options.script}"
|
174
|
-
script_class = eval "Awestruct::Scripts::#{camelize(options.script)}"
|
175
|
-
script = script_class.new(*ARGV)
|
176
|
-
script.run
|
194
|
+
puts "deploy finished"
|
177
195
|
exit
|
178
196
|
end
|
179
197
|
|
180
198
|
threads = []
|
181
199
|
|
182
|
-
if ( options.server )
|
183
|
-
hostname = ( options.bind_addr == '0.0.0.0' ? 'localhost' : options.bind_addr )
|
184
|
-
default_base_url = "http://#{hostname}:#{options.port}"
|
185
|
-
end
|
186
|
-
|
187
|
-
if ( options.generate )
|
188
|
-
cmd = Awestruct::Commands::Generate.new( config, options.profile, options.base_url, default_base_url, options.force )
|
189
|
-
cmd.run
|
190
|
-
end
|
191
|
-
|
192
200
|
if ( options.auto )
|
193
201
|
threads << Thread.new {
|
194
202
|
generate_cmd = Awestruct::Commands::Generate.new( config, options.profile, options.base_url, default_base_url )
|
@@ -210,6 +218,3 @@ end
|
|
210
218
|
threads.each do |thr|
|
211
219
|
thr.join
|
212
220
|
end
|
213
|
-
|
214
|
-
|
215
|
-
|
@@ -6,7 +6,13 @@ module Awestruct
|
|
6
6
|
def render(context)
|
7
7
|
rendered = ''
|
8
8
|
begin
|
9
|
-
|
9
|
+
bluecloth_options = { :smartypants => true }
|
10
|
+
|
11
|
+
unless self.options.nil?
|
12
|
+
bluecloth_options.merge!({ :smartypants => false }) if self.options[:html_entities] == false
|
13
|
+
end
|
14
|
+
|
15
|
+
doc = BlueCloth.new( context.interpolate_string( raw_page_content ), bluecloth_options )
|
10
16
|
rendered = doc.to_html
|
11
17
|
rescue => e
|
12
18
|
puts e
|
@@ -12,19 +12,28 @@ module Awestruct
|
|
12
12
|
|
13
13
|
def run
|
14
14
|
cmd = "rsync -r -l -i --no-p --no-g --chmod=Dg+s,ug+w --delete #{@site_path} #{@host}:#{@path}"
|
15
|
-
|
16
|
-
Open3.popen3( cmd ) do |stdin, stdout, stderr|
|
15
|
+
Open3.popen3( cmd ) do |stdin, stdout, stderr|
|
17
16
|
stdin.close
|
18
17
|
threads = []
|
19
18
|
threads << Thread.new(stdout) do |i|
|
20
19
|
while ( ! i.eof? )
|
21
|
-
line = i.readline
|
22
|
-
|
20
|
+
line = i.readline
|
21
|
+
case line[0,9]
|
22
|
+
when '<f.sT....'
|
23
|
+
puts " updating #{line[10..-1]}"
|
24
|
+
when '<f+++++++'
|
25
|
+
puts " adding #{line[10..-1]}"
|
26
|
+
when '<f..T....'
|
27
|
+
# ignoring unchanged files
|
28
|
+
# puts " no change to #{line[10..-1]}"
|
29
|
+
else
|
30
|
+
puts line
|
31
|
+
end
|
23
32
|
end
|
24
33
|
end
|
25
34
|
threads << Thread.new(stderr) do |i|
|
26
35
|
while ( ! i.eof? )
|
27
|
-
line = i.readline
|
36
|
+
line = i.readline
|
28
37
|
puts line
|
29
38
|
end
|
30
39
|
end
|
@@ -14,7 +14,12 @@ module Awestruct
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def run()
|
17
|
-
|
17
|
+
begin
|
18
|
+
@engine.generate( @profile, @base_url, @default_base_url, @force )
|
19
|
+
rescue =>e
|
20
|
+
puts e
|
21
|
+
puts e.backtrace
|
22
|
+
end
|
18
23
|
end
|
19
24
|
end
|
20
25
|
end
|
data/lib/awestruct/config.rb
CHANGED
@@ -11,13 +11,35 @@ module Awestruct
|
|
11
11
|
str.gsub( / /, ' ' )
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def without_images(str)
|
15
|
+
str.gsub(/<img[^>]+>/,'').gsub(/<a[^>]+>([^<]*)<\/a>/, '\1')
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
|
+
def close_tags(s)
|
19
|
+
stack = []
|
20
|
+
s.scan(/<\/?[^>]+>/).each do |tag|
|
21
|
+
if tag[1] != '/'
|
22
|
+
tag = tag[1..-1].scan(/\w+/).first
|
23
|
+
stack = [ tag ] + stack
|
24
|
+
else
|
25
|
+
tag = tag[2..-1].scan(/\w+/).first
|
26
|
+
if stack[0] == tag
|
27
|
+
stack = stack.drop(1)
|
28
|
+
else
|
29
|
+
raise "Malformed HTML expected #{tag[0]} but got #{tag} '#{s}'"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
stack.inject(s) { |memo,tag| memo += "</#{tag}>" }
|
34
|
+
end
|
35
|
+
|
36
|
+
def summarize(text, numwords=20, ellipsis='...')
|
37
|
+
close_tags(text.split()[0, numwords].join(' ') + ellipsis)
|
38
|
+
end
|
39
|
+
|
18
40
|
def fully_qualify_urls(base_url, text)
|
19
41
|
doc = Hpricot( text )
|
20
|
-
|
42
|
+
|
21
43
|
doc.search( "//a" ).each do |a|
|
22
44
|
a['href'] = fix_url( base_url, a['href'] )
|
23
45
|
end
|
@@ -29,7 +51,7 @@ module Awestruct
|
|
29
51
|
end
|
30
52
|
return doc.to_s
|
31
53
|
end
|
32
|
-
|
54
|
+
|
33
55
|
def fix_url(base_url, url)
|
34
56
|
return url unless ( url =~ /^\// )
|
35
57
|
"#{base_url}#{url}"
|
data/lib/awestruct/engine.rb
CHANGED
@@ -22,7 +22,6 @@ require 'awestruct/context_helper'
|
|
22
22
|
|
23
23
|
require 'awestruct/extensions/pipeline'
|
24
24
|
require 'awestruct/extensions/posts'
|
25
|
-
require 'awestruct/extensions/collection'
|
26
25
|
require 'awestruct/extensions/indexifier'
|
27
26
|
require 'awestruct/extensions/data_dir'
|
28
27
|
require 'awestruct/extensions/paginator'
|
@@ -70,8 +69,8 @@ module Awestruct
|
|
70
69
|
load_layouts
|
71
70
|
load_pages
|
72
71
|
load_extensions
|
73
|
-
set_urls
|
74
|
-
configure_compass
|
72
|
+
set_urls(site.pages)
|
73
|
+
configure_compass
|
75
74
|
generate_files(force)
|
76
75
|
end
|
77
76
|
|
@@ -83,39 +82,39 @@ module Awestruct
|
|
83
82
|
dir_pathname = Pathname.new( dir )
|
84
83
|
path_name = Pathname.new( candidates[0] )
|
85
84
|
relative_path = path_name.relative_path_from( dir_pathname ).to_s
|
86
|
-
load_page( candidates[0], relative_path )
|
85
|
+
load_page( candidates[0], :relative_path => relative_path )
|
87
86
|
end
|
88
87
|
|
89
88
|
def load_site_page(relative_path)
|
90
89
|
load_page( File.join( dir, relative_path ) )
|
91
90
|
end
|
92
91
|
|
93
|
-
def load_page(path,
|
92
|
+
def load_page(path, options = {})
|
94
93
|
page = nil
|
95
|
-
if ( relative_path.nil? )
|
94
|
+
if ( options[:relative_path].nil? )
|
96
95
|
#dir_pathname = Pathname.new( dir )
|
97
96
|
#path_name = Pathname.new( path )
|
98
97
|
#relative_path = path_name.relative_path_from( dir_pathname ).to_s
|
99
98
|
end
|
100
99
|
|
101
|
-
fixed_relative_path = ( relative_path.nil? ? nil : File.join( '', relative_path ) )
|
100
|
+
fixed_relative_path = ( options[:relative_path].nil? ? nil : File.join( '', options[:relative_path] ) )
|
102
101
|
|
103
102
|
if ( path =~ /\.haml$/ )
|
104
|
-
page = HamlFile.new( site, path, fixed_relative_path )
|
103
|
+
page = HamlFile.new( site, path, fixed_relative_path, options )
|
105
104
|
elsif ( path =~ /\.erb$/ )
|
106
|
-
page = ErbFile.new( site, path, fixed_relative_path )
|
105
|
+
page = ErbFile.new( site, path, fixed_relative_path, options )
|
107
106
|
elsif ( path =~ /\.textile$/ )
|
108
|
-
page = TextileFile.new( site, path, fixed_relative_path )
|
107
|
+
page = TextileFile.new( site, path, fixed_relative_path, options )
|
109
108
|
elsif ( path =~ /\.md$/ )
|
110
|
-
page = MarukuFile.new( site, path, fixed_relative_path )
|
109
|
+
page = MarukuFile.new( site, path, fixed_relative_path, options )
|
111
110
|
elsif ( path =~ /\.sass$/ )
|
112
|
-
page = SassFile.new( site, path, fixed_relative_path )
|
111
|
+
page = SassFile.new( site, path, fixed_relative_path, options )
|
113
112
|
elsif ( path =~ /\.scss$/ )
|
114
|
-
page = ScssFile.new( site, path, fixed_relative_path )
|
113
|
+
page = ScssFile.new( site, path, fixed_relative_path, options )
|
115
114
|
elsif ( path =~ /\.org$/ )
|
116
|
-
page = OrgModeFile.new( site, path, fixed_relative_path )
|
115
|
+
page = OrgModeFile.new( site, path, fixed_relative_path, options )
|
117
116
|
elsif ( File.file?( path ) )
|
118
|
-
page = VerbatimFile.new( site, path, fixed_relative_path )
|
117
|
+
page = VerbatimFile.new( site, path, fixed_relative_path, options )
|
119
118
|
end
|
120
119
|
page
|
121
120
|
end
|
@@ -133,17 +132,32 @@ module Awestruct
|
|
133
132
|
str = str.gsub( /\\/, '\\\\\\\\' )
|
134
133
|
str = str.gsub( /\\\\#/, '\\#' )
|
135
134
|
str = str.gsub( '@', '\@' )
|
135
|
+
str = str.gsub( '#{', '\#\{' )
|
136
136
|
str = "%@#{str}@"
|
137
137
|
result = instance_eval( str )
|
138
138
|
result
|
139
139
|
end
|
140
140
|
def evaluate_erb(erb)
|
141
|
-
erb.result( binding )
|
141
|
+
erb.result( binding )
|
142
142
|
end
|
143
143
|
end
|
144
144
|
context
|
145
145
|
end
|
146
146
|
|
147
|
+
def set_urls(pages)
|
148
|
+
pages.each do |page|
|
149
|
+
page_path = page.output_path
|
150
|
+
if ( page_path =~ /^\// )
|
151
|
+
page.url = page_path
|
152
|
+
else
|
153
|
+
page.url = "/#{page_path}"
|
154
|
+
end
|
155
|
+
if ( page.url =~ /^(.*\/)index.html$/ )
|
156
|
+
page.url = $1
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
147
161
|
private
|
148
162
|
|
149
163
|
def configure_compass
|
@@ -161,30 +175,16 @@ module Awestruct
|
|
161
175
|
end
|
162
176
|
|
163
177
|
if ( site.base_url.nil? )
|
164
|
-
site.base_url = @default_base_url
|
178
|
+
site.base_url = @default_base_url
|
165
179
|
end
|
166
180
|
|
167
|
-
if ( site.base_url )
|
181
|
+
if ( site.base_url )
|
168
182
|
if ( site.base_url =~ /^(.*)\/$/ )
|
169
183
|
site.base_url = $1
|
170
184
|
end
|
171
185
|
end
|
172
186
|
end
|
173
187
|
|
174
|
-
def set_urls
|
175
|
-
site.pages.each do |page|
|
176
|
-
page_path = page.output_path
|
177
|
-
if ( page_path =~ /^\// )
|
178
|
-
page.url = page_path
|
179
|
-
else
|
180
|
-
page.url = "/#{page_path}"
|
181
|
-
end
|
182
|
-
if ( page.url =~ /^(.*\/)index.html$/ )
|
183
|
-
page.url = $1
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
188
|
def generate_files(force)
|
189
189
|
site.pages.each do |page|
|
190
190
|
generate_page( page, force )
|
@@ -203,7 +203,7 @@ module Awestruct
|
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
206
|
-
def requires_generation?(page,force)
|
206
|
+
def requires_generation?(page, force)
|
207
207
|
return true if force
|
208
208
|
generated_path = File.join( config.output_dir, page.output_path )
|
209
209
|
return true unless File.exist?( generated_path )
|
@@ -241,6 +241,9 @@ module Awestruct
|
|
241
241
|
end
|
242
242
|
end
|
243
243
|
end
|
244
|
+
@transformers.each do |transformer|
|
245
|
+
rendered = transformer.transform(site, page, rendered)
|
246
|
+
end
|
244
247
|
rendered
|
245
248
|
end
|
246
249
|
|
@@ -251,7 +254,7 @@ module Awestruct
|
|
251
254
|
layout_pathname = Pathname.new( layout_path )
|
252
255
|
relative_path = layout_pathname.relative_path_from( dir_pathname ).to_s
|
253
256
|
name = File.basename( layout_path, '.haml' )
|
254
|
-
site.layouts[ name ] = load_page( layout_path, relative_path )
|
257
|
+
site.layouts[ name ] = load_page( layout_path, :relative_path => relative_path )
|
255
258
|
end
|
256
259
|
if ( skin_dir )
|
257
260
|
skin_dir_pathname = Pathname.new( skin_dir )
|
@@ -260,7 +263,7 @@ module Awestruct
|
|
260
263
|
relative_path = layout_pathname.relative_path_from( skin_dir_pathname ).to_s
|
261
264
|
name = File.basename( layout_path, '.haml' )
|
262
265
|
unless ( site.layouts.key?( name ) )
|
263
|
-
site.layouts[ name ] = load_page( layout_path, relative_path )
|
266
|
+
site.layouts[ name ] = load_page( layout_path, :relative_path => relative_path )
|
264
267
|
end
|
265
268
|
end
|
266
269
|
end
|
@@ -320,7 +323,7 @@ module Awestruct
|
|
320
323
|
unless ( site.has_page?( path ) )
|
321
324
|
file_pathname = Pathname.new( path )
|
322
325
|
relative_path = file_pathname.relative_path_from( dir_pathname ).to_s
|
323
|
-
page = load_page( path, relative_path )
|
326
|
+
page = load_page( path, :relative_path => relative_path )
|
324
327
|
if ( page )
|
325
328
|
site.pages << page
|
326
329
|
end
|
@@ -341,7 +344,7 @@ module Awestruct
|
|
341
344
|
unless ( site.has_page?( path ) )
|
342
345
|
file_pathname = Pathname.new( path )
|
343
346
|
relative_path = file_pathname.relative_path_from( skin_dir_pathname ).to_s
|
344
|
-
page = load_page( path, relative_path )
|
347
|
+
page = load_page( path, :relative_path => relative_path )
|
345
348
|
if ( page )
|
346
349
|
site.pages << page
|
347
350
|
end
|
@@ -378,9 +381,10 @@ module Awestruct
|
|
378
381
|
$LOAD_PATH << ext_dir
|
379
382
|
end
|
380
383
|
pipeline_file = File.join( ext_dir, 'pipeline.rb' )
|
381
|
-
if ( File.exists?( pipeline_file ) )
|
384
|
+
if ( File.exists?( pipeline_file ) )
|
382
385
|
pipeline = eval File.read( pipeline_file )
|
383
386
|
@helpers = pipeline.helpers || []
|
387
|
+
@transformers = pipeline.transformers || []
|
384
388
|
end
|
385
389
|
|
386
390
|
if ( skin_dir )
|
@@ -392,6 +396,7 @@ module Awestruct
|
|
392
396
|
if ( File.exists?( skin_pipeline_file ) )
|
393
397
|
skin_pipeline = eval File.read( skin_pipeline_file )
|
394
398
|
@helpers = ( @helpers + skin_pipeline.helpers || [] ).flatten
|
399
|
+
@transformers = ( @transformers + skin_pipeline.transformers || [] ).flatten
|
395
400
|
end
|
396
401
|
end
|
397
402
|
|
data/lib/awestruct/erb_file.rb
CHANGED
@@ -8,8 +8,8 @@ module Awestruct
|
|
8
8
|
|
9
9
|
include Erbable
|
10
10
|
|
11
|
-
def initialize(site, source_path, relative_source_path)
|
12
|
-
super(site, source_path, relative_source_path)
|
11
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
12
|
+
super(site, source_path, relative_source_path, options)
|
13
13
|
end
|
14
14
|
|
15
15
|
def output_filename
|
@@ -12,15 +12,28 @@ module Awestruct
|
|
12
12
|
unless ( @num_entries == :all )
|
13
13
|
entries = entries[0, @num_entries]
|
14
14
|
end
|
15
|
+
|
16
|
+
atom_pages = []
|
17
|
+
|
18
|
+
entries.each do |entry|
|
19
|
+
feed_entry = site.engine.load_page(entry.source_path, :relative_path => entry.relative_source_path, :html_entities => false)
|
20
|
+
|
21
|
+
feed_entry.output_path = entry.output_path
|
22
|
+
feed_entry.date = feed_entry.timestamp.nil? ? entry.date : feed_entry.timestamp
|
23
|
+
|
24
|
+
atom_pages << feed_entry
|
25
|
+
end
|
26
|
+
|
27
|
+
site.engine.set_urls(atom_pages)
|
28
|
+
|
15
29
|
input_page = File.join( File.dirname(__FILE__), 'template.atom.haml' )
|
16
30
|
page = site.engine.load_page( input_page )
|
17
31
|
page.date = page.timestamp unless page.timestamp.nil?
|
18
32
|
page.output_path = @output_path
|
19
|
-
page.entries =
|
33
|
+
page.entries = atom_pages
|
20
34
|
page.title = site.title || site.base_url
|
21
35
|
site.pages << page
|
22
36
|
end
|
23
|
-
|
24
37
|
end
|
25
38
|
end
|
26
39
|
end
|
@@ -12,7 +12,8 @@ module Awestruct
|
|
12
12
|
%Q{
|
13
13
|
<div id="disqus_thread"></div>
|
14
14
|
<script type="text/javascript">
|
15
|
-
var
|
15
|
+
var disqus_shortname = '#{site.disqus}';
|
16
|
+
var disqus_url = "#{site.base_url}/#{self.url}";
|
16
17
|
#{developer}
|
17
18
|
(function() {
|
18
19
|
var dsq = document.createElement("script"); dsq.type = "text/javascript"; dsq.async = true;
|
@@ -31,7 +32,7 @@ module Awestruct
|
|
31
32
|
def disqus_comments_count()
|
32
33
|
%Q{
|
33
34
|
<script type="text/javascript">
|
34
|
-
var
|
35
|
+
var disqus_shortname = '#{site.disqus}';
|
35
36
|
(function () {
|
36
37
|
var s = document.createElement('script'); s.async = true;
|
37
38
|
s.src = "http://disqus.com/forums/#{site.disqus}/count.js";
|
@@ -20,18 +20,17 @@ module Awestruct
|
|
20
20
|
def google_analytics_async()
|
21
21
|
html = ''
|
22
22
|
html += %Q(<script type="text/javascript">\n)
|
23
|
-
html += %Q(var _gaq = [
|
23
|
+
html += %Q(var _gaq = _gaq || [];\n)
|
24
|
+
html += %Q(_gaq.push(['_setAccount','#{site.google_analytics}']);\n)
|
24
25
|
if site.google_analytics_anonymize
|
25
|
-
html += %Q(['_gat._anonymizeIp']
|
26
|
+
html += %Q(_gaq.push(['_gat._anonymizeIp']);\n)
|
26
27
|
end
|
27
|
-
html += %Q(['_trackPageview']
|
28
|
-
html += %Q[(function(
|
29
|
-
html += %Q( var
|
30
|
-
html += %Q(
|
31
|
-
html += %Q(
|
32
|
-
html += %Q(
|
33
|
-
html += %Q( s.parentNode.insertBefore(g, s);\n)
|
34
|
-
html += %Q[})(document, 'script');\n]
|
28
|
+
html += %Q(_gaq.push(['_trackPageview']);\n)
|
29
|
+
html += %Q[(function() {\n]
|
30
|
+
html += %Q( var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n)
|
31
|
+
html += %Q( ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n)
|
32
|
+
html += %Q( var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n)
|
33
|
+
html += %Q[})();\n</script>\n]
|
35
34
|
html
|
36
35
|
end
|
37
36
|
end
|
@@ -7,10 +7,12 @@ module Awestruct
|
|
7
7
|
attr_reader :extensions
|
8
8
|
attr_reader :after_extensions
|
9
9
|
attr_reader :helpers
|
10
|
+
attr_reader :transformers
|
10
11
|
|
11
12
|
def initialize(&block)
|
12
13
|
@extensions = []
|
13
14
|
@helpers = []
|
15
|
+
@transformers = []
|
14
16
|
instance_eval &block if block
|
15
17
|
end
|
16
18
|
|
@@ -22,6 +24,10 @@ module Awestruct
|
|
22
24
|
@helpers << helper
|
23
25
|
end
|
24
26
|
|
27
|
+
def transformer(transformer)
|
28
|
+
@transformers << transformer
|
29
|
+
end
|
30
|
+
|
25
31
|
def execute(site)
|
26
32
|
extensions.each do |ext|
|
27
33
|
ext.execute( site )
|
@@ -2,26 +2,35 @@
|
|
2
2
|
---
|
3
3
|
!!! XML
|
4
4
|
|
5
|
-
%feed{ 'xml:
|
6
|
-
%id #{site.base_url}
|
5
|
+
%feed{ 'xml:lang'=>'en-US', :xmlns=>'http://www.w3.org/2005/Atom' }
|
6
|
+
%id= "#{site.base_url}/"
|
7
7
|
%title #{page.title}
|
8
|
+
- if ( defined?( site.author ) )
|
9
|
+
%author
|
10
|
+
- if ( defined?( site.author.name ) )
|
11
|
+
%name= site.author.name
|
12
|
+
- if ( site.author.email )
|
13
|
+
%email= site.author.email
|
14
|
+
- else
|
15
|
+
%name= site.author
|
8
16
|
- unless page.entries.empty?
|
9
17
|
%updated= page.entries.first.date.xmlschema
|
10
|
-
%link{:rel=>"alternate", :type=>"text/html", :href=>site.base_url}
|
11
18
|
%link{:rel=>"self", :type=>"application/atom+xml", :href=>"#{site.base_url}#{page.url}" }
|
19
|
+
%link{:rel=>"alternate", :type=>"text/html", :href=>"#{site.base_url}/" }
|
12
20
|
- for entry in page.entries
|
13
21
|
%entry
|
14
22
|
%id #{site.base_url}#{entry.url}
|
15
23
|
%title= escape_once( entry.title )
|
16
24
|
%updated= entry.date.xmlschema
|
17
25
|
%link{:rel=>"alternate", :type=>"text/html", :href=>"#{site.base_url}#{entry.url}" }
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
26
|
+
- if ( defined?( entry.author ) )
|
27
|
+
%author
|
28
|
+
- if ( defined?( entry.author.name ) )
|
29
|
+
%name= entry.author.name
|
30
|
+
- if ( entry.author.email )
|
31
|
+
%email= entry.author.email
|
32
|
+
- else
|
33
|
+
%name= entry.author
|
25
34
|
%summary
|
26
35
|
#{summarize( html_to_text( entry.content ), 100 )}...
|
27
36
|
%content{:type=>'html'}
|
@@ -6,8 +6,8 @@ module Awestruct
|
|
6
6
|
attr_reader :raw_page_content
|
7
7
|
attr_reader :front_matter
|
8
8
|
|
9
|
-
def initialize(site, source_path, relative_source_path)
|
10
|
-
super( site, source_path, relative_source_path )
|
9
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
10
|
+
super( site, source_path, relative_source_path, options )
|
11
11
|
@raw_page_content = ''
|
12
12
|
load_page
|
13
13
|
end
|
@@ -45,7 +45,7 @@ module Awestruct
|
|
45
45
|
@front_matter.each do |k,v|
|
46
46
|
self.send( "#{k}=", v )
|
47
47
|
end
|
48
|
-
rescue=>e
|
48
|
+
rescue => e
|
49
49
|
puts "error reading #{self}: #{e}"
|
50
50
|
end
|
51
51
|
end
|
data/lib/awestruct/haml_file.rb
CHANGED
@@ -8,8 +8,8 @@ module Awestruct
|
|
8
8
|
|
9
9
|
include Hamlable
|
10
10
|
|
11
|
-
def initialize(site, source_path, relative_source_path)
|
12
|
-
super(site, source_path, relative_source_path)
|
11
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
12
|
+
super(site, source_path, relative_source_path, options)
|
13
13
|
end
|
14
14
|
|
15
15
|
def output_filename
|
data/lib/awestruct/hamlable.rb
CHANGED
@@ -4,7 +4,8 @@ module Awestruct
|
|
4
4
|
def render(context)
|
5
5
|
rendered = ''
|
6
6
|
begin
|
7
|
-
|
7
|
+
options = (site.haml || {}).inject({}){|h,(k,v)| h[k.to_sym] = v.to_sym; h }
|
8
|
+
haml_engine = Haml::Engine.new( raw_page_content, options )
|
8
9
|
rendered = haml_engine.render( context )
|
9
10
|
rescue => e
|
10
11
|
puts e
|
@@ -9,8 +9,8 @@ module Awestruct
|
|
9
9
|
#include Marukuable
|
10
10
|
include Blueclothable
|
11
11
|
|
12
|
-
def initialize(site, source_path, relative_source_path)
|
13
|
-
super(site, source_path, relative_source_path)
|
12
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
13
|
+
super(site, source_path, relative_source_path, options)
|
14
14
|
end
|
15
15
|
|
16
16
|
def output_filename
|
@@ -8,8 +8,8 @@ module Awestruct
|
|
8
8
|
|
9
9
|
include OrgModeable
|
10
10
|
|
11
|
-
def initialize(site, source_path, relative_source_path)
|
12
|
-
super( site, source_path, relative_source_path )
|
11
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
12
|
+
super( site, source_path, relative_source_path, options )
|
13
13
|
end
|
14
14
|
|
15
15
|
def output_filename
|
@@ -4,10 +4,11 @@ require 'awestruct/renderable'
|
|
4
4
|
module Awestruct
|
5
5
|
class RenderableFile < Renderable
|
6
6
|
|
7
|
-
def initialize(site, source_path, relative_source_path)
|
7
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
8
8
|
super( site )
|
9
9
|
self.source_path = source_path
|
10
10
|
self.relative_source_path = relative_source_path
|
11
|
+
self.options = options
|
11
12
|
unless ( relative_source_path.nil? )
|
12
13
|
dir_name = File.dirname( relative_source_path )
|
13
14
|
if ( dir_name == '.' )
|
@@ -18,10 +19,6 @@ module Awestruct
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
def to_root
|
22
|
-
'../' * ( self.output_path.count('/') - 1 )
|
23
|
-
end
|
24
|
-
|
25
22
|
def raw_page_content
|
26
23
|
File.read( self.source_path )
|
27
24
|
end
|
data/lib/awestruct/sass_file.rb
CHANGED
@@ -8,8 +8,8 @@ module Awestruct
|
|
8
8
|
|
9
9
|
include Sassable
|
10
10
|
|
11
|
-
def initialize(site, source_path, relative_source_path)
|
12
|
-
super( site, source_path, relative_source_path )
|
11
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
12
|
+
super( site, source_path, relative_source_path, options )
|
13
13
|
end
|
14
14
|
|
15
15
|
def output_filename
|
data/lib/awestruct/sassable.rb
CHANGED
@@ -2,6 +2,13 @@ require 'sass'
|
|
2
2
|
|
3
3
|
require 'compass'
|
4
4
|
|
5
|
+
module Sass::Script::Functions
|
6
|
+
def site(path)
|
7
|
+
site = options[:custom]
|
8
|
+
Sass::Script::String.new(site.send(path.value.to_s).to_s)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
5
12
|
module Awestruct
|
6
13
|
module Sassable
|
7
14
|
|
@@ -11,8 +18,9 @@ module Awestruct
|
|
11
18
|
Compass::Frameworks::ALL.each do |framework|
|
12
19
|
sass_opts[:load_paths] << framework.stylesheets_directory
|
13
20
|
end
|
14
|
-
sass_opts[:load_paths] << File.dirname( self.source_path )
|
21
|
+
sass_opts[:load_paths] << File.dirname( self.source_path )
|
15
22
|
sass_opts[:syntax] = syntax()
|
23
|
+
sass_opts[:custom] = site
|
16
24
|
sass_engine = Sass::Engine.new( raw_page_content, sass_opts )
|
17
25
|
sass_engine.render
|
18
26
|
end
|
data/lib/awestruct/scss_file.rb
CHANGED
@@ -8,8 +8,8 @@ module Awestruct
|
|
8
8
|
|
9
9
|
include Sassable
|
10
10
|
|
11
|
-
def initialize(site, source_path, relative_source_path)
|
12
|
-
super( site, source_path, relative_source_path )
|
11
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
12
|
+
super( site, source_path, relative_source_path, options )
|
13
13
|
end
|
14
14
|
|
15
15
|
def output_filename
|
data/lib/awestruct/site.rb
CHANGED
@@ -5,20 +5,20 @@ module Awestruct
|
|
5
5
|
|
6
6
|
attr_reader :dir
|
7
7
|
attr_reader :output_dir
|
8
|
+
attr_reader :tmp_dir
|
8
9
|
|
9
10
|
attr_reader :layouts
|
10
11
|
attr_accessor :pages
|
11
12
|
|
12
|
-
attr_accessor :config
|
13
|
-
|
14
13
|
def initialize(config)
|
15
14
|
super({})
|
16
15
|
|
17
16
|
@dir = config.input_dir
|
18
17
|
@output_dir = config.output_dir
|
19
|
-
@
|
18
|
+
@tmp_dir = config.tmp_dir
|
20
19
|
|
21
20
|
FileUtils.mkdir_p( @output_dir )
|
21
|
+
FileUtils.mkdir_p( @tmp_dir )
|
22
22
|
|
23
23
|
@pages = []
|
24
24
|
@layouts = {}
|
@@ -7,8 +7,8 @@ module Awestruct
|
|
7
7
|
|
8
8
|
include Textilable
|
9
9
|
|
10
|
-
def initialize(site, source_path, relative_source_path)
|
11
|
-
super(site, source_path, relative_source_path)
|
10
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
11
|
+
super(site, source_path, relative_source_path, options)
|
12
12
|
end
|
13
13
|
|
14
14
|
def output_filename
|
@@ -4,8 +4,8 @@ module Awestruct
|
|
4
4
|
|
5
5
|
class VerbatimFile < RenderableFile
|
6
6
|
|
7
|
-
def initialize(site, source_path, relative_source_path)
|
8
|
-
super( site, source_path, relative_source_path )
|
7
|
+
def initialize(site, source_path, relative_source_path, options = {})
|
8
|
+
super( site, source_path, relative_source_path, options )
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awestruct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bob McWhirter
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-06-13 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: hpricot
|
@@ -167,7 +167,6 @@ files:
|
|
167
167
|
- lib/awestruct/erb_file.rb
|
168
168
|
- lib/awestruct/erbable.rb
|
169
169
|
- lib/awestruct/extensions/atomizer.rb
|
170
|
-
- lib/awestruct/extensions/collection.rb
|
171
170
|
- lib/awestruct/extensions/data_dir.rb
|
172
171
|
- lib/awestruct/extensions/disqus.rb
|
173
172
|
- lib/awestruct/extensions/google_analytics.rb
|
@@ -1,52 +0,0 @@
|
|
1
|
-
|
2
|
-
module Awestruct
|
3
|
-
module Extensions
|
4
|
-
class Collection
|
5
|
-
|
6
|
-
def initialize(assign_to, path_prefix = nil, default_layout = nil)
|
7
|
-
@assign_to = assign_to
|
8
|
-
@path_prefix = path_prefix || '_' + assign_to.to_s
|
9
|
-
@default_layout = default_layout || assign_to.to_s.singularize
|
10
|
-
end
|
11
|
-
|
12
|
-
def execute(site)
|
13
|
-
posts = []
|
14
|
-
|
15
|
-
Dir[ "#{@path_prefix}/*" ].each do |entry|
|
16
|
-
if entry =~ /^#{@path_prefix}\/(20[01][0-9])-([01][0-9])-([0123][0-9])-([^.]+)\..*$/
|
17
|
-
if ( File.directory?( entry ) )
|
18
|
-
# TODO deal with dirs
|
19
|
-
else
|
20
|
-
page = site.engine.load_page( entry )
|
21
|
-
year = $1
|
22
|
-
month = $2
|
23
|
-
day = $3
|
24
|
-
slug = $4
|
25
|
-
page.date = Time.utc( year.to_i, month.to_i, day.to_i )
|
26
|
-
page.slug = slug
|
27
|
-
page.output_path = "/#{year}/#{month}/#{day}/#{slug}/index.html"
|
28
|
-
page.layout ||= @default_layout
|
29
|
-
|
30
|
-
posts << page
|
31
|
-
site.pages << page
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
posts = posts.sort_by{|each| [each.date, each.sequence || 0, File.mtime( each.source_path ), each.slug ] }.reverse
|
37
|
-
|
38
|
-
last = nil
|
39
|
-
singular = @assign_to.to_s.singularize
|
40
|
-
posts.each do |e|
|
41
|
-
if ( last != nil )
|
42
|
-
e.send( "next_#{singular}=", last )
|
43
|
-
last.send( "previous_#{singular}=", e )
|
44
|
-
end
|
45
|
-
last = e
|
46
|
-
end
|
47
|
-
|
48
|
-
site.send( "#{@assign_to}=", posts )
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|