sifttter-redux 0.5.4 → 0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ :prompts:
2
+ - prompt: Where do you want to download Sifttter files to (temporarily)?
3
+ default: /tmp/sifttter
4
+ key: sifttter_local_filepath
5
+ section: sifttter_redux
6
+ - prompt: Where are your Sifttter files located in Dropbox?
7
+ default: /Apps/ifttt/sifttter
8
+ key: sifttter_remote_filepath
9
+ section: sifttter_redux
10
+ - prompt: Where do you want to download Day One files to (temporarily)?
11
+ default: /tmp/dayone
12
+ key: dayone_local_filepath
13
+ section: sifttter_redux
14
+ - prompt: Where are your Day One files located in Dropbox?
15
+ default: /Apps/Day\ One/Journal.dayone/entries
16
+ key: dayone_remote_filepath
17
+ section: sifttter_redux
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'sifttter_redux/version'
4
+ require 'sifttter-redux/constants'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'sifttter-redux'
@@ -27,5 +27,6 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency('rdoc', '4.1.1')
28
28
  spec.add_development_dependency('aruba', '0.5.4')
29
29
  spec.add_runtime_dependency('chronic', '0.10.2')
30
+ spec.add_runtime_dependency('cliutils', '1.1.0')
30
31
  spec.add_runtime_dependency('gli','2.9.0')
31
32
  end
@@ -1,6 +1,6 @@
1
1
  require 'date'
2
2
  require 'test_helper'
