Blux 0.0.4 → 0.0.5
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 +4 -4
- data/Manifest +2 -1
- data/README.markdown +12 -0
- data/Rakefile +1 -1
- data/bin/blux +71 -35
- data/lib/blog_manager.rb +45 -28
- data/lib/blux_option_parser.rb +13 -0
- data/lib/draft_manager.rb +23 -9
- data/lib/indexer.rb +68 -27
- data/lib/publishing/wp_options.rb +76 -0
- data/lib/publishing/wp_publish.rb +136 -0
- data/spec/blog_manager_spec.rb +46 -35
- data/spec/draft_manager_spec.rb +102 -15
- metadata +7 -5
- metadata.gz.sig +0 -0
- data/lib/wp_publish.rb +0 -149
data.tar.gz.sig
CHANGED
Binary file
|
data/Blux.gemspec
CHANGED
@@ -2,18 +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.5"
|
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
|
+
s.date = %q{2010-11-06}
|
11
11
|
s.default_executable = %q{blux}
|
12
12
|
s.description = %q{An offline blog manager}
|
13
13
|
s.email = %q{louis.phil@gmail.com}
|
14
14
|
s.executables = ["blux"]
|
15
|
-
s.extra_rdoc_files = ["COPYING", "README.markdown", "bin/blux", "lib/textile_to_html.rb", "lib/
|
16
|
-
s.files = ["COPYING", "Manifest", "README.markdown", "Rakefile", "bin/blux", "lib/textile_to_html.rb", "lib/
|
15
|
+
s.extra_rdoc_files = ["COPYING", "README.markdown", "bin/blux", "lib/textile_to_html.rb", "lib/blog_manager.rb", "lib/blux_config_reader.rb", "lib/blux_option_parser.rb", "lib/draft_manager.rb", "lib/indexer.rb", "lib/publishing/wp_publish.rb", "lib/publishing/wp_options.rb"]
|
16
|
+
s.files = ["COPYING", "Manifest", "README.markdown", "Rakefile", "bin/blux", "lib/textile_to_html.rb", "lib/blog_manager.rb", "lib/blux_config_reader.rb", "lib/blux_option_parser.rb", "lib/draft_manager.rb", "lib/indexer.rb", "lib/publishing/wp_publish.rb", "lib/publishing/wp_options.rb", "spec/blog_manager_spec.rb", "spec/blux_config_reader_spec.rb", "spec/draft_manager_spec.rb", "Blux.gemspec"]
|
17
17
|
s.homepage = %q{http://github.com/louissalin/blux}
|
18
18
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Blux", "--main", "README.markdown"]
|
19
19
|
s.require_paths = ["lib"]
|
data/Manifest
CHANGED
@@ -4,12 +4,13 @@ README.markdown
|
|
4
4
|
Rakefile
|
5
5
|
bin/blux
|
6
6
|
lib/textile_to_html.rb
|
7
|
-
lib/wp_publish.rb
|
8
7
|
lib/blog_manager.rb
|
9
8
|
lib/blux_config_reader.rb
|
10
9
|
lib/blux_option_parser.rb
|
11
10
|
lib/draft_manager.rb
|
12
11
|
lib/indexer.rb
|
12
|
+
lib/publishing/wp_publish.rb
|
13
|
+
lib/publishing/wp_options.rb
|
13
14
|
spec/blog_manager_spec.rb
|
14
15
|
spec/blux_config_reader_spec.rb
|
15
16
|
spec/draft_manager_spec.rb
|
data/README.markdown
CHANGED
@@ -74,5 +74,17 @@ use this command to edit a draft
|
|
74
74
|
|
75
75
|
when using the --verbose option, Blux will output a lot of extra information to the screen as it works
|
76
76
|
|
77
|
+
> $ blux -p (--publish) [--latest, --title <a title>, --file <filename>]
|
78
|
+
|
79
|
+
this command will publish your draft. It will publish either the latest draft, or a draft with a specific title, or a draft with a specific filename, as specified in the command.
|
80
|
+
|
81
|
+
> $ blux -u (--update) [--latest, --title <a title>, --file <filename>]
|
82
|
+
|
83
|
+
this command will update an exisiting published blog post. It will update either the latest draft, or a draft with a specific title, or a draft with a specific filename, as specified in the command.
|
84
|
+
|
85
|
+
> $ blux -d (--delete) [--latest, --title <a title>, --file <filename>]
|
86
|
+
|
87
|
+
this command will delete a published blog post and mark the associated draft as deleted. The draft will still exist, but Blux will not take it into consideration anymore.
|
88
|
+
|
77
89
|
## community
|
78
90
|
feel free to post your comments or questions to the Blux Google group here: blux_manager@googlegroups.com
|
data/Rakefile
CHANGED
data/bin/blux
CHANGED
@@ -57,6 +57,43 @@ def check_filename(options, blog_manager)
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
def build_post_info(options)
|
61
|
+
switch = nil
|
62
|
+
entry = Array.new
|
63
|
+
response = Array.new
|
64
|
+
url = ""
|
65
|
+
|
66
|
+
ARGF.each do |line|
|
67
|
+
if line == "--entry--\n"
|
68
|
+
switch = :entry
|
69
|
+
next
|
70
|
+
elsif line == "--response--\n"
|
71
|
+
switch = :response
|
72
|
+
next
|
73
|
+
elsif line == "--url--\n"
|
74
|
+
switch = :url
|
75
|
+
next
|
76
|
+
end
|
77
|
+
|
78
|
+
case (switch)
|
79
|
+
when :entry
|
80
|
+
entry << line
|
81
|
+
when :response
|
82
|
+
response << line
|
83
|
+
when :url
|
84
|
+
url = line
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
entry_text = entry.join
|
89
|
+
response_text = response.join
|
90
|
+
|
91
|
+
msg = "Error communicating with the publishing script. Exiting..."
|
92
|
+
raise RuntimeError, msg if response.length == 0
|
93
|
+
|
94
|
+
return entry, response, url
|
95
|
+
end
|
96
|
+
|
60
97
|
begin
|
61
98
|
validate_command(BluxOptionParser.parse(ARGV)) do |options|
|
62
99
|
draft_manager = DraftManager.new
|
@@ -84,6 +121,10 @@ begin
|
|
84
121
|
mgr.draft_manager.set_attribute(filename, attribute, value)
|
85
122
|
end
|
86
123
|
end
|
124
|
+
when :unset
|
125
|
+
check_filename(options, mgr) do |filename|
|
126
|
+
mgr.draft_manager.delete_attribute(filename, options.attribute)
|
127
|
+
end
|
87
128
|
when :out
|
88
129
|
check_filename(options, mgr) do |filename|
|
89
130
|
STDOUT.puts(mgr.draft_manager.output filename)
|
@@ -103,47 +144,42 @@ begin
|
|
103
144
|
puts "updating" if options.verbose
|
104
145
|
mgr.update filename
|
105
146
|
end
|
106
|
-
when :
|
147
|
+
when :delete
|
107
148
|
check_filename(options, mgr) do |filename|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
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
|
149
|
+
puts "deleting" if options.verbose
|
150
|
+
mgr.delete filename
|
151
|
+
end
|
152
|
+
when :show_post_info
|
153
|
+
entry, response, url = build_post_info(options)
|
154
|
+
if options.verbose
|
155
|
+
puts "entry:"
|
156
|
+
puts entry
|
157
|
+
|
158
|
+
puts "response:"
|
159
|
+
puts response
|
160
|
+
|
161
|
+
puts "edit url:"
|
162
|
+
puts url
|
133
163
|
end
|
164
|
+
when :set_edit_url
|
165
|
+
check_filename(options, mgr) do |filename|
|
166
|
+
entry, response, url = build_post_info(options)
|
167
|
+
|
168
|
+
if options.verbose
|
169
|
+
puts "entry:"
|
170
|
+
puts entry
|
134
171
|
|
135
|
-
|
136
|
-
|
137
|
-
|
172
|
+
puts "response:"
|
173
|
+
puts response
|
174
|
+
|
175
|
+
puts "edit url:"
|
176
|
+
puts url
|
177
|
+
end
|
138
178
|
|
139
|
-
|
140
|
-
puts "response:" if options.verbose
|
141
|
-
puts response_text if options.verbose
|
142
|
-
|
143
|
-
mgr.set_attribute(filename, 'edit_url', url.strip)
|
179
|
+
mgr.draft_manager.set_attribute(filename, 'edit_url', url.strip)
|
144
180
|
end
|
145
181
|
when :version
|
146
|
-
puts "0.0.
|
182
|
+
puts "0.0.5"
|
147
183
|
end
|
148
184
|
end
|
149
185
|
rescue
|
data/lib/blog_manager.rb
CHANGED
@@ -19,13 +19,12 @@
|
|
19
19
|
require "#{File.dirname(__FILE__)}/draft_manager"
|
20
20
|
require "#{File.dirname(__FILE__)}/blux_config_reader"
|
21
21
|
require "#{File.dirname(__FILE__)}/indexer"
|
22
|
+
require 'timeout'
|
22
23
|
|
23
24
|
class BlogManager
|
24
25
|
attr_accessor :home, :blux_dir, :blux_rc, :blux_tmp_dir, :draft_dir
|
25
26
|
attr_accessor :draft_manager
|
26
27
|
attr_accessor :config
|
27
|
-
attr_accessor :index
|
28
|
-
attr_accessor :index_file
|
29
28
|
|
30
29
|
include BluxIndexer
|
31
30
|
|
@@ -38,7 +37,6 @@ class BlogManager
|
|
38
37
|
@draft_dir = "#{@blux_dir}/draft"
|
39
38
|
@blux_tmp_dir = "#{@blux_dir}/tmp"
|
40
39
|
@blux_rc = "#{@home}/.bluxrc"
|
41
|
-
@index_file = "#{@blux_dir}/.published"
|
42
40
|
|
43
41
|
@draft_manager = draft_manager
|
44
42
|
end
|
@@ -55,10 +53,6 @@ class BlogManager
|
|
55
53
|
unless Dir.exists?(@blux_tmp_dir)
|
56
54
|
Dir.mkdir(@blux_tmp_dir)
|
57
55
|
end
|
58
|
-
|
59
|
-
load_index
|
60
|
-
puts "blog index:\n" if @verbose
|
61
|
-
print_index if @verbose
|
62
56
|
end
|
63
57
|
|
64
58
|
def load_config
|
@@ -69,48 +63,71 @@ class BlogManager
|
|
69
63
|
end
|
70
64
|
|
71
65
|
def publish(filename)
|
66
|
+
raise "this draft has already been published" if published?(filename)
|
67
|
+
|
72
68
|
title = @draft_manager.get_attribute(filename, "title") || 'no title'
|
69
|
+
categories = @draft_manager.get_attribute(filename, "categories")
|
73
70
|
|
74
71
|
convert_cmd = "blux --convert -f #{filename}"
|
75
|
-
|
72
|
+
categories_cmd = categories ? "-c \"#{categories}\"" : ""
|
73
|
+
publish_cmd = "ruby #{File.dirname(__FILE__)}/publishing/wp_publish.rb -t \"#{title}\" --config #{@blux_rc} #{categories_cmd}"
|
76
74
|
set_url_cmd = "blux --set_edit_url -f #{filename}"
|
77
75
|
|
78
76
|
cmd = "#{convert_cmd} | #{publish_cmd} | #{set_url_cmd}"
|
79
77
|
cmd = cmd + " --verbose" if @verbose
|
80
78
|
|
81
|
-
|
82
|
-
|
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
|
79
|
+
send_publish_command(cmd, filename, "failed to publish...") do
|
80
|
+
@draft_manager.set_attribute(filename, "published_time", Time.now)
|
89
81
|
end
|
90
|
-
|
91
|
-
puts "blog index:\n" if @verbose
|
92
|
-
print_index if @verbose
|
93
82
|
end
|
94
83
|
|
95
84
|
def update(filename)
|
96
85
|
title = @draft_manager.get_attribute(filename, "title") || 'no title'
|
97
|
-
|
86
|
+
categories = @draft_manager.get_attribute(filename, "categories")
|
87
|
+
url = @draft_manager.get_attribute(filename, "edit_url")
|
88
|
+
|
89
|
+
raise "couldn't find an edit url for the draft: #{filename}" unless url
|
90
|
+
|
91
|
+
publish_cmd = "ruby #{File.dirname(__FILE__)}/publishing/wp_publish.rb"
|
92
|
+
categories_cmd = categories ? "-c \"#{categories}\"" : ""
|
93
|
+
post_cmd = "blux --post-cmd"
|
94
|
+
cmd = "blux --convert -f #{filename} | #{publish_cmd} -t \"#{title}\" --update #{url} --config #{@blux_rc} #{categories_cmd} | #{post_cmd}"
|
95
|
+
cmd = cmd + " --verbose" if @verbose
|
98
96
|
|
97
|
+
send_publish_command(cmd, filename, "failed to update...") do
|
98
|
+
@draft_manager.set_attribute(filename, "published_time", Time.now)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def delete(filename)
|
103
|
+
url = @draft_manager.get_attribute(filename, "edit_url")
|
99
104
|
raise "couldn't find an edit url for the draft: #{filename}" unless url
|
100
105
|
|
101
|
-
publish_cmd = "ruby #{File.dirname(__FILE__)}/wp_publish.rb"
|
102
|
-
|
106
|
+
publish_cmd = "ruby #{File.dirname(__FILE__)}/publishing/wp_publish.rb"
|
107
|
+
post_cmd = "blux --post-cmd"
|
108
|
+
cmd = "#{publish_cmd} --delete #{url} --config #{@blux_rc} | #{post_cmd}"
|
109
|
+
cmd = cmd + " --verbose" if @verbose
|
103
110
|
|
104
|
-
|
105
|
-
|
111
|
+
send_publish_command(cmd, filename, "failed to delete...") do
|
112
|
+
@draft_manager.delete_draft(filename)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
private
|
117
|
+
|
118
|
+
def published?(filename)
|
119
|
+
@draft_manager.get_attribute(filename, "published_time") != nil
|
120
|
+
end
|
121
|
+
|
122
|
+
def send_publish_command(cmd, filename, error_msg)
|
123
|
+
status = Timeout::timeout(10) { system cmd }
|
124
|
+
if status
|
125
|
+
yield
|
106
126
|
else
|
107
|
-
msg = "
|
127
|
+
msg = "#{error_msg}\n"
|
108
128
|
msg = msg + ' use the --verbose option for more information' if !@verbose
|
109
129
|
|
110
130
|
raise SystemExit, msg
|
111
131
|
end
|
112
|
-
|
113
|
-
puts "blog index:\n" if @verbose
|
114
|
-
print_index if @verbose
|
115
132
|
end
|
116
133
|
end
|
data/lib/blux_option_parser.rb
CHANGED
@@ -44,6 +44,11 @@ class BluxOptionParser
|
|
44
44
|
opts.on("-s", "--set", "set an attribute on a draft") do
|
45
45
|
options.command = :set
|
46
46
|
end
|
47
|
+
|
48
|
+
opts.on("--unset ATTR", "delete an attribute on a draft") do |attr|
|
49
|
+
options.command = :unset
|
50
|
+
options.attribute = attr
|
51
|
+
end
|
47
52
|
|
48
53
|
opts.on("-c", "--convert", "convert a draft to html") do
|
49
54
|
options.command = :convert
|
@@ -61,6 +66,10 @@ class BluxOptionParser
|
|
61
66
|
options.command = :update
|
62
67
|
end
|
63
68
|
|
69
|
+
opts.on("-d", "--delete", "mark a draft as deleted") do
|
70
|
+
options.command = :delete
|
71
|
+
end
|
72
|
+
|
64
73
|
opts.on("--latest", "work on the latest draft") do
|
65
74
|
options.use_latest = true
|
66
75
|
end
|
@@ -78,6 +87,10 @@ class BluxOptionParser
|
|
78
87
|
options.command = :set_edit_url
|
79
88
|
end
|
80
89
|
|
90
|
+
opts.on("--post-cmd", "shows post publishing info: request & response") do
|
91
|
+
options.command = :show_post_info
|
92
|
+
end
|
93
|
+
|
81
94
|
opts.on("--with-preview", "show a preview of each draft while listing") do
|
82
95
|
options.list_preview = true
|
83
96
|
end
|
data/lib/draft_manager.rb
CHANGED
@@ -25,7 +25,6 @@ require "#{File.dirname(__FILE__)}/indexer"
|
|
25
25
|
class DraftManager
|
26
26
|
attr_reader :launch_editor_cmd
|
27
27
|
attr_reader :temp_dir, :draft_dir
|
28
|
-
attr_reader :index
|
29
28
|
attr_reader :index_file
|
30
29
|
|
31
30
|
include BluxIndexer
|
@@ -42,7 +41,6 @@ class DraftManager
|
|
42
41
|
value = system "touch #{@index_file}" unless File.exists? @index_file
|
43
42
|
|
44
43
|
if value
|
45
|
-
load_index
|
46
44
|
print_index if @verbose
|
47
45
|
else
|
48
46
|
msg = 'could not create the draft index file'
|
@@ -69,8 +67,7 @@ class DraftManager
|
|
69
67
|
def move_temp_file(tempfile)
|
70
68
|
if system "mv #{tempfile} #{@draft_dir}"
|
71
69
|
index_key = File.basename(tempfile)
|
72
|
-
|
73
|
-
save_index
|
70
|
+
set_attribute(index_key, "creation_time", Time.now.to_s)
|
74
71
|
else
|
75
72
|
msg = "failed to move the temp file to the draft folder"
|
76
73
|
raise RuntimeError, msg
|
@@ -90,12 +87,24 @@ class DraftManager
|
|
90
87
|
print_index if @verbose
|
91
88
|
end
|
92
89
|
|
90
|
+
def delete_draft(filename)
|
91
|
+
set_attribute(filename, "deleted", Time.now.to_s)
|
92
|
+
print_index if @verbose
|
93
|
+
end
|
94
|
+
|
93
95
|
def list
|
94
|
-
|
96
|
+
block = Enumerator.new do |g|
|
97
|
+
index = load_index
|
98
|
+
index.keys.each do |k|
|
99
|
+
g << k if index[k]["deleted"] == nil
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
block
|
95
104
|
end
|
96
105
|
|
97
106
|
def show_info(filename)
|
98
|
-
check_index(filename) do |index|
|
107
|
+
check_index(filename) do |full_index, index|
|
99
108
|
index.to_json
|
100
109
|
end
|
101
110
|
end
|
@@ -114,6 +123,7 @@ class DraftManager
|
|
114
123
|
end
|
115
124
|
|
116
125
|
def output(filename)
|
126
|
+
ensure_not_deleted filename
|
117
127
|
check_filename(filename) do |draft_filename|
|
118
128
|
File.open(draft_filename, 'r') do |f|
|
119
129
|
if f.eof?
|
@@ -132,7 +142,10 @@ class DraftManager
|
|
132
142
|
|
133
143
|
def get_latest_created_draft
|
134
144
|
check_count do
|
135
|
-
|
145
|
+
index = load_index
|
146
|
+
index.reject do |key, val|
|
147
|
+
val["deleted"] != nil
|
148
|
+
end.sort do |a,b|
|
136
149
|
Time.parse(a[1]["creation_time"]) <=> Time.parse(b[1]["creation_time"])
|
137
150
|
end[-1][0]
|
138
151
|
end
|
@@ -140,8 +153,9 @@ class DraftManager
|
|
140
153
|
|
141
154
|
def get_draft_by_title(title)
|
142
155
|
check_count do
|
143
|
-
|
144
|
-
|
156
|
+
index = load_index
|
157
|
+
index.keys.each do |key|
|
158
|
+
draft_title = index[key]["title"]
|
145
159
|
return key if draft_title == title
|
146
160
|
end
|
147
161
|
end
|
data/lib/indexer.rb
CHANGED
@@ -19,11 +19,12 @@
|
|
19
19
|
module BluxIndexer
|
20
20
|
def check_index(filename)
|
21
21
|
check_filename(filename) do
|
22
|
-
|
23
|
-
|
22
|
+
full_index = load_index
|
23
|
+
full_index[filename] ||= {}
|
24
|
+
yield full_index, full_index[filename]
|
24
25
|
end
|
25
26
|
end
|
26
|
-
|
27
|
+
|
27
28
|
def check_filename(filename)
|
28
29
|
draft_filename = "#{self.draft_dir}/#{filename}"
|
29
30
|
|
@@ -35,48 +36,80 @@ module BluxIndexer
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
|
-
def check_title(filename, attr_key, attr_val)
|
39
|
-
return true unless attr_key.to_s == "title"
|
40
|
-
|
41
|
-
unique_title = true
|
42
|
-
@index.keys.reject{|k| k == filename}.each do |key|
|
43
|
-
unique_title = false if (@index[key][attr_key.to_s] == attr_val)
|
44
|
-
end
|
45
|
-
|
46
|
-
STDERR << "warning: title '#{attr_val}' is not unique\n" unless unique_title
|
47
|
-
true
|
48
|
-
end
|
49
|
-
|
50
39
|
def set_attribute(filename, key, val)
|
51
|
-
check_index(filename) do |index|
|
52
|
-
|
40
|
+
check_index(filename) do |full_index, index|
|
41
|
+
case key
|
42
|
+
when "title"
|
43
|
+
unique_title = true
|
44
|
+
full_index.keys.reject{|k| k == filename}.each do |other_key|
|
45
|
+
unique_title = false if (full_index[other_key.to_s][key] == val)
|
46
|
+
end
|
47
|
+
|
48
|
+
STDERR << "warning: title '#{val}' is not unique\n" unless unique_title
|
49
|
+
|
50
|
+
index[key.to_s] = val
|
51
|
+
when "categories"
|
52
|
+
values = Array.new
|
53
|
+
values << index[key.to_s] unless index[key.to_s] == nil
|
54
|
+
values << val
|
55
|
+
|
56
|
+
index[key.to_s] = values.join(',')
|
57
|
+
else
|
53
58
|
index[key.to_s] = val
|
54
|
-
save_index
|
55
59
|
end
|
60
|
+
|
61
|
+
save_index(full_index)
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
59
65
|
def delete_attribute(filename, attr_name)
|
60
|
-
check_index(filename) do |index|
|
61
|
-
|
62
|
-
|
66
|
+
check_index(filename) do |full_index, index|
|
67
|
+
case attr_name
|
68
|
+
when "categories"
|
69
|
+
if block_given?
|
70
|
+
categories = yield
|
71
|
+
categories_to_remove = categories.split(',')
|
72
|
+
|
73
|
+
values = index[attr_name.to_s].split(',')
|
74
|
+
|
75
|
+
new_values = values.reject{|i| categories_to_remove.include?(i)}.join(',')
|
76
|
+
|
77
|
+
if new_values.length > 0
|
78
|
+
index[attr_name.to_s] = new_values
|
79
|
+
else
|
80
|
+
index.delete(attr_name.to_s)
|
81
|
+
end
|
82
|
+
else
|
83
|
+
index.delete(attr_name.to_s)
|
84
|
+
end
|
85
|
+
else
|
86
|
+
index.delete(attr_name.to_s)
|
87
|
+
end
|
88
|
+
|
89
|
+
save_index(full_index)
|
63
90
|
end
|
64
91
|
end
|
65
92
|
|
66
93
|
def get_attribute(filename, attribute)
|
67
|
-
check_index(filename) do |index|
|
94
|
+
check_index(filename) do |full_index, index|
|
68
95
|
index[attribute]
|
69
96
|
end
|
70
97
|
end
|
71
98
|
|
72
99
|
def check_count
|
73
|
-
|
100
|
+
index = load_index
|
101
|
+
if index.keys.length > 0
|
74
102
|
yield
|
75
103
|
else
|
76
104
|
msg = "there is currently no saved index"
|
77
105
|
raise RuntimeError, msg
|
78
106
|
end
|
79
107
|
end
|
108
|
+
|
109
|
+
def delete_index(filename)
|
110
|
+
index = load_index
|
111
|
+
save_index if index.delete filename
|
112
|
+
end
|
80
113
|
|
81
114
|
def load_index
|
82
115
|
system "touch #{@index_file}" unless File.exists? @index_file
|
@@ -86,16 +119,24 @@ module BluxIndexer
|
|
86
119
|
f.each_line {|l| str += l}
|
87
120
|
end
|
88
121
|
|
89
|
-
|
122
|
+
return str.length > 0 ? JSON.parse(str) : {}
|
90
123
|
end
|
91
124
|
|
92
|
-
def save_index
|
125
|
+
def save_index(index)
|
93
126
|
File.open(@index_file, 'w') do |f|
|
94
|
-
f.write(
|
127
|
+
f.write(index.to_json) if index
|
95
128
|
end
|
96
129
|
end
|
97
130
|
|
98
131
|
def print_index
|
99
|
-
|
132
|
+
index = load_index
|
133
|
+
puts index.to_json + "\n" if @verbose
|
134
|
+
end
|
135
|
+
|
136
|
+
def ensure_not_deleted(filename)
|
137
|
+
check_index(filename) do |full_index, index|
|
138
|
+
msg = "draft filename #{filename} has been deleted"
|
139
|
+
raise RuntimeError, msg if index["deleted"]
|
140
|
+
end
|
100
141
|
end
|
101
142
|
end
|