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.
@@ -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
+