reminders_txt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,4 @@
1
+ O����z�>��2,��B�7�b~���G,u֔v�x�K�%��Z�
2
+ q ��h��8��
3
+ ނT�_R� zb���drÊp/�[Ț����� s��V���F�N�]�{�=���M�uձ���c�D��d+K�@N�+�E82�1
4
+ T�J��4dv��h|��zV})^��ro�%�!�d~��2�Q�`jF��������o�'�����)�oX�
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: []
@@ -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�˱��!