gumdrop 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.md CHANGED
@@ -1,3 +1,14 @@
1
+ # v0.6.3
2
+ - Added `generated` flag to Content object
3
+ - Added `config` to Generator context
4
+ - Added callbacks to site build process. Callbacks:
5
+ - on_start
6
+ - on_scan
7
+ - on_generate
8
+ - on_render
9
+ - on_end
10
+ - Dev server doesn't check last build time for static assets.
11
+
1
12
  # v0.6.2
2
13
  - Consolidated stitch support code into single file
3
14
  - Bugfix: Generates better relative paths for Content objects
data/gumdrop.gemspec CHANGED
@@ -26,8 +26,6 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'tilt'
27
27
  s.add_dependency 'active_support'
28
28
  s.add_dependency 'trollop'
29
- # s.add_dependency 'haml'
30
- # s.add_dependency 'sass'
31
29
  s.add_dependency 'i18n'
32
30
  s.add_dependency 'bundle'
33
31
 
@@ -0,0 +1,27 @@
1
+ module Gumdrop
2
+ module Callbacks
3
+
4
+ # For defining callbacks
5
+ def callback(*callback_names)
6
+ callback_names.each do |name|
7
+ class_eval <<-EOF
8
+ def #{name}(*args, &block)
9
+ if block
10
+ @_#{name} = [] if @_#{name}.nil?
11
+ @_#{name} << block
12
+ elsif @_#{name}
13
+ @_#{name}.each do |cb|
14
+ cb.call(*args)
15
+ end
16
+ end
17
+ end
18
+ EOF
19
+ end
20
+ end
21
+
22
+ alias_method :callbacks, :callback
23
+ alias_method :define_callback, :callback
24
+ alias_method :define_callbacks, :callback
25
+
26
+ end
27
+ end
@@ -15,6 +15,7 @@ module Gumdrop
15
15
  :params,
16
16
  :site,
17
17
  :ignored,
18
+ :generated,
18
19
  :full_path
19
20
 
20
21
  def initialize(path, site, params={})
@@ -22,6 +23,7 @@ module Gumdrop
22
23
  @params= HashObject.new params
23
24
  @full_path= path
24
25
  @ignored= false
26
+ @generated= false
25
27
  @path= get_source_path
26
28
  @level= (@path.split('/').length - 1)
27
29
  @source_filename= File.basename path
@@ -44,6 +46,7 @@ module Gumdrop
44
46
  context.reset_data 'current_depth'=>@level, 'current_slug'=>@slug, 'page'=>self, 'layout'=>default_layout, 'params'=>self.params
45
47
  end
46
48
  context.set_content self, locals
49
+ @site.report " Rendering: #{@uri}", :warning
47
50
  content= @template.render(context)
48
51
  return content if ignore_layout
49
52
  layout= context.get_template()
@@ -56,7 +59,7 @@ module Gumdrop
56
59
 
57
60
  def renderTo(context, output_path, filters=[], opts={})
58
61
  return copyTo(output_path, opts) unless useLayout?
59
- @site.report " Rendering: #{@uri}", :warning
62
+ # @site.report " Rendering: #{@uri}", :warning
60
63
  output= render(context)
61
64
  filters.each {|f| output= f.call(output, self) }
62
65
  File.open output_path, 'w' do |f|
@@ -117,7 +120,7 @@ module Gumdrop
117
120
  end
118
121
 
119
122
  def get_uri
120
- uri= File.join File.dirname(@path), @filename # path_parts.join('/')
123
+ uri= File.join File.dirname(@path), @filename
121
124
  if uri.starts_with? './'
122
125
  uri[2..-1]
123
126
  else
@@ -70,21 +70,17 @@ module Gumdrop
70
70
  @site
71
71
  end
72
72
 
73
- # Access to settings from configure block
73
+ # Access to settings as defined in the configure block
74
74
  def config
75
75
  @site.config
76
76
  end
77
77
 
78
78
  def reset_data(preset={})
