reminders_txt 0.1.0
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 +7 -0
- checksums.yaml.gz.sig +4 -0
- data.tar.gz.sig +0 -0
- data/lib/reminders_txt.rb +123 -0
- metadata +127 -0
- metadata.gz.sig +1 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2db30e2862306c3ce60a7da9be8552c26636f37e
|
4
|
+
data.tar.gz: 6a534979be14feee419456c7df3d1e4ea4a63ad2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 139ccb0e21842b3cd7c8cde973c3e4a33e5133fc283f374fcc1372bdbe7937ecec3a4245efdbb29e1bd340de3b5260b9d489a9ad484db38b09bedda78b426fc3
|
7
|
+
data.tar.gz: 0b8914d99ff25e82c1978dd8b4a056479d0b9a978b9192690c348ef6e80ec6ee5dc30cd5d5acc8e3b8646a10ac838c2639e54c1947332591c0ff6d669df03414
|
checksums.yaml.gz.sig
ADDED
data.tar.gz.sig
ADDED
Binary file
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# file: reminders_txt.rb
|
4
|
+
|
5
|
+
|
6
|
+
require 'recordx'
|
7
|
+
require 'app-routes'
|
8
|
+
require 'chronic_cron'
|
9
|
+
|
10
|
+
|
11
|
+
module Ordinals
|
12
|
+
|
13
|
+
refine Fixnum do
|
14
|
+
def ordinal
|
15
|
+
self.to_s + ( (10...20).include?(self) ? 'th' :
|
16
|
+
%w{ th st nd rd th th th th th th }[self % 10] )
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
class RemindersTxt
|
24
|
+
include AppRoutes
|
25
|
+
using Ordinals
|
26
|
+
|
27
|
+
attr_reader :expressions
|
28
|
+
|
29
|
+
def initialize(s, now=Time.now)
|
30
|
+
|
31
|
+
@raw_input = s
|
32
|
+
super()
|
33
|
+
@params = {input: s}
|
34
|
+
expressions(@params)
|
35
|
+
buffer = s[2..-1]
|
36
|
+
|
37
|
+
@expressions = buffer.inject([]) do |r, x|
|
38
|
+
if (x.length > 1) then
|
39
|
+
@params[:input] = x
|
40
|
+
rx = find_expression(x)
|
41
|
+
rx.input = x
|
42
|
+
r << rx
|
43
|
+
end
|
44
|
+
r
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def refresh()
|
49
|
+
|
50
|
+
a = @expressions.sort_by do |x|
|
51
|
+
x.date.is_a?(Time) ? x.date : Chronic.parse(x.date)
|
52
|
+
end
|
53
|
+
|
54
|
+
@raw_input[0..2].join + a.map(&:input).join()
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def expressions(params)
|
60
|
+
|
61
|
+
|
62
|
+
# some event every 2 weeks
|
63
|
+
# some event every 2 weeks at 6am starting from 14th Jan
|
64
|
+
# some event every 2 weeks at 6am starting from 18th Feb until 28th Oct
|
65
|
+
# some event every 2nd Monday (starting 7th Nov 2016)
|
66
|
+
# some event every 2nd Monday (starting 7th Nov until 3rd Dec)
|
67
|
+
|
68
|
+
|
69
|
+
starting = /(?:\(?\s*starting (\d+\w{2} \w+\s*\w*)(?: until (.*))?\s*\))?/
|
70
|
+
|
71
|
+
get /^(.*)(every \w+ \w+(?: at (\d+am) )?)\s*#{starting}/ do \
|
72
|
+
|title, recurring, time, date, end_date|
|
73
|
+
|
74
|
+
input = params[:input]
|
75
|
+
|
76
|
+
if recurring =~ /day|week/ then
|
77
|
+
|
78
|
+
earlier_date = Chronic.parse(date)
|
79
|
+
new_date = CronFormat.new(ChronicCron.new(recurring).to_expression, earlier_date).to_time
|
80
|
+
input.gsub!(date, new_date.strftime("#{new_date.day.ordinal} %b %Y"))
|
81
|
+
date = new_date
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
RecordX.new input: input, title: title, recurring: recurring, date: date, end_date: end_date
|
86
|
+
#[0, title, recurring, time, date, end_date].inspect
|
87
|
+
end
|
88
|
+
|
89
|
+
# some meeting 3rd thursday of the month at 7:30pm
|
90
|
+
# some meeting First thursday of the month at 7:30pm
|
91
|
+
get /(.*)\s+(\w+ \w+day of (?:the|every) month at .*)/ do |title, recurring|
|
92
|
+
|
93
|
+
RecordX.new input: '', title: title, recurring: recurring
|
94
|
+
#[1, title, recurring].inspect
|
95
|
+
end
|
96
|
+
|
97
|
+
# some important day 24th Mar
|
98
|
+
get /(.*)\s+(\d+.*)/ do |title, date|
|
99
|
+
|
100
|
+
RecordX.new input: '', title: title, date: date
|
101
|
+
#[2, title, date].inspect
|
102
|
+
end
|
103
|
+
|
104
|
+
# 27-Mar@1436 some important day
|
105
|
+
get /(\d[^\s]+)\s+(.*)/ do |date, title|
|
106
|
+
|
107
|
+
RecordX.new input: '', title: title, date: date
|
108
|
+
#[3, title, date].inspect
|
109
|
+
end
|
110
|
+
|
111
|
+
# e.g. 04-Aug@12:34
|
112
|
+
get '*' do
|
113
|
+
|
114
|
+
'pattern unrecognised'
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
alias find_expression run_route
|
121
|
+
|
122
|
+
end
|
123
|
+
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reminders_txt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Robertson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
|
14
|
+
YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
|
15
|
+
8ixkARkWAmV1MB4XDTE2MTExMDIwMjE0NVoXDTE3MTExMDIwMjE0NVowSDESMBAG
|
16
|
+
A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
|
17
|
+
EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
18
|
+
ggEBAMjS2N7kUPBkBd/Xj/NvjMQzkY0KBKxXeAPcmzDpSNCjr8Yz4If7sDXSp68g
|
19
|
+
dJm0ywJHCZvZ/fDGPOZgCqh0VUoXDi5j51+0psxBjdPXfdBhA3PzY01s9ju1uDOH
|
20
|
+
1m+GZ5+DEmCetqrw0Ul4KJ5S2WbyYhgOl6s8uJIA4ZwJAfFIsX/BIEF4K+OrGANB
|
21
|
+
dmYLVQJgYvyxFZDFypHL57q1BEQl3Vn/sTUeMBjSV0bn6XLXjHw6rO0iN6VLet1k
|
22
|
+
p7lcuDy6A8OVmIWE1EF9Uri6PfVJoW5MmpRUbc/QIbkmZQK6PxaZNvRARakYcHO4
|
23
|
+
/pRI4LrIm/BEHdzs5DnbQItcN7cCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
24
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUom2NNLWXSNhcYiiudZ6VzKxMEz0wJgYDVR0RBB8w
|
25
|
+
HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
|
26
|
+
c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAEWq63XTH
|
27
|
+
KjCQkfiRrHLonW8WIYzCIGVjDTwMn6m/kK0ZUEUVffe0Picc75e+XAUmrssx2UXe
|
28
|
+
fIm54sxpjy8d1iErCyckn+JX+VH4UbZpQMqWEyPosAp5YmK2BffBxPAKkdJ9tdhE
|
29
|
+
DA/kzIkB0UKr2j2gxXJlCU3zeF3fi2c/eg+PziIERT099XlfAzR9k3GOKNr+H0JZ
|
30
|
+
3bFPvyTwPPDowls7GzcFbUtnVuYuAI+L3EORTEvK3pEdNTxNNfjHksfKdMgMMKPy
|
31
|
+
n+SSd9dm8JjhZ2pqHtX+bgMZ18hrN06xfR+UPtk5BKC8v1PC0FWxaVR4lom39rFU
|
32
|
+
seDxJNsJgamAKg==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2016-11-10 00:00:00.000000000 Z
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: recordx
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0.5'
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.5.0
|
46
|
+
type: :runtime
|
47
|
+
prerelease: false
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0.5'
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.5.0
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: app-routes
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.1'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.1.18
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0.1'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.18
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: chronic_cron
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.3'
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.3.2
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - "~>"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0.3'
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.3.2
|
96
|
+
description:
|
97
|
+
email: james@r0bertson.co.uk
|
98
|
+
executables: []
|
99
|
+
extensions: []
|
100
|
+
extra_rdoc_files: []
|
101
|
+
files:
|
102
|
+
- lib/reminders_txt.rb
|
103
|
+
homepage: https://github.com/jrobertson/reminders_txt
|
104
|
+
licenses:
|
105
|
+
- MIT
|
106
|
+
metadata: {}
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 2.5.1
|
124
|
+
signing_key:
|
125
|
+
specification_version: 4
|
126
|
+
summary: Reads and updates diary reminders from a plain text file
|
127
|
+
test_files: []
|
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
��,�����:�P�i��1Mm� ��u��g��-S+�,�����v(T Z��2�$0��qI��h�V�:�ږǴm��Q[+�L#l��6E���~&�ReV�)�n~U�m9�A9 ����۰�j��=%����@�Xr��kǁh�0g�� ��dQ~�eg����p���]�Qf�n��N�i�Y�|� �"�J���Tv����H^Hو&�2�YD��v�z�2c�g��p�����i@��u�˱��!�
|