Blux 0.0.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.tar.gz.sig +1 -0
- data/Blux.gemspec +57 -0
- data/COPYING +674 -0
- data/Manifest +15 -0
- data/README.markdown +81 -0
- data/Rakefile +19 -0
- data/bin/blux +107 -0
- data/bin/blux_textile_to_html +25 -0
- data/bin/blux_wp_publish +142 -0
- data/lib/blog_manager.rb +99 -0
- data/lib/blux_config_reader.rb +83 -0
- data/lib/blux_option_parser.rb +104 -0
- data/lib/draft_manager.rb +131 -0
- data/lib/indexer.rb +98 -0
- data/spec/blog_manager_spec.rb +150 -0
- data/spec/blux_config_reader_spec.rb +81 -0
- data/spec/draft_manager_spec.rb +363 -0
- metadata +236 -0
- metadata.gz.sig +1 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'blux_config_reader.rb'
|
2
|
+
|
3
|
+
describe BluxConfigurationReader do
|
4
|
+
before :each do
|
5
|
+
def STDERR.puts(str) end
|
6
|
+
end
|
7
|
+
|
8
|
+
after :each do
|
9
|
+
system "rm #{@blux_rc}" if File.exists? @blux_rc
|
10
|
+
end
|
11
|
+
|
12
|
+
context "loading the editor from the config file" do
|
13
|
+
before :each do
|
14
|
+
@blux_rc = "#{File.dirname(__FILE__)}/.bluxrc"
|
15
|
+
create_config
|
16
|
+
|
17
|
+
@reader = BluxConfigurationReader.new
|
18
|
+
@reader.load_config @blux_rc
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should read the editor from the config file" do
|
22
|
+
@reader.launch_editor_cmd.should == 'gedit'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should read the html_converter from the config file" do
|
26
|
+
@reader.html_converter_cmd.should == 'ruby textile_to_html.rb'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should read the blog from the config file" do
|
30
|
+
@reader.blog.should == 'myownblog'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should read the blog from the config file" do
|
34
|
+
@reader.author_name.should == 'Author Bob'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should read the blog from the config file" do
|
38
|
+
@reader.user_name.should == 'this_user'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should read the blog from the config file" do
|
42
|
+
@reader.password.should == 'pass123'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "loading the editor from the config file when it doesn't exist" do
|
47
|
+
before :each do
|
48
|
+
@blux_rc = "#{File.dirname(__FILE__)}/.bluxrc"
|
49
|
+
create_empty_config
|
50
|
+
|
51
|
+
@reader = BluxConfigurationReader.new
|
52
|
+
@reader.load_config @blux_rc
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should show a warning" do
|
56
|
+
STDERR.should_receive(:puts).with("please specify an editor in .bluxrc: editor: [your editor of choice]\n")
|
57
|
+
STDERR.should_receive(:puts).with("please specify an html converter in .bluxrc: html_converter: [your converter command of choice]\n")
|
58
|
+
STDERR.should_receive(:puts).with("please specify your wordpress blog name in .bluxrc: blog: [your blog]\n")
|
59
|
+
STDERR.should_receive(:puts).with("please specify an author name in .bluxrc: author_name: [your name]\n")
|
60
|
+
STDERR.should_receive(:puts).with("please specify your wordpress user name in .bluxrc: user_name: [your user name]\n")
|
61
|
+
STDERR.should_receive(:puts).with("please specify your wordpress password in .bluxrc: password: [your password]\n")
|
62
|
+
@reader.load_config @blux_rc
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_empty_config
|
67
|
+
File.open(@blux_rc, 'w') do |f|
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_config
|
72
|
+
File.open(@blux_rc, 'w') do |f|
|
73
|
+
f.puts "editor: gedit"
|
74
|
+
f.puts "html_converter: ruby textile_to_html.rb"
|
75
|
+
f.puts "blog: myownblog"
|
76
|
+
f.puts "author_name: Author Bob"
|
77
|
+
f.puts "user_name: this_user"
|
78
|
+
f.puts "password: pass123"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,363 @@
|
|
1
|
+
require 'draft_manager.rb'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
describe DraftManager do
|
5
|
+
before :each do
|
6
|
+
@blux_dir = "#{File.dirname(__FILE__)}/.blux"
|
7
|
+
@temp_dir = "#{@blux_dir}/tmp"
|
8
|
+
@draft_dir = "#{@blux_dir}/draft"
|
9
|
+
|
10
|
+
Dir.mkdir(@blux_dir) unless Dir.exists?(@blux_dir)
|
11
|
+
Dir.mkdir(@temp_dir) unless Dir.exists?(@temp_dir)
|
12
|
+
Dir.mkdir(@draft_dir) unless Dir.exists?(@draft_dir)
|
13
|
+
|
14
|
+
def STDERR.puts(str) end
|
15
|
+
@manager = DraftManager.new()
|
16
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
`rm -Rf #{@blux_dir}`
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when using a new manager" do
|
24
|
+
it "should have an empty draft index" do
|
25
|
+
@manager.index.keys.length.should == 0
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should load the draft index from disk" do
|
29
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
30
|
+
f.write('{"test.sh":{"a":1,"b":2}}')
|
31
|
+
end
|
32
|
+
|
33
|
+
manager = DraftManager.new
|
34
|
+
manager.setup('gedit', @temp_dir, @draft_dir)
|
35
|
+
|
36
|
+
manager.index.key?("test.sh").should == true
|
37
|
+
manager.index["test.sh"].key?("a").should == true
|
38
|
+
manager.index["test.sh"].key?("b").should == true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when using a new manager with no draft index" do
|
43
|
+
it "should create an empty draft index" do
|
44
|
+
File.exists?("#{@draft_dir}/.draft_index").should == true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "when creating a new draft" do
|
49
|
+
before :each do
|
50
|
+
@manager.stub!(:system).and_return(nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
after :each do
|
54
|
+
`rm -f #{@draft_dir}/*`
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should call the editor command" do
|
58
|
+
class Tempfile
|
59
|
+
def path() 'test/test.sh' end
|
60
|
+
end
|
61
|
+
|
62
|
+
@manager.should_receive(:system).with('gedit test/test.sh')
|
63
|
+
@manager.create_draft
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should not copy the temp file in the draft folder if it has no data" do
|
67
|
+
tempfile = mock("Tempfile")
|
68
|
+
def tempfile.initialize(basename, path)
|
69
|
+
system "touch #{@temp_dir}/test"
|
70
|
+
end
|
71
|
+
|
72
|
+
def tempfile.path
|
73
|
+
"#{@temp_dir}/test"
|
74
|
+
end
|
75
|
+
|
76
|
+
@manager.create_draft
|
77
|
+
Dir.entries(@draft_dir).length.should == 3 # . and .. and .index
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should copy the temp file in the draft folder if it has data" do
|
81
|
+
class Tempfile
|
82
|
+
def size() 123 end
|
83
|
+
def path() 'test/test.sh' end
|
84
|
+
end
|
85
|
+
|
86
|
+
@manager.should_receive(:system).with('gedit test/test.sh').ordered
|
87
|
+
@manager.should_receive(:system).with("mv test/test.sh #{@draft_dir}").ordered
|
88
|
+
@manager.create_draft
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "when saving a new draft" do
|
93
|
+
before :each do
|
94
|
+
@manager.stub!(:system).and_return(nil)
|
95
|
+
|
96
|
+
class Tempfile
|
97
|
+
def size() 123 end
|
98
|
+
def path() 'test/test.sh' end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
after :each do
|
103
|
+
`rm -f #{@draft_dir}/*`
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should save the draft index to disk" do
|
107
|
+
@manager.create_draft
|
108
|
+
File.exists?("#{@draft_dir}/.draft_index").should == true
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should add the creation time to the attributes of that draft" do
|
112
|
+
time = Time.now.to_s
|
113
|
+
@manager.create_draft
|
114
|
+
@manager.index["test.sh"][:creation_time].to_s.should == time
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when editing a draft" do
|
119
|
+
before :each do
|
120
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
121
|
+
f.write('{"test.sh":{}}')
|
122
|
+
end
|
123
|
+
|
124
|
+
@manager = DraftManager.new
|
125
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
126
|
+
@manager.stub!(:system).and_return(nil)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should call the editor command" do
|
130
|
+
system "touch #{@draft_dir}/test.sh"
|
131
|
+
|
132
|
+
@manager.should_receive(:system).with("gedit #{@draft_dir}/test.sh")
|
133
|
+
@manager.edit_draft('test.sh')
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should show an error if the file doesn't exist" do
|
137
|
+
STDERR.should_receive(:puts).with("draft filename asdf.asf does not exist\n")
|
138
|
+
@manager.edit_draft('asdf.asf')
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should add the edited time to the attributes of that draft" do
|
142
|
+
system "touch #{@draft_dir}/test.sh"
|
143
|
+
time = Time.now.to_s
|
144
|
+
|
145
|
+
@manager.edit_draft('test.sh')
|
146
|
+
@manager.index["test.sh"]["edited_time"].to_s.should == time
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "when listing drafts" do
|
151
|
+
before :each do
|
152
|
+
system "touch #{@draft_dir}/1"
|
153
|
+
system "touch #{@draft_dir}/2"
|
154
|
+
system "touch #{@draft_dir}/3"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should list all the draft filenames, one per line" do
|
158
|
+
@manager.list.should == ["1", "2", "3"]
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context "when requesting info about a draft" do
|
163
|
+
before :each do
|
164
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
165
|
+
f.write('{"file1":{"a":1,"b":2},"file1":{"a":1,"b":2}}')
|
166
|
+
end
|
167
|
+
|
168
|
+
system "touch #{@draft_dir}/file1"
|
169
|
+
system "touch #{@draft_dir}/file2"
|
170
|
+
|
171
|
+
@manager = DraftManager.new
|
172
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should display the info about the selected draft in json format" do
|
176
|
+
@manager.show_info('file1').should == '{"a":1,"b":2}'
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should output an error message if the file does not exist" do
|
180
|
+
STDERR.should_receive(:puts).with("draft filename asdf.asf does not exist\n")
|
181
|
+
@manager.edit_draft('asdf.asf')
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context "when showing a draft preview" do
|
186
|
+
before :each do
|
187
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
188
|
+
f.write('{"file1":{"a":1,"b":2},"file2":{"a":1,"b":2}, "file3":{}}')
|
189
|
+
end
|
190
|
+
|
191
|
+
system "echo this is blog with lots of letters intended to go beyond the 76 chars that will be displayed by the preview functionnality of the draft manager > #{@draft_dir}/file1"
|
192
|
+
system "echo this is a blog > #{@draft_dir}/file2"
|
193
|
+
system "touch #{@draft_dir}/file3"
|
194
|
+
|
195
|
+
@manager = DraftManager.new
|
196
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should trunk the preview to 76 chars, with '...' appended at the end" do
|
200
|
+
@manager.show_preview('file1').should == 'this is blog with lots of letters intended to go beyond the 76 chars that wi...'
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should display the first line as is if it doesn't have more than 76 chars" do
|
204
|
+
@manager.show_preview('file2').should == 'this is a blog'
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should display an empty string for an empty draft" do
|
208
|
+
@manager.show_preview('file3').should == ''
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context "when outputing a draft" do
|
213
|
+
before :each do
|
214
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
215
|
+
f.write('{"file1":{"a":1,"b":2},"file2":{"a":1,"b":2}, "file3":{}}')
|
216
|
+
end
|
217
|
+
|
218
|
+
system "echo this is blog with lots of letters intended to go beyond the 76 chars that will be displayed by the preview functionnality of the draft manager > #{@draft_dir}/file1"
|
219
|
+
system "echo this is a blog > #{@draft_dir}/file2"
|
220
|
+
system "touch #{@draft_dir}/file3"
|
221
|
+
|
222
|
+
@manager = DraftManager.new
|
223
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should show the entire content of the draft" do
|
227
|
+
@manager.output('file1').should == "this is blog with lots of letters intended to go beyond the 76 chars that will be displayed by the preview functionnality of the draft manager\n"
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should display an empty string for an empty draft" do
|
231
|
+
@manager.output('file3').should == ''
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context "when adding an attribute" do
|
236
|
+
before :each do
|
237
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
238
|
+
f.write('{"draft.1":{}}')
|
239
|
+
end
|
240
|
+
|
241
|
+
system "touch #{@draft_dir}/draft.1"
|
242
|
+
@manager = DraftManager.new
|
243
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should add the attribute to the draft index" do
|
247
|
+
@manager.set_attribute('draft.1', "attr", "123")
|
248
|
+
@manager.index['draft.1']["attr"].should == "123"
|
249
|
+
end
|
250
|
+
|
251
|
+
it "should overwrite the value if the attribute already exists" do
|
252
|
+
@manager.set_attribute('draft.1', "attr", "123")
|
253
|
+
@manager.set_attribute('draft.1', "attr", "456")
|
254
|
+
@manager.index['draft.1']["attr"].should == "456"
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should output an error message if the file does not exist" do
|
258
|
+
STDERR.should_receive(:puts).with("draft filename asdf.asf does not exist\n")
|
259
|
+
@manager.set_attribute('asdf.asf', "attr", "456")
|
260
|
+
end
|
261
|
+
|
262
|
+
it "should save the draft index to disk" do
|
263
|
+
File.should_receive(:open).with("#{@draft_dir}/.draft_index", 'w')
|
264
|
+
@manager.set_attribute('draft.1', "attr", "123")
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
context "when adding a title" do
|
269
|
+
before :each do
|
270
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
271
|
+
f.write('{"draft.1":{},"draft.2":{}}')
|
272
|
+
end
|
273
|
+
|
274
|
+
system "touch #{@draft_dir}/draft.1"
|
275
|
+
system "touch #{@draft_dir}/draft.2"
|
276
|
+
@manager = DraftManager.new
|
277
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
278
|
+
end
|
279
|
+
|
280
|
+
it "should output an error message if the title is not unique" do
|
281
|
+
@manager.set_attribute('draft.1', "title", 'title')
|
282
|
+
|
283
|
+
STDERR.should_receive(:puts).with("title 'title' is not unique\n")
|
284
|
+
@manager.set_attribute('draft.2', "title", 'title')
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should not change the value of the previous title" do
|
288
|
+
@manager.set_attribute('draft.1', 'title', 'title')
|
289
|
+
@manager.set_attribute('draft.2', 'title', 'title2')
|
290
|
+
@manager.set_attribute('draft.2', 'title', 'title')
|
291
|
+
|
292
|
+
@manager.index['draft.2']["title"].should == 'title2'
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
context "when deleting an attribute" do
|
297
|
+
before :each do
|
298
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
299
|
+
f.write('{"draft.1":{"a":1,"b":2}}')
|
300
|
+
end
|
301
|
+
|
302
|
+
system "touch #{@draft_dir}/draft.1"
|
303
|
+
@manager = DraftManager.new
|
304
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
305
|
+
end
|
306
|
+
|
307
|
+
it "should remove the attribute from the draft index" do
|
308
|
+
@manager.delete_attribute('draft.1', :a)
|
309
|
+
@manager.index['draft.1']["a"].should == nil
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should output an error message if the file does not exist" do
|
313
|
+
STDERR.should_receive(:puts).with("draft filename asdf.asf does not exist\n")
|
314
|
+
@manager.delete_attribute('asdf.asf', :attr)
|
315
|
+
end
|
316
|
+
|
317
|
+
it "should save the draft index to disk" do
|
318
|
+
File.stub!(:open)
|
319
|
+
File.should_receive(:open).with("#{@draft_dir}/.draft_index", 'w')
|
320
|
+
@manager.delete_attribute('draft.1', :attr)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
context "when requesting the latest created draft" do
|
325
|
+
it "should return the latest draft filename" do
|
326
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
327
|
+
f.write({"draft.1" => {"creation_time" => "2010-10-10 15:30:12"},
|
328
|
+
"draft.2" => {"creation_time" => "2010-10-09 15:30:12"}}.to_json)
|
329
|
+
end
|
330
|
+
|
331
|
+
@manager = DraftManager.new
|
332
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
333
|
+
|
334
|
+
@manager.get_latest_created_draft().should == "draft.1"
|
335
|
+
end
|
336
|
+
|
337
|
+
it "should output an error message if there are no drafts saved" do
|
338
|
+
STDERR.should_receive(:puts).with("there is currently no saved index\n")
|
339
|
+
@manager.get_latest_created_draft
|
340
|
+
end
|
341
|
+
end
|
342
|
+
|
343
|
+
context "when requesting a draft by title" do
|
344
|
+
it "should return the the proper filename" do
|
345
|
+
File.open("#{@draft_dir}/.draft_index", 'w') do |f|
|
346
|
+
f.write({"draft.1" => {"title" => "title1"},
|
347
|
+
"draft.2" => {"title" => "title2"}}.to_json)
|
348
|
+
end
|
349
|
+
|
350
|
+
@manager = DraftManager.new
|
351
|
+
@manager.setup('gedit', @temp_dir, @draft_dir)
|
352
|
+
|
353
|
+
@manager.get_draft_by_title("title1").should == "draft.1"
|
354
|
+
@manager.get_draft_by_title("title2").should == "draft.2"
|
355
|
+
end
|
356
|
+
|
357
|
+
it "should output an error message if there are no drafts saved" do
|
358
|
+
STDERR.should_receive(:puts).with("there is currently no saved index\n")
|
359
|
+
@manager.get_draft_by_title("title2")
|
360
|
+
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
metadata
ADDED
@@ -0,0 +1,236 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Blux
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Louis Salin
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain:
|
16
|
+
- |
|
17
|
+
-----BEGIN CERTIFICATE-----
|
18
|
+
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApsb3Vp
|
19
|
+
cy5waGlsMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
|
20
|
+
b20wHhcNMTAxMDEwMjIzMTI4WhcNMTExMDEwMjIzMTI4WjBBMRMwEQYDVQQDDAps
|
21
|
+
b3Vpcy5waGlsMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
|
22
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD+iOXo0jnNOn73
|
23
|
+
uJyRsPSoLpVwzqmiYPqvM3kGAaPDDDk7FBwgQbZbxGBQb3jiM0NW7jn3IJOcnWOf
|
24
|
+
BeQzYKzsEHmoY+RbAHKvff1OZZFk+1xpGfIHhwZ6zRtDjFDkNvBqs6YR4kKEjTZD
|
25
|
+
zPaqBFIUxAiNMF5VDRrgtZkpSVi1vUWOh/TmCZxdZNDtVeGsvNqWo5dUyCT5Xihy
|
26
|
+
bkWXOfWkdiKp3mQwmQIeJ+0CxfJooAo7xRGdrlPqHC4TMJeq6Clv6gVMkdGC/5T6
|
27
|
+
8bjaM8ISTrg1JxrHhrpTqFCmMOuI4VHJBYki/5xPfd99uL1ZI7nNWL0cLwv7ETP1
|
28
|
+
53wBSBhHAgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFCJZDYpaQwUEcx4p
|
29
|
+
pke28LvXVgXqMAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEA+1z4hGmh
|
30
|
+
TR5IyITJ/HKAJSrcim3cWijHSyXCl/e4bSGLgZ5Wyr6lEiPK5Mtr2CdugRYUG25H
|
31
|
+
uPTVMgAIYagenqYmEMFdfOoElsDi+hBnMzgBc+y/dJQ+QgA4Gw3bUJAZioCnMrAF
|
32
|
+
eQzKM1lTl9G9jUz7AoIxN2IcW+p7yX00eBAsMbwlnaCHICzT2wehfBi6ePkPyWmX
|
33
|
+
mAFlAPy2kCmBAkHFfSZLC/9dt2IXmZWYJAPOZQILt2SwiGJgqEleuNVHHGzpWnLO
|
34
|
+
QtvFR/GYZmDeXEPoI5rYR539S0snVVp3z6NCnca/LGFsMRTmk02nCs4j8KUb5Dq1
|
35
|
+
1GuoIVBODMvF3w==
|
36
|
+
-----END CERTIFICATE-----
|
37
|
+
|
38
|
+
date: 2010-10-10 00:00:00 -05:00
|
39
|
+
default_executable:
|
40
|
+
dependencies:
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: OptionParser
|
43
|
+
prerelease: false
|
44
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 5
|
52
|
+
- 1
|
53
|
+
version: 0.5.1
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id001
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: atom-tools
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 2
|
66
|
+
- 0
|
67
|
+
- 5
|
68
|
+
version: 2.0.5
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id002
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: json
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 1
|
81
|
+
- 4
|
82
|
+
- 6
|
83
|
+
version: 1.4.6
|
84
|
+
type: :runtime
|
85
|
+
version_requirements: *id003
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: RedCloth
|
88
|
+
prerelease: false
|
89
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 4
|
96
|
+
- 2
|
97
|
+
- 3
|
98
|
+
version: 4.2.3
|
99
|
+
type: :runtime
|
100
|
+
version_requirements: *id004
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: OptionParser
|
103
|
+
prerelease: false
|
104
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
- 5
|
112
|
+
- 1
|
113
|
+
version: 0.5.1
|
114
|
+
type: :development
|
115
|
+
version_requirements: *id005
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
name: atom-tools
|
118
|
+
prerelease: false
|
119
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
segments:
|
125
|
+
- 2
|
126
|
+
- 0
|
127
|
+
- 5
|
128
|
+
version: 2.0.5
|
129
|
+
type: :development
|
130
|
+
version_requirements: *id006
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: json
|
133
|
+
prerelease: false
|
134
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
segments:
|
140
|
+
- 1
|
141
|
+
- 4
|
142
|
+
- 6
|
143
|
+
version: 1.4.6
|
144
|
+
type: :development
|
145
|
+
version_requirements: *id007
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: RedCloth
|
148
|
+
prerelease: false
|
149
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
150
|
+
none: false
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
segments:
|
155
|
+
- 4
|
156
|
+
- 2
|
157
|
+
- 3
|
158
|
+
version: 4.2.3
|
159
|
+
type: :development
|
160
|
+
version_requirements: *id008
|
161
|
+
description: An offline blog manager
|
162
|
+
email: louis.phil@gmail.com
|
163
|
+
executables:
|
164
|
+
- blux
|
165
|
+
- blux_textile_to_html
|
166
|
+
- blux_wp_publish
|
167
|
+
extensions: []
|
168
|
+
|
169
|
+
extra_rdoc_files:
|
170
|
+
- COPYING
|
171
|
+
- README.markdown
|
172
|
+
- bin/blux
|
173
|
+
- bin/blux_textile_to_html
|
174
|
+
- bin/blux_wp_publish
|
175
|
+
- lib/blog_manager.rb
|
176
|
+
- lib/blux_config_reader.rb
|
177
|
+
- lib/blux_option_parser.rb
|
178
|
+
- lib/draft_manager.rb
|
179
|
+
- lib/indexer.rb
|
180
|
+
files:
|
181
|
+
- COPYING
|
182
|
+
- Manifest
|
183
|
+
- README.markdown
|
184
|
+
- Rakefile
|
185
|
+
- bin/blux
|
186
|
+
- bin/blux_textile_to_html
|
187
|
+
- bin/blux_wp_publish
|
188
|
+
- lib/blog_manager.rb
|
189
|
+
- lib/blux_config_reader.rb
|
190
|
+
- lib/blux_option_parser.rb
|
191
|
+
- lib/draft_manager.rb
|
192
|
+
- lib/indexer.rb
|
193
|
+
- spec/blog_manager_spec.rb
|
194
|
+
- spec/blux_config_reader_spec.rb
|
195
|
+
- spec/draft_manager_spec.rb
|
196
|
+
- Blux.gemspec
|
197
|
+
has_rdoc: true
|
198
|
+
homepage: http://github.com/louissalin/blux
|
199
|
+
licenses: []
|
200
|
+
|
201
|
+
post_install_message:
|
202
|
+
rdoc_options:
|
203
|
+
- --line-numbers
|
204
|
+
- --inline-source
|
205
|
+
- --title
|
206
|
+
- Blux
|
207
|
+
- --main
|
208
|
+
- README.markdown
|
209
|
+
require_paths:
|
210
|
+
- lib
|
211
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
212
|
+
none: false
|
213
|
+
requirements:
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
segments:
|
217
|
+
- 0
|
218
|
+
version: "0"
|
219
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
|
+
none: false
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
segments:
|
225
|
+
- 1
|
226
|
+
- 2
|
227
|
+
version: "1.2"
|
228
|
+
requirements: []
|
229
|
+
|
230
|
+
rubyforge_project: blux
|
231
|
+
rubygems_version: 1.3.7
|
232
|
+
signing_key:
|
233
|
+
specification_version: 3
|
234
|
+
summary: An offline blog manager
|
235
|
+
test_files: []
|
236
|
+
|