79
- # TODO: Add a setting for reloading data on every request/page
80
- # was this for the server?
81
- # @site.data.reset if !Gumdrop.config.cache_data
82
79
  @state = preset
83
80
  end
84
81
 
85
82
  def method_missing(name, value=nil)
86
83
  @state= Hash.new {|h,k| h[k]= nil } if @state.nil?
87
- # puts "Looking for >> #{name} in #{@state.keys}"
88
84
  unless value.nil?
89
85
  @state[name.to_s]= value
90
86
  else
@@ -20,9 +20,9 @@ module Gumdrop
20
20
  # This should probably not be accessible to the generators
21
21
  def execute
22
22
  if @content.is_a? Proc
23
- run_dsl_from_proc @content
23
+ instance_eval &@content
24
24
  else
25
- run_dsl_from_source IO.readlines(@content.path).join('')
25
+ instance_eval File.read(@content.path)
26
26
  end
27
27
  end
28
28
 
@@ -33,6 +33,10 @@ module Gumdrop
33
33
  def data
34
34
  @site.data
35
35
  end
36
+
37
+ def config
38
+ @site.config
39
+ end
36
40
 
37
41
  def set(var_name, value)
38
42
  params[var_name]= value
@@ -120,18 +124,6 @@ module Gumdrop
120
124
  end
121
125
  end
122
126
  end
123
-
124
- private
125
-
126
- def run_dsl_from_source(source)
127
- # puts source
128
- instance_eval source
129
- end
130
-
131
- def run_dsl_from_proc(proc)
132
- # puts source
133
- instance_eval &proc
134
- end
135
127
 
136
128
  end
137
129
 
@@ -139,8 +131,9 @@ module Gumdrop
139
131
  # Nothing special, per se...
140
132
 
141
133
  def initialize(path, block, site, params={})
142
- @content_block= block
143
134
  super(path, site, params)
135
+ @content_block= block
136
+ @generated= true
144
137
  end
145
138
 
146
139
  def render(context=nil, ignore_layout=false, reset_context=true, locals={})
@@ -5,6 +5,8 @@ require 'logger'
5
5
 
6
6
  module Gumdrop
7
7
 
8
+ STATIC_ASSETS= %w(.jpg .jpe .jpeg .gif .ico .png)
9
+
8
10
  class Server < Sinatra::Base
9
11
  site_file= Gumdrop.fetch_site_file
10
12
  unless site_file.nil?
@@ -29,11 +31,13 @@ module Gumdrop
29
31
 
30
32
  file_path= get_content_path params[:splat].join('/'), site
31
33
  site.report "[#{$$}] GET /#{params[:splat].join('/')} -> #{file_path}"
32
- since_last_build= Time.now.to_i - site.last_run.to_i
33
- # site.report "!>!>>>>> since_last_build: #{since_last_build}"
34
- if since_last_build > site.config.server_timeout
35
- site.report "[#{$$}] Rebuilding from Source (#{since_last_build} > #{site.config.server_timeout})"
36
- site.rescan()
34
+ unless static_asset file_path
35
+ since_last_build= Time.now.to_i - site.last_run.to_i
36
+ # site.report "!>!>>>>> since_last_build: #{since_last_build}"
37
+ if since_last_build > site.config.server_timeout
38
+ site.report "[#{$$}] Rebuilding from Source (#{since_last_build} > #{site.config.server_timeout})"
39
+ site.rescan()
40
+ end
37
41
  end
38
42
 
39
43
  if site.node_tree.has_key? file_path
@@ -79,6 +83,10 @@ module Gumdrop
79
83
  Gumdrop.handle_proxy opts, proxy_to, env
80
84
  end
81
85
 
86
+ def static_asset(file_path)
87
+ STATIC_ASSETS.include? File.extname(file_path).to_s
88
+ end
89
+
82
90
  run!
83
91
  else
84
92
  puts "Not in a valid Gumdrop site directory."