3
- require File.join(File.dirname(__FILE__), '..', 'lib/sifttter_redux/date_range_maker.rb')
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
File without changes
@@ -0,0 +1,13 @@
1
+ ---
2
+ :sifttter_redux:
3
+ :config_location: "/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/.sifttter_redux"
4
+ :log_level: WARN
5
+ :version: 0.5.4
6
+ :sifttter_local_filepath: "/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/sifttter_download"
7
+ :sifttter_remote_filepath: "/Apps/ifttt/Sifttter"
8
+ :dayone_local_filepath: "/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/day_one_download"
9
+ :dayone_remote_filepath: "/Apps/Day\\ One/Journal.dayone/entries"
10
+ :db_uploader:
11
+ :base_filepath: "/usr/local/opt"
12
+ :dbu_filepath: "/usr/local/opt/Dropbox-Uploader"
13
+ :exe_filepath: "/usr/local/opt/Dropbox-Uploader/dropbox_uploader.sh"
@@ -0,0 +1,10 @@
1
+ # Logfile created on 2014-03-22 08:12:43 -0600 by logger.rb/44203
2
+ D, [2014-03-22T08:12:43.563366 #13209] DEBUG -- : CONFIGURING DROPBOX UPLOADER...
3
+ D, [2014-03-22T08:12:43.563826 #13209] DEBUG -- : Answer to "Location for Dropbox-Uploader": /usr/local/opt
4
+ W, [2014-03-22T08:12:43.563882 #13209] WARN -- : Using pre-existing Dropbox Uploader at /usr/local/opt/Dropbox-Uploader...
5
+ D, [2014-03-22T08:12:43.563920 #13209] DEBUG -- : COLLECTING PREFERENCES...
6
+ D, [2014-03-22T08:12:43.564297 #13209] DEBUG -- : Answer to "Temporary path to download Sifttter files to": ~/sifttter_download
7
+ D, [2014-03-22T08:12:43.564661 #13209] DEBUG -- : Answer to "Path to Sifttter files in Dropbox": /Apps/ifttt/Sifttter
8
+ D, [2014-03-22T08:12:43.564995 #13209] DEBUG -- : Answer to "Temporary path to download Day One files to": ~/day_one_download
9
+ D, [2014-03-22T08:12:43.565542 #13209] DEBUG -- : Answer to "Path to Day One files in Dropbox": /Apps/Day\ One/Journal.dayone/entries
10
+ D, [2014-03-22T08:12:43.565605 #13209] DEBUG -- : Configuration values: {:sifttter_redux=>{:config_location=>"/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/.sifttter_redux", :log_level=>"WARN", :version=>"0.5.4", :sifttter_local_filepath=>"/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/sifttter_download", :sifttter_remote_filepath=>"/Apps/ifttt/Sifttter", :dayone_local_filepath=>"/Users/abach/Git/sifttter-redux/features/support/../../tmp/srd/day_one_download", :dayone_remote_filepath=>"/Apps/Day\\ One/Journal.dayone/entries"}, :db_uploader=>{:base_filepath=>"/usr/local/opt", :dbu_filepath=>"/usr/local/opt/Dropbox-Uploader", :exe_filepath=>"/usr/local/opt/Dropbox-Uploader/dropbox_uploader.sh"}}
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.5.4
4
+ version: '0.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-03-19 00:00:00.000000000 Z
11
+ date: 2014-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.10.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: cliutils
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.1.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.1.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: gli
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,18 +114,22 @@ files:
100
114
  - README.md
101
115
  - Rakefile
102
116
  - bin/srd
103
- - lib/sifttter_redux.rb
104
- - lib/sifttter_redux/cli_message.rb
105
- - lib/sifttter_redux/configuration.rb
106
- - lib/sifttter_redux/date_range_maker.rb
107
- - lib/sifttter_redux/dropbox_uploader.rb
108
- - lib/sifttter_redux/sifttter.rb
109
- - lib/sifttter_redux/version.rb
110
- - sifttter_redux.gemspec
111
- - test/cli_message_test.rb
112
- - test/configuration_test.rb
117
+ - features/1.ui.feature
118
+ - features/2.initialization.feature
119
+ - features/step_definitions/sifttter-redux_steps.rb
120
+ - features/support/env.rb
121
+ - lib/sifttter-redux.rb
122
+ - lib/sifttter-redux/constants.rb
123
+ - lib/sifttter-redux/date-range-maker.rb
124
+ - lib/sifttter-redux/dropbox-uploader.rb
125
+ - lib/sifttter-redux/sifttter.rb
126
+ - res/preference_prompts.yaml
127
+ - sifttter-redux.gemspec
113
128
  - test/date_range_maker_test.rb
114
129
  - test/test_helper.rb
130
+ - tmp/srd/.dropbox_uploader
131
+ - tmp/srd/.sifttter_redux
132
+ - tmp/srd/.sifttter_redux_log
115
133
  homepage: https://github.com/bachya/sifttter-redux
116
134
  licenses:
117
135
  - MIT
@@ -138,8 +156,10 @@ signing_key:
138
156
  specification_version: 4
139
157
  summary: Automated IFTTT to Day One engine.
140
158
  test_files:
141
- - test/cli_message_test.rb
142
- - test/configuration_test.rb
159
+ - features/1.ui.feature
160
+ - features/2.initialization.feature
161
+ - features/step_definitions/sifttter-redux_steps.rb
162
+ - features/support/env.rb
143
163
  - test/date_range_maker_test.rb
144
164
  - test/test_helper.rb
145
165
  has_rdoc:
@@ -1,270 +0,0 @@
1
- require 'logger'
2
- require 'readline'
3
-
4
- module SifttterRedux
5
- # ======================================================
6
- # CliManager Module
7
- # Singleton to manage common CLI interfacing
8
- # ======================================================
9
- module CLIMessage
10
- # ====================================================
11
- # Methods
12
- # ====================================================
13
- # ----------------------------------------------------
14
- # activate_logging method
15
- #
16
- # Creates a simple logger to use
17
- # @return Void
18
- # ----------------------------------------------------
19
- def self.activate_logging
20
- @@logger = Logger.new(File.join(ENV['HOME'], '.sifttter_redux_log'))
21
- end
22
-
23
- # ----------------------------------------------------
24
- # deactivate_logging method
25
- #
26
- # Stops logging to file.
27
- # @return Void
28
- # ----------------------------------------------------
29
- def self.deactivate_logging
30
- @@logger = nil
31
- end
32
-
33
- # ----------------------------------------------------
34
- # debug method
35
- #
36
- # Logs a debug message to the logfile.
37
- # @param m The message to log
38
- # @return Void
39
- # ----------------------------------------------------
40
- def self.debug(m)
41
- @@logger.debug(m.blue) unless @@logger.nil?
42
- end
43
-
44
- # ----------------------------------------------------
45
- # error method
46
- #
47
- # Outputs a formatted-red error message.
48
- # @param m The message to output
49
- # @return Void
50
- # ----------------------------------------------------
51
- def self.error(m)
52
- puts "# #{ m }".red
53
- @@logger.error(m.red) unless @@logger.nil?
54
- end
55
-
56
- # ----------------------------------------------------
57
- # info method
58
- #
59
- # Outputs a formatted-blue informational message.
60
- # @param m The message to output
61
- # @return Void
62
- # ----------------------------------------------------
63
- def self.info(m)
64
- puts "# #{ m }".blue
65
- @@logger.debug(m.blue) unless @@logger.nil?
66
- end
67
-
68
- # ----------------------------------------------------
69
- # info_block method
70
- #
71
- # Wraps a block in an opening and closing info message.
72
- # @param m1 The opening message to output
73
- # @param m2 The closing message to output
74
- # @param multiline Whether the message should be multiline
75
- # @return Void
76
- # ----------------------------------------------------
77
- def self.info_block(m1, m2 = 'Done.', multiline = false)
78
- if block_given?
79
- if multiline
80
- info(m1)
81
- else
82
- print "# #{ m1 }".blue
83
- end
84
-
85
- yield
86
-
87
- if multiline
88
- info(m2)
89
- else
90
- puts m2.blue
91
- end
92
- else
93
- fail ArgumentError, 'Did not specify a valid block'
94
- end
95
- end
96
-
97
- # ----------------------------------------------------
98
- # log_level method
99
- #
100
- # Creates a simple logger to use
101
- # @return Void
102
- # ----------------------------------------------------
103
- LOG_LEVELS = {
104
- 'DEBUG' => Logger::DEBUG,
105
- 'INFO' => Logger::INFO,
106
- 'WARN' => Logger::WARN,
107
- 'ERROR' => Logger::ERROR,
108
- 'FATAL' => Logger::FATAL,
109
- 'UNKNOWN' => Logger::UNKNOWN
110
- }
111
-
112
- def self.log_level(level)
113
- @@logger.level = LOG_LEVELS[level] if LOG_LEVELS.key?(level)
114
- end
115
-
116
- # ----------------------------------------------------
117
- # prompt method
118
- #
119
- # Outputs a prompt, collects the user's response, and
120
- # returns it.
121
- # @param prompt The prompt to output
122
- # @param default The default option
123
- # @return String
124
- # ----------------------------------------------------
125
- def self.prompt(prompt, default = nil, start_dir = '')
126
- Readline.completion_append_character = nil
127
- Readline.completion_proc = lambda do |prefix|
128
- files = Dir["#{start_dir}#{prefix}*"]
129
- files.
130
- map { |f| File.expand_path(f) }.
131
- map { |f| File.directory?(f) ? f + "/" : f }
132
- end
133
- choice = Readline.readline("# #{ prompt }#{ default.nil? ? ':' : " [default: #{ default }]:" } ".green)
134
- if choice.empty?
135
- r = default
136
- else
137
- r = choice
138
- end
139
- @@logger.debug("Answer to \"#{ prompt }\": #{ r }") unless @@logger.nil?
140
- r
141
- end
142
-
143
- # ----------------------------------------------------
144
- # section method
145
- #
146
- # Outputs a formatted-purple section message.
147
- # @param m The message to output
148
- # @return Void
149
- # ----------------------------------------------------
150
- def self.section(m)
151
- puts "---> #{ m }".purple
152
- @@logger.debug(m.purple) unless @@logger.nil?
153
- end
154
-
155
- # ----------------------------------------------------
156
- # section_block method
157
- #
158
- # Wraps a block in an opening and closing section
159
- # message.
160
- # @param m1 The opening message to output
161
- # @param m2 The closing message to output
162
- # @param multiline A multiline message or not
163
- # @return Void
164
- # ----------------------------------------------------
165
- def self.section_block(m, multiline = true)
166
- if block_given?
167
- if multiline
168
- section(m)
169
- else
170
- print "---> #{ m }".purple
171
- end
172
-
173
- yield
174
- else
175
- error = 'Did not specify a valid block'
176
- fail ArgumentError, error
177
- end
178
- end
179
-
180
- # ----------------------------------------------------
181
- # success method
182
- #
183
- # Outputs a formatted-green success message.
184
- # @param m The message to output
185
- # @return Void
186
- # ----------------------------------------------------
187
- def self.success(m)
188
- puts "# #{ m }".green
189
- @@logger.debug(m.green) unless @@logger.nil?
190
- end
191
-
192
- # ----------------------------------------------------
193
- # warning method
194
- #
195
- # Outputs a formatted-yellow warning message.
196
- # @param m The message to output
197
- # @return Void
198
- # ----------------------------------------------------
199
- def self.warning(m)
200
- puts "# #{ m }".yellow
201
- @@logger.warn(m.yellow) unless @@logger.nil?
202
- end
203
- end
204
- end
205
-
206
- # ======================================================
207
- # String Class
208
- # ======================================================
209
- class String
210
- # ----------------------------------------------------
211
- # colorize method
212
- #
213
- # Outputs a string in a formatted color.
214
- # @param color_code The code to use
215
- # @return Void
216
- # ----------------------------------------------------
217
- def colorize(color_code)
218
- "\e[#{ color_code }m#{ self }\e[0m"
219
- end
220
-
221
- # ----------------------------------------------------
222
- # blue method
223
- #
224
- # Convenience method to output a blue string
225
- # @return Void
226
- # ----------------------------------------------------
227
- def blue
228
- colorize(34)
229
- end
230
-
231
- # ----------------------------------------------------
232
- # green method
233
- #
234
- # Convenience method to output a green string
235
- # @return Void
236
- # ----------------------------------------------------
237
- def green
238
- colorize(32)
239
- end
240
-
241
- # ----------------------------------------------------
242
- # purple method
243
- #
244
- # Convenience method to output a purple string
245
- # @return Void
246
- # ----------------------------------------------------
247
- def purple
248
- colorize(35)
249
- end
250
-
251
- # ----------------------------------------------------
252
- # red method
253
- #
254
- # Convenience method to output a red string
255
- # @return Void
256
- # ----------------------------------------------------
257
- def red
258
- colorize(31)
259
- end
260
-
261
- # ----------------------------------------------------
262
- # yellow method
263
- #
264
- # Convenience method to output a yellow string
265
- # @return Void
266
- # ----------------------------------------------------
267
- def yellow
268
- colorize(33)
269
- end
270
- end
@@ -1,89 +0,0 @@
1
- require 'yaml'
2
-
3
- module SifttterRedux
4
- # ======================================================
5
- # Configuration Module
6
- #
7
- # Manages any configuration values and the flat file
8
- # into which they get stored.
9
- # ======================================================
10
- module Configuration
11
- extend self
12
-
13
- @_data = {}
14
- # ====================================================
15
- # Methods
16
- # ====================================================
17
- # ----------------------------------------------------
18
- # deep_merge! method
19
- #
20
- # Deep merges two hashes.
21
- # deep_merge by Stefan Rusterholz;
22
- # see http://www.ruby-forum.com/topic/142809
23
- # @return Void
24
- # ----------------------------------------------------
25
- def deep_merge!(target, data)
26
- merger = proc{|key, v1, v2|
27
- Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
28
- target.merge! data, &merger
29
- end
30
-
31
- def method_missing(name, *args, &block)
32
- @_data[name.to_sym] || @_data.merge!(name.to_sym => {})
33
- end
34
-
35
- def self.add_section(section_name)
36
- @_data[section_name] = {} unless @_data.key?(section_name)
37
- end
38
-
39
- def self.config_path
40
- @_config_path
41
- end
42
-
43
- def self.delete_section(section_name)
44
- @_data.delete(section_name) if @_data.key?(section_name)
45
- end
46
-
47
- def self.dump
48
- @_data
49
- end
50
-
51
- # ----------------------------------------------------
52
- # load method
53
- #
54
- # Loads the configuration data (if it exists) and sets
55
- # the filepath to the flat file.
56
- # @param path The filepath
57
- # @return Void
58
- # ----------------------------------------------------
59
- def self.load(path)
60
- @_config_path = path
61
-
62
- if File.exists?(path)
63
- data = YAML.load_file(path)
64
- deep_merge!(@_data, data)
65
- end
66
- end
67
-
68
- # ----------------------------------------------------
69
- # reset method
70
- #
71
- # Clears the configuration data.
72
- # @return Void
73
- # ----------------------------------------------------
74
- def self.reset
75
- @_data = {}
76
- end
77
-
78
- # ----------------------------------------------------
79
- # save method
80
- #
81
- # Saves the configuration data to the previously
82
- # stored flat file.
83
- # @return Void
84
- # ----------------------------------------------------
85
- def self.save
86
- File.open(@_config_path, 'w') { |f| f.write(@_data.to_yaml) }
87
- end
88
- end
89
- end