machined 1.0.0 → 1.0.1
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/lib/machined/context.rb +5 -5
- data/lib/machined/environment.rb +65 -63
- data/lib/machined/helpers/asset_tag_helpers.rb +2 -2
- data/lib/machined/helpers/locals_helpers.rb +5 -5
- data/lib/machined/helpers/output_helpers.rb +3 -3
- data/lib/machined/helpers/page_helpers.rb +2 -2
- data/lib/machined/helpers/render_helpers.rb +14 -14
- data/lib/machined/index.rb +3 -3
- data/lib/machined/initializable.rb +7 -7
- data/lib/machined/processors/front_matter_processor.rb +2 -2
- data/lib/machined/processors/layout_processor.rb +11 -11
- data/lib/machined/sprocket.rb +8 -8
- data/lib/machined/static_compiler.rb +9 -9
- data/lib/machined/utils.rb +1 -1
- data/lib/machined/version.rb +1 -1
- data/spec/machined/context_spec.rb +1 -1
- data/spec/machined/environment_spec.rb +67 -52
- data/spec/machined/helpers/asset_tag_helpers_spec.rb +12 -12
- data/spec/machined/helpers/locals_helper_spec.rb +5 -5
- data/spec/machined/helpers/page_helpers_spec.rb +9 -9
- data/spec/machined/helpers/render_helpers_spec.rb +17 -17
- data/spec/machined/initializable_spec.rb +9 -9
- data/spec/machined/processors/front_matter_processor_spec.rb +4 -4
- data/spec/machined/processors/layout_processor_spec.rb +9 -9
- data/spec/machined/sprocket_spec.rb +3 -3
- data/spec/machined/static_compiler_spec.rb +25 -3
- data/spec/machined/utils_spec.rb +3 -3
- data/spec/support/be_fresh_matcher.rb +2 -2
- data/spec/support/helpers.rb +7 -7
- data/spec/support/match_paths_matcher.rb +3 -3
- metadata +3 -3
data/lib/machined/context.rb
CHANGED
@@ -17,26 +17,26 @@ module Machined
|
|
17
17
|
include Helpers::LocalsHelpers
|
18
18
|
include Helpers::PageHelpers
|
19
19
|
include Helpers::RenderHelpers
|
20
|
-
|
20
|
+
|
21
21
|
# Override initialize to add helpers
|
22
22
|
# from the Machined environment.
|
23
23
|
def initialize(*args) # :nodoc:
|
24
24
|
super
|
25
25
|
add_machined_helpers
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
# Returns the main Machined environment instance.
|
29
29
|
def machined
|
30
30
|
environment.machined
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
# Returns the configuration of the Machined environment.
|
34
34
|
def config
|
35
35
|
machined.config
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
protected
|
39
|
-
|
39
|
+
|
40
40
|
# Loops through the helpers added to the Machined
|
41
41
|
# environment and adds them to the Context. Supports
|
42
42
|
# blocks and Modules.
|
data/lib/machined/environment.rb
CHANGED
@@ -10,12 +10,12 @@ require 'tilt'
|
|
10
10
|
module Machined
|
11
11
|
class Environment
|
12
12
|
include Initializable
|
13
|
-
|
13
|
+
|
14
14
|
# Delegate some common configuration accessors
|
15
15
|
# to the config object.
|
16
16
|
delegate :root, :config_path, :output_path, :lib_path, :environment,
|
17
17
|
:to => :config
|
18
|
-
|
18
|
+
|
19
19
|
# Default options for a Machined environment.
|
20
20
|
DEFAULT_OPTIONS = {
|
21
21
|
# Global configuration
|
@@ -30,7 +30,7 @@ module Machined
|
|
30
30
|
:digest_assets => false,
|
31
31
|
:gzip_assets => false,
|
32
32
|
:layout => 'application',
|
33
|
-
|
33
|
+
|
34
34
|
# Sprocket paths and URLs
|
35
35
|
:assets_path => 'assets',
|
36
36
|
:assets_paths => %w(app/assets lib/assets vendor/assets),
|
@@ -40,7 +40,7 @@ module Machined
|
|
40
40
|
:pages_url => '/',
|
41
41
|
:views_path => 'views',
|
42
42
|
:views_paths => %w(app/views),
|
43
|
-
|
43
|
+
|
44
44
|
# Compression configuration
|
45
45
|
:compress => false,
|
46
46
|
:compress_css => false,
|
@@ -48,7 +48,7 @@ module Machined
|
|
48
48
|
:css_compressor => nil,
|
49
49
|
:js_compressor => nil
|
50
50
|
}.freeze
|
51
|
-
|
51
|
+
|
52
52
|
# A hash of Javascript compressors. When `config.js_compressor`
|
53
53
|
# is set using a symbol, such as `:uglifier`, this is where
|
54
54
|
# we check which engine to use.
|
@@ -59,7 +59,7 @@ module Machined
|
|
59
59
|
:closure => Crush::Closure::Compiler,
|
60
60
|
:uglifier => Crush::Uglifier
|
61
61
|
}
|
62
|
-
|
62
|
+
|
63
63
|
# A hash of CSS compressors. When `config.css_compressor`
|
64
64
|
# is set using a symbol, such as `:sass`, this is where
|
65
65
|
# we check which engine to use.
|
@@ -69,29 +69,29 @@ module Machined
|
|
69
69
|
:yui => Crush::YUI::CssCompressor,
|
70
70
|
:sass => Crush::Sass::Engine
|
71
71
|
}
|
72
|
-
|
72
|
+
|
73
73
|
# The global configuration for the Machined
|
74
74
|
# environment.
|
75
75
|
attr_reader :config
|
76
|
-
|
76
|
+
|
77
77
|
# An array of the helpers added to the Context
|
78
78
|
# through the `#helpers` method.
|
79
79
|
attr_reader :context_helpers
|
80
|
-
|
80
|
+
|
81
81
|
# When the Machined environment is used as a Rack server, this
|
82
82
|
# will reference the actual `Machined::Server` instance that handles
|
83
83
|
# the requests.
|
84
84
|
attr_reader :server
|
85
|
-
|
85
|
+
|
86
86
|
# An `Array` of the Sprockets environments (actually `Machined::Sprocket`
|
87
87
|
# instances) that are the core of a Machined environment.
|
88
88
|
attr_reader :sprockets
|
89
|
-
|
89
|
+
|
90
90
|
# When the Machined environment is compiling static files,
|
91
91
|
# this will reference the `Machined::StaticCompiler` which handles
|
92
92
|
# looping through the available files and generating them.
|
93
93
|
attr_reader :static_compiler
|
94
|
-
|
94
|
+
|
95
95
|
# Creates a new Machined environment. It sets up three default
|
96
96
|
# sprockets:
|
97
97
|
#
|
@@ -110,15 +110,15 @@ module Machined
|
|
110
110
|
config.output_path = root.join config.output_path
|
111
111
|
config.lib_path = root.join config.lib_path
|
112
112
|
config.environment = ActiveSupport::StringInquirer.new(config.environment)
|
113
|
-
|
113
|
+
|
114
114
|
run_initializers self
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
# If bundler is used, require all the gems in the Gemfile
|
118
118
|
# for this environment.
|
119
119
|
initializer :require_bundle do
|
120
120
|
next if config.skip_bundle
|
121
|
-
|
121
|
+
|
122
122
|
ENV['BUNDLE_GEMFILE'] ||= root.join('Gemfile').to_s
|
123
123
|
if File.exist? ENV['BUNDLE_GEMFILE']
|
124
124
|
require 'bundler/setup'
|
@@ -126,37 +126,38 @@ module Machined
|
|
126
126
|
Bundler.require :default, environment.to_sym
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
# Appends the lib directory to the load path.
|
131
131
|
# Changes to files in this directory will trigger a reload
|
132
132
|
# of the Machined environment.
|
133
133
|
initializer :setup_autoloading do
|
134
134
|
next if config.skip_autoloading || !lib_path.exist?
|
135
|
-
|
135
|
+
|
136
136
|
require 'active_support/dependencies'
|
137
137
|
ActiveSupport::Dependencies.autoload_paths = [lib_path.to_s]
|
138
138
|
end
|
139
|
-
|
139
|
+
|
140
140
|
# Create and append the default `assets` sprocket.
|
141
141
|
# This sprocket mimics the asset pipeline in Rails 3.1.
|
142
142
|
initializer :create_assets_sprocket do
|
143
143
|
append_sprocket :assets, :assets => true
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
146
|
# Create and append the default `pages` sprocket.
|
147
147
|
# This sprocket is responsible for processing HTML pages,
|
148
148
|
# and includes processors for wrapping pages in layouts and
|
149
149
|
# reading YAML front matter.
|
150
150
|
initializer :create_pages_sprocket do
|
151
151
|
next if config.assets_only
|
152
|
-
|
152
|
+
|
153
153
|
append_sprocket :pages do |pages|
|
154
154
|
pages.register_mime_type 'text/html', '.html'
|
155
155
|
pages.register_preprocessor 'text/html', Processors::FrontMatterProcessor
|
156
156
|
pages.register_postprocessor 'text/html', Processors::LayoutProcessor
|
157
|
+
pages.clear_paths
|
157
158
|
end
|
158
159
|
end
|
159
|
-
|
160
|
+
|
160
161
|
# Create and append the default `views` sprocket.
|
161
162
|
# The files in this sprocket are not compiled. They are
|
162
163
|
# meant to be resources for the other sprockets. For instance,
|
@@ -164,21 +165,22 @@ module Machined
|
|
164
165
|
initializer :create_views_sprocket do
|
165
166
|
append_sprocket :views, :compile => false do |views|
|
166
167
|
views.register_mime_type 'text/html', '.html'
|
168
|
+
views.clear_paths
|
167
169
|
end
|
168
170
|
end
|
169
|
-
|
171
|
+
|
170
172
|
# If there's a config file, execute with the scope of the
|
171
173
|
# newly created Machined environment. The default sprockets are
|
172
174
|
# available at this point, but not fully configured. This is so
|
173
175
|
# you can actually configure the sprockets with this file.
|
174
176
|
initializer :eval_config_file do
|
175
177
|
instance_eval config_path.read if config_path.exist?
|
176
|
-
|
178
|
+
|
177
179
|
# This could be changed in the config file
|
178
180
|
config.output_path = root.join config.output_path
|
179
181
|
remove_sprocket(:pages) if config.assets_only && @pages
|
180
182
|
end
|
181
|
-
|
183
|
+
|
182
184
|
# Register all available Tilt templates to every
|
183
185
|
# sprocket other than the assets sprocket
|
184
186
|
initializer :register_all_templates do
|
@@ -186,7 +188,7 @@ module Machined
|
|
186
188
|
sprocket.use_all_templates unless sprocket.config.assets
|
187
189
|
end
|
188
190
|
end
|
189
|
-
|
191
|
+
|
190
192
|
# Setup the global cache. Defaults to an in memory
|
191
193
|
# caching for development, and a file based cache for production.
|
192
194
|
initializer :configure_cache do
|
@@ -197,24 +199,24 @@ module Machined
|
|
197
199
|
config.cache = :memory_store
|
198
200
|
end
|
199
201
|
end
|
200
|
-
|
202
|
+
|
201
203
|
config.cache = ActiveSupport::Cache.lookup_store(*config.cache)
|
202
204
|
end
|
203
|
-
|
205
|
+
|
204
206
|
# Do any configuration to the assets sprockets necessary
|
205
207
|
# after the config file has been evaled.
|
206
208
|
initializer :configure_assets_sprocket do
|
207
209
|
next unless @assets
|
208
|
-
|
210
|
+
|
209
211
|
# Append the directories within the configured paths
|
210
212
|
append_paths assets, Utils.existent_directories(root.join(config.assets_path))
|
211
213
|
config.assets_paths.each do |asset_path|
|
212
214
|
append_paths assets, Utils.existent_directories(root.join(asset_path))
|
213
215
|
end
|
214
|
-
|
216
|
+
|
215
217
|
# Append paths from Sprockets-plugin
|
216
218
|
assets.append_plugin_paths if assets.respond_to?(:append_plugin_paths)
|
217
|
-
|
219
|
+
|
218
220
|
# Search for Rails Engines with assets and append those
|
219
221
|
if defined? Rails::Engine
|
220
222
|
Rails::Engine.subclasses.each do |engine|
|
@@ -223,48 +225,48 @@ module Machined
|
|
223
225
|
append_paths assets, engine.paths['vendor/assets'].existent_directories
|
224
226
|
end
|
225
227
|
end
|
226
|
-
|
228
|
+
|
227
229
|
# Setup the base URL for the assets (like the Rails asset_prefix)
|
228
230
|
assets.config.url = config.assets_url
|
229
|
-
|
231
|
+
|
230
232
|
# Use the global cache store
|
231
233
|
assets.cache = config.cache
|
232
234
|
end
|
233
|
-
|
235
|
+
|
234
236
|
# Do any configuration to the pages sprockets necessary
|
235
237
|
# after the config file has been evaled.
|
236
238
|
initializer :configure_pages_sprocket do
|
237
239
|
next unless @pages
|
238
|
-
|
240
|
+
|
239
241
|
# Append the configured pages paths
|
240
242
|
append_path pages, config.pages_path
|
241
243
|
append_paths pages, config.pages_paths
|
242
|
-
|
244
|
+
|
243
245
|
# Setup the base URL for the pages
|
244
246
|
pages.config.url = config.pages_url
|
245
|
-
|
247
|
+
|
246
248
|
# Use the global cache store
|
247
249
|
pages.cache = config.cache
|
248
250
|
end
|
249
|
-
|
251
|
+
|
250
252
|
# Do any configuration to the views sprockets necessary
|
251
253
|
# after the config file has been evaled.
|
252
254
|
initializer :configure_views_sprocket do
|
253
255
|
next unless @views
|
254
|
-
|
256
|
+
|
255
257
|
# Append the configured views paths
|
256
258
|
append_path views, config.views_path
|
257
259
|
append_paths views, config.views_paths
|
258
|
-
|
260
|
+
|
259
261
|
# Use the global cache store
|
260
262
|
views.cache = config.cache
|
261
263
|
end
|
262
|
-
|
264
|
+
|
263
265
|
# Setup the JavaScript and CSS compressors
|
264
266
|
# for the assets based on the configuration.
|
265
267
|
initializer :configure_assets_compression do
|
266
268
|
next unless @assets
|
267
|
-
|
269
|
+
|
268
270
|
if config.compress
|
269
271
|
config.compress_js = true
|
270
272
|
config.compress_css = true
|
@@ -275,12 +277,12 @@ module Machined
|
|
275
277
|
assets.js_compressor = js_compressor if config.compress_js
|
276
278
|
assets.css_compressor = css_compressor if config.compress_css
|
277
279
|
end
|
278
|
-
|
280
|
+
|
279
281
|
# Finally, configure Sprockets::Helpers to
|
280
282
|
# match curernt configuration.
|
281
283
|
initializer :configure_sprockets_helpers do
|
282
284
|
next unless @assets
|
283
|
-
|
285
|
+
|
284
286
|
Sprockets::Helpers.configure do |helpers|
|
285
287
|
helpers.environment = assets
|
286
288
|
helpers.digest = config.digest_assets
|
@@ -288,37 +290,37 @@ module Machined
|
|
288
290
|
helpers.public_path = config.output_path.to_s
|
289
291
|
end
|
290
292
|
end
|
291
|
-
|
293
|
+
|
292
294
|
# Handles Rack requests by passing the +env+ to an instance
|
293
295
|
# of `Machined::Server`.
|
294
296
|
def call(env)
|
295
297
|
@server ||= Server.new self
|
296
298
|
server.call(env)
|
297
299
|
end
|
298
|
-
|
300
|
+
|
299
301
|
# Loops through the available static files and generates them in
|
300
302
|
# the output path.
|
301
303
|
def compile
|
302
304
|
@static_compiler ||= StaticCompiler.new self
|
303
305
|
static_compiler.compile
|
304
306
|
end
|
305
|
-
|
307
|
+
|
306
308
|
# Reloads the environment. This will re-evaluate the config file &
|
307
309
|
# clear the current cache.
|
308
310
|
def reload
|
309
311
|
# Make sure we have a fresh cache after we reload
|
310
312
|
config.cache.clear if config.cache.respond_to?(:clear)
|
311
|
-
|
313
|
+
|
312
314
|
# Reload dependencies as well, if necessary
|
313
315
|
ActiveSupport::Dependencies.clear if defined?(ActiveSupport::Dependencies)
|
314
|
-
|
316
|
+
|
315
317
|
# Use current configuration, but skip bundle and autoloading initializers
|
316
318
|
current_config = config.marshal_dump.dup
|
317
319
|
current_config.merge! :skip_bundle => true#, :skip_autoloading => true)
|
318
|
-
|
320
|
+
|
319
321
|
initialize current_config
|
320
322
|
end
|
321
|
-
|
323
|
+
|
322
324
|
# Creates a Machined sprocket with the given +name+ and +options+
|
323
325
|
# and appends it to the #sprockets list. This will also create
|
324
326
|
# an accessor with the given name that references the created sprocket.
|
@@ -326,7 +328,7 @@ module Machined
|
|
326
328
|
# machined.append_sprocket :updates, :url => '/news' do |updates|
|
327
329
|
# updates.append_path 'updates'
|
328
330
|
# end
|
329
|
-
#
|
331
|
+
#
|
330
332
|
# machined.updates # => #<Machined::Sprocket...>
|
331
333
|
# machined.updates.config.url # => '/news'
|
332
334
|
# machined.updates.paths # => [ '.../updates' ]
|
@@ -336,7 +338,7 @@ module Machined
|
|
336
338
|
sprockets.push(sprocket).uniq!
|
337
339
|
end
|
338
340
|
end
|
339
|
-
|
341
|
+
|
340
342
|
# Creates a Machined sprocket with the given +name+ and +options+
|
341
343
|
# and prepends it to the #sprockets list.
|
342
344
|
def prepend_sprocket(name, options = {}, &block)
|
@@ -344,7 +346,7 @@ module Machined
|
|
344
346
|
sprockets.unshift(sprocket).uniq!
|
345
347
|
end
|
346
348
|
end
|
347
|
-
|
349
|
+
|
348
350
|
# Removes the sprocket with the given name. This is useful if
|
349
351
|
# you don't need one of the default Sprockets.
|
350
352
|
def remove_sprocket(name)
|
@@ -353,7 +355,7 @@ module Machined
|
|
353
355
|
set_sprocket(name, nil)
|
354
356
|
end
|
355
357
|
end
|
356
|
-
|
358
|
+
|
357
359
|
# Adds helpers that can be used within asset files.
|
358
360
|
# There's two supported ways to add helpers, the first of
|
359
361
|
# which is similar to how the `#helpers` DSL works in Sinatra:
|
@@ -378,7 +380,7 @@ module Machined
|
|
378
380
|
@context_helpers << block if block_given?
|
379
381
|
@context_helpers.push *modules
|
380
382
|
end
|
381
|
-
|
383
|
+
|
382
384
|
unless method_defined?(:define_singleton_method)
|
383
385
|
# Add define_singleton_method for Ruby 1.8.7
|
384
386
|
# This is used to define the sprocket accessor methods.
|
@@ -387,19 +389,19 @@ module Machined
|
|
387
389
|
singleton_class.__send__ :define_method, symbol, method || block
|
388
390
|
end
|
389
391
|
end
|
390
|
-
|
392
|
+
|
391
393
|
protected
|
392
|
-
|
394
|
+
|
393
395
|
# Returns the sprocket registered with the given name.
|
394
396
|
def get_sprocket(name)
|
395
397
|
instance_variable_get "@#{name}"
|
396
398
|
end
|
397
|
-
|
399
|
+
|
398
400
|
# Sets the sprocket with the give name.
|
399
401
|
def set_sprocket(name, sprocket)
|
400
402
|
instance_variable_set "@#{name}", sprocket
|
401
403
|
end
|
402
|
-
|
404
|
+
|
403
405
|
# Factory method for creating a `Machined::Sprocket` instance.
|
404
406
|
# This is used in both `#append_sprocket` and `#prepend_sprocket`.
|
405
407
|
def create_sprocket(name, options = {}, &block) # :nodoc:
|
@@ -410,7 +412,7 @@ module Machined
|
|
410
412
|
yield sprocket if block_given?
|
411
413
|
end
|
412
414
|
end
|
413
|
-
|
415
|
+
|
414
416
|
# Appends the given +path+ to the given +sprocket+
|
415
417
|
# This makes sure the path is relative to the `root` path
|
416
418
|
# or an absolute path pointing somewhere else. It also
|
@@ -419,7 +421,7 @@ module Machined
|
|
419
421
|
path = Pathname.new(path).expand_path(root)
|
420
422
|
sprocket.append_path(path) if path.exist?
|
421
423
|
end
|
422
|
-
|
424
|
+
|
423
425
|
# Appends the given `Array` of +paths+ to the given +sprocket+.
|
424
426
|
def append_paths(sprocket, paths) # :nodoc:
|
425
427
|
paths or return
|
@@ -427,7 +429,7 @@ module Machined
|
|
427
429
|
append_path sprocket, path
|
428
430
|
end
|
429
431
|
end
|
430
|
-
|
432
|
+
|
431
433
|
# Returns the Javascript compression engine, based on
|
432
434
|
# what's set in `config.js_compressor`. If `config.js_compressor`
|
433
435
|
# is nil, let Tilt + Crush decide which one to use.
|
@@ -442,7 +444,7 @@ module Machined
|
|
442
444
|
Tilt['js']
|
443
445
|
end
|
444
446
|
end
|
445
|
-
|
447
|
+
|
446
448
|
# Returns the CSS compression engine, based on
|
447
449
|
# what's set in `config.css_compressor`. If `config.css_compressor`
|
448
450
|
# is nil, let Tilt + Crush decide which one to use.
|