sifttter-redux 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/HISTORY.md +8 -2
- data/README.md +3 -3
- data/bin/srd +158 -155
- data/lib/sifttter_redux.rb +105 -0
- data/lib/sifttter_redux/cli_message.rb +126 -0
- data/lib/sifttter_redux/configuration.rb +122 -0
- data/lib/sifttter_redux/date_range_maker.rb +120 -0
- data/lib/sifttter_redux/dbu.rb +138 -0
- data/lib/sifttter_redux/extensions.rb +65 -0
- data/lib/sifttter_redux/os.rb +48 -0
- data/lib/sifttter_redux/sifttter.rb +98 -0
- data/lib/sifttter_redux/version.rb +3 -0
- data/{sifttter-redux.gemspec → sifttter_redux.gemspec} +4 -5
- data/test/catch_up_test.rb +51 -55
- data/test/test_helper.rb +1 -1
- metadata +21 -32
- data/lib/sifttter-redux.rb +0 -6
- data/lib/sifttter-redux/cli-message.rb +0 -135
- data/lib/sifttter-redux/config-manager.rb +0 -136
- data/lib/sifttter-redux/constants.rb +0 -15
- data/lib/sifttter-redux/date-range-maker.rb +0 -208
- data/lib/sifttter-redux/methods.rb +0 -188
- data/lib/sifttter-redux/os.rb +0 -47
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
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.2
|
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-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.10.2
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: colored
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.2'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.2'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: gli
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,8 +52,8 @@ dependencies:
|
|
66
52
|
- - '='
|
67
53
|
- !ruby/object:Gem::Version
|
68
54
|
version: 2.9.0
|
69
|
-
description:
|
70
|
-
|
55
|
+
description: A customized IFTTT-to-Day One service that allows for smart installation
|
56
|
+
and automated running on a standalone *NIX device (such as a Raspberry Pi).
|
71
57
|
email: bachya1208@gmail.com
|
72
58
|
executables:
|
73
59
|
- srd
|
@@ -77,21 +63,23 @@ extra_rdoc_files:
|
|
77
63
|
- HISTORY.md
|
78
64
|
- LICENSE
|
79
65
|
files:
|
80
|
-
- .gitignore
|
66
|
+
- ".gitignore"
|
81
67
|
- Gemfile
|
82
68
|
- HISTORY.md
|
83
69
|
- LICENSE
|
84
70
|
- README.md
|
85
71
|
- Rakefile
|
86
72
|
- bin/srd
|
87
|
-
- lib/
|
88
|
-
- lib/
|
89
|
-
- lib/
|
90
|
-
- lib/
|
91
|
-
- lib/
|
92
|
-
- lib/
|
93
|
-
- lib/
|
94
|
-
- sifttter
|
73
|
+
- lib/sifttter_redux.rb
|
74
|
+
- lib/sifttter_redux/cli_message.rb
|
75
|
+
- lib/sifttter_redux/configuration.rb
|
76
|
+
- lib/sifttter_redux/date_range_maker.rb
|
77
|
+
- lib/sifttter_redux/dbu.rb
|
78
|
+
- lib/sifttter_redux/extensions.rb
|
79
|
+
- lib/sifttter_redux/os.rb
|
80
|
+
- lib/sifttter_redux/sifttter.rb
|
81
|
+
- lib/sifttter_redux/version.rb
|
82
|
+
- sifttter_redux.gemspec
|
95
83
|
- test/catch_up_test.rb
|
96
84
|
- test/test_helper.rb
|
97
85
|
homepage: https://github.com/bachya/sifttter-redux
|
@@ -100,18 +88,18 @@ licenses:
|
|
100
88
|
metadata: {}
|
101
89
|
post_install_message:
|
102
90
|
rdoc_options:
|
103
|
-
- --charset=UTF-8
|
91
|
+
- "--charset=UTF-8"
|
104
92
|
require_paths:
|
105
93
|
- lib
|
106
94
|
- lib
|
107
95
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
96
|
requirements:
|
109
|
-
- -
|
97
|
+
- - ">="
|
110
98
|
- !ruby/object:Gem::Version
|
111
99
|
version: '0'
|
112
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
101
|
requirements:
|
114
|
-
- -
|
102
|
+
- - ">="
|
115
103
|
- !ruby/object:Gem::Version
|
116
104
|
version: '0'
|
117
105
|
requirements: []
|
@@ -123,3 +111,4 @@ summary: Automated IFTTT to Day One engine.
|
|
123
111
|
test_files:
|
124
112
|
- test/catch_up_test.rb
|
125
113
|
- test/test_helper.rb
|
114
|
+
has_rdoc:
|
data/lib/sifttter-redux.rb
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
#| ======================================================
|
2
|
-
#| CliManager Module
|
3
|
-
#| Singleton to manage common CLI interfacing
|
4
|
-
#| ======================================================
|
5
|
-
module CliMessage
|
6
|
-
|
7
|
-
ERROR = 1
|
8
|
-
INFO = 2
|
9
|
-
SECTION = 3
|
10
|
-
WARNING = 4
|
11
|
-
|
12
|
-
#| ------------------------------------------------------
|
13
|
-
#| error method
|
14
|
-
#|
|
15
|
-
#| Outputs a formatted-red error message.
|
16
|
-
#| @param message The message to output
|
17
|
-
#| @return Void
|
18
|
-
#| ------------------------------------------------------
|
19
|
-
def self.error(message, addNewline = true)
|
20
|
-
if addNewline
|
21
|
-
puts "---> ERROR: #{message}".red
|
22
|
-
else
|
23
|
-
print "---> ERROR: #{message}".red
|
24
|
-
end
|
25
|
-
|
26
|
-
@@last_message_type = ERROR
|
27
|
-
end
|
28
|
-
|
29
|
-
#| ------------------------------------------------------
|
30
|
-
#| finish_message method
|
31
|
-
#|
|
32
|
-
#| Finishes a previous message by appending "DONE" in the
|
33
|
-
#| correct color.
|
34
|
-
#| @return Void
|
35
|
-
#| ------------------------------------------------------
|
36
|
-
def self.finish_message(message)
|
37
|
-
case @@last_message_type
|
38
|
-
when ERROR
|
39
|
-
puts message.red
|
40
|
-
when INFO
|
41
|
-
puts message.blue
|
42
|
-
when SECTION
|
43
|
-
puts message.green
|
44
|
-
when WARNING
|
45
|
-
puts message.yellow
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
#| ------------------------------------------------------
|
50
|
-
#| info method
|
51
|
-
#|
|
52
|
-
#| Outputs a formatted-blue informational message.
|
53
|
-
#| @param message The message to output
|
54
|
-
#| @return Void
|
55
|
-
#| ------------------------------------------------------
|
56
|
-
def self.info(message, addNewline = true)
|
57
|
-
if addNewline
|
58
|
-
puts "---> INFO: #{message}".blue
|
59
|
-
else
|
60
|
-
print "---> INFO: #{message}".blue
|
61
|
-
end
|
62
|
-
|
63
|
-
@@last_message_type = INFO
|
64
|
-
end
|
65
|
-
|
66
|
-
#| ------------------------------------------------------
|
67
|
-
#| prompt method
|
68
|
-
#|
|
69
|
-
#| Outputs a prompt, collects the user's response, and
|
70
|
-
#| returns it.
|
71
|
-
#| @param prompt The prompt to output
|
72
|
-
#| @param default The default option
|
73
|
-
#| @return String
|
74
|
-
#| ------------------------------------------------------
|
75
|
-
def self.prompt(prompt, default)
|
76
|
-
print "#{prompt} [default: #{default}]: "
|
77
|
-
choice = $stdin.gets.chomp
|
78
|
-
if choice.empty?
|
79
|
-
return default
|
80
|
-
else
|
81
|
-
return choice
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
#| ------------------------------------------------------
|
86
|
-
#| section method
|
87
|
-
#|
|
88
|
-
#| Outputs a formatted-orange section message.
|
89
|
-
#| @param message The message to output
|
90
|
-
#| @return Void
|
91
|
-
#| ------------------------------------------------------
|
92
|
-
def self.section(message, addNewline = true)
|
93
|
-
if addNewline
|
94
|
-
puts "#### #{message}".green
|
95
|
-
else
|
96
|
-
print "#### #{message}".green
|
97
|
-
end
|
98
|
-
|
99
|
-
@@last_message_type = SECTION
|
100
|
-
end
|
101
|
-
|
102
|
-
#| ------------------------------------------------------
|
103
|
-
#| success method
|
104
|
-
#|
|
105
|
-
#| Outputs a formatted-green success message.
|
106
|
-
#| @param message The message to output
|
107
|
-
#| @return Void
|
108
|
-
#| ------------------------------------------------------
|
109
|
-
def self.success(message, addNewline = true)
|
110
|
-
if addNewline
|
111
|
-
puts "---> SUCCESS: #{message}".green
|
112
|
-
else
|
113
|
-
print "---> SUCCESS: #{message}".green
|
114
|
-
end
|
115
|
-
|
116
|
-
@@last_message_type = WARNING
|
117
|
-
end
|
118
|
-
|
119
|
-
#| ------------------------------------------------------
|
120
|
-
#| warning method
|
121
|
-
#|
|
122
|
-
#| Outputs a formatted-yellow warning message.
|
123
|
-
#| @param message The message to output
|
124
|
-
#| @return Void
|
125
|
-
#| ------------------------------------------------------
|
126
|
-
def self.warning(message, addNewline = true)
|
127
|
-
if addNewline
|
128
|
-
puts "---> WARNING: #{message}".yellow
|
129
|
-
else
|
130
|
-
print "---> WARNING: #{message}".yellow
|
131
|
-
end
|
132
|
-
|
133
|
-
@@last_message_type = WARNING
|
134
|
-
end
|
135
|
-
end
|
@@ -1,136 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
|
-
#| ======================================================
|
4
|
-
#| ConfigManager Class
|
5
|
-
#|
|
6
|
-
#| Singleton to manage the YAML config file
|
7
|
-
#| for this script
|
8
|
-
#| ======================================================
|
9
|
-
|
10
|
-
class ConfigManager
|
11
|
-
include Singleton
|
12
|
-
|
13
|
-
attr_accessor :configFile
|
14
|
-
|
15
|
-
#| ------------------------------------------------------
|
16
|
-
#| initialize method
|
17
|
-
#|
|
18
|
-
#| Initializes this singleton with data from the config
|
19
|
-
#| file. If the file doesn't exist, an empty hash is
|
20
|
-
#| created in anticipation of future config saves.
|
21
|
-
#| @return Void
|
22
|
-
#| ------------------------------------------------------
|
23
|
-
def initialize
|
24
|
-
@configFile = SifttterRedux::SRD_CONFIG_FILEPATH
|
25
|
-
|
26
|
-
if File.exists?(SifttterRedux::SRD_CONFIG_FILEPATH)
|
27
|
-
@data = YAML.load_file(SifttterRedux::SRD_CONFIG_FILEPATH)
|
28
|
-
@data.each do |k, v|
|
29
|
-
define_singleton_method(k) { return v }
|
30
|
-
end
|
31
|
-
else
|
32
|
-
@data = {}
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
#| ------------------------------------------------------
|
37
|
-
#| _dump method
|
38
|
-
#|
|
39
|
-
#| Convenience method that dumps the configuration hash's
|
40
|
-
#| data.
|
41
|
-
#| @return Void
|
42
|
-
#| ------------------------------------------------------
|
43
|
-
def _dump
|
44
|
-
puts @data
|
45
|
-
end
|
46
|
-
|
47
|
-
#| ------------------------------------------------------
|
48
|
-
#| add_to_section method
|
49
|
-
#|
|
50
|
-
#| Adds a hash to the configuration data.
|
51
|
-
#| @param hash The hash to add to configuration
|
52
|
-
#| @param section The section into which the hash goes
|
53
|
-
#| @return Void
|
54
|
-
#| ------------------------------------------------------
|
55
|
-
def add_to_section(hash, section)
|
56
|
-
unless @data.has_key?(section)
|
57
|
-
CliMessage.warning("Attempting to insert into a non-existing section: #{section}; skipping...")
|
58
|
-
return
|
59
|
-
end
|
60
|
-
|
61
|
-
@data[section].merge!(hash)
|
62
|
-
end
|
63
|
-
|
64
|
-
#| ------------------------------------------------------
|
65
|
-
#| create_section method
|
66
|
-
#|
|
67
|
-
#| Creates a new section in the configuration hash.
|
68
|
-
#| @param section The section to create
|
69
|
-
#| @return Void
|
70
|
-
#| ------------------------------------------------------
|
71
|
-
def create_section(section)
|
72
|
-
if @data.has_key?(section)
|
73
|
-
CliMessage.warning("Attempting to create existing section (#{section}); skipping...")
|
74
|
-
return
|
75
|
-
end
|
76
|
-
|
77
|
-
define_singleton_method(section) { return @data[section] }
|
78
|
-
@data.merge!(section => {})
|
79
|
-
end
|
80
|
-
|
81
|
-
#| ------------------------------------------------------
|
82
|
-
#| delete_section method
|
83
|
-
#|
|
84
|
-
#| Deletes a section in the configuration hash.
|
85
|
-
#| @param section The section to delete
|
86
|
-
#| @return Void
|
87
|
-
#| ------------------------------------------------------
|
88
|
-
def delete_section(section)
|
89
|
-
unless @data.has_key?(section)
|
90
|
-
CliMessage.warning("Attempting to delete non-existing section (#{section}); skipping...")
|
91
|
-
return
|
92
|
-
end
|
93
|
-
|
94
|
-
remove_singleton_method(section)
|
95
|
-
@data.delete(section)
|
96
|
-
end
|
97
|
-
|
98
|
-
#| ------------------------------------------------------
|
99
|
-
#| remove_singleton_method method
|
100
|
-
#|
|
101
|
-
#| Removes a hash from the configuration data based on
|
102
|
-
#| its key.
|
103
|
-
#| @param hash The hash key remove
|
104
|
-
#| @param section The section from which the key comes
|
105
|
-
#| @return Void
|
106
|
-
#| ------------------------------------------------------
|
107
|
-
def remove_from_section(key, section)
|
108
|
-
unless @data.has_key?(section) && @data[section].has_key?(key)
|
109
|
-
CliMessage.warning("Attempting to remove a non-existing key: #{section}.#{key}; skipping...")
|
110
|
-
return
|
111
|
-
end
|
112
|
-
|
113
|
-
@data[section].delete(key)
|
114
|
-
end
|
115
|
-
|
116
|
-
#| ------------------------------------------------------
|
117
|
-
#| reset method
|
118
|
-
#|
|
119
|
-
#| Clears out the configuration data by resetting the hash.
|
120
|
-
#| @return Void
|
121
|
-
#| ------------------------------------------------------
|
122
|
-
def reset
|
123
|
-
@data = {}
|
124
|
-
end
|
125
|
-
|
126
|
-
#| ------------------------------------------------------
|
127
|
-
#| save_configuration method
|
128
|
-
#|
|
129
|
-
#| Saves the configuration data to the filesystem.
|
130
|
-
#| @return File
|
131
|
-
#| ------------------------------------------------------
|
132
|
-
def save_configuration
|
133
|
-
return File.open(@configFile, 'w') { |f| f.write(@data.to_yaml) }
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module SifttterRedux
|
2
|
-
VERSION = "0.3.1"
|
3
|
-
|
4
|
-
# Sifttter and Sifttter Redux Constants
|
5
|
-
SRD_CONFIG_FILEPATH = File.join(ENV['HOME'], '.sifttter_redux')
|
6
|
-
SFT_LOCAL_FILEPATH = "/tmp/sifttter"
|
7
|
-
SFT_REMOTE_FILEPATH = "/Apps/ifttt/sifttter"
|
8
|
-
|
9
|
-
# Dropbox Upload Constants
|
10
|
-
DBU_LOCAL_FILEPATH = "/usr/local/opt"
|
11
|
-
|
12
|
-
# Day One Constants
|
13
|
-
DO_REMOTE_FILEPATH = "/Apps/Day\\ One/Journal.dayone/entries"
|
14
|
-
DO_LOCAL_FILEPATH = "/tmp/dayone"
|
15
|
-
end
|
@@ -1,208 +0,0 @@
|
|
1
|
-
require 'chronic'
|
2
|
-
|
3
|
-
#| ======================================================
|
4
|
-
#| DateRangeMakerError Class
|
5
|
-
#| ======================================================
|
6
|
-
class DateRangeMakerError < StandardError
|
7
|
-
def initialize(msg = "You've triggered a DateRangeMakerError")
|
8
|
-
super
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
#| ======================================================
|
13
|
-
#| BadChronicDateError Class
|
14
|
-
#| ======================================================
|
15
|
-
class BadChronicDateError < DateRangeMakerError
|
16
|
-
def initialize(msg = "Invalid date provided to Chronic...")
|
17
|
-
super
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
#| ======================================================
|
22
|
-
#| BadDateOrderError Class
|
23
|
-
#| ======================================================
|
24
|
-
class BadDateOrderError < DateRangeMakerError
|
25
|
-
def initialize(msg = "The start date must be before or equal to the end date...")
|
26
|
-
super
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
#| ======================================================
|
31
|
-
#| InvalidFlagsError Class
|
32
|
-
#| ======================================================
|
33
|
-
class InvalidFlagsError < DateRangeMakerError
|
34
|
-
def initialize(msg = "You can't specify -t without specifying -f...")
|
35
|
-
super
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
#| ======================================================
|
40
|
-
#| NegativeDaysError Class
|
41
|
-
#| ======================================================
|
42
|
-
class NegativeDaysError < DateRangeMakerError
|
43
|
-
def initialize(msg = "You must specify a positive number of days to look back...")
|
44
|
-
super
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
#| ======================================================
|
49
|
-
#| DateRangeMaker Class
|
50
|
-
#|
|
51
|
-
#| Singleton to manage the YAML config file
|
52
|
-
#| for this script
|
53
|
-
#| ======================================================
|
54
|
-
class DateRangeMaker
|
55
|
-
|
56
|
-
#| ------------------------------------------------------
|
57
|
-
#| initialize method
|
58
|
-
#| @return Void
|
59
|
-
#| ------------------------------------------------------
|
60
|
-
def initialize
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
#| ------------------------------------------------------
|
65
|
-
#| last_n_days method
|
66
|
-
#|
|
67
|
-
#| Returns a date range for the last N days (including
|
68
|
-
#| today's date if specified).
|
69
|
-
#| @param num_days The number of days to look back
|
70
|
-
#| @param options Miscellaneous options hash
|
71
|
-
#| @return Range
|
72
|
-
#| ------------------------------------------------------
|
73
|
-
def last_n_days(num_days, options = {})
|
74
|
-
raise NegativeDaysError if num_days < 0
|
75
|
-
|
76
|
-
opts = {
|
77
|
-
:include_today => false
|
78
|
-
}
|
79
|
-
|
80
|
-
options.each do |k, v|
|
81
|
-
k = k.to_sym
|
82
|
-
raise ArgumentError, "Unknown property: #{k}" unless opts.key?(k)
|
83
|
-
opts[k] = v
|
84
|
-
end
|
85
|
-
|
86
|
-
if (opts[:include_today])
|
87
|
-
_r = (Date.today - num_days..Date.today)
|
88
|
-
else
|
89
|
-
_r = (Date.today - num_days...Date.today)
|
90
|
-
end
|
91
|
-
|
92
|
-
return _r
|
93
|
-
end
|
94
|
-
|
95
|
-
#| ------------------------------------------------------
|
96
|
-
#| last_n_weeks method
|
97
|
-
#|
|
98
|
-
#| Returns a date range for the last N weeks (including
|
99
|
-
#| today's date if specified).
|
100
|
-
#| @param num_days The number of weeks to look back
|
101
|
-
#| @param options Miscellaneous options hash
|
102
|
-
#| @return Range
|
103
|
-
#| ------------------------------------------------------
|
104
|
-
def last_n_weeks(num_weeks = 0, options = {})
|
105
|
-
raise NegativeDaysError if num_weeks < 0
|
106
|
-
|
107
|
-
opts = {
|
108
|
-
:include_today => false
|
109
|
-
}
|
110
|
-
|
111
|
-
options.each do |k, v|
|
112
|
-
k = k.to_sym
|
113
|
-
raise ArgumentError, "Unknown property: #{k}" unless opts.key?(k)
|
114
|
-
opts[k] = v
|
115
|
-
end
|
116
|
-
|
117
|
-
beginning_date = Date.today - Date.today.wday + 1
|
118
|
-
end_date = Date.today - Date.today.wday + 7
|
119
|
-
|
120
|
-
# We're currently before the end of the week, so
|
121
|
-
# reset the new ending date to today.
|
122
|
-
if (end_date > Date.today)
|
123
|
-
end_date = Date.today
|
124
|
-
end
|
125
|
-
|
126
|
-
if (opts[:include_today])
|
127
|
-
_r = (beginning_date - num_weeks * 7..end_date)
|
128
|
-
else
|
129
|
-
_r = (beginning_date - num_weeks * 7...end_date)
|
130
|
-
end
|
131
|
-
|
132
|
-
return _r
|
133
|
-
end
|
134
|
-
|
135
|
-
#| ------------------------------------------------------
|
136
|
-
#| range method
|
137
|
-
#|
|
138
|
-
#| Returns a date range for specified start dates and
|
139
|
-
#| end dates. Note that specifying an end date greater
|
140
|
-
#| than today's date will force today to be the end date.
|
141
|
-
#| @param start_date The start date
|
142
|
-
#| @param end_date The end date
|
143
|
-
#| @param options Miscellaneous options hash
|
144
|
-
#| @return Range
|
145
|
-
#| ------------------------------------------------------
|
146
|
-
def range(start_date, end_date, options = {})
|
147
|
-
opts = {
|
148
|
-
:include_today => false
|
149
|
-
}
|
150
|
-
|
151
|
-
options.each do |k, v|
|
152
|
-
k = k.to_sym
|
153
|
-
raise ArgumentError, "Unknown property: #{k}" unless opts.key?(k)
|
154
|
-
opts[k] = v
|
155
|
-
end
|
156
|
-
|
157
|
-
begin
|
158
|
-
chronic_start_date = Chronic.parse(start_date).to_date
|
159
|
-
rescue
|
160
|
-
raise BadChronicDateError.new("Invalid date provided to Chronic: #{start_date}") if !start_date.nil?
|
161
|
-
nil
|
162
|
-
end
|
163
|
-
|
164
|
-
begin
|
165
|
-
chronic_end_date = Chronic.parse(end_date).to_date
|
166
|
-
rescue
|
167
|
-
raise BadChronicDateError.new("Invalid date provided to Chronic: #{end_date}") if !end_date.nil?
|
168
|
-
nil
|
169
|
-
end
|
170
|
-
|
171
|
-
raise InvalidFlagsError.new if (start_date.nil? && !end_date.nil?)
|
172
|
-
raise BadDateOrderError.new if (chronic_end_date && chronic_start_date > chronic_end_date)
|
173
|
-
|
174
|
-
if (!chronic_start_date.nil?)
|
175
|
-
if (chronic_end_date.nil?)
|
176
|
-
if (opts[:include_today])
|
177
|
-
dates = (chronic_start_date..Date.today)
|
178
|
-
else
|
179
|
-
dates = (chronic_start_date...Date.today)
|
180
|
-
end
|
181
|
-
else
|
182
|
-
dates = (chronic_start_date..chronic_end_date)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
return dates
|
187
|
-
end
|
188
|
-
|
189
|
-
#| ------------------------------------------------------
|
190
|
-
#| today method
|
191
|
-
#|
|
192
|
-
#| Returns a date range for today
|
193
|
-
#| @return Range
|
194
|
-
#| ------------------------------------------------------
|
195
|
-
def today
|
196
|
-
return (Date.today..Date.today)
|
197
|
-
end
|
198
|
-
|
199
|
-
#| ------------------------------------------------------
|
200
|
-
#| yesterday method
|
201
|
-
#|
|
202
|
-
#| Returns a date range for yesterday
|
203
|
-
#| @return Range
|
204
|
-
#| ------------------------------------------------------
|
205
|
-
def yesterday
|
206
|
-
return (Date.today - 1..Date.today - 1)
|
207
|
-
end
|
208
|
-
end
|