reminders_txt 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/reminders_txt.rb +44 -23
- metadata +1 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5f2a37608ad9d46e3adcc3a01d5008cf8e77231
|
4
|
+
data.tar.gz: 75a75d8bcedea94551146b8ea767c27c1abe1237
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46744e545870d608e9867f8eafd29e3525e8e987773a1db0f7a3beffd3e959fc5e6560ac78f98269727704935fe6537f2b9f949d8096aa2fe0d2f2946bf69c04
|
7
|
+
data.tar.gz: 291ce8551dd33f96a87de068e9024ca6f12675db65645fecada3cc0bc10f7de95d486371a69d2a49af788779629207e1f7508d1bb3ae53584dad343cd0106a4d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/reminders_txt.rb
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'dynarex'
|
7
7
|
require 'app-routes'
|
8
|
+
require 'digest/md5'
|
8
9
|
require 'chronic_cron'
|
9
10
|
|
10
11
|
|
@@ -26,25 +27,26 @@ class RemindersTxt
|
|
26
27
|
|
27
28
|
attr_reader :expressions
|
28
29
|
|
29
|
-
def initialize(
|
30
|
+
def initialize(filename='reminders.txt', now: Time.now, dxfilepath: 'reminders.xml')
|
30
31
|
|
31
|
-
|
32
|
+
|
33
|
+
s = File.read filename
|
34
|
+
@file_contents, @filename = s, filename
|
32
35
|
@now = now
|
33
36
|
|
34
|
-
Dir.chdir File.dirname(
|
37
|
+
Dir.chdir File.dirname(filename)
|
35
38
|
|
36
39
|
@dxfilepath = dxfilepath
|
37
40
|
|
38
41
|
super()
|
39
|
-
@params = {
|
42
|
+
@params = {}
|
40
43
|
expressions(@params)
|
41
|
-
buffer = s[2..-1]
|
44
|
+
buffer = s.lines[2..-1]
|
42
45
|
|
43
46
|
@reminders = buffer.inject([]) do |r, x|
|
44
47
|
if (x.length > 1) then
|
45
48
|
@params[:input] = x.strip
|
46
49
|
rx = find_expression(x)
|
47
|
-
rx.input = x.strip
|
48
50
|
r << rx
|
49
51
|
end
|
50
52
|
r
|
@@ -53,7 +55,7 @@ class RemindersTxt
|
|
53
55
|
update()
|
54
56
|
end
|
55
57
|
|
56
|
-
def
|
58
|
+
def save_dx()
|
57
59
|
|
58
60
|
dx = Dynarex.new('reminders/reminder(input, title, recurring, date, end_date)')
|
59
61
|
@reminders.each {|x| dx.create x.to_h}
|
@@ -67,36 +69,50 @@ class RemindersTxt
|
|
67
69
|
x.date = x.date.is_a?(Time) ? x.date : Chronic.parse(x.date)
|
68
70
|
x
|
69
71
|
end
|
70
|
-
|
72
|
+
|
71
73
|
# synchronise with the XML file
|
72
74
|
# if XML file doesn't exist, create it
|
73
75
|
|
74
76
|
if File.exists? @dxfilepath then
|
75
|
-
|
77
|
+
|
76
78
|
dx = Dynarex.new @dxfilepath
|
77
79
|
|
78
80
|
@reminders.map do |reminder|
|
79
81
|
|
80
82
|
r = dx.find_by_input reminder.input
|
81
|
-
reminder.date = Date.parse
|
83
|
+
reminder.date = r ? Date.parse(r.date) : reminder.date.to_date
|
82
84
|
|
83
85
|
reminder
|
84
86
|
end
|
85
|
-
|
86
|
-
else
|
87
|
-
create_dx()
|
87
|
+
|
88
88
|
end
|
89
|
-
|
90
89
|
|
91
90
|
# delete expired non-recurring reminders
|
92
91
|
@reminders.reject! {|x| x.date.to_time < @now }
|
93
92
|
|
94
93
|
@reminders.sort_by!(&:date)
|
95
94
|
|
95
|
+
|
96
|
+
# did the reminders change?
|
97
|
+
|
98
|
+
h1 = (Digest::MD5.new << self.to_s).to_s
|
99
|
+
h2 = (Digest::MD5.new << @file_contents).to_s
|
100
|
+
|
101
|
+
b = h1 != h2
|
102
|
+
|
103
|
+
if b then
|
104
|
+
|
105
|
+
save_dx()
|
106
|
+
File.write @filename, self.to_s
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
[:refresh, b]
|
111
|
+
|
96
112
|
end
|
97
113
|
|
98
114
|
def to_s()
|
99
|
-
@
|
115
|
+
@file_contents.lines[0..2].join + @reminders.map(&:input).join("\n")
|
100
116
|
end
|
101
117
|
|
102
118
|
alias update refresh
|
@@ -122,10 +138,15 @@ class RemindersTxt
|
|
122
138
|
|
123
139
|
if recurring =~ /day|week/ then
|
124
140
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
141
|
+
start_date = Chronic.parse(date)
|
142
|
+
|
143
|
+
if start_date <= @now then
|
144
|
+
|
145
|
+
new_date = CronFormat.new(ChronicCron.new(recurring).to_expression, start_date).to_time
|
146
|
+
input.gsub!(date, new_date.strftime("#{new_date.day.ordinal} %b %Y"))
|
147
|
+
date = new_date
|
148
|
+
|
149
|
+
end
|
129
150
|
end
|
130
151
|
|
131
152
|
|
@@ -137,21 +158,21 @@ class RemindersTxt
|
|
137
158
|
# some meeting First thursday of the month at 7:30pm
|
138
159
|
get /(.*)\s+(\w+ \w+day of (?:the|every) month at .*)/ do |title, recurring|
|
139
160
|
|
140
|
-
OpenStruct.new input:
|
161
|
+
OpenStruct.new input: params[:input], title: title, recurring: recurring
|
141
162
|
#[1, title, recurring].inspect
|
142
163
|
end
|
143
164
|
|
144
165
|
# some important day 24th Mar
|
145
166
|
get /(.*)\s+(\d+.*)/ do |title, date|
|
146
167
|
|
147
|
-
OpenStruct.new input:
|
168
|
+
OpenStruct.new input: params[:input], title: title, date: date
|
148
169
|
#[2, title, date].inspect
|
149
170
|
end
|
150
171
|
|
151
172
|
# 27-Mar@1436 some important day
|
152
173
|
get /(\d[^\s]+)\s+(.*)/ do |date, title|
|
153
174
|
|
154
|
-
OpenStruct.new input:
|
175
|
+
OpenStruct.new input: params[:input], title: title, date: date
|
155
176
|
#[3, title, date].inspect
|
156
177
|
end
|
157
178
|
|
@@ -166,4 +187,4 @@ class RemindersTxt
|
|
166
187
|
|
167
188
|
alias find_expression run_route
|
168
189
|
|
169
|
-
end
|
190
|
+
end
|
metadata
CHANGED
metadata.gz.sig
CHANGED
Binary file
|