awestruct 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/bin/awestruct CHANGED
@@ -9,6 +9,7 @@ require 'awestruct/commands/generate'
9
9
  require 'awestruct/commands/server'
10
10
  require 'awestruct/commands/deploy'
11
11
  require 'yaml'
12
+ require 'fssm'
12
13
 
13
14
  def parse(args)
14
15
  options = OpenStruct.new( {
@@ -111,7 +112,7 @@ unless options.init
111
112
  @profiles_data[options.profile]
112
113
  else
113
114
  # if no profile given, pick the first with deploy config
114
- options.profile, profile_data = @profiles_data.select { |k,v| v['deploy'] }.first
115
+ options.profile, profile_data = @profiles_data.select { |k,v| v && v['deploy'] }.first
115
116
  profile_data
116
117
  end
117
118
  end
@@ -200,10 +201,34 @@ threads = []
200
201
  if ( options.auto )
201
202
  threads << Thread.new {
202
203
  generate_cmd = Awestruct::Commands::Generate.new( config, options.profile, options.base_url, default_base_url )
203
- while ( true )
204
- generate_cmd.run
205
- sleep(1)
204
+
205
+ monitor = FSSM::Monitor.new
206
+
207
+ call_generate = lambda do |base, relative|
208
+ if !(relative =~ /.*~/)
209
+ puts "Triggered regeneration #{base} #{relative}"
210
+ generate_cmd.run
211
+ puts "Done"
212
+ end
206
213
  end
214
+
215
+ Dir.entries(config.input_dir).each do |sub|
216
+ if !(sub =~ /^(_site|_tmp|\.git|\.gitignore|\.sass-cache|\.|\.\.).*/)
217
+ if File::directory? File.join(config.input_dir, sub)
218
+ monitor.path(sub) do
219
+ update &call_generate
220
+ create &call_generate
221
+ end
222
+ elsif
223
+ monitor.file(sub) do
224
+ update &call_generate
225
+ create &call_generate
226
+ end
227
+ end
228
+ end
229
+ end
230
+
231
+ monitor.run
207
232
  }
208
233
  end
209
234
 
@@ -1,3 +1,4 @@
1
+
1
2
  require 'ostruct'
2
3
  require 'find'
3
4
  require 'compass'
@@ -52,7 +53,7 @@ module Awestruct
52
53
  @site.engine = self
53
54
 
54
55
  @helpers = []
55
- @max_yaml_mtime = nil
56
+ @max_site_mtime = nil
56
57
  end
57
58
 
58
59
  def skin_dir
@@ -62,7 +63,7 @@ module Awestruct
62
63
  def generate(profile=nil, base_url=nil, default_base_url=nil, force=false)
63
64
  @base_url = base_url
64
65
  @default_base_url = default_base_url
65
- @max_yaml_mtime = nil
66
+ @max_site_mtime = nil
66
67
  load_site_yaml(profile)
67
68
  load_yamls
68
69
  set_base_url
@@ -132,7 +133,7 @@ module Awestruct
132
133
  str = str || ''
133
134
  str = str.gsub( /\\/, '\\\\\\\\' )
134
135
  str = str.gsub( /\\\\#/, '\\#' )
135
- str = str.gsub( '@', '\@' )
136
+ str = str.gsub( '@', '' ) #'\@' )
136
137
  str = "%@#{str}@"
137
138
  result = instance_eval( str )
138
139
  result
@@ -212,7 +213,7 @@ module Awestruct
212
213
  return true unless File.exist?( generated_path )
213
214
  now = Time.now
214
215
  generated_mtime = File.mtime( generated_path )
215
- return true if ( ( @max_yaml_mtime || Time.at(0) ) > generated_mtime )
216
+ return true if ( ( @max_site_mtime || Time.at(0) ) > generated_mtime )
216
217
  source_mtime = File.mtime( page.source_path )
217
218
  return true if ( source_mtime > generated_mtime ) && ( source_mtime + 1 < now )
218
219
  ext = page.output_extension
@@ -276,8 +277,8 @@ module Awestruct
276
277
  site_yaml = File.join( config.config_dir, 'site.yml' )
277
278
  if ( File.exist?( site_yaml ) )
278
279
  mtime = File.mtime( site_yaml )
279
- if ( mtime > ( @max_yaml_mtime || Time.at(0) ) )
280
- @max_yaml_mtime = mtime
280
+ if ( mtime > ( @max_site_mtime || Time.at(0) ) )
281
+ @max_site_mtime = mtime
281
282
  end
282
283
  data = YAML.load( File.read( site_yaml ) )
283
284
  site.interpolate = true
@@ -304,8 +305,8 @@ module Awestruct
304
305
 
305
306
  def load_yaml(yaml_path)
306
307
  mtime = File.mtime( yaml_path )
307
- if ( mtime > ( @max_yaml_mtime || Time.at(0) ) )
308
- @max_yaml_mtime = mtime
308
+ if ( mtime > ( @max_site_mtime || Time.at(0) ) )
309
+ @max_site_mtime = mtime
309
310
  end
310
311
  data = YAML.load( File.read( yaml_path ) )
311
312
  name = File.basename( yaml_path, '.yml' )
@@ -376,7 +377,7 @@ module Awestruct
376
377
  end
377
378
 
378
379
  def load_extensions
379
-
380
+ watched_dirs = []
380
381
  pipeline = nil
381
382
  skin_pipeline = nil
382
383
 
@@ -389,6 +390,7 @@ module Awestruct
389
390
  pipeline = eval File.read( pipeline_file )
390
391
  @helpers = pipeline.helpers || []
391
392
  @transformers = pipeline.transformers || []
393
+ watched_dirs << ext_dir.to_s
392
394
  end
393
395
 
394
396
  if ( skin_dir )
@@ -401,12 +403,47 @@ module Awestruct
401
403
  skin_pipeline = eval File.read( skin_pipeline_file )
402
404
  @helpers = ( @helpers + skin_pipeline.helpers || [] ).flatten
403
405
  @transformers = ( @transformers + skin_pipeline.transformers || [] ).flatten
406
+ watched_dirs << skin_dir.to_s
404
407
  end
405
408
  end
406
-
409
+
410
+ #if _partials directory (from Partial helper) is present, watch
411
+ partials = File.join( '_partials' )
412
+ if ( File.exists?( partials ) )
413
+ watched_dirs << partials
414
+ end
415
+
416
+ pipeline.watch(watched_dirs) if pipeline
417
+ skin_pipeline.watch(watched_dirs) if skin_pipeline
418
+ check_dir_for_change(watched_dirs)
419
+
407
420
  pipeline.execute( site ) if pipeline
408
421
  skin_pipeline.execute( site ) if skin_pipeline
409
422
  end
423
+
424
+ def check_dir_for_change(watched_dirs)
425
+ watched_dirs.each do |dir|
426
+ Dir.chdir(dir){check_dir_for_change_recursively()}
427
+ end
428
+ end
429
+
430
+ def check_dir_for_change_recursively()
431
+ directories=[]
432
+ Dir['*'].sort.each do |name|
433
+ if File.file?(name)
434
+ mtime = File.mtime(name)
435
+ if ( mtime > ( @max_site_mtime || Time.at(0) ) )
436
+ @max_site_mtime = mtime
437
+ end
438
+ elsif File.directory?(name)
439
+ directories << name
440
+ end
441
+ end
442
+ directories.each do |name|
443
+ #don't descend into . or .. on linux
444
+ Dir.chdir(name){check_dir_for_change_recursively()} if !Dir.pwd[File.expand_path(name)]
445
+ end
446
+ end
410
447
 
411
448
  def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
412
449
  if first_letter_in_uppercase
@@ -8,6 +8,9 @@ module Awestruct
8
8
  @data_dir = data_dir
9
9
  end
10
10
 
11
+ def watch(watched_dirs)
12
+ watched_dirs << @data_dir
13
+ end
11
14
 
12
15
  def execute(site)
13
16
 
@@ -18,6 +18,7 @@ module Awestruct
18
18
 
19
19
  def extension(ext)
20
20
  @extensions << ext
21
+ ext.transform(@transformers) if ext.respond_to?('transform')
21
22
  end
22
23
 
23
24
  def helper(helper)
@@ -33,8 +34,13 @@ module Awestruct
33
34
  ext.execute( site )
34
35
  end
35
36
  end
37
+
38
+ def watch(watched_dirs)
39
+ extensions.each do |ext|
40
+ ext.watch( watched_dirs ) if ext.respond_to?('watch')
41
+ end
42
+ end
36
43
  end
37
44
 
38
45
  end
39
46
  end
40
-
@@ -12,26 +12,45 @@ module Awestruct
12
12
  posts = []
13
13
 
14
14
  site.pages.each do |page|
15
- if ( page.relative_source_path =~ /^#{@path_prefix}\/(20[01][0-9])-([01][0-9])-([0123][0-9])-([^.]+)\..*$/ )
16
- year = $1
17
- month = $2
18
- day = $3
19
- slug = $4
20
- page.date = Time.utc( year.to_i, month.to_i, day.to_i )
21
- page.slug = slug
22
- context = OpenStruct.new({
23
- :site=>site,
24
- :page=>page,
25
- })
26
- #page.body = page.render( context )
27
- page.output_path = "#{@path_prefix}/#{year}/#{month}/#{day}/#{slug}.html"
28
- #page.layout = 'post'
29
- posts << page
15
+ year, month, day, slug = nil
16
+
17
+ if ( page.relative_source_path =~ /^#{@path_prefix}\// )
18
+ if ( page.relative_source_path =~ /^#{@path_prefix}\/(20[01][0-9])-([01][0-9])-([0123][0-9])-([^.]+)\..*$/ )
19
+ year = $1
20
+ month = $2
21
+ day = $3
22
+ slug = $4
23
+ page.date = Time.utc( year.to_i, month.to_i, day.to_i )
24
+ elsif (page.date)
25
+ page.relative_source_path =~ /^#{@path_prefix}\/(.*)\..*$/
26
+ date = page.date;
27
+ if date.kind_of? String
28
+ date = Time.parse page.date
29
+ end
30
+ year = date.year
31
+ month = date.month
32
+ day = date.day
33
+ page.date = Time.utc(year, month, day)
34
+ slug = $1
35
+ end
36
+
37
+ # if a date was found create a post
38
+ if( year and month and day)
39
+ page.slug = slug
40
+ context = OpenStruct.new({
41
+ :site=>site,
42
+ :page=>page,
43
+ })
44
+ #page.body = page.render( context )
45
+ page.output_path = "#{@path_prefix}/#{year}/#{month}/#{day}/#{slug}.html"
46
+ #page.layout = 'post'
47
+ posts << page
48
+ end
30
49
  end
31
50
  end
32
51
 
33
52
  posts = posts.sort_by{|each| [each.date, each.sequence || 0, File.mtime( each.source_path ), each.slug ] }.reverse
34
-
53
+
35
54
  last = nil
36
55
  singular = @assign_to.to_s.singularize
37
56
  posts.each do |e|
@@ -41,7 +60,7 @@ module Awestruct
41
60
  end
42
61
  last = e
43
62
  end
44
-
63
+
45
64
  site.send( "#{@assign_to}=", posts )
46
65
  end
47
66
  end
@@ -60,11 +60,11 @@ module Awestruct
60
60
  span = max - min
61
61
 
62
62
  if span > 0
63
- slice = span / 6
63
+ slice = span / 6.0
64
64
  ordered_tags.each do |tag|
65
65
  adjusted_size = tag.pages.size - min
66
66
  scaled_size = adjusted_size / slice
67
- tag.group = ( tag.pages.size - min ) / slice
67
+ tag.group = (( tag.pages.size - min ) / slice).ceil
68
68
  end
69
69
  else
70
70
  ordered_tags.each do |tag|
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 3
9
- version: 0.2.3
8
+ - 4
9
+ version: 0.2.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Bob McWhirter
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-08-20 00:00:00 -04:00
17
+ date: 2011-10-22 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -104,13 +104,13 @@ dependencies:
104
104
  prerelease: false
105
105
  requirement: &id007 !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - <=
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
109
  segments:
110
110
  - 0
111
- - 10
112
- - 6
113
- version: 0.10.6
111
+ - 11
112
+ - 5
113
+ version: 0.11.5
114
114
  type: :runtime
115
115
  version_requirements: *id007
116
116
  - !ruby/object:Gem::Dependency
@@ -141,6 +141,20 @@ dependencies:
141
141
  version: 0.5.3
142
142
  type: :runtime
143
143
  version_requirements: *id009
144
+ - !ruby/object:Gem::Dependency
145
+ name: fssm
146
+ prerelease: false
147
+ requirement: &id010 !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "="
150
+ - !ruby/object:Gem::Version
151
+ segments:
152
+ - 0
153
+ - 2
154
+ - 7
155
+ version: 0.2.7
156
+ type: :runtime
157
+ version_requirements: *id010
144
158
  description:
145
159
  email: bob@mcwhirter.org
146
160
  executables: