mr_poole 0.5.1 → 0.6.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.
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