gumdrop 0.6.2 → 0.6.3

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/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