Blux 0.0.3 → 0.0.4
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 +0 -0
- data/Blux.gemspec +6 -5
- data/Manifest +2 -2
- data/README.markdown +0 -3
- data/Rakefile +1 -1
- data/bin/blux +96 -50
- data/lib/blog_manager.rb +32 -15
- data/lib/blux_config_reader.rb +11 -16
- data/lib/blux_option_parser.rb +4 -0
- data/lib/draft_manager.rb +35 -17
- data/lib/indexer.rb +11 -8
- data/{bin/blux_textile_to_html → lib/textile_to_html.rb} +0 -0
- data/{bin/blux_wp_publish → lib/wp_publish.rb} +8 -1
- data/spec/blog_manager_spec.rb +13 -4
- data/spec/blux_config_reader_spec.rb +49 -15
- data/spec/draft_manager_spec.rb +14 -20
- metadata +7 -9
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/Blux.gemspec
CHANGED
@@ -2,17 +2,18 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{Blux}
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Louis Salin"]
|
9
9
|
s.cert_chain = ["/home/louis/Documents/gem_keys/gem-public_cert.pem"]
|
10
|
-
s.date = %q{2010-10-
|
10
|
+
s.date = %q{2010-10-23}
|
11
|
+
s.default_executable = %q{blux}
|
11
12
|
s.description = %q{An offline blog manager}
|
12
13
|
s.email = %q{louis.phil@gmail.com}
|
13
|
-
s.executables = ["blux"
|
14
|
-
s.extra_rdoc_files = ["COPYING", "README.markdown", "bin/blux", "
|
15
|
-
s.files = ["COPYING", "Manifest", "README.markdown", "Rakefile", "bin/blux", "
|
14
|
+
s.executables = ["blux"]
|
15
|
+
s.extra_rdoc_files = ["COPYING", "README.markdown", "bin/blux", "lib/textile_to_html.rb", "lib/wp_publish.rb", "lib/blog_manager.rb", "lib/blux_config_reader.rb", "lib/blux_option_parser.rb", "lib/draft_manager.rb", "lib/indexer.rb"]
|
16
|
+
s.files = ["COPYING", "Manifest", "README.markdown", "Rakefile", "bin/blux", "lib/textile_to_html.rb", "lib/wp_publish.rb", "lib/blog_manager.rb", "lib/blux_config_reader.rb", "lib/blux_option_parser.rb", "lib/draft_manager.rb", "lib/indexer.rb", "spec/blog_manager_spec.rb", "spec/blux_config_reader_spec.rb", "spec/draft_manager_spec.rb", "Blux.gemspec"]
|
16
17
|
s.homepage = %q{http://github.com/louissalin/blux}
|
17
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Blux", "--main", "README.markdown"]
|
18
19
|
s.require_paths = ["lib"]
|
data/Manifest
CHANGED
data/README.markdown
CHANGED
@@ -10,7 +10,6 @@ That's it!
|
|
10
10
|
Blux reads its configuration info from ~/.bluxrc. The first time you run blux, it will create this file for you, but will immediately complain about missing configuration items. Use the following configuration example for a Wordpress blog and edit each line as needed:
|
11
11
|
|
12
12
|
editor: vim
|
13
|
-
html_converter: blux_textile_to_html
|
14
13
|
|
15
14
|
blog: myWordpressBlog
|
16
15
|
author_name: Mr. Author
|
@@ -19,8 +18,6 @@ Blux reads its configuration info from ~/.bluxrc. The first time you run blux,
|
|
19
18
|
|
20
19
|
**editor:** this is the shell command that will be executed to launch your editor of choice
|
21
20
|
|
22
|
-
**html_converter:** Blux will use this shell command to convert your blog draft to html. In the example above, Blux will use the blux_textile_to_html script, which is included with this application. The script will transform your post, written in the textile markup language, and convert it to html.
|
23
|
-
|
24
21
|
**blog:** this is your Wordpress blog ID
|
25
22
|
|
26
23
|
**author_name:** the name of the author
|
data/Rakefile
CHANGED
data/bin/blux
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
# You should have received a copy of the GNU General Public License
|
19
19
|
# along with Blux. If not, see <http://www.gnu.org/licenses/>.
|
20
20
|
|
21
|
+
require 'atom/entry' # sudo gem install atom-tools
|
21
22
|
require "#{File.dirname(__FILE__)}/../lib/blux_option_parser.rb"
|
22
23
|
require "#{File.dirname(__FILE__)}/../lib/blog_manager.rb"
|
23
24
|
|
@@ -25,7 +26,8 @@ def validate_command(options)
|
|
25
26
|
if (options.command != nil)
|
26
27
|
yield options
|
27
28
|
else
|
28
|
-
|
29
|
+
msg = "No command specified. Use -h for a list of possible commands"
|
30
|
+
raise RuntimeError, msg
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -33,7 +35,8 @@ def validate_set_options(options)
|
|
33
35
|
if options.attributes.length.modulo(2) == 0
|
34
36
|
yield options.attributes[0], options.attributes[1]
|
35
37
|
else
|
36
|
-
|
38
|
+
msg = "Attribute error: you must specify an attribute name and a value."
|
39
|
+
raise RuntimeError, msg
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
@@ -46,62 +49,105 @@ def check_filename(options, blog_manager)
|
|
46
49
|
if filename != nil
|
47
50
|
yield filename
|
48
51
|
else
|
49
|
-
|
52
|
+
msg = "Please specify the draft file you want to work with.\n"
|
53
|
+
msg = msg + " Try using the --latest option to use the latest draft.\n"
|
54
|
+
msg = msg + " Or try to get a draft with a specific title with the --title option."
|
55
|
+
|
56
|
+
raise RuntimeError, msg
|
50
57
|
end
|
51
58
|
end
|
52
59
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
mgr.start
|
60
|
+
begin
|
61
|
+
validate_command(BluxOptionParser.parse(ARGV)) do |options|
|
62
|
+
draft_manager = DraftManager.new
|
63
|
+
mgr = BlogManager.new(draft_manager, :verbose => options.verbose)
|
64
|
+
mgr.load_config
|
65
|
+
mgr.start
|
60
66
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
when :list
|
69
|
-
mgr.draft_manager.list.each do |item|
|
70
|
-
break if options.filename != nil && options.filename != item
|
71
|
-
puts "#{item}"
|
72
|
-
puts " #{mgr.draft_manager.show_info(item)}" if options.list_details
|
73
|
-
puts " #{mgr.draft_manager.show_preview(item)}" if options.list_preview
|
74
|
-
end
|
75
|
-
when :set
|
76
|
-
check_filename(options, mgr) do |filename|
|
77
|
-
validate_set_options(options) do |attribute, value|
|
78
|
-
mgr.draft_manager.set_attribute(filename, attribute, value)
|
67
|
+
case options.command
|
68
|
+
when :new
|
69
|
+
mgr.draft_manager.create_draft
|
70
|
+
when :edit
|
71
|
+
check_filename(options, mgr) do |filename|
|
72
|
+
mgr.draft_manager.edit_draft filename
|
79
73
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
74
|
+
when :list
|
75
|
+
mgr.draft_manager.list.each do |item|
|
76
|
+
break if options.filename != nil && options.filename != item
|
77
|
+
puts "#{item}"
|
78
|
+
puts " #{mgr.draft_manager.show_info(item)}" if options.list_details
|
79
|
+
puts " #{mgr.draft_manager.show_preview(item)}" if options.list_preview
|
80
|
+
end
|
81
|
+
when :set
|
82
|
+
check_filename(options, mgr) do |filename|
|
83
|
+
validate_set_options(options) do |attribute, value|
|
84
|
+
mgr.draft_manager.set_attribute(filename, attribute, value)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
when :out
|
88
|
+
check_filename(options, mgr) do |filename|
|
89
|
+
STDOUT.puts(mgr.draft_manager.output filename)
|
90
|
+
end
|
91
|
+
when :convert
|
92
|
+
check_filename(options, mgr) do |filename|
|
93
|
+
convert_cmd = "ruby #{File.dirname(__FILE__)}/../lib/textile_to_html.rb"
|
94
|
+
system "blux --out -f #{filename} | #{convert_cmd}"
|
95
|
+
end
|
96
|
+
when :publish
|
97
|
+
check_filename(options, mgr) do |filename|
|
98
|
+
puts "publishing" if options.verbose
|
99
|
+
mgr.publish filename
|
100
|
+
end
|
101
|
+
when :update
|
102
|
+
check_filename(options, mgr) do |filename|
|
103
|
+
puts "updating" if options.verbose
|
104
|
+
mgr.update filename
|
105
|
+
end
|
106
|
+
when :set_edit_url
|
107
|
+
check_filename(options, mgr) do |filename|
|
108
|
+
switch = nil
|
109
|
+
entry = Array.new
|
110
|
+
response = Array.new
|
111
|
+
url = ""
|
112
|
+
|
113
|
+
ARGF.each do |line|
|
114
|
+
if line == "--entry--\n"
|
115
|
+
switch = :entry
|
116
|
+
next
|
117
|
+
elsif line == "--response--\n"
|
118
|
+
switch = :response
|
119
|
+
next
|
120
|
+
elsif line == "--url--\n"
|
121
|
+
switch = :url
|
122
|
+
next
|
123
|
+
end
|
124
|
+
|
125
|
+
case (switch)
|
126
|
+
when :entry
|
127
|
+
entry << line
|
128
|
+
when :response
|
129
|
+
response << line
|
130
|
+
when :url
|
131
|
+
url = line
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
entry_text = entry.join
|
136
|
+
puts "entry:" if options.verbose
|
137
|
+
puts entry_text if options.verbose
|
138
|
+
|
139
|
+
response_text = response.join
|
140
|
+
puts "response:" if options.verbose
|
141
|
+
puts response_text if options.verbose
|
142
|
+
|
102
143
|
mgr.set_attribute(filename, 'edit_url', url.strip)
|
103
144
|
end
|
145
|
+
when :version
|
146
|
+
puts "0.0.4"
|
104
147
|
end
|
105
148
|
end
|
149
|
+
rescue
|
150
|
+
STDERR << "fatal error: #{$!}\n"
|
151
|
+
exit 1
|
106
152
|
end
|
107
153
|
|
data/lib/blog_manager.rb
CHANGED
@@ -45,21 +45,20 @@ class BlogManager
|
|
45
45
|
|
46
46
|
def start
|
47
47
|
unless Dir.exists?(@blux_dir)
|
48
|
-
puts "creating #{@blux_dir}\n" if @verbose
|
49
48
|
Dir.mkdir(@blux_dir)
|
50
49
|
end
|
51
50
|
|
52
51
|
unless Dir.exists?(@draft_dir)
|
53
|
-
puts "creating #{@draft_dir}\n" if @verbose
|
54
52
|
Dir.mkdir(@draft_dir)
|
55
53
|
end
|
56
54
|
|
57
55
|
unless Dir.exists?(@blux_tmp_dir)
|
58
|
-
puts "creating #{@blux_tmp_dir}\n" if @verbose
|
59
56
|
Dir.mkdir(@blux_tmp_dir)
|
60
57
|
end
|
61
58
|
|
62
59
|
load_index
|
60
|
+
puts "blog index:\n" if @verbose
|
61
|
+
print_index if @verbose
|
63
62
|
end
|
64
63
|
|
65
64
|
def load_config
|
@@ -72,14 +71,25 @@ class BlogManager
|
|
72
71
|
def publish(filename)
|
73
72
|
title = @draft_manager.get_attribute(filename, "title") || 'no title'
|
74
73
|
|
75
|
-
|
74
|
+
convert_cmd = "blux --convert -f #{filename}"
|
75
|
+
publish_cmd = "ruby #{File.dirname(__FILE__)}/wp_publish.rb -t \"#{title}\" --config #{@blux_rc}"
|
76
|
+
set_url_cmd = "blux --set_edit_url -f #{filename}"
|
77
|
+
|
78
|
+
cmd = "#{convert_cmd} | #{publish_cmd} | #{set_url_cmd}"
|
76
79
|
cmd = cmd + " --verbose" if @verbose
|
77
80
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
if system cmd
|
82
|
+
load_index
|
83
|
+
set_attribute(filename, :published_time, Time.now)
|
84
|
+
else
|
85
|
+
msg = "failed to publish...\n"
|
86
|
+
msg = msg + ' use the --verbose option for more information' if !@verbose
|
87
|
+
|
88
|
+
raise SystemExit, msg
|
89
|
+
end
|
90
|
+
|
91
|
+
puts "blog index:\n" if @verbose
|
92
|
+
print_index if @verbose
|
83
93
|
end
|
84
94
|
|
85
95
|
def update(filename)
|
@@ -88,12 +98,19 @@ class BlogManager
|
|
88
98
|
|
89
99
|
raise "couldn't find an edit url for the draft: #{filename}" unless url
|
90
100
|
|
91
|
-
|
101
|
+
publish_cmd = "ruby #{File.dirname(__FILE__)}/wp_publish.rb"
|
102
|
+
cmd = "blux --convert -f #{filename} | #{publish_cmd} -t \"#{title}\" --update #{url} --config #{@blux_rc}"
|
103
|
+
|
104
|
+
if system cmd
|
105
|
+
set_attribute(filename, :published_time, Time.now)
|
106
|
+
else
|
107
|
+
msg = "failed to update...\n"
|
108
|
+
msg = msg + ' use the --verbose option for more information' if !@verbose
|
109
|
+
|
110
|
+
raise SystemExit, msg
|
111
|
+
end
|
92
112
|
|
93
|
-
puts
|
94
|
-
|
95
|
-
|
96
|
-
set_attribute(filename, :published_time, Time.now)
|
113
|
+
puts "blog index:\n" if @verbose
|
114
|
+
print_index if @verbose
|
97
115
|
end
|
98
|
-
|
99
116
|
end
|
data/lib/blux_config_reader.rb
CHANGED
@@ -17,12 +17,11 @@
|
|
17
17
|
# You should have received a copy of the GNU General Public License
|
18
18
|
# along with Blux. If not, see <http://www.gnu.org/licenses/>.
|
19
19
|
class BluxConfigurationReader
|
20
|
-
attr_reader :launch_editor_cmd
|
20
|
+
attr_reader :launch_editor_cmd
|
21
21
|
attr_reader :blog, :author_name, :user_name, :password
|
22
22
|
|
23
23
|
def load_config(blux_rc, verbose = false)
|
24
24
|
unless File.exists? blux_rc
|
25
|
-
puts "creating #{blux_rc}\n" if verbose
|
26
25
|
system "touch #{blux_rc}"
|
27
26
|
end
|
28
27
|
|
@@ -30,10 +29,6 @@ class BluxConfigurationReader
|
|
30
29
|
match = line =~ /^editor:\s(.+)$/
|
31
30
|
@launch_editor_cmd = $1
|
32
31
|
|
33
|
-
line = `grep html_converter: #{blux_rc}`
|
34
|
-
match = line =~ /^html_converter:\s(.+)$/
|
35
|
-
@html_converter_cmd = $1
|
36
|
-
|
37
32
|
line = `grep blog: #{blux_rc}`
|
38
33
|
match = line =~ /^blog:\s(.+)$/
|
39
34
|
@blog = $1
|
@@ -50,34 +45,34 @@ class BluxConfigurationReader
|
|
50
45
|
match = line =~ /^password:\s(.+)$/
|
51
46
|
@password = $1
|
52
47
|
|
53
|
-
puts "editor command: #{@launch_editor_cmd}\n" if verbose
|
54
48
|
validate
|
55
49
|
end
|
56
50
|
|
57
51
|
private
|
58
52
|
def validate
|
59
53
|
if (@launch_editor_cmd == nil)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
if (@html_converter_cmd == nil)
|
64
|
-
STDERR.puts "please specify an html converter in .bluxrc: html_converter: [your converter command of choice]\n"
|
54
|
+
msg = "please specify an editor in .bluxrc:\n editor: [your editor of choice]"
|
55
|
+
raise RuntimeError, msg
|
65
56
|
end
|
66
57
|
|
67
58
|
if (@blog == nil)
|
68
|
-
|
59
|
+
msg = "please specify your wordpress blog name in .bluxrc:\n blog: [your blog]"
|
60
|
+
raise RuntimeError, msg
|
69
61
|
end
|
70
62
|
|
71
63
|
if (@author_name == nil)
|
72
|
-
|
64
|
+
msg = "please specify an author name in .bluxrc:\n author_name: [your name]"
|
65
|
+
raise RuntimeError, msg
|
73
66
|
end
|
74
67
|
|
75
68
|
if (@user_name == nil)
|
76
|
-
|
69
|
+
msg = "please specify your wordpress user name in .bluxrc:\n user_name: [your user name]"
|
70
|
+
raise RuntimeError, msg
|
77
71
|
end
|
78
72
|
|
79
73
|
if (@password == nil)
|
80
|
-
|
74
|
+
msg = "please specify your wordpress password in .bluxrc:\n password: [your password]"
|
75
|
+
raise RuntimeError, msg
|
81
76
|
end
|
82
77
|
end
|
83
78
|
end
|
data/lib/blux_option_parser.rb
CHANGED
data/lib/draft_manager.rb
CHANGED
@@ -26,6 +26,7 @@ class DraftManager
|
|
26
26
|
attr_reader :launch_editor_cmd
|
27
27
|
attr_reader :temp_dir, :draft_dir
|
28
28
|
attr_reader :index
|
29
|
+
attr_reader :index_file
|
29
30
|
|
30
31
|
include BluxIndexer
|
31
32
|
|
@@ -37,39 +38,56 @@ class DraftManager
|
|
37
38
|
@draft_dir = draft_dir
|
38
39
|
@index_file = "#{@draft_dir}/.draft_index"
|
39
40
|
|
40
|
-
|
41
|
+
value = true
|
42
|
+
value = system "touch #{@index_file}" unless File.exists? @index_file
|
41
43
|
|
42
|
-
|
44
|
+
if value
|
45
|
+
load_index
|
46
|
+
print_index if @verbose
|
47
|
+
else
|
48
|
+
msg = 'could not create the draft index file'
|
49
|
+
raise RuntimeError, msg
|
50
|
+
end
|
43
51
|
end
|
44
52
|
|
45
53
|
def create_draft
|
46
54
|
temp_file = Tempfile.new('draft', @temp_dir)
|
47
55
|
temp_file.close
|
48
56
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
if system "#{@launch_editor_cmd} #{temp_file.path}"
|
58
|
+
if temp_file.size > 0
|
59
|
+
move_temp_file temp_file.path
|
60
|
+
end
|
61
|
+
else
|
62
|
+
msg = "couldn't launch editor with command #{@launch_editor_cmd}"
|
63
|
+
raise RuntimeError, msg
|
64
|
+
end
|
56
65
|
|
57
|
-
|
58
|
-
|
66
|
+
print_index if @verbose
|
67
|
+
end
|
68
|
+
|
69
|
+
def move_temp_file(tempfile)
|
70
|
+
if system "mv #{tempfile} #{@draft_dir}"
|
71
|
+
index_key = File.basename(tempfile)
|
59
72
|
@index[index_key] = {:creation_time => Time.now.to_s}
|
60
73
|
save_index
|
74
|
+
else
|
75
|
+
msg = "failed to move the temp file to the draft folder"
|
76
|
+
raise RuntimeError, msg
|
61
77
|
end
|
62
78
|
end
|
63
79
|
|
64
80
|
def edit_draft(filename)
|
65
|
-
puts "editing draft #{filename}" if @verbose
|
66
|
-
|
67
81
|
check_filename(filename) do |draft_filename|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
82
|
+
if system "#{@launch_editor_cmd} #{draft_filename}"
|
83
|
+
set_attribute(filename, "edited_time", Time.now.to_s)
|
84
|
+
else
|
85
|
+
msg = "couldn't launch editor with command #{@launch_editor_cmd}"
|
86
|
+
raise RuntimeError, msg
|
87
|
+
end
|
72
88
|
end
|
89
|
+
|
90
|
+
print_index if @verbose
|
73
91
|
end
|
74
92
|
|
75
93
|
def list
|
data/lib/indexer.rb
CHANGED
@@ -25,12 +25,13 @@ module BluxIndexer
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def check_filename(filename)
|
28
|
-
draft_filename = "#{
|
28
|
+
draft_filename = "#{self.draft_dir}/#{filename}"
|
29
29
|
|
30
30
|
if (File.exists?(draft_filename))
|
31
31
|
yield draft_filename
|
32
32
|
else
|
33
|
-
|
33
|
+
msg = "draft filename #{filename} does not exist"
|
34
|
+
raise RuntimeError, msg
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
@@ -42,14 +43,13 @@ module BluxIndexer
|
|
42
43
|
unique_title = false if (@index[key][attr_key.to_s] == attr_val)
|
43
44
|
end
|
44
45
|
|
45
|
-
STDERR
|
46
|
-
|
46
|
+
STDERR << "warning: title '#{attr_val}' is not unique\n" unless unique_title
|
47
|
+
true
|
47
48
|
end
|
48
49
|
|
49
50
|
def set_attribute(filename, key, val)
|
50
51
|
check_index(filename) do |index|
|
51
52
|
if check_title(filename, key, val)
|
52
|
-
puts "setting attribute #{key} to #{val} in index #{@index_file}" if @verbose
|
53
53
|
index[key.to_s] = val
|
54
54
|
save_index
|
55
55
|
end
|
@@ -73,12 +73,12 @@ module BluxIndexer
|
|
73
73
|
if @index.keys.length > 0
|
74
74
|
yield
|
75
75
|
else
|
76
|
-
|
76
|
+
msg = "there is currently no saved index"
|
77
|
+
raise RuntimeError, msg
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
80
81
|
def load_index
|
81
|
-
puts "creating #{@index_file}\n" if @verbose
|
82
82
|
system "touch #{@index_file}" unless File.exists? @index_file
|
83
83
|
|
84
84
|
str = ''
|
@@ -90,9 +90,12 @@ module BluxIndexer
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def save_index
|
93
|
-
puts "saving index: #{@index.to_json}\n" if @verbose
|
94
93
|
File.open(@index_file, 'w') do |f|
|
95
94
|
f.write(@index.to_json) if @index
|
96
95
|
end
|
97
96
|
end
|
97
|
+
|
98
|
+
def print_index
|
99
|
+
puts @index.to_json + "\n" if @verbose
|
100
|
+
end
|
98
101
|
end
|
File without changes
|
@@ -10,7 +10,7 @@ require 'optparse'
|
|
10
10
|
require 'net/http'
|
11
11
|
require 'atom/entry' # sudo gem install atom-tools
|
12
12
|
require 'atom/collection'
|
13
|
-
require "#{File.dirname(__FILE__)}
|
13
|
+
require "#{File.dirname(__FILE__)}/blux_config_reader"
|
14
14
|
|
15
15
|
|
16
16
|
#
|
@@ -134,6 +134,13 @@ h.always_auth = :basic
|
|
134
134
|
c = Atom::Collection.new(base + "/posts", h)
|
135
135
|
if command == :post
|
136
136
|
res = c.post! entry
|
137
|
+
puts "--entry--"
|
138
|
+
puts entry
|
139
|
+
|
140
|
+
puts "--response--"
|
141
|
+
puts res
|
142
|
+
|
143
|
+
puts "--url--"
|
137
144
|
puts Atom::Entry.parse(res.read_body).edit_url
|
138
145
|
elsif command == :put
|
139
146
|
entry.edit_url = entry_id
|
data/spec/blog_manager_spec.rb
CHANGED
@@ -9,6 +9,7 @@ describe BlogManager do
|
|
9
9
|
@draft_dir = "#{@blux_dir}/draft"
|
10
10
|
|
11
11
|
Dir.mkdir(@blux) unless Dir.exists?(@blux)
|
12
|
+
Dir.mkdir(@draft_dir) unless Dir.exists?(@draft_dir)
|
12
13
|
|
13
14
|
def STDERR.puts(str) end
|
14
15
|
|
@@ -26,7 +27,7 @@ describe BlogManager do
|
|
26
27
|
|
27
28
|
context "loading with no config file" do
|
28
29
|
before :each do
|
29
|
-
@manager.load_config
|
30
|
+
lambda {@manager.load_config}.should raise_error
|
30
31
|
end
|
31
32
|
|
32
33
|
it "should create an empty config file it doesn't exist" do
|
@@ -103,22 +104,25 @@ describe BlogManager do
|
|
103
104
|
f.write('{"draft5.67":{"a":1,"b":2}}')
|
104
105
|
end
|
105
106
|
|
107
|
+
@draft_mgr.stub!(:get_attribute).and_return("title")
|
108
|
+
|
106
109
|
@manager.load_config
|
107
110
|
@manager.start
|
108
|
-
@manager.stub!(:system).and_return(nil)
|
109
111
|
|
110
112
|
system "touch #{@manager.draft_dir}/draft5.67"
|
113
|
+
|
114
|
+
@manager.stub!(:system).and_return(true)
|
111
115
|
end
|
112
116
|
|
113
117
|
it "should send the proper command" do
|
114
|
-
@manager.should_receive(:system).with("blux --convert -f draft5.67 |
|
118
|
+
@manager.should_receive(:system).with("blux --convert -f draft5.67 | ruby #{File.dirname(__FILE__)[0..-6]}/lib/wp_publish.rb -t title --config #{@blux_rc} | blux --set_edit_url -f draft5.67")
|
115
119
|
@manager.publish 'draft5.67'
|
116
120
|
end
|
117
121
|
|
118
122
|
it "should send the command with the title included if it exists" do
|
119
123
|
@draft_mgr.stub!(:get_attribute).and_return('bla')
|
120
124
|
|
121
|
-
@manager.should_receive(:system).with("blux --convert -f draft5.67 |
|
125
|
+
@manager.should_receive(:system).with("blux --convert -f draft5.67 | ruby #{File.dirname(__FILE__)[0..-6]}/lib/wp_publish.rb -t bla --config #{@blux_rc} | blux --set_edit_url -f draft5.67")
|
122
126
|
@manager.publish 'draft5.67'
|
123
127
|
end
|
124
128
|
|
@@ -145,6 +149,11 @@ describe BlogManager do
|
|
145
149
|
File.open(@blux_rc, 'w') do |f|
|
146
150
|
f.puts "editor: gedit"
|
147
151
|
f.puts "html_converter: blux_textile_to_html"
|
152
|
+
|
153
|
+
f.puts "blog: louis"
|
154
|
+
f.puts "author_name: louis"
|
155
|
+
f.puts "user_name: louis"
|
156
|
+
f.puts "password: password"
|
148
157
|
end
|
149
158
|
end
|
150
159
|
end
|
@@ -22,10 +22,6 @@ describe BluxConfigurationReader do
|
|
22
22
|
@reader.launch_editor_cmd.should == 'gedit'
|
23
23
|
end
|
24
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
25
|
it "should read the blog from the config file" do
|
30
26
|
@reader.blog.should == 'myownblog'
|
31
27
|
end
|
@@ -43,23 +39,55 @@ describe BluxConfigurationReader do
|
|
43
39
|
end
|
44
40
|
end
|
45
41
|
|
46
|
-
context "loading the
|
42
|
+
context "loading the config with missing items" do
|
47
43
|
before :each do
|
48
44
|
@blux_rc = "#{File.dirname(__FILE__)}/.bluxrc"
|
45
|
+
@reader = BluxConfigurationReader.new
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should raise an exception when the editor is missing" do
|
49
49
|
create_empty_config
|
50
|
+
lambda {@reader.load_config @blux_rc}.should raise_error("please specify an editor in .bluxrc:\n editor: [your editor of choice]")
|
51
|
+
end
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
+
it "should raise an exception when the blog name is missing" do
|
54
|
+
lines = ["editor: gedit",
|
55
|
+
"author_name: Author Bob",
|
56
|
+
"user_name: this_user",
|
57
|
+
"password: pass123"]
|
58
|
+
|
59
|
+
create_config_with lines
|
60
|
+
lambda {@reader.load_config @blux_rc}.should raise_error("please specify your wordpress blog name in .bluxrc:\n blog: [your blog]")
|
53
61
|
end
|
54
62
|
|
55
|
-
it "should
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
@reader.load_config @blux_rc
|
63
|
+
it "should raise an exception when the author name is missing" do
|
64
|
+
lines = ["editor: gedit",
|
65
|
+
"blog: myownblog",
|
66
|
+
"user_name: this_user",
|
67
|
+
"password: pass123"]
|
68
|
+
|
69
|
+
create_config_with lines
|
70
|
+
lambda {@reader.load_config @blux_rc}.should raise_error("please specify an author name in .bluxrc:\n author_name: [your name]")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should raise an exception when the user name is missing" do
|
74
|
+
lines = ["editor: gedit",
|
75
|
+
"blog: myownblog",
|
76
|
+
"author_name: Author Bob",
|
77
|
+
"password: pass123"]
|
78
|
+
|
79
|
+
create_config_with lines
|
80
|
+
lambda {@reader.load_config @blux_rc}.should raise_error("please specify your wordpress user name in .bluxrc:\n user_name: [your user name]")
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should raise an exception when the password is missing" do
|
84
|
+
lines = ["editor: gedit",
|
85
|
+
"blog: myownblog",
|
86
|
+
"author_name: Author Bob",
|
87
|
+
"user_name: this_user"]
|
88
|
+
|
89
|
+
create_config_with lines
|
90
|
+
lambda {@reader.load_config @blux_rc}.should raise_error("please specify your wordpress password in .bluxrc:\n password: [your password]")
|
63
91
|
end
|
64
92
|
end
|
65
93
|
|
@@ -68,6 +96,12 @@ describe BluxConfigurationReader do
|
|
68
96
|
end
|
69
97
|
end
|
70
98
|
|
99
|
+
def create_config_with(lines)
|
100
|
+
File.open(@blux_rc, 'w') do |f|
|
101
|
+
lines.each {|l| f.puts l}
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
71
105
|
def create_config
|
72
106
|
File.open(@blux_rc, 'w') do |f|
|
73
107
|
f.puts "editor: gedit"
|
data/spec/draft_manager_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe DraftManager do
|
|
10
10
|
Dir.mkdir(@blux_dir) unless Dir.exists?(@blux_dir)
|
11
11
|
Dir.mkdir(@temp_dir) unless Dir.exists?(@temp_dir)
|
12
12
|
Dir.mkdir(@draft_dir) unless Dir.exists?(@draft_dir)
|
13
|
-
|
13
|
+
|
14
14
|
def STDERR.puts(str) end
|
15
15
|
@manager = DraftManager.new()
|
16
16
|
@manager.setup('gedit', @temp_dir, @draft_dir)
|
@@ -47,7 +47,7 @@ describe DraftManager do
|
|
47
47
|
|
48
48
|
context "when creating a new draft" do
|
49
49
|
before :each do
|
50
|
-
@manager.stub!(:system).and_return(
|
50
|
+
@manager.stub!(:system).and_return(true)
|
51
51
|
end
|
52
52
|
|
53
53
|
after :each do
|
@@ -91,7 +91,7 @@ describe DraftManager do
|
|
91
91
|
|
92
92
|
context "when saving a new draft" do
|
93
93
|
before :each do
|
94
|
-
@manager.stub!(:system).and_return(
|
94
|
+
@manager.stub!(:system).and_return(true)
|
95
95
|
|
96
96
|
class Tempfile
|
97
97
|
def size() 123 end
|
@@ -123,7 +123,7 @@ describe DraftManager do
|
|
123
123
|
|
124
124
|
@manager = DraftManager.new
|
125
125
|
@manager.setup('gedit', @temp_dir, @draft_dir)
|
126
|
-
@manager.stub!(:system).and_return(
|
126
|
+
@manager.stub!(:system).and_return(true)
|
127
127
|
end
|
128
128
|
|
129
129
|
it "should call the editor command" do
|
@@ -134,8 +134,7 @@ describe DraftManager do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it "should show an error if the file doesn't exist" do
|
137
|
-
|
138
|
-
@manager.edit_draft('asdf.asf')
|
137
|
+
lambda {@manager.edit_draft('asdf.asf')}.should raise_error("draft filename asdf.asf does not exist")
|
139
138
|
end
|
140
139
|
|
141
140
|
it "should add the edited time to the attributes of that draft" do
|
@@ -177,8 +176,7 @@ describe DraftManager do
|
|
177
176
|
end
|
178
177
|
|
179
178
|
it "should output an error message if the file does not exist" do
|
180
|
-
|
181
|
-
@manager.edit_draft('asdf.asf')
|
179
|
+
lambda {@manager.edit_draft('asdf.asf')}.should raise_error("draft filename asdf.asf does not exist")
|
182
180
|
end
|
183
181
|
end
|
184
182
|
|
@@ -255,8 +253,7 @@ describe DraftManager do
|
|
255
253
|
end
|
256
254
|
|
257
255
|
it "should output an error message if the file does not exist" do
|
258
|
-
|
259
|
-
@manager.set_attribute('asdf.asf', "attr", "456")
|
256
|
+
lambda {@manager.set_attribute('asdf.asf', "attr", "456")}.should raise_error("draft filename asdf.asf does not exist")
|
260
257
|
end
|
261
258
|
|
262
259
|
it "should save the draft index to disk" do
|
@@ -277,19 +274,19 @@ describe DraftManager do
|
|
277
274
|
@manager.setup('gedit', @temp_dir, @draft_dir)
|
278
275
|
end
|
279
276
|
|
280
|
-
it "should output an
|
277
|
+
it "should output an warning message if the title is not unique" do
|
281
278
|
@manager.set_attribute('draft.1', "title", 'title')
|
282
279
|
|
283
|
-
STDERR.should_receive(
|
280
|
+
STDERR.should_receive(:<<).with("warning: title 'title' is not unique\n")
|
284
281
|
@manager.set_attribute('draft.2', "title", 'title')
|
285
282
|
end
|
286
283
|
|
287
|
-
it "should
|
284
|
+
it "should still change the value of the previous title" do
|
288
285
|
@manager.set_attribute('draft.1', 'title', 'title')
|
289
286
|
@manager.set_attribute('draft.2', 'title', 'title2')
|
290
287
|
@manager.set_attribute('draft.2', 'title', 'title')
|
291
288
|
|
292
|
-
@manager.index['draft.2']["title"].should == '
|
289
|
+
@manager.index['draft.2']["title"].should == 'title'
|
293
290
|
end
|
294
291
|
end
|
295
292
|
|
@@ -310,8 +307,7 @@ describe DraftManager do
|
|
310
307
|
end
|
311
308
|
|
312
309
|
it "should output an error message if the file does not exist" do
|
313
|
-
|
314
|
-
@manager.delete_attribute('asdf.asf', :attr)
|
310
|
+
lambda {@manager.delete_attribute('asdf.asf', :attr)}.should raise_error("draft filename asdf.asf does not exist")
|
315
311
|
end
|
316
312
|
|
317
313
|
it "should save the draft index to disk" do
|
@@ -335,8 +331,7 @@ describe DraftManager do
|
|
335
331
|
end
|
336
332
|
|
337
333
|
it "should output an error message if there are no drafts saved" do
|
338
|
-
|
339
|
-
@manager.get_latest_created_draft
|
334
|
+
lambda {@manager.get_latest_created_draft}.should raise_error("there is currently no saved index")
|
340
335
|
end
|
341
336
|
end
|
342
337
|
|
@@ -355,8 +350,7 @@ describe DraftManager do
|
|
355
350
|
end
|
356
351
|
|
357
352
|
it "should output an error message if there are no drafts saved" do
|
358
|
-
|
359
|
-
@manager.get_draft_by_title("title2")
|
353
|
+
lambda {@manager.get_draft_by_title("title2")}.should raise_error("there is currently no saved index")
|
360
354
|
end
|
361
355
|
end
|
362
356
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Louis Salin
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
1GuoIVBODMvF3w==
|
36
36
|
-----END CERTIFICATE-----
|
37
37
|
|
38
|
-
date: 2010-10-
|
38
|
+
date: 2010-10-23 00:00:00 -05:00
|
39
39
|
default_executable:
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -162,16 +162,14 @@ description: An offline blog manager
|
|
162
162
|
email: louis.phil@gmail.com
|
163
163
|
executables:
|
164
164
|
- blux
|
165
|
-
- blux_textile_to_html
|
166
|
-
- blux_wp_publish
|
167
165
|
extensions: []
|
168
166
|
|
169
167
|
extra_rdoc_files:
|
170
168
|
- COPYING
|
171
169
|
- README.markdown
|
172
170
|
- bin/blux
|
173
|
-
-
|
174
|
-
-
|
171
|
+
- lib/textile_to_html.rb
|
172
|
+
- lib/wp_publish.rb
|
175
173
|
- lib/blog_manager.rb
|
176
174
|
- lib/blux_config_reader.rb
|
177
175
|
- lib/blux_option_parser.rb
|
@@ -183,8 +181,8 @@ files:
|
|
183
181
|
- README.markdown
|
184
182
|
- Rakefile
|
185
183
|
- bin/blux
|
186
|
-
-
|
187
|
-
-
|
184
|
+
- lib/textile_to_html.rb
|
185
|
+
- lib/wp_publish.rb
|
188
186
|
- lib/blog_manager.rb
|
189
187
|
- lib/blux_config_reader.rb
|
190
188
|
- lib/blux_option_parser.rb
|
metadata.gz.sig
CHANGED
Binary file
|