reminders_txt 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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�˱��!�
|