data/lib/gumdrop/site.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'pathname'
2
2
 
3
- # WORK IN PROGRESS!
4
-
5
3
  module Gumdrop
6
4
 
7
5
  DEFAULT_OPTIONS= {
@@ -34,12 +32,20 @@ module Gumdrop
34
32
  :sitefile,
35
33
  :node_tree,
36
34
  :last_run
37
-
35
+
36
+ extend Callbacks
37
+
38
+ callbacks :on_start,
39
+ :on_scan,
40
+ :on_generate,
41
+ :on_render,
42
+ :on_end
38
43
 
39
44
  def initialize(sitefile, opts={})
40
- @sitefile = File.expand_path sitefile
41
- @root_path = File.dirname @sitefile
42
- @opts = opts
45
+ @sitefile = File.expand_path sitefile
46
+ @root_path = File.dirname @sitefile
47
+ @opts = opts
48
+ @last_run = nil
43
49
  reset_all()
44
50
  end
45
51
 
@@ -67,7 +73,9 @@ module Gumdrop
67
73
 
68
74
  def scan
69
75
  build_tree()
76
+ on_scan()
70
77
  run_generators()
78
+ on_generate()
71
79
  @last_run= Time.now
72
80
  self
73
81
  end
@@ -80,19 +88,21 @@ module Gumdrop
80
88
  end
81
89
 
82
90
  def build
91
+ on_start()
83
92
  scan()
84
93
  render()
94
+ on_render()
85
95
  @last_run= Time.now
96
+ on_end()
86
97
  self
87
98
  end
88
99
 
89
100
  def report(msg, level=:info)
90
- # ll= @config.log_level
91
101
  case level
92
- when :info
93
- @log.info msg
94
- when :warning
95
- @log.warn msg
102
+ when :info
103
+ @log.info msg
104
+ when :warning
105
+ @log.warn msg
96
106
  else
97
107
  puts msg
98
108
  @log.error msg
@@ -114,29 +124,30 @@ module Gumdrop
114
124
  @blacklist = []
115
125
  @greylist = []
116
126
  @redirects = []
117
- @last_run = nil
127
+
118
128
  @node_tree = Hash.new {|h,k| h[k]= nil }
119
129
  @layouts = Hash.new {|h,k| h[k]= nil }
120
130
  @partials = Hash.new {|h,k| h[k]= nil }
121
131
  @generators = Hash.new {|h,k| h[k]= nil }
132
+
122
133
  @config = Gumdrop::Config.new DEFAULT_OPTIONS
123
134
 
124
135
  load_sitefile()
125
136
 
126
137
  @data_path = get_expanded_path(@config.data_dir)
127
- @data = Gumdrop::DataManager.new self, @data_path
128
138
  @src_path = get_expanded_path(@config.source_dir)
129
- @src_path_parts = @src_path.split('/')
130
139
  @out_path = get_expanded_path(@config.output_dir)
131
140
 
141
+ @data = Gumdrop::DataManager.new self, @data_path
142
+
132
143
  init_logging()
133
144
  end
134
145
 
135
146
  def init_logging
136
147
  begin
137
- @log = Logger.new @config.log, 'daily'
148
+ @log = Logger.new @config.log, 'daily'
138
149
  rescue
139
- @log = Logger.new STDOUT
150
+ @log = Logger.new STDOUT
140
151
  end
141
152
  @log.formatter = proc do |severity, datetime, progname, msg|
142
153
  "#{datetime}: #{msg}\n"
@@ -152,7 +163,7 @@ module Gumdrop
152
163
  end
153
164
 
154
165
  def load_sitefile
155
- source= IO.readlines( @sitefile ).join('')
166
+ source= File.read( @sitefile )
156
167
  dsl = SitefileDSL.new self
157
168
  dsl.instance_eval source
158
169
  dsl
@@ -169,7 +180,6 @@ module Gumdrop
169
180
  end
170
181
 
171
182
  # Scan Filesystem
172
- #puts "Running in: #{root}"
173
183
  Dir.glob("#{src_path}/**/*", File::FNM_DOTMATCH).each do |path|
174
184
  unless File.directory? path or @config.ignore.include?( File.basename(path) )
175
185
  node= Content.new(path, self)
@@ -192,6 +202,7 @@ module Gumdrop
192
202
  # puts "Creating partial #{partial_name} from #{path}"
193
203
  partials[partial_name]= node
194
204
  partials[partial_node_path]= node
205
+
195
206
  else
196
207
  @node_tree[path]= node
197
208
  end
@@ -212,8 +223,7 @@ module Gumdrop
212
223
  report "[Compiling to #{@out_path}]", :info
213
224
  @node_tree.keys.sort.each do |path|
214
225
  node= @node_tree[path]
215
- unless node.ignored #greylist.any? {|pattern| path_match path, pattern }
216
- # node= @node_tree[path]
226
+ unless node.ignored
217
227
  output_path= File.join(@out_path, node.to_s)
218
228
  FileUtils.mkdir_p File.dirname(output_path)
219
229
  node.renderTo render_context, output_path, content_filters
@@ -267,6 +277,23 @@ module Gumdrop
267
277
  @site.config.instance_eval &block
268
278
  end
269
279
  end
280
+
281
+ # Callbacks
282
+ def on_start(&block)
283
+ @site.on_start &block
284
+ end
285
+ def on_scan(&block)
286
+ @site.on_scan &block
287
+ end
288
+ def on_generate(&block)
289
+ @site.on_generate &block
290
+ end
291
+ def on_render(&block)
292
+ @site.on_render &block
293
+ end
294
+ def on_end(&block)
295
+ @site.on_end &block
296
+ end
270
297
 
271
298
  end
272
299
 
@@ -1,6 +1,5 @@
1
1
 
2
2
  require 'stitch-rb'
3
- # require 'stitch'
4
3
 
5
4
  class Stitch::Source
6
5
  # Patch for gumdrop style filenames
@@ -1,5 +1,5 @@
1
1
  module Gumdrop
2
2
 
3
- VERSION = "0.6.2" unless defined?(::Gumdrop::VERSION)
3
+ VERSION = "0.6.3" unless defined?(::Gumdrop::VERSION)
4
4
 
5
5
  end
data/lib/gumdrop.rb CHANGED
@@ -6,6 +6,7 @@ require 'active_support/all'
6
6
 
7
7
  module Gumdrop
8
8
 
9
+ autoload :Callbacks, "gumdrop/callbacks"
9
10
  autoload :Context, "gumdrop/context"
10
11
  autoload :Content, "gumdrop/content"
11
12
  autoload :DataManager, "gumdrop/data_manager"
@@ -13,7 +14,6 @@ module Gumdrop
13
14
  autoload :HashObject, "gumdrop/hash_object"
14
15
  autoload :Pager, "gumdrop/data_manager"
15
16
  autoload :Server, "gumdrop/server"
16
- # autoload :Site, "gumdrop/site"
17
17
  autoload :VERSION, "gumdrop/version"
18
18
  autoload :ViewHelpers, "gumdrop/view_helpers"
19
19
 
@@ -30,7 +30,7 @@ module Gumdrop
30
30
  site.build
31
31
 
32
32
  Dir.chdir old
33
-
33
+
34
34
  puts "Done."
35
35
  else
36
36
  puts "Not in a valid Gumdrop site directory."
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 2
9
- version: 0.6.2
8
+ - 3
9
+ version: 0.6.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matt McCray
@@ -113,6 +113,7 @@ files:
113
113
  - bin/gumdrop
114
114
  - gumdrop.gemspec
115
115
  - lib/gumdrop.rb
116
+ - lib/gumdrop/callbacks.rb
116
117
  - lib/gumdrop/cli.rb
117
118
  - lib/gumdrop/content.rb
118
119
  - lib/gumdrop/context.rb