machined 0.7.1 → 0.8.0
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/Rakefile +2 -2
- data/bin/machined +3 -3
- data/lib/machined.rb +17 -17
- data/lib/machined/cli.rb +35 -35
- data/lib/machined/context.rb +4 -4
- data/lib/machined/environment.rb +57 -31
- data/lib/machined/helpers/asset_tag_helpers.rb +4 -4
- data/lib/machined/helpers/locals_helpers.rb +1 -1
- data/lib/machined/helpers/output_helpers.rb +15 -15
- data/lib/machined/helpers/page_helpers.rb +1 -1
- data/lib/machined/helpers/render_helpers.rb +16 -16
- data/lib/machined/index.rb +1 -1
- data/lib/machined/initializable.rb +9 -11
- data/lib/machined/processors/front_matter_processor.rb +2 -2
- data/lib/machined/processors/layout_processor.rb +1 -1
- data/lib/machined/server.rb +2 -2
- data/lib/machined/sprocket.rb +4 -4
- data/lib/machined/static_compiler.rb +2 -2
- data/lib/machined/templates/site/Gemfile.tt +4 -4
- data/lib/machined/templates/site/config.ru +1 -1
- data/lib/machined/templates/site/machined.rb +2 -2
- data/lib/machined/templates/site/views/layouts/application.html.erb +2 -2
- data/lib/machined/utils.rb +3 -3
- data/lib/machined/version.rb +1 -1
- data/machined.gemspec +29 -31
- data/spec/machined/cli_spec.rb +56 -56
- data/spec/machined/context_spec.rb +6 -6
- data/spec/machined/environment_spec.rb +94 -94
- data/spec/machined/helpers/asset_tag_helpers_spec.rb +42 -42
- data/spec/machined/helpers/locals_helper_spec.rb +17 -17
- data/spec/machined/helpers/output_helpers_spec.rb +27 -27
- data/spec/machined/helpers/page_helpers_spec.rb +32 -32
- data/spec/machined/helpers/render_helpers_spec.rb +42 -42
- data/spec/machined/initializable_spec.rb +9 -9
- data/spec/machined/processors/front_matter_processor_spec.rb +7 -7
- data/spec/machined/processors/layout_processor_spec.rb +19 -19
- data/spec/machined/server_spec.rb +36 -36
- data/spec/machined/sprocket_spec.rb +15 -15
- data/spec/machined/utils_spec.rb +14 -14
- data/spec/spec_helper.rb +7 -7
- data/spec/support/be_fresh_matcher.rb +2 -2
- data/spec/support/helpers.rb +6 -6
- metadata +177 -301
@@ -1,16 +1,16 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Machined::Context do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe '#machined' do
|
5
|
+
it 'returns a reference to the Machined environment' do
|
6
6
|
context.machined.should be(machined)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
describe
|
10
|
+
describe '#config' do
|
11
11
|
it "returns a reference to the Machined environment's configuration" do
|
12
|
-
machined.config.layout =
|
13
|
-
context.config.layout.should ==
|
12
|
+
machined.config.layout = 'application'
|
13
|
+
context.config.layout.should == 'application'
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -1,37 +1,37 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Machined::Environment do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe '#initialize' do
|
5
|
+
it 'loads configuration from a config file' do
|
6
6
|
within_construct do |c|
|
7
|
-
c.file
|
8
|
-
config.output_path =
|
7
|
+
c.file 'machined.rb', <<-CONTENT.unindent
|
8
|
+
config.output_path = 'site'
|
9
9
|
append_sprocket :updates
|
10
10
|
CONTENT
|
11
|
-
machined.config.output_path.should ==
|
11
|
+
machined.config.output_path.should == 'site'
|
12
12
|
machined.updates.should be_a(Machined::Sprocket)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
describe
|
18
|
-
it
|
17
|
+
describe '#append_sprocket' do
|
18
|
+
it 'creates a new Sprockets environment' do
|
19
19
|
sprocket = machined.append_sprocket :updates
|
20
20
|
sprocket.should be_a(Sprockets::Environment)
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it 'appends the sprocket to #sprockets' do
|
24
24
|
sprocket = machined.append_sprocket :updates
|
25
25
|
machined.sprockets.last.should be(sprocket)
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
28
|
+
it 'adds a method with the given name which returns the sprocket' do
|
29
29
|
sprocket = machined.append_sprocket :updates
|
30
30
|
machined.updates.should be(sprocket)
|
31
31
|
Machined::Environment.method_defined?(:updates).should be_false
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
34
|
+
it 'yields the sprocket for configuration' do
|
35
35
|
yielded_sprocket = nil
|
36
36
|
sprocket = machined.append_sprocket :updates do |updates|
|
37
37
|
yielded_sprocket = updates
|
@@ -39,73 +39,73 @@ describe Machined::Environment do
|
|
39
39
|
yielded_sprocket.should be(sprocket)
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
42
|
+
it 'initializes the sprocket with a reference to the Machined environment' do
|
43
43
|
sprocket = machined.append_sprocket :updates
|
44
44
|
sprocket.machined.should be(machined)
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
48
|
-
sprocket = machined.append_sprocket :updates, :root =>
|
49
|
-
sprocket.root.should == File.expand_path(
|
47
|
+
it 'initializes the sprocket with configuration' do
|
48
|
+
sprocket = machined.append_sprocket :updates, :root => 'spec/machined'
|
49
|
+
sprocket.root.should == File.expand_path('spec/machined')
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
describe
|
54
|
-
it
|
53
|
+
describe '#prepend_sprocket' do
|
54
|
+
it 'creates a new Sprockets environment' do
|
55
55
|
sprocket = machined.prepend_sprocket :updates
|
56
56
|
sprocket.should be_a(Sprockets::Environment)
|
57
57
|
end
|
58
58
|
|
59
|
-
it
|
59
|
+
it 'prepends the sprocket to #sprockets' do
|
60
60
|
sprocket = machined.prepend_sprocket :updates
|
61
61
|
machined.sprockets.first.should be(sprocket)
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe
|
66
|
-
it
|
65
|
+
describe '#remove_sprocket' do
|
66
|
+
it 'sets the accessor method to return nil' do
|
67
67
|
machined.remove_sprocket :pages
|
68
68
|
machined.pages.should be_nil
|
69
69
|
end
|
70
70
|
|
71
|
-
it
|
71
|
+
it 'removes the sprockets from the sprockets list' do
|
72
72
|
views = machined.views
|
73
73
|
machined.remove_sprocket :views
|
74
74
|
machined.sprockets.should_not include(views)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
describe
|
79
|
-
it
|
78
|
+
describe '#helpers' do
|
79
|
+
it 'adds methods defined in the given block to the Context' do
|
80
80
|
machined.helpers do
|
81
81
|
def hello
|
82
|
-
|
82
|
+
'world'
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
-
context.hello.should ==
|
86
|
+
context.hello.should == 'world'
|
87
87
|
end
|
88
88
|
|
89
|
-
it
|
89
|
+
it 'adds methods defined in the given module to the Context' do
|
90
90
|
helper = Module.new do
|
91
91
|
def hello
|
92
|
-
|
92
|
+
'world'
|
93
93
|
end
|
94
94
|
end
|
95
95
|
machined.helpers helper
|
96
|
-
context.hello.should ==
|
96
|
+
context.hello.should == 'world'
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
describe
|
101
|
-
it
|
100
|
+
describe 'default assets sprocket' do
|
101
|
+
it 'appends the standard asset paths' do
|
102
102
|
within_construct do |c|
|
103
|
-
c.directory
|
104
|
-
c.directory
|
105
|
-
c.directory
|
106
|
-
c.directory
|
107
|
-
c.directory
|
108
|
-
c.directory
|
103
|
+
c.directory 'assets/images'
|
104
|
+
c.directory 'assets/javascripts'
|
105
|
+
c.directory 'assets/stylesheets'
|
106
|
+
c.directory 'vendor/assets/images'
|
107
|
+
c.directory 'vendor/assets/javascripts'
|
108
|
+
c.directory 'vendor/assets/stylesheets'
|
109
109
|
|
110
110
|
machined.assets.paths.should match_paths(%w(
|
111
111
|
assets/images
|
@@ -118,12 +118,12 @@ describe Machined::Environment do
|
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
121
|
-
it
|
121
|
+
it 'appends the available asset paths' do
|
122
122
|
within_construct do |c|
|
123
|
-
c.directory
|
124
|
-
c.directory
|
125
|
-
c.directory
|
126
|
-
c.directory
|
123
|
+
c.directory 'assets/css'
|
124
|
+
c.directory 'assets/img'
|
125
|
+
c.directory 'assets/js'
|
126
|
+
c.directory 'assets/plugins'
|
127
127
|
|
128
128
|
machined.assets.paths.should match_paths(%w(
|
129
129
|
assets/css
|
@@ -134,21 +134,21 @@ describe Machined::Environment do
|
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
-
it
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
end
|
137
|
+
# it 'appends Rails::Engine paths' do
|
138
|
+
# require 'rails'
|
139
|
+
# require 'jquery-rails'
|
140
|
+
# machined.assets.paths.first.should =~ %r(/jquery-rails-[\d\.]+/vendor/assets/javascripts)
|
141
|
+
# Rails::Engine.subclasses.delete Jquery::Rails::Engine
|
142
|
+
# end
|
143
143
|
|
144
|
-
it
|
145
|
-
require
|
144
|
+
it 'appends Sprockets::Plugin paths' do
|
145
|
+
require 'sprockets-plugin'
|
146
146
|
|
147
147
|
within_construct do |c|
|
148
|
-
plugin_dir = c.directory
|
149
|
-
plugin_dir.directory
|
150
|
-
plugin_dir.directory
|
151
|
-
plugin_dir.directory
|
148
|
+
plugin_dir = c.directory 'plugin/assets'
|
149
|
+
plugin_dir.directory 'images'
|
150
|
+
plugin_dir.directory 'javascripts'
|
151
|
+
plugin_dir.directory 'stylesheets'
|
152
152
|
|
153
153
|
plugin = Class.new(Sprockets::Plugin)
|
154
154
|
plugin.append_paths_in plugin_dir
|
@@ -162,36 +162,36 @@ describe Machined::Environment do
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
-
it
|
165
|
+
it 'compiles web assets' do
|
166
166
|
within_construct do |c|
|
167
|
-
c.file
|
168
|
-
c.file
|
169
|
-
c.file
|
170
|
-
c.file
|
167
|
+
c.file 'assets/javascripts/main.js', '//= require dep'
|
168
|
+
c.file 'assets/javascripts/dep.js', 'var app = {};'
|
169
|
+
c.file 'assets/stylesheets/main.css.scss', "@import 'dep';\nbody { color: $color; }"
|
170
|
+
c.file 'assets/stylesheets/_dep.scss', '$color: red;'
|
171
171
|
|
172
|
-
machined.assets[
|
173
|
-
machined.assets[
|
172
|
+
machined.assets['main.js'].to_s.should == "var app = {};\n"
|
173
|
+
machined.assets['main.css'].to_s.should == "body {\n color: red; }\n"
|
174
174
|
end
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
-
describe
|
179
|
-
it
|
178
|
+
describe 'default pages sprocket' do
|
179
|
+
it 'appends the pages path' do
|
180
180
|
within_construct do |c|
|
181
|
-
c.directory
|
181
|
+
c.directory 'pages'
|
182
182
|
machined.pages.paths.should match_paths(%w(pages)).with_root(c)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
186
|
-
it
|
186
|
+
it 'compiles html pages' do
|
187
187
|
within_construct do |c|
|
188
|
-
c.file
|
189
|
-
machined.pages[
|
188
|
+
c.file 'pages/index.html.haml', '%h1 Hello World'
|
189
|
+
machined.pages['index.html'].to_s.should == "<h1>Hello World</h1>\n"
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
-
context
|
194
|
-
it
|
193
|
+
context 'when :assets_only is set in constructor' do
|
194
|
+
it 'is never created' do
|
195
195
|
machined :assets_only => true
|
196
196
|
machined.respond_to?(:pages).should be_false
|
197
197
|
machined.sprockets.should == [ machined.assets, machined.views ]
|
@@ -199,10 +199,10 @@ describe Machined::Environment do
|
|
199
199
|
|
200
200
|
end
|
201
201
|
|
202
|
-
context
|
203
|
-
it
|
202
|
+
context 'when :assets_only is set in the config file' do
|
203
|
+
it 'is removed' do
|
204
204
|
within_construct do |c|
|
205
|
-
c.file
|
205
|
+
c.file 'machined.rb', 'config.assets_only = true'
|
206
206
|
|
207
207
|
machined
|
208
208
|
machined.pages.should be_nil
|
@@ -212,49 +212,49 @@ describe Machined::Environment do
|
|
212
212
|
end
|
213
213
|
end
|
214
214
|
|
215
|
-
describe
|
216
|
-
it
|
215
|
+
describe 'default views sprocket' do
|
216
|
+
it 'appends the views path' do
|
217
217
|
within_construct do |c|
|
218
|
-
c.directory
|
218
|
+
c.directory 'views'
|
219
219
|
machined.views.paths.should match_paths(%w(views)).with_root(c)
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
|
-
it
|
223
|
+
it 'compiles html pages' do
|
224
224
|
within_construct do |c|
|
225
|
-
c.file
|
226
|
-
machined.views[
|
225
|
+
c.file 'views/layouts/main.html.haml', '%h1 Hello World'
|
226
|
+
machined.views['layouts/main.html'].to_s.should == "<h1>Hello World</h1>\n"
|
227
227
|
end
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
231
|
-
describe
|
232
|
-
context
|
233
|
-
it
|
231
|
+
describe 'compression' do
|
232
|
+
context 'with compress set to true' do
|
233
|
+
it 'compresses javascripts and stylesheets' do
|
234
234
|
within_construct do |c|
|
235
|
-
c.file
|
236
|
-
c.file
|
237
|
-
c.file
|
238
|
-
c.file
|
235
|
+
c.file 'assets/javascripts/main.js', '//= require dep'
|
236
|
+
c.file 'assets/javascripts/dep.js', 'var app = {};'
|
237
|
+
c.file 'assets/stylesheets/main.css.scss', "@import 'dep';\nbody { color: $color; }"
|
238
|
+
c.file 'assets/stylesheets/_dep.scss', '$color: red;'
|
239
239
|
|
240
|
-
Crush::Uglifier.should_receive(:compress).with("var app = {};\n").and_return(
|
241
|
-
Crush::Sass::Engine.should_receive(:compress).with("body {\n color: red; }\n").and_return(
|
240
|
+
Crush::Uglifier.should_receive(:compress).with("var app = {};\n").and_return('compressed')
|
241
|
+
Crush::Sass::Engine.should_receive(:compress).with("body {\n color: red; }\n").and_return('compressed')
|
242
242
|
|
243
243
|
machined :compress => true
|
244
|
-
machined.assets[
|
245
|
-
machined.assets[
|
244
|
+
machined.assets['main.js'].to_s.should == 'compressed'
|
245
|
+
machined.assets['main.css'].to_s.should == 'compressed'
|
246
246
|
end
|
247
247
|
end
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
-
context
|
252
|
-
it
|
251
|
+
context 'with a js_compressor set' do
|
252
|
+
it 'compresses using that compressor' do
|
253
253
|
within_construct do |c|
|
254
|
-
c.file
|
255
|
-
c.file
|
256
|
-
Crush::Packr.should_receive(:compress).with("var app = {};\n").and_return(
|
257
|
-
machined.assets[
|
254
|
+
c.file 'assets/javascripts/main.js', 'var app = {};'
|
255
|
+
c.file 'machined.rb', 'config.js_compressor = :packr'
|
256
|
+
Crush::Packr.should_receive(:compress).with("var app = {};\n").and_return('compressed')
|
257
|
+
machined.assets['main.js'].to_s.should == 'compressed'
|
258
258
|
end
|
259
259
|
end
|
260
260
|
end
|
@@ -1,77 +1,77 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Machined::Helpers::AssetTagHelpers do
|
4
|
-
describe
|
5
|
-
context
|
6
|
-
it
|
7
|
-
context.asset_path(:js,
|
8
|
-
|
9
|
-
context.asset_path(:js,
|
10
|
-
|
11
|
-
context.asset_path(:js,
|
12
|
-
|
4
|
+
describe '#asset_path' do
|
5
|
+
context 'with URIs' do
|
6
|
+
it 'returns URIs untouched' do
|
7
|
+
context.asset_path(:js, 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js').should ==
|
8
|
+
'https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'
|
9
|
+
context.asset_path(:js, 'http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js').should ==
|
10
|
+
'http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'
|
11
|
+
context.asset_path(:js, '//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js').should ==
|
12
|
+
'//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
context
|
17
|
-
it
|
18
|
-
context.asset_path(:js,
|
19
|
-
context.asset_path(:images,
|
16
|
+
context 'with regular files' do
|
17
|
+
it 'returns absolute paths' do
|
18
|
+
context.asset_path(:js, '/path/to/file.js').should == '/path/to/file.js'
|
19
|
+
context.asset_path(:images, '/path/to/file.jpg').should == '/path/to/file.jpg'
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
context.asset_path(:js,
|
24
|
-
context.asset_path(:css,
|
25
|
-
context.asset_path(:images,
|
22
|
+
it 'appends the extension for javascripts and stylesheets' do
|
23
|
+
context.asset_path(:js, '/path/to/file').should == '/path/to/file.js'
|
24
|
+
context.asset_path(:css, '/path/to/file').should == '/path/to/file.css'
|
25
|
+
context.asset_path(:images, '/path/to/file').should_not == '/path/to/file.jpg'
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
29
|
-
context.asset_path(:css,
|
30
|
-
context.asset_path(:js,
|
31
|
-
context.asset_path(:images,
|
28
|
+
it 'prepends a base URL if missing' do
|
29
|
+
context.asset_path(:css, 'main').should == '/stylesheets/main.css'
|
30
|
+
context.asset_path(:js, 'main').should == '/javascripts/main.js'
|
31
|
+
context.asset_path(:images, 'logo.jpg').should == '/images/logo.jpg'
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
34
|
+
it 'appends a timestamp if the file exists in the output path' do
|
35
35
|
within_construct do |c|
|
36
|
-
c.file
|
37
|
-
c.file
|
36
|
+
c.file 'public/javascripts/main.js'
|
37
|
+
c.file 'public/favicon.ico'
|
38
38
|
|
39
|
-
context.asset_path(:js,
|
40
|
-
context.asset_path(:images,
|
39
|
+
context.asset_path(:js, 'main').should =~ %r(/javascripts/main.js\?\d+)
|
40
|
+
context.asset_path(:images, '/favicon.ico').should =~ %r(/favicon.ico\?\d+)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
context
|
46
|
-
it
|
45
|
+
context 'with assets' do
|
46
|
+
it 'prepends a base URL if missing' do
|
47
47
|
within_construct do |c|
|
48
|
-
c.file
|
49
|
-
c.file
|
50
|
-
c.file
|
48
|
+
c.file 'assets/images/logo.jpg'
|
49
|
+
c.file 'assets/javascripts/main.js'
|
50
|
+
c.file 'assets/stylesheets/main.css'
|
51
51
|
|
52
|
-
context.asset_path(:css,
|
53
|
-
context.asset_path(:js,
|
54
|
-
context.asset_path(:images,
|
52
|
+
context.asset_path(:css, 'main').should == '/assets/main.css'
|
53
|
+
context.asset_path(:js, 'main').should == '/assets/main.js'
|
54
|
+
context.asset_path(:images, 'logo.jpg').should == '/assets/logo.jpg'
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'uses the digest path if configured' do
|
59
59
|
within_construct do |c|
|
60
|
-
c.file
|
60
|
+
c.file 'assets/javascrtips/main.js'
|
61
61
|
|
62
62
|
machined :digest_assets => true
|
63
|
-
context.asset_path(:js,
|
63
|
+
context.asset_path(:js, 'main').should =~ %r(/assets/main-[0-9a-f]+.js)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
describe
|
70
|
-
it
|
69
|
+
describe '#asset_path' do
|
70
|
+
it 'is compatible with the Sprockets::Helpers API' do
|
71
71
|
within_construct do |c|
|
72
|
-
c.file
|
72
|
+
c.file 'assets/images/logo.jpg'
|
73
73
|
|
74
|
-
context.image_path(
|
74
|
+
context.image_path('logo.jpg', :digest => true).should =~ %r(/assets/logo-[0-9a-f]+.jpg)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|