mr_poole 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55b01d175e1b4409aa3952570665706d4cb48b12
4
- data.tar.gz: e3e8070ed4000eae92275b01c2ba420ff7424432
3
+ metadata.gz: d0bb58fc7fc0fff02dd0be8fae3c1de6a74dd8a4
4
+ data.tar.gz: 7b4e5d81046fe6e405948da87c791745b22aa453
5
5
  SHA512:
6
- metadata.gz: 6e7f154e7cc3cab30bfecc709f5fc132d39fa69a0e62742bc9f6436bef2aa901f8633f87ae474a3524913997c795c3c5af2c1c86dde696866b0e623af808afb1
7
- data.tar.gz: 357f0267e6992c9b944f1ff8b1ff01947ad28da1e6a36e2880f9ffde82b585cb03e304da7f1e883810d9650c6aef2027ff9763090af0d677eef1edf9cc6a4033
6
+ metadata.gz: 663fca7eb25273cae3c580d32ec9ae7c33b5cb44458ddba6558c5b0ee1b17894a0c950e6970d7c5ad19dad89f1466f49f6d43924b8795e626df947bc9ab46df7
7
+ data.tar.gz: cecba65c4d0ff57bc87ea30796cf4b1e69911a4c030712c11b30bdd967c5307e747297a78ed4cc818ee60772bddc69cda878fab434d913ee4fd83487c927c2a5
data/CHANGES.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ### v0.6.0 (2014-04-02)
4
+
5
+ - Ability to open new posts in editor specified in config file. Thanks
6
+ [qrohlf](//github.com/qrohlf)!
7
+
3
8
  ### v0.5.1 (2014-01-31)
4
9
 
5
10
  - Bug fixes for older rubies (1.8.7, 1.9.2).
data/README.md CHANGED
@@ -21,7 +21,7 @@ Mr. Poole is primarily a command-line application: the gem installs an
21
21
  executable called `poole` in your path. It has four subcommands: post, draft,
22
22
  publish, and unpublish. All four of these commands echo a filename to STDOUT,
23
23
  so you can do something like `poole post "Title" | vim` and start editing
24
- immediately.
24
+ immediately. Alternatively, you can also have Mr. Poole auto open new posts in your preferred `$EDITOR` (see [Configuration](#configuration)).
25
25
 
26
26
  ### Post
27
27
 
@@ -128,6 +128,7 @@ should provide a `poole` key, which may take the following subkeys:
128
128
  - `default_layout` - path to a default layout to use
129
129
  - `default_extension` - file extension to use
130
130
  - `word_separator` - character to use for slug generation
131
+ - `auto_open` - set to `true`to automatically open new posts in your `$EDITOR`
131
132
 
132
133
  Any options you provide in `_config.yml` will override poole's built-in
133
134
  defaults. Mr. Poole defaults to using Markdown (with extension "md"), and the
data/lib/mr_poole/cli.rb CHANGED
@@ -30,56 +30,40 @@ module MrPoole
30
30
  end
31
31
 
32
32
  def handle_post
33
- options = do_creation_options
34
- options.title ||= @params.first
35
-
36
- @helper.post_usage unless options.title
37
- fn = @commands.post(options)
38
- puts "#{@src_dir}/#{fn}"
33
+ do_create('post')
39
34
  end
40
35
 
41
36
  def handle_draft
42
- options = do_creation_options
43
- options.title ||= @params.first
44
-
45
- @helper.draft_usage unless options.title
46
- fn = @commands.draft(options)
47
- puts "#{@src_dir}/#{fn}"
37
+ do_create('draft')
48
38
  end
49
39
 
50
40
  def handle_publish
51
- options = OpenStruct.new
52
- opt_parser = OptionParser.new do |opts|
53
- opts.on('-d', '--keep-draft', "Keep the draft post") do |d|
54
- options.keep_draft = d
55
- end
56
- opts.on('-t', '--keep-timestamp', "Keep the existing timestamp") do |t|
57
- options.keep_timestamp = t
58
- end
59
- end
60
- opt_parser.parse! @params
61
-
62
- path = @params.first
63
- @helper.publish_usage unless path
64
- fn = @commands.publish(path, options)
65
- puts "#{@src_dir}/#{fn}"
41
+ do_move('publish')
66
42
  end
67
43
 
68
44
  def handle_unpublish
69
- options = OpenStruct.new
70
- opt_parser = OptionParser.new do |opts|
71
- opts.on('-p', '--keep-post', "Do not delete post") do |p|
72
- options.keep_post = p
73
- end
74
- opts.on('-t', '--keep-timestamp', "Keep the existing timestamp") do |t|
75
- options.keep_timestamp = t
76
- end
77
- end
78
- opt_parser.parse! @params
45
+ do_move('unpublish')
46
+ end
47
+
48
+ private
49
+
50
+ # action is a string, either 'post' or 'draft'
51
+ def do_create(action)
52
+ options = do_creation_options
53
+ options.title ||= @params.first
54
+
55
+ @helper.send("#{action}_usage") unless options.title
56
+ fn = @commands.send(action, options)
57
+ puts "#{@src_dir}/#{fn}"
58
+ end
79
59
 
60
+ # action is a string, either 'publish' or 'unpublish'
61
+ def do_move(action)
62
+ options = do_move_options(action)
80
63
  path = @params.first
81
- @helper.unpublish_usage unless path
82
- fn = @commands.unpublish(path, options)
64
+
65
+ @helper.send("#{action}_usage") unless path
66
+ fn = @commands.send(action, path, options)
83
67
  puts "#{@src_dir}/#{fn}"
84
68
  end
85
69
 
@@ -109,5 +93,28 @@ module MrPoole
109
93
  options
110
94
  end
111
95
 
96
+ # pass a string, either publish or unpublish
97
+ def do_move_options(type)
98
+ options = OpenStruct.new
99
+ opt_parser = OptionParser.new do |opts|
100
+ if type == 'publish'
101
+ opts.on('-d', '--keep-draft', "Keep draft post") do |d|
102
+ options.keep_draft = d
103
+ end
104
+ else
105
+ opts.on('-p', '--keep-post', "Do not delete post") do |p|
106
+ options.keep_post = p
107
+ end
108
+ end
109
+
110
+ opts.on('-t', '--keep-timestamp', "Keep existing timestamp") do |t|
111
+ options.keep_timestamp = t
112
+ end
113
+ end
114
+
115
+ opt_parser.parse! @params
116
+ options
117
+ end
118
+
112
119
  end
113
120
  end
@@ -34,7 +34,7 @@ module MrPoole
34
34
  f = File.open(path, "w")
35
35
  f.write(head)
36
36
  f.close
37
-
37
+ @helper.open_in_editor(path) # open file if config key set
38
38
  path # return the path, in case we want to do anything useful
39
39
  end
40
40
 
@@ -62,7 +62,7 @@ module MrPoole
62
62
  f = File.open(path, "w")
63
63
  f.write(head)
64
64
  f.close
65
-
65
+ @helper.open_in_editor(path) # open file if config key set
66
66
  path # return the path, in case we want to do anything useful
67
67
  end
68
68
 
@@ -89,6 +89,22 @@ module MrPoole
89
89
  exit
90
90
  end
91
91
 
92
+ def open_in_editor(path)
93
+ # don't do anything if the user hasn't explicitly enabled the feature
94
+ return unless @config.auto_open
95
+
96
+ if editor = ENV['EDITOR']
97
+ `#{editor} #{path}`
98
+ else
99
+ puts "You have enabled the auto_open feature in your config.yml,"
100
+ puts "but have no editor configured."
101
+ puts ''
102
+ puts "Please set your $EDITOR environment variable to the "
103
+ puts "editor that poole should use to open new posts/drafts."
104
+ puts ''
105
+ end
106
+ end
107
+
92
108
  def version_statement
93
109
  puts ''
94
110
  puts "This is Mr. Poole, version #{MrPoole::VERSION}, running on ruby version #{RUBY_VERSION}"
@@ -1,3 +1,3 @@
1
1
  module MrPoole
2
- VERSION = '0.5.1'
2
+ VERSION = '0.6.0'
3
3
  end
data/spec/command_spec.rb CHANGED
@@ -13,44 +13,44 @@ module MrPoole
13
13
 
14
14
  describe "#post" do
15
15
  context 'title only' do
16
- it "should create a new post in the _posts directory" do
16
+ it "creates a new post in the _posts directory" do
17
17
  fn = c.post({:title => "test_post"})
18
18
  expect(File.exists?(fn)).to be_true
19
19
  end
20
20
 
21
- it "should return path to the newly created post" do
21
+ it "returns path to the newly created post" do
22
22
  returned = c.post({:title => "test_post"})
23
23
  determined = Dir.glob("_posts/*.md").first
24
24
  expect(returned).to eq(determined)
25
25
  end
26
26
 
27
- it "should create a timestamped post in the _posts directory" do
27
+ it "creates a timestamped post in the _posts directory" do
28
28
  fn = c.post({:title => "test_post" })
29
29
  expect(fn).to match(/#{date_regex}-test_post[.]md$/)
30
30
  end
31
31
 
32
- it "should downcase a title" do
32
+ it "downcases a title" do
33
33
  fn = c.post({:title => "Test_Post_With_Uppercase"})
34
34
  expect(fn).to match(/#{date_regex}-test_post_with_uppercase[.]md/)
35
35
  end
36
36
 
37
- it "should sub underscores for spaces in title" do
37
+ it "subs underscores for spaces in title" do
38
38
  fn = c.post({:title => "Test Post with Spaces"})
39
39
  expect(fn).to match(/#{date_regex}-test_post_with_spaces[.]md/)
40
40
  end
41
41
 
42
- it "should remove non-word characters for slug" do
42
+ it "removes non-word characters for slug" do
43
43
  fn = c.post({:title => "On (function() {}()) in JavaScript"})
44
44
  expect(fn).to match(/#{date_regex}-on_function_in_javascript[.]md/)
45
45
  end
46
46
 
47
- it "should update the title in the file itself" do
47
+ it "updates the title in the file itself" do
48
48
  fn = c.post({:title => "Testing Post {}"})
49
49
  content = File.open(fn, 'r').read
50
50
  expect(content).to match(/title: Testing Post \{\}/)
51
51
  end
52
52
 
53
- it "should update the date in the file itself" do
53
+ it "updates the date in the file itself" do
54
54
  fn = c.post({:title => "Date test post"})
55
55
 
56
56
  # date in filename should match date in file itself
@@ -61,17 +61,17 @@ module MrPoole
61
61
  end # end context title only
62
62
 
63
63
  context 'title and slug' do
64
- it "should create a post named for slug" do
64
+ it "creates a post named for slug" do
65
65
  fn = c.post({:title => "Test Post", :slug => 'unique_slug'})
66
66
  expect(fn).to match(/#{date_regex}-unique_slug[.]md$/)
67
67
  end
68
68
 
69
- it "should sub any weird characters in slug" do
69
+ it "subs any weird characters in slug" do
70
70
  fn = c.post({:title => "Test Post with Spaces", :slug => "(stupid] {slüg/"})
71
71
  expect(fn).to match(/#{date_regex}-stupid_slg[.]md/)
72
72
  end
73
73
 
74
- it "should update the title in the file itself" do
74
+ it "updates the title in the file itself" do
75
75
  fn = c.post({:title => "Testing Post {}", :slug => 'shouldnt_be_in_title'})
76
76
  content = File.open(fn, 'r').read
77
77
  expect(content).to match(/title: Testing Post \{\}/)
@@ -81,7 +81,7 @@ module MrPoole
81
81
  context 'with custom layout' do
82
82
  let(:layout_path) { write_custom_layout }
83
83
 
84
- it "should exit if layout path doesn't exist" do
84
+ it "exits if layout path doesn't exist" do
85
85
  expect {
86
86
  capture_stdout do
87
87
  c.post({:title => 'test_post', :layout => 'bogus_path.md'})
@@ -89,13 +89,13 @@ module MrPoole
89
89
  }.to raise_error(SystemExit)
90
90
  end
91
91
 
92
- it 'should not use the default layout' do
92
+ it 'does not use the default layout' do
93
93
  fn = c.post({:title => 'test_post', :layout => layout_path})
94
94
  content = File.open(fn, 'r').read
95
95
  expect(content).not_to match(/layout: post/)
96
96
  end
97
97
 
98
- it 'should use the custom layout' do
98
+ it 'uses the custom layout' do
99
99
  fn = c.post({:title => 'test_post', :layout => layout_path})
100
100
  content = File.open(fn, 'r').read
101
101
  expect(content).to match(/tags: testing/)
@@ -105,62 +105,62 @@ module MrPoole
105
105
 
106
106
  describe "#draft" do
107
107
  context 'title only' do
108
- it "should create a _drafts directory" do
108
+ it "creates a _drafts directory" do
109
109
  c.draft({:title => 'draft post'})
110
110
  expect(File.exists?('_drafts')).to be_true
111
111
  end
112
112
 
113
- it "should return path to the newly created draft" do
113
+ it "returns path to the newly created draft" do
114
114
  returned = c.draft({:title => "test_draft"})
115
115
  determined = Dir.glob("_drafts/*.md").first
116
116
  expect(returned).to eq(determined)
117
117
  end
118
118
 
119
- it "should create a new draft in the _drafts directory" do
119
+ it "creates a new draft in the _drafts directory" do
120
120
  fn = c.draft({:title => 'draft post'})
121
121
  expect(File.exists?(fn)).to be_true
122
122
  end
123
123
 
124
- it "should create a non-timestamped draft" do
124
+ it "creates a non-timestamped draft" do
125
125
  fn = c.draft({:title => 'draft post'})
126
126
  expect(fn).not_to match(/#{date_regex}/)
127
127
  end
128
128
 
129
- it "should downcase and underscore title for slug" do
129
+ it "downcases and underscore title for slug" do
130
130
  fn = c.draft({:title => "Test Post with Spaces"})
131
131
  expect(fn).to match(/test_post_with_spaces[.]md/)
132
132
  end
133
133
 
134
- it "should remove non-word characters for slug" do
134
+ it "removes non-word characters for slug" do
135
135
  fn = c.draft({:title => "On (function() {}()) in JavaScript"})
136
136
  expect(fn).to match(/on_function_in_javascript[.]md/)
137
137
  end
138
138
 
139
- it "should update the title in the file itself" do
139
+ it "updates the title in the file itself" do
140
140
  fn = c.draft({:title => "Testing Draft {}"})
141
141
  content = File.open(fn, 'r').read
142
142
  expect(content).to match(/title: Testing Draft \{\}/)
143
143
  end
144
144
 
145
- it "should not update the date in the file itself" do
145
+ it "does not update the date in the file itself" do
146
146
  fn = c.draft({:title => "Date test post"})
147
147
  content = File.open(fn, 'r').read
148
- expect(content).to match(/date: \d{4}-\d{2}-\d{2}\n/)
148
+ expect(content).to match(/date: #{date_regex}/)
149
149
  end
150
150
  end # end context title only
151
151
 
152
152
  context 'title and slug' do
153
- it "should create a draft named for slug" do
153
+ it "creates a draft named for slug" do
154
154
  fn = c.draft({:title => "Test Draft", :slug => 'unique_slug'})
155
155
  expect(fn).to match(/unique_slug[.]md$/)
156
156
  end
157
157
 
158
- it "should sub any weird characters in slug" do
158
+ it "subs any weird characters in slug" do
159
159
  fn = c.draft({:title => "Test Post with Spaces", :slug => "(stupid] {slüg/"})
160
160
  expect(fn).to match(/stupid_slg[.]md/)
161
161
  end
162
162
 
163
- it "should update the title in the file itself" do
163
+ it "updates the title in the file itself" do
164
164
  fn = c.draft({:title => "Testing Post {}", :slug => 'shouldnt_be_in_title'})
165
165
  content = File.open(fn, 'r').read
166
166
  expect(content).to match(/title: Testing Post \{\}/)
@@ -170,7 +170,7 @@ module MrPoole
170
170
  context 'with custom layout' do
171
171
  let(:layout_path) { write_custom_layout }
172
172
 
173
- it "should exit if layout path doesn't exist" do
173
+ it "exits if layout path doesn't exist" do
174
174
  expect {
175
175
  capture_stdout do
176
176
  c.draft({:title => 'test_post', :layout => 'bogus_path.md'})
@@ -178,80 +178,53 @@ module MrPoole
178
178
  }.to raise_error(SystemExit)
179
179
  end
180
180
 
181
- it 'should not use the default layout' do
181
+ it 'does not use the default layout' do
182
182
  fn = c.draft({:title => 'test_post', :layout => layout_path})
183
183
  content = File.open(fn, 'r').read
184
184
  expect(content).not_to match(/layout: post/)
185
185
  end
186
186
 
187
- it 'should use the custom layout' do
187
+ it 'uses the custom layout' do
188
188
  fn = c.draft({:title => 'test_post', :layout => layout_path})
189
189
  content = File.open(fn, 'r').read
190
190
  expect(content).to match(/tags: testing/)
191
191
  end
192
192
  end # context custom layout
193
-
194
- # I'm not sure why I originally decided to test all the slug generation
195
- # code in the draft section, but here we go anyway.
196
- context 'with custom word_separator in config file' do
197
- before(:each) { write_config_file_custom_word_sep }
198
-
199
- it "should downcase and underscore title for slug" do
200
- fn = c.draft({:title => "Test Post with Spaces"})
201
- expect(fn).to match(/test-post-with-spaces[.]md/)
202
- end
203
-
204
- it "should remove non-word characters for slug" do
205
- fn = c.draft({:title => "On (function() {}()) in JavaScript"})
206
- expect(fn).to match(/on-function-in-javascript[.]md/)
207
- end
208
-
209
- it "explicit slug overrides custom word_separator" do
210
- fn = c.draft({:title => "Test Draft", :slug => 'unique_slug'})
211
- expect(fn).to match(/unique_slug[.]md$/)
212
- end
213
-
214
- it "should sub any weird characters in slug" do
215
- fn = c.draft({:title => "Test Post with Spaces", :slug => "(stupid] {slüg/"})
216
- expect(fn).to match(/stupid-slg[.]md/)
217
- end
218
-
219
- end # end context custom word_separator
220
193
  end # end describe draft
221
194
 
222
195
  describe "#publish" do
223
196
  let(:d_path) { c.draft({:title => 'test_draft'}) }
224
197
 
225
- it 'should return path to newly created post' do
198
+ it 'returns path to newly created post' do
226
199
  returned = c.publish(d_path)
227
200
  determined = Dir.glob("_posts/*.md").first
228
201
  expect(returned).to eq(determined)
229
202
  end
230
203
 
231
- it 'should create a timestamped post in the _posts folder' do
204
+ it 'creates a timestamped post in the _posts folder' do
232
205
  fn = c.publish(d_path)
233
206
  expect(fn).to match(/#{date_regex}-test_draft[.]md$/)
234
207
  end
235
208
 
236
- it 'should remove file in the _drafts folder' do
209
+ it 'removes file in the _drafts folder' do
237
210
  c.publish(d_path)
238
211
  expect(File.exist?(d_path)).to be_false
239
212
  end
240
213
 
241
- it 'should create post with matching slug' do
214
+ it 'creates post with matching slug' do
242
215
  post = c.publish(d_path)
243
216
  draft_slug = File.basename(d_path, '.md')
244
217
  post_slug = post.match(/#{date_regex}-(.*)[.]md/)[1]
245
218
  expect(post_slug).to eq(draft_slug)
246
219
  end
247
220
 
248
- it 'should update timestamp in actual file' do
221
+ it 'updates timestamp in actual file' do
249
222
  post = c.publish(d_path)
250
223
  content = File.open(post, 'r').read
251
224
  expect(content).to match(/date: #{date_regex} \d{2}:\d{2}\n/)
252
225
  end
253
226
 
254
- it 'should copy contents of draft into post' do
227
+ it 'copies contents of draft into post' do
255
228
  # first add some content to the draft
256
229
  f = File.open(d_path, 'a')
257
230
  f.write("Some new content for my blog\n")
@@ -266,41 +239,41 @@ module MrPoole
266
239
  describe "#unpublish" do
267
240
  let(:p_path) { c.post({:title => 'test_post'}) }
268
241
 
269
- it 'should return path to newly created draft' do
242
+ it 'returns path to newly created draft' do
270
243
  returned = c.unpublish(p_path)
271
244
  determined = Dir.glob("_drafts/*.md").first
272
245
  expect(returned).to eq(determined)
273
246
  end
274
247
 
275
- it 'should create a _drafts directory' do
248
+ it 'creates a _drafts directory' do
276
249
  c.unpublish(p_path)
277
250
  expect(File.exists?('_drafts')).to be_true
278
251
  end
279
252
 
280
- it 'should create an untimestamped draft in the _drafts folder' do
253
+ it 'creates an untimestamped draft in the _drafts folder' do
281
254
  fn = c.unpublish(p_path)
282
255
  expect(fn).not_to match(/#{date_regex}/)
283
256
  end
284
257
 
285
- it 'should remove file in the _posts folder' do
258
+ it 'removes file in the _posts folder' do
286
259
  c.unpublish(p_path)
287
260
  expect(File.exist?(p_path)).to be_false
288
261
  end
289
262
 
290
- it 'should create draft with matching slug' do
263
+ it 'creates draft with matching slug' do
291
264
  draft = c.unpublish(p_path)
292
265
  post_slug = p_path.match(/#{date_regex}-(.*)[.]md$/)[1]
293
266
  draft_slug = File.basename(draft, '.md')
294
267
  expect(draft_slug).to eq(post_slug)
295
268
  end
296
269
 
297
- it 'should delete timestamp in actual file' do
270
+ it 'deletes timestamp in actual file' do
298
271
  draft = c.unpublish(p_path)
299
272
  content = File.open(draft, 'r').read
300
273
  expect(content).to match(/date:\s*\n/)
301
274
  end
302
275
 
303
- it 'should copy contents of post into draft' do
276
+ it 'copies contents of post into draft' do
304
277
  # first add some content to the draft
305
278
  f = File.open(p_path, 'a')
306
279
  f.write("Some new content for my blog\n")
@@ -316,47 +289,45 @@ module MrPoole
316
289
  context 'with custom extension' do
317
290
  let(:commands) { Commands.new('textile') }
318
291
 
319
- it 'post should use custom extension' do
292
+ it 'uses custom extension for post' do
320
293
  fn = commands.post({:title => 'post title'})
321
294
  expect(fn).to match(/textile$/)
322
295
  end
323
296
 
324
- it 'draft should use custom extension' do
297
+ it 'uses custom extension for draft' do
325
298
  fn = commands.draft({:title => 'post title'})
326
299
  expect(fn).to match(/textile$/)
327
300
  end
328
301
 
329
- it 'publish should use custom extension' do
302
+ it 'uses custom extension for publish' do
330
303
  draft_path = commands.draft({:title => 'post title'})
331
304
  fn = commands.publish(draft_path)
332
305
  expect(fn).to match(/textile$/)
333
306
  end
334
307
 
335
- it 'unpublish should use custom extension' do
308
+ it 'uses custom extension for unpublish' do
336
309
  post_path = commands.post({:title => 'post title'})
337
310
  fn = commands.unpublish(post_path)
338
311
  expect(fn).to match(/textile$/)
339
312
  end
340
-
341
- end
313
+ end # end context custom extension
342
314
 
343
315
  context 'with layout override' do
344
-
345
- it "post should inherit layout's file extension" do
316
+ it "inherit layout's file extension for post" do
346
317
  layout_path = write_custom_layout_textile
347
318
  fn = c.post({:title => 'post title', :layout => layout_path})
348
319
  expect(fn).not_to match(/md/)
349
320
  expect(fn).to match(/textile$/)
350
321
  end
351
322
 
352
- it "draft should inherit layout's file extension" do
323
+ it "inherits layout's file extension for draft" do
353
324
  layout_path = write_custom_layout_textile
354
325
  fn = c.draft({:title => 'post title', :layout => layout_path})
355
326
  expect(fn).not_to match(/md/)
356
327
  expect(fn).to match(/textile$/)
357
328
  end
358
329
 
359
- it "publish should inherit draft's extension" do
330
+ it "inherits draft's extension for pubilsh" do
360
331
  layout_path = write_custom_layout_textile
361
332
  draft_path = c.draft({:title => 'post title', :layout => layout_path})
362
333
  fn = c.publish(draft_path)
@@ -364,14 +335,33 @@ module MrPoole
364
335
  expect(fn).to match(/textile$/)
365
336
  end
366
337
 
367
- it "unpublish should inherit post's extension" do
338
+ it "inherits post's extension for unpublish" do
368
339
  layout_path = write_custom_layout_textile
369
340
  post_path = c.post({:title => 'post title', :layout => layout_path})
370
341
  fn = c.publish(post_path)
371
342
  expect(fn).not_to match(/md/)
372
343
  expect(fn).to match(/textile$/)
373
344
  end
345
+ end # end context layout override
346
+
347
+ context 'with custom word_separator' do
348
+ before(:each) { write_config_file_custom_word_sep }
349
+
350
+ it "uses hyphens for post" do
351
+ fn = c.post({:title => "Test Post with Spaces"})
352
+ expect(fn).to match(/test-post-with-spaces[.]md/)
353
+ end
354
+
355
+ it "uses hyphens for draft" do
356
+ fn = c.draft({:title => "On (function() {}()) in JavaScript"})
357
+ expect(fn).to match(/on-function-in-javascript[.]md/)
358
+ end
359
+
360
+ it "is overidden by explicit slug" do
361
+ fn = c.post({:title => "Test Post", :slug => 'unique_slug'})
362
+ expect(fn).to match(/unique_slug[.]md$/)
363
+ end
374
364
 
375
- end
365
+ end # end context custom word separator
376
366
  end
377
367
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mr_poole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael McClimon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-01 00:00:00.000000000 Z
11
+ date: 2014-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler