sifttter-redux 0.3.5 → 0.3.6
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.
- checksums.yaml +4 -4
- data/HISTORY.md +4 -0
- data/README.md +10 -8
- data/bin/srd +44 -39
- data/lib/sifttter_redux.rb +6 -5
- data/lib/sifttter_redux/cli_message.rb +22 -13
- data/lib/sifttter_redux/configuration.rb +5 -3
- data/lib/sifttter_redux/date_range_maker.rb +30 -6
- data/lib/sifttter_redux/dbu.rb +13 -9
- data/lib/sifttter_redux/sifttter.rb +2 -2
- data/lib/sifttter_redux/version.rb +1 -1
- data/sifttter_redux.gemspec +1 -0
- data/test/cli_message_test.rb +16 -13
- data/test/configuration_test.rb +2 -2
- data/test/date_range_maker_test.rb +3 -3
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b75ea05818cbdfe4e746c4c4107e8c25e45e9481
|
4
|
+
data.tar.gz: 37553f4bf3251e39694cb3c381b4d3d091d8a46c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4705794626c05d79d9a87f512a3a1684d5dbbb85612859efb4f58d43eab7b2e0791e2b2a296629b00532e23a4d927ffc0e499f498d0b3491ce81c563c15bd59c
|
7
|
+
data.tar.gz: 1b81b5030f1db6aef89df7f3aec8aa74f432094ffe62ba55c0b30e677ae8e8edcab772528b78941f4126824b0944c8694014bf8377fc86640a516fbf16f2a201
|
data/HISTORY.md
CHANGED
data/README.md
CHANGED
@@ -65,12 +65,13 @@ $ srd init
|
|
65
65
|
|
66
66
|
Initialization will perform the following steps:
|
67
67
|
|
68
|
-
1. Download [Dropbox
|
69
|
-
2.
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
1. Download [Dropbox Uploader](https://github.com/andreafabrizi/Dropbox-Uploader "Dropbox-Uploder") to a location of your choice.
|
69
|
+
2. Automatically configure Dropbox Uploader.
|
70
|
+
3. Collect some user preferences:
|
71
|
+
* The location on your filesystem where Sifttter files will be temporarily stored
|
72
|
+
* The location of your Sifttter files in Dropbox
|
73
|
+
* The location on your filesystem where Day One files will be temporarily stored
|
74
|
+
* The location of your Day One files in Dropbox
|
74
75
|
|
75
76
|
## Basic Execution
|
76
77
|
|
@@ -382,7 +383,7 @@ $ bundle install --global
|
|
382
383
|
# Known Issues
|
383
384
|
|
384
385
|
* Sifttter Redux makes no effort to see if entries already exist in Day One for a particular date. This means that if you're not careful, you might end up with duplicate entries. A future version will address this.
|
385
|
-
*
|
386
|
+
* Multiline updates aren't caught by Sifttter Redux; it counts on content being on single lines.
|
386
387
|
|
387
388
|
# Future Releases
|
388
389
|
|
@@ -391,6 +392,7 @@ Some functionality I would like to tackle for future releases:
|
|
391
392
|
* Plugin architecture for services that IFTTT doesn't support
|
392
393
|
* Interactive cron job installer
|
393
394
|
* Smarter checking of the config file to see if an old version is being used
|
395
|
+
* Multiline Sifttter entries
|
394
396
|
|
395
397
|
# Bugs and Feature Requests
|
396
398
|
|
@@ -419,6 +421,6 @@ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
|
419
421
|
# Credits
|
420
422
|
|
421
423
|
* Craig Eley for [Sifttter](http://craigeley.com/post/72565974459/sifttter-an-ifttt-to-day-one-logger "Sifttter") and for giving me the idea for Sifttter Redux
|
422
|
-
* Dave Copeland for [GLI](https://github.com/davetron5000/gli "GLI")
|
424
|
+
* Dave Copeland for [GLI](https://github.com/davetron5000/gli "GLI") and [Methadone]("https://github.com/davetron5000/methadone" Methadone)
|
423
425
|
* Andrea Fabrizi for [Dropbox Uploader](https://github.com/andreafabrizi/Dropbox-Uploader "Dropbox Uploader")
|
424
426
|
* Tom Preston-Werner and Lee Jarvis for [Chronic](https://github.com/mojombo/chronic "Chronic")
|
data/bin/srd
CHANGED
@@ -35,9 +35,12 @@
|
|
35
35
|
|
36
36
|
require 'fileutils'
|
37
37
|
require 'gli'
|
38
|
+
require 'methadone'
|
38
39
|
require 'sifttter_redux'
|
39
40
|
|
40
41
|
include GLI::App
|
42
|
+
include Methadone::CLILogging
|
43
|
+
include SifttterRedux
|
41
44
|
|
42
45
|
program_desc 'Sifttter Redux
|
43
46
|
|
@@ -45,7 +48,7 @@ program_desc 'Sifttter Redux
|
|
45
48
|
smart installation and automated running on a standalone
|
46
49
|
*NIX device (such as a Raspberry Pi).'
|
47
50
|
|
48
|
-
version
|
51
|
+
version VERSION
|
49
52
|
|
50
53
|
# ======================================================
|
51
54
|
# Global Flags and Switches
|
@@ -61,15 +64,19 @@ switch(
|
|
61
64
|
# ======================================================
|
62
65
|
|
63
66
|
pre do |global, command, options, args|
|
64
|
-
SifttterRedux
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
# Load SifttterRedux configuration module.
|
68
|
+
Configuration.load(SRD_CONFIG_FILEPATH)
|
69
|
+
|
70
|
+
# Load Dropbox Uploader module.
|
71
|
+
DBU.load(File.join(Configuration['db_uploader']['local_filepath'], 'dropbox_uploader.sh'))
|
72
|
+
|
73
|
+
# Load Methadone CLILogging module.
|
74
|
+
Methadone::CLILogging.change_logger(Methadone::CLILogger.new(
|
75
|
+
File.open(SRD_LOG_FILEPATH, 'a+')
|
76
|
+
))
|
77
|
+
|
78
|
+
# Initialize if the config file doesn't exist.
|
79
|
+
init unless File.exists?(SRD_CONFIG_FILEPATH)
|
73
80
|
true
|
74
81
|
end
|
75
82
|
|
@@ -130,50 +137,50 @@ command :exec do |c|
|
|
130
137
|
|
131
138
|
SifttterRedux.verbose = global_options[:verbose] || options[:verbose]
|
132
139
|
|
133
|
-
|
140
|
+
CLIMessage.section_block('EXECUTING...') do
|
134
141
|
if options[:c] || options[:n] || options[:w] || options[:y] || options[:f] || options[:t]
|
135
142
|
|
136
143
|
command_complete = false
|
137
144
|
|
138
145
|
# Current Week
|
139
146
|
if !command_complete && options[:c]
|
140
|
-
dates =
|
147
|
+
dates = DateRangeMaker.last_n_weeks(0, options[:i])
|
141
148
|
command_complete = true
|
142
149
|
end
|
143
150
|
|
144
151
|
# Last N Days
|
145
152
|
if !command_complete && options[:n]
|
146
|
-
dates =
|
153
|
+
dates = DateRangeMaker.last_n_days(options[:n].to_i, options[:i])
|
147
154
|
command_complete = true
|
148
155
|
end
|
149
156
|
|
150
157
|
# Yesterday
|
151
158
|
if !command_complete && options[:y]
|
152
|
-
dates =
|
159
|
+
dates = DateRangeMaker.yesterday
|
153
160
|
command_complete = true
|
154
161
|
end
|
155
162
|
|
156
163
|
# Last N Weeks
|
157
164
|
if !command_complete && options[:w]
|
158
|
-
dates =
|
165
|
+
dates = DateRangeMaker.last_n_weeks(options[:w].to_i, options[:i])
|
159
166
|
command_complete = true
|
160
167
|
end
|
161
168
|
|
162
169
|
# Specific Range
|
163
170
|
if !command_complete && (options[:f] || options[:t])
|
164
171
|
begin
|
165
|
-
dates =
|
172
|
+
dates = DateRangeMaker.range(options[:f], options[:t], options[:i])
|
166
173
|
|
167
174
|
if dates.last > Date.today
|
168
|
-
|
175
|
+
CLIMessage.warning("Ignoring overextended end date and using today's date (#{ Date.today })")
|
169
176
|
dates = (dates.first..Date.today)
|
170
177
|
end
|
171
178
|
rescue ArgumentError => e
|
172
|
-
|
179
|
+
CLIMessage.error(e)
|
173
180
|
end
|
174
181
|
end
|
175
182
|
else
|
176
|
-
dates =
|
183
|
+
dates = DateRangeMaker.today
|
177
184
|
end
|
178
185
|
|
179
186
|
unless dates.nil?
|
@@ -182,36 +189,36 @@ command :exec do |c|
|
|
182
189
|
|
183
190
|
if first_date == second_date
|
184
191
|
date_string = first_date.strftime('%B %d, %Y')
|
185
|
-
|
192
|
+
CLIMessage.info("Creating entry for #{ date_string }...")
|
186
193
|
else
|
187
194
|
date_string = "#{ first_date.strftime('%B %d, %Y') } to #{ second_date.strftime('%B %d, %Y') }"
|
188
|
-
|
195
|
+
CLIMessage.info("Creating entries for dates from #{ date_string }...")
|
189
196
|
end
|
190
197
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
198
|
+
DBU.local_target = '/tmp/sifttter'
|
199
|
+
DBU.remote_target = '/Apps/ifttt/sifttter'
|
200
|
+
DBU.message = 'Downloading Sifttter files...'
|
201
|
+
DBU.download
|
195
202
|
|
196
203
|
dates.each do |date|
|
197
|
-
|
204
|
+
Sifttter.run(date)
|
198
205
|
end
|
199
206
|
|
200
207
|
# Upload any Day One entries to Dropbox (if there are any).
|
201
|
-
unless Dir[
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
208
|
+
unless Dir[Configuration['sifttter_redux']['dayone_local_filepath'] + '/*'].empty?
|
209
|
+
DBU.local_target = "#{Configuration['sifttter_redux']['dayone_local_filepath']}/*"
|
210
|
+
DBU.remote_target = Configuration['sifttter_redux']['dayone_remote_filepath']
|
211
|
+
DBU.message = 'Uploading Day One entries to Dropbox...'
|
212
|
+
DBU.upload
|
206
213
|
end
|
207
214
|
|
208
215
|
# Remove any downloaded local files that we no longer need.
|
209
216
|
dirs = [
|
210
|
-
|
211
|
-
|
217
|
+
Configuration['sifttter_redux']['dayone_local_filepath'],
|
218
|
+
Configuration['sifttter_redux']['sifttter_local_filepath']
|
212
219
|
]
|
213
220
|
|
214
|
-
|
221
|
+
CLIMessage.info_block('Removing temporary local files...') { dirs.each { |d| FileUtils.rm_rf(d) } }
|
215
222
|
end
|
216
223
|
end
|
217
224
|
end
|
@@ -226,15 +233,13 @@ end
|
|
226
233
|
desc 'Install and initialize dependencies'
|
227
234
|
command :init do |c|
|
228
235
|
c.action do |global_options, options, args|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
SifttterRedux.init if SifttterRedux::CliMessage.prompt("It looks like you've already initialized Sifttter Redux. Do you want to re-initialize?", 'N').downcase == 'y'
|
236
|
+
CLIMessage.section_block('INITIALIZING...') do
|
237
|
+
if File.exists?(Configuration.config_path)
|
238
|
+
SifttterRedux.init if CLIMessage.prompt("It looks like you've already initialized Sifttter Redux. Do you want to re-initialize?", 'N').downcase == 'y'
|
233
239
|
else
|
234
240
|
SifttterRedux.init
|
235
241
|
end
|
236
242
|
end
|
237
|
-
|
238
243
|
end
|
239
244
|
end
|
240
245
|
|
data/lib/sifttter_redux.rb
CHANGED
@@ -13,8 +13,6 @@ require 'sifttter_redux/version.rb'
|
|
13
13
|
# ======================================================
|
14
14
|
|
15
15
|
module SifttterRedux
|
16
|
-
using CliMessage
|
17
|
-
using Configuration
|
18
16
|
|
19
17
|
# ----------------------------------------------------
|
20
18
|
# Constants
|
@@ -23,6 +21,7 @@ module SifttterRedux
|
|
23
21
|
DO_REMOTE_FILEPATH = "/Apps/Day\\ One/Journal.dayone/entries"
|
24
22
|
DO_LOCAL_FILEPATH = '/tmp/dayone'
|
25
23
|
SRD_CONFIG_FILEPATH = File.join(ENV['HOME'], '.sifttter_redux')
|
24
|
+
SRD_LOG_FILEPATH = File.join(ENV['HOME'], '.sifttter_redux_log')
|
26
25
|
SFT_LOCAL_FILEPATH = '/tmp/sifttter'
|
27
26
|
SFT_REMOTE_FILEPATH = '/Apps/ifttt/sifttter'
|
28
27
|
|
@@ -45,7 +44,7 @@ module SifttterRedux
|
|
45
44
|
DBU::install_wizard
|
46
45
|
|
47
46
|
# Collect other misc. preferences.
|
48
|
-
|
47
|
+
CLIMessage.section_block('COLLECTING PREFERENCES...') do
|
49
48
|
pref_prompts = [
|
50
49
|
{
|
51
50
|
prompt: 'Location for downloaded Sifttter files from Dropbox',
|
@@ -74,11 +73,13 @@ module SifttterRedux
|
|
74
73
|
]
|
75
74
|
|
76
75
|
pref_prompts.each do |prompt|
|
77
|
-
pref =
|
76
|
+
pref = CLIMessage.prompt(prompt[:prompt], prompt[:default])
|
78
77
|
Configuration[prompt[:section]].merge!(prompt[:key] => pref)
|
79
78
|
end
|
80
79
|
end
|
81
|
-
|
80
|
+
|
81
|
+
Methadone::CLILogging.info("Configuration values: #{ Configuration.dump }")
|
82
|
+
|
82
83
|
Configuration.save
|
83
84
|
end
|
84
85
|
|
@@ -5,7 +5,7 @@ module SifttterRedux
|
|
5
5
|
# CliManager Module
|
6
6
|
# Singleton to manage common CLI interfacing
|
7
7
|
# ======================================================
|
8
|
-
module
|
8
|
+
module CLIMessage
|
9
9
|
# ----------------------------------------------------
|
10
10
|
# error method
|
11
11
|
#
|
@@ -13,7 +13,8 @@ module SifttterRedux
|
|
13
13
|
# @param m The message to output
|
14
14
|
# @return Void
|
15
15
|
# ----------------------------------------------------
|
16
|
-
def self.error(m)
|
16
|
+
def self.error(m, log = true)
|
17
|
+
Methadone::CLILogging.error(m) if log
|
17
18
|
puts "---> ERROR: #{ m }".red
|
18
19
|
end
|
19
20
|
|
@@ -24,7 +25,8 @@ module SifttterRedux
|
|
24
25
|
# @param m The message to output
|
25
26
|
# @return Void
|
26
27
|
# ----------------------------------------------------
|
27
|
-
def self.info(m)
|
28
|
+
def self.info(m, log = true)
|
29
|
+
Methadone::CLILogging.info(m) if log
|
28
30
|
puts "---> INFO: #{ m }".blue
|
29
31
|
end
|
30
32
|
|
@@ -37,10 +39,10 @@ module SifttterRedux
|
|
37
39
|
# @param multiline Whether the message should be multiline
|
38
40
|
# @return Void
|
39
41
|
# ----------------------------------------------------
|
40
|
-
def self.info_block(m1, m2 = 'Done.', multiline = false)
|
42
|
+
def self.info_block(m1, m2 = 'Done.', multiline = false, log = true)
|
41
43
|
if block_given?
|
42
44
|
if multiline
|
43
|
-
info(m1)
|
45
|
+
info(m1, log)
|
44
46
|
else
|
45
47
|
print "---> INFO: #{ m1 }".blue
|
46
48
|
end
|
@@ -48,12 +50,14 @@ module SifttterRedux
|
|
48
50
|
yield
|
49
51
|
|
50
52
|
if multiline
|
51
|
-
info(m2)
|
53
|
+
info(m2, log)
|
52
54
|
else
|
53
55
|
puts m2.blue
|
54
56
|
end
|
55
57
|
else
|
56
|
-
|
58
|
+
error = 'Did not specify a valid block'
|
59
|
+
Methadone::CLILogging.error(error) if log
|
60
|
+
fail ArgumentError, error
|
57
61
|
end
|
58
62
|
end
|
59
63
|
|
@@ -83,7 +87,8 @@ module SifttterRedux
|
|
83
87
|
# @param m The message to output
|
84
88
|
# @return Void
|
85
89
|
# ----------------------------------------------------
|
86
|
-
def self.section(m)
|
90
|
+
def self.section(m, log = true)
|
91
|
+
Methadone::CLILogging.info(m) if log
|
87
92
|
puts "#### #{ m }".purple
|
88
93
|
end
|
89
94
|
|
@@ -97,17 +102,19 @@ module SifttterRedux
|
|
97
102
|
# @param multiline A multiline message or not
|
98
103
|
# @return Void
|
99
104
|
# ----------------------------------------------------
|
100
|
-
def self.section_block(m, multiline = true)
|
105
|
+
def self.section_block(m, multiline = true, log = true)
|
101
106
|
if block_given?
|
102
107
|
if multiline
|
103
|
-
section(m)
|
108
|
+
section(m, log)
|
104
109
|
else
|
105
110
|
print "#### #{ m }".purple
|
106
111
|
end
|
107
112
|
|
108
113
|
yield
|
109
114
|
else
|
110
|
-
|
115
|
+
error = 'Did not specify a valid block'
|
116
|
+
Methadone::CLILogging.error(error) if log
|
117
|
+
fail ArgumentError, error
|
111
118
|
end
|
112
119
|
end
|
113
120
|
|
@@ -118,7 +125,8 @@ module SifttterRedux
|
|
118
125
|
# @param m The message to output
|
119
126
|
# @return Void
|
120
127
|
# ----------------------------------------------------
|
121
|
-
def self.success(m)
|
128
|
+
def self.success(m, log = true)
|
129
|
+
Methadone::CLILogging.info(m) if log
|
122
130
|
puts "---> SUCCESS: #{ m }".green
|
123
131
|
end
|
124
132
|
|
@@ -129,7 +137,8 @@ module SifttterRedux
|
|
129
137
|
# @param m The message to output
|
130
138
|
# @return Void
|
131
139
|
# ----------------------------------------------------
|
132
|
-
def self.warning(m)
|
140
|
+
def self.warning(m, log = true)
|
141
|
+
Methadone::CLILogging.warn(m) if log
|
133
142
|
puts "---> WARNING: #{ m }".yellow
|
134
143
|
end
|
135
144
|
end
|
@@ -33,7 +33,9 @@ module SifttterRedux
|
|
33
33
|
@data[section_name] = {}
|
34
34
|
@data[section_name].merge!(hash)
|
35
35
|
else
|
36
|
-
|
36
|
+
error = "Parameter is not a Hash: #{hash}"
|
37
|
+
Methadone::CLILogging.error(error)
|
38
|
+
fail ArgumentError, error
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
@@ -48,7 +50,7 @@ module SifttterRedux
|
|
48
50
|
if !self.section_exists?(section_name)
|
49
51
|
@data[section_name] = {}
|
50
52
|
else
|
51
|
-
|
53
|
+
CLIMessage.warning("Can't create already-existing section: #{section_name}")
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
@@ -73,7 +75,7 @@ module SifttterRedux
|
|
73
75
|
if self.section_exists?(section_name)
|
74
76
|
@data.delete(section_name)
|
75
77
|
else
|
76
|
-
|
78
|
+
CLIMessage.warning("Can't delete non-existing section: #{section_name}")
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
@@ -19,7 +19,11 @@ module SifttterRedux
|
|
19
19
|
# @return Range
|
20
20
|
# ------------------------------------------------------
|
21
21
|
def self.last_n_days(num_days, include_today = false)
|
22
|
-
|
22
|
+
if num_days < 0
|
23
|
+
error = 'Cannot specify a negative number of days'
|
24
|
+
Methadone::CLILogging.error(error)
|
25
|
+
fail ArgumentError, error
|
26
|
+
end
|
23
27
|
|
24
28
|
if include_today
|
25
29
|
(Date.today - num_days..Date.today)
|
@@ -38,7 +42,11 @@ module SifttterRedux
|
|
38
42
|
# @return Range
|
39
43
|
# ------------------------------------------------------
|
40
44
|
def self.last_n_weeks(num_weeks = 0, include_today = false)
|
41
|
-
|
45
|
+
if num_weeks < 0
|
46
|
+
error = 'Cannot specify a negative number of weeks'
|
47
|
+
Methadone::CLILogging.error(error)
|
48
|
+
fail ArgumentError, error
|
49
|
+
end
|
42
50
|
|
43
51
|
beginning_date = Date.today - Date.today.wday + 1
|
44
52
|
end_date = Date.today - Date.today.wday + 7
|
@@ -66,23 +74,39 @@ module SifttterRedux
|
|
66
74
|
# @return Range
|
67
75
|
# ------------------------------------------------------
|
68
76
|
def self.range(start_date, end_date, include_today = false)
|
69
|
-
|
77
|
+
if start_date.nil? && !end_date.nil?
|
78
|
+
error = "You can't specify -t without specifying -f"
|
79
|
+
Methadone::CLILogging.error(error)
|
80
|
+
fail ArgumentError, error
|
81
|
+
end
|
70
82
|
|
71
83
|
begin
|
72
84
|
chronic_start_date = Chronic.parse(start_date).to_date
|
73
85
|
rescue
|
74
|
-
|
86
|
+
unless start_date.nil?
|
87
|
+
error = "Invalid date provided to Chronic: #{ start_date }"
|
88
|
+
Methadone::CLILogging.error(error)
|
89
|
+
fail ArgumentError, error
|
90
|
+
end
|
75
91
|
nil
|
76
92
|
end
|
77
93
|
|
78
94
|
begin
|
79
95
|
chronic_end_date = Chronic.parse(end_date).to_date
|
80
96
|
rescue
|
81
|
-
|
97
|
+
unless end_date.nil?
|
98
|
+
error = "Invalid date provided to Chronic: #{ end_date }"
|
99
|
+
Methadone::CLILogging.error(error)
|
100
|
+
fail ArgumentError, error
|
101
|
+
end
|
82
102
|
nil
|
83
103
|
end
|
84
104
|
|
85
|
-
|
105
|
+
if chronic_end_date && chronic_start_date > chronic_end_date
|
106
|
+
error = 'The start date must be before or equal to the end date'
|
107
|
+
Methadone::CLILogging.error(error)
|
108
|
+
fail ArgumentError, error
|
109
|
+
end
|
86
110
|
|
87
111
|
unless chronic_start_date.nil?
|
88
112
|
if chronic_end_date.nil?
|
data/lib/sifttter_redux/dbu.rb
CHANGED
@@ -17,7 +17,7 @@ module SifttterRedux
|
|
17
17
|
# ----------------------------------------------------
|
18
18
|
def self.download
|
19
19
|
if !@local_path.nil? && !@remote_path.nil?
|
20
|
-
|
20
|
+
CLIMessage.info_block(@message ||= DEFAULT_MESSAGE, 'Done.', SifttterRedux.verbose) do
|
21
21
|
if SifttterRedux.verbose
|
22
22
|
system "#{ @dbu } download #{ @remote_path } #{ @local_path }"
|
23
23
|
else
|
@@ -25,7 +25,9 @@ module SifttterRedux
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
else
|
28
|
-
|
28
|
+
error = 'Local and remote DBU targets cannot be nil'
|
29
|
+
Methadone::CLILogging.error(error)
|
30
|
+
fail ArgumentError, error
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -39,10 +41,10 @@ module SifttterRedux
|
|
39
41
|
def self.install_wizard
|
40
42
|
valid_directory_chosen = false
|
41
43
|
|
42
|
-
|
44
|
+
CLIMessage.section_block('CONFIGURING DROPBOX UPLOADER...') do
|
43
45
|
until valid_directory_chosen
|
44
46
|
# Prompt the user for a location to save Dropbox Uploader. '
|
45
|
-
path =
|
47
|
+
path = CLIMessage.prompt('Location for Dropbox-Uploader', DBU_LOCAL_FILEPATH)
|
46
48
|
path.chop! if path.end_with?('/')
|
47
49
|
path = '/usr/local/opt' if path.empty?
|
48
50
|
|
@@ -52,15 +54,15 @@ module SifttterRedux
|
|
52
54
|
path << '/Dropbox-Uploader'
|
53
55
|
|
54
56
|
if File.directory?(path)
|
55
|
-
|
57
|
+
CLIMessage.warning("Using pre-existing Dropbox Uploader at #{ path }...")
|
56
58
|
else
|
57
|
-
|
59
|
+
CLIMessage.info_block("Downloading Dropbox Uploader to #{ path }...", 'Done.', true) do
|
58
60
|
system "git clone https://github.com/andreafabrizi/Dropbox-Uploader.git #{ path }"
|
59
61
|
end
|
60
62
|
end
|
61
63
|
|
62
64
|
# If the user has never configured Dropbox Uploader, have them do it here.
|
63
|
-
system "#{ @dbu }" unless File.exists?(CONFIG_FILEPATH)
|
65
|
+
CLIMessage.info_block('Initializing Dropbox Uploader...') { system "#{ @dbu }" } unless File.exists?(CONFIG_FILEPATH)
|
64
66
|
|
65
67
|
Configuration.add_section('db_uploader')
|
66
68
|
Configuration['db_uploader'].merge!('local_filepath' => path)
|
@@ -127,7 +129,7 @@ module SifttterRedux
|
|
127
129
|
# ----------------------------------------------------
|
128
130
|
def self.upload
|
129
131
|
if !@local_path.nil? && !@remote_path.nil?
|
130
|
-
|
132
|
+
CLIMessage.info_block(@message ||= DEFAULT_MESSAGE, 'Done.', SifttterRedux.verbose) do
|
131
133
|
if SifttterRedux.verbose
|
132
134
|
system "#{ @dbu } upload #{ @local_path } #{ @remote_path }"
|
133
135
|
else
|
@@ -135,7 +137,9 @@ module SifttterRedux
|
|
135
137
|
end
|
136
138
|
end
|
137
139
|
else
|
138
|
-
|
140
|
+
error = 'Local and remote DBU targets cannot be nil'
|
141
|
+
Methadone::CLILogging.error(error)
|
142
|
+
fail ArgumentError, error
|
139
143
|
end
|
140
144
|
end
|
141
145
|
end
|
@@ -77,7 +77,7 @@ module SifttterRedux
|
|
77
77
|
end
|
78
78
|
|
79
79
|
if projects.length <=0
|
80
|
-
|
80
|
+
CLIMessage.warning('No entries found...')
|
81
81
|
end
|
82
82
|
|
83
83
|
if projects.length > 0
|
@@ -91,7 +91,7 @@ module SifttterRedux
|
|
91
91
|
fh = File.new(File.expand_path(Configuration['sifttter_redux']['dayone_local_filepath'] + '/' + uuid + '.doentry'), 'w+')
|
92
92
|
fh.puts template.result(binding)
|
93
93
|
fh.close
|
94
|
-
|
94
|
+
CLIMessage.success("Entry logged for #{ date_for_title }...")
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
data/sifttter_redux.gemspec
CHANGED
data/test/cli_message_test.rb
CHANGED
@@ -1,52 +1,55 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'methadone'
|
2
|
+
require 'test_helper'
|
3
|
+
require File.join(File.dirname(__FILE__), '..', 'lib/sifttter_redux/cli_message.rb')
|
3
4
|
|
4
|
-
|
5
|
+
include Methadone::CLILogging
|
6
|
+
|
7
|
+
class CLIMessageTest < Test::Unit::TestCase
|
5
8
|
def test_error_message
|
6
|
-
assert_output('---> ERROR: test'.red + "\n") { SifttterRedux::
|
9
|
+
assert_output('---> ERROR: test'.red + "\n") { SifttterRedux::CLIMessage.error('test', false) }
|
7
10
|
end
|
8
11
|
|
9
12
|
def test_info_message
|
10
|
-
assert_output('---> INFO: test'.blue + "\n") { SifttterRedux::
|
13
|
+
assert_output('---> INFO: test'.blue + "\n") { SifttterRedux::CLIMessage.info('test', false) }
|
11
14
|
end
|
12
15
|
|
13
16
|
def test_info_block_single_line
|
14
17
|
assert_output("---> INFO: start".blue + "body\n" + 'end'.blue + "\n") do
|
15
|
-
SifttterRedux::
|
18
|
+
SifttterRedux::CLIMessage.info_block('start', 'end', false, false) { puts 'body' }
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
19
22
|
def test_info_block_multiline
|
20
23
|
assert_output("---> INFO: start".blue + "\nbody\n" + '---> INFO: end'.blue + "\n") do
|
21
|
-
SifttterRedux::
|
24
|
+
SifttterRedux::CLIMessage.info_block('start', 'end', true, false) { puts 'body' }
|
22
25
|
end
|
23
26
|
end
|
24
27
|
|
25
28
|
def test_info_block_no_block
|
26
29
|
assert_raise ArgumentError do
|
27
|
-
SifttterRedux::
|
30
|
+
SifttterRedux::CLIMessage.info_block('start', 'end', true, false)
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
34
|
def test_prompt
|
32
|
-
assert_equal(SifttterRedux::
|
35
|
+
assert_equal(SifttterRedux::CLIMessage.prompt('Pick the default option', 'default'), 'default')
|
33
36
|
end
|
34
37
|
|
35
38
|
def test_section_message
|
36
|
-
assert_output('#### test'.purple + "\n") { SifttterRedux::
|
39
|
+
assert_output('#### test'.purple + "\n") { SifttterRedux::CLIMessage.section('test', false) }
|
37
40
|
end
|
38
41
|
|
39
42
|
def test_section_block_single_line
|
40
43
|
assert_output("#### section".purple + "\nbody\n") do
|
41
|
-
SifttterRedux::
|
44
|
+
SifttterRedux::CLIMessage.section_block('section', true, false) { puts 'body' }
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
48
|
def test_success_message
|
46
|
-
assert_output('---> SUCCESS: test'.green + "\n") { SifttterRedux::
|
49
|
+
assert_output('---> SUCCESS: test'.green + "\n") { SifttterRedux::CLIMessage.success('test', false) }
|
47
50
|
end
|
48
51
|
|
49
52
|
def test_warning_message
|
50
|
-
assert_output('---> WARNING: test'.yellow + "\n") { SifttterRedux::
|
53
|
+
assert_output('---> WARNING: test'.yellow + "\n") { SifttterRedux::CLIMessage.warning('test', false) }
|
51
54
|
end
|
52
55
|
end
|
data/test/configuration_test.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require File.join(File.dirname(__FILE__),
|
1
|
+
require 'test_helper'
|
2
|
+
require File.join(File.dirname(__FILE__), '..', 'lib/sifttter_redux/configuration.rb')
|
3
3
|
|
4
4
|
class ConfigurationTest < Test::Unit::TestCase
|
5
5
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require File.join(File.dirname(__FILE__),
|
1
|
+
require 'date'
|
2
|
+
require 'test_helper'
|
3
|
+
require File.join(File.dirname(__FILE__), '..', 'lib/sifttter_redux/date_range_maker.rb')
|
4
4
|
|
5
5
|
class DateRangeMakerTest < Test::Unit::TestCase
|
6
6
|
def test_today
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sifttter-redux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Bach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.9.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: methadone
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.1
|
55
69
|
description: A customized IFTTT-to-Day One service that allows for smart installation
|
56
70
|
and automated running on a standalone *NIX device (such as a Raspberry Pi).
|
57
71
|
email: bachya1208@gmail.com
|