Class: DraftManager

Inherits:
Object
  • Object
show all
Includes:
BluxIndexer
Defined in:
lib/draft_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from BluxIndexer

#check_count, #check_filename, #check_index, #delete_attribute, #delete_index, #ensure_not_deleted, #get_attribute, #load_index, #print_index, #save_index, #set_attribute

Instance Attribute Details

#draft_dirObject (readonly)

Returns the value of attribute draft_dir.



27
28
29
# File 'lib/draft_manager.rb', line 27

def draft_dir
  @draft_dir
end

#index_fileObject (readonly)

Returns the value of attribute index_file.



28
29
30
# File 'lib/draft_manager.rb', line 28

def index_file
  @index_file
end

#launch_editor_cmdObject (readonly)

Returns the value of attribute launch_editor_cmd.



26
27
28
# File 'lib/draft_manager.rb', line 26

def launch_editor_cmd
  @launch_editor_cmd
end

#temp_dirObject (readonly)

Returns the value of attribute temp_dir.



27
28
29
# File 'lib/draft_manager.rb', line 27

def temp_dir
  @temp_dir
end

Instance Method Details

#create_draftObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/draft_manager.rb', line 51

def create_draft
	temp_file = Tempfile.new('draft', @temp_dir)
	temp_file.close

	if system "#{@launch_editor_cmd} #{temp_file.path}"
		if temp_file.size > 0
			move_temp_file temp_file.path
		end
	else
		msg = "couldn't launch editor with command #{@launch_editor_cmd}"
		raise RuntimeError, msg
	end

	print_index if @verbose
end

#delete_draft(filename) ⇒ Object



90
91
92
93
# File 'lib/draft_manager.rb', line 90

def delete_draft(filename)
	set_attribute(filename, "deleted", Time.now.to_s)
	print_index if @verbose
end

#edit_draft(filename) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/draft_manager.rb', line 77

def edit_draft(filename)
	check_filename(filename) do  |draft_filename|
		if system "#{@launch_editor_cmd} #{draft_filename}"
			set_attribute(filename, "edited_time", Time.now.to_s)
		else
			msg = "couldn't launch editor with command #{@launch_editor_cmd}"
			raise RuntimeError, msg
		end
	end

	print_index if @verbose
end

#get_draft_by_title(title) ⇒ Object



154
155
156
157
158
159
160
161
162
# File 'lib/draft_manager.rb', line 154

def get_draft_by_title(title)
	check_count do
		index = load_index
		index.keys.each do |key|
			draft_title = index[key]["title"]
			return key if draft_title == title
		end
	end
end

#get_latest_created_draftObject



143
144
145
146
147
148
149
150
151
152
# File 'lib/draft_manager.rb', line 143

def get_latest_created_draft
	check_count do
		index = load_index
		index.reject do |key, val|
			val["deleted"] != nil
		end.sort do |a,b| 
			Time.parse(a[1]["creation_time"]) <=> Time.parse(b[1]["creation_time"])
		end[-1][0]
	end
end

#listObject



95
96
97
98
99
100
101
102
103
104
# File 'lib/draft_manager.rb', line 95

def list
	block = Enumerator.new do |g|
		index = load_index
		index.keys.each do |k|
			g << k if index[k]["deleted"] == nil
		end
	end

	block
end

#move_temp_file(tempfile) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/draft_manager.rb', line 67

def move_temp_file(tempfile)
	if system "mv #{tempfile} #{@draft_dir}"
		index_key = File.basename(tempfile)
		set_attribute(index_key, "creation_time", Time.now.to_s)
	else
		msg = "failed to move the temp file to the draft folder"
		raise RuntimeError, msg
	end
end

#output(filename) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/draft_manager.rb', line 125

def output(filename)
	ensure_not_deleted filename
	check_filename(filename) do |draft_filename|
		File.open(draft_filename, 'r') do |f|
			if f.eof?
				''
			else
				text = ''
				f.each do |l|
					text += l
				end

				text
			end
		end
	end
end

#setup(editor_cmd, temp_dir, draft_dir, options = {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/draft_manager.rb', line 32

def setup(editor_cmd, temp_dir, draft_dir, options = {})
	@verbose = options[:verbose] ||= false

	@launch_editor_cmd = editor_cmd
	@temp_dir = temp_dir
	@draft_dir = draft_dir
	@index_file = "#{@draft_dir}/.draft_index"

	value = true
	value = system "touch #{@index_file}" unless File.exists? @index_file

	if value
		print_index if @verbose
	else
		msg = 'could not create the draft index file'
		raise RuntimeError, msg
	end
end

#show_info(filename) ⇒ Object



106
107
108
109
110
# File 'lib/draft_manager.rb', line 106

def show_info(filename)
	check_index(filename) do |full_index, index|
		index.to_json
	end
end

#show_preview(filename) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/draft_manager.rb', line 112

def show_preview(filename)
	check_filename(filename) do |draft_filename|
		File.open(draft_filename, 'r') do |f|
			if f.eof?
				''
			else
				line = f.readline.gsub("\n", '')
				line.length > 76 ? line[0..75] + '...' : line
			end
		end
	end
end