rubyshelltools 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/assets/docs/examples.md +18 -2
- data/bin/rst +0 -1
- data/lib/modules/calendar/calendar.rb +27 -10
- data/lib/modules/calendar/calendar_event.rb +2 -1
- data/lib/rst.rb +46 -4
- data/rst.rb +5 -1
- metadata +2 -2
data/assets/docs/examples.md
CHANGED
@@ -7,7 +7,7 @@ rst --help
|
|
7
7
|
Print out available options and commands
|
8
8
|
|
9
9
|
$ rst --help
|
10
|
-
Usage: rst [COMMAND
|
10
|
+
Usage: rst [COMMAND] [options] [FILES..]
|
11
11
|
|
12
12
|
Options:
|
13
13
|
-v, --[no-]verbose Run verbosely
|
@@ -16,16 +16,28 @@ Print out available options and commands
|
|
16
16
|
-f, --from DATE Set from-date
|
17
17
|
-t, --to DATE Set to-date
|
18
18
|
-n, --name NAME Use this name for the command
|
19
|
-
-e, --new-event DATE,STRING
|
19
|
+
-e, --new-event [DATE,]STRING Add an event
|
20
20
|
--list-calendars List available calendars
|
21
21
|
--delete-calendar CALENDARNAME
|
22
22
|
Delete an calendar and all it's entries!
|
23
23
|
--[no-]empty Show empty entries
|
24
|
+
--save-defaults Save given params as defaults
|
25
|
+
--list-defaults list saved defaults
|
26
|
+
--clear-defaults delete previously saved defaults
|
27
|
+
|
24
28
|
Commands:
|
25
29
|
nil .......... no command. Interpret options only (useful in combination with -v)
|
26
30
|
ls ........... list directory and files
|
27
31
|
cal[endar] ... print a calendar --from --to
|
28
32
|
|
33
|
+
DATE-FORMATS FOR --new-event:
|
34
|
+
omitted....... today
|
35
|
+
today ........ today
|
36
|
+
nDWM ......... today + n days, weeks, months eg 1w, 2d[ays], 1M[ONTH]
|
37
|
+
yyyy-mm-dd
|
38
|
+
dd.mm.yyyy
|
39
|
+
mm/dd/yyyy
|
40
|
+
|
29
41
|
use --example for a more detailed list of commands.
|
30
42
|
|
31
43
|
rst ls *
|
@@ -59,11 +71,13 @@ overwrite this by defining env-vars for RST_DATA and RST_ENV
|
|
59
71
|
|
60
72
|
$ export RST_DATA=$HOME/.rst/data
|
61
73
|
$ export RST_ENV=production
|
74
|
+
|
62
75
|
$ rst cal --new-event='1964-08-31,Birthday Andreas Altendorfer'
|
63
76
|
$ rst cal -e 'today,Win the jackpot' # e is an abbreviation for --new-event
|
64
77
|
$ rst cal -f 1964/1 # f is an abbreviation for --from
|
65
78
|
Mon, Aug 31 1964: Birthday Andreas Altendorfer
|
66
79
|
Fri, Mar 15 2013: Win the jackpot
|
80
|
+
|
67
81
|
$ find $HOME/.rst
|
68
82
|
/Users/you/.rst
|
69
83
|
/Users/you/.rst/data
|
@@ -74,6 +88,8 @@ overwrite this by defining env-vars for RST_DATA and RST_ENV
|
|
74
88
|
birthdays : 5 entries
|
75
89
|
work : 2 entries
|
76
90
|
|
91
|
+
$ rst -e 1w,Some Event # entered on Tue, Jan 01 2013
|
92
|
+
Added: Tue, Jan 08 2013: Some Event
|
77
93
|
|
78
94
|
The full set of parameters is
|
79
95
|
|
data/bin/rst
CHANGED
@@ -51,7 +51,7 @@ module RST
|
|
51
51
|
param
|
52
52
|
elsif param =~ /today/i || param.nil?
|
53
53
|
Date.today
|
54
|
-
elsif param =~ /\d+[
|
54
|
+
elsif param =~ /\d+[a-zA-Z]/i
|
55
55
|
get_today_plus(param)
|
56
56
|
else
|
57
57
|
Date.parse(param)
|
@@ -62,7 +62,7 @@ module RST
|
|
62
62
|
# @param [String] param nDWM n=Number Day Weeks Months
|
63
63
|
def get_today_plus(param)
|
64
64
|
offset = 0
|
65
|
-
param.scan(/(\d+)([
|
65
|
+
param.scan(/(\d+)([a-z])/i) do |count,unit|
|
66
66
|
offset = case unit[0].downcase
|
67
67
|
when 'd'
|
68
68
|
count.to_i.days
|
@@ -145,9 +145,9 @@ module RST
|
|
145
145
|
# @param [String|Date] end_on - output ends on this day
|
146
146
|
# @param [Boolean] show_empty - output days with no events
|
147
147
|
# @return [Array] of Strings DATE: EVENT + EVENT + ....
|
148
|
-
def list_days(start_on=start_date,end_on=end_date,show_empty=false)
|
148
|
+
def list_days(start_on=start_date,end_on=end_date,show_empty=false,show_ids=false)
|
149
149
|
(parse_date_param(start_on)..parse_date_param(end_on)).to_a.map { |_date|
|
150
|
-
format_events_for(_date,show_empty)
|
150
|
+
format_events_for(_date,show_empty,show_ids)
|
151
151
|
}.compact
|
152
152
|
end
|
153
153
|
|
@@ -158,7 +158,16 @@ module RST
|
|
158
158
|
def events_on(date)
|
159
159
|
events.select { |event| event.event_date == date }
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
|
+
|
163
|
+
# Dump calendar events
|
164
|
+
# @return [String]
|
165
|
+
def dump
|
166
|
+
events.map { |event|
|
167
|
+
'"%s,%s"' % [ event.event_date.strftime('%Y-%m-%d'), event.event_headline ]
|
168
|
+
}.join("\n")
|
169
|
+
end
|
170
|
+
|
162
171
|
# @endgroup
|
163
172
|
|
164
173
|
private
|
@@ -168,17 +177,25 @@ module RST
|
|
168
177
|
# @param [Date] _date
|
169
178
|
# @param [Boolean] show_empty - do output lines with no events
|
170
179
|
# @return [String]
|
171
|
-
|
172
|
-
|
173
|
-
|
180
|
+
# @param [Boolean] show_ids - output ids for events
|
181
|
+
def format_events_for(_date,show_empty=false,show_ids=false)
|
182
|
+
if (_line=event_headlines_for(_date,show_ids)) != '' || show_empty
|
183
|
+
(show_ids ? "%s:\n %s" : "%s: %s") % [_date.strftime(DEFAULT_DATE_FORMAT), _line]
|
174
184
|
end
|
175
185
|
end
|
176
186
|
|
177
187
|
# Concatenate headlines of all events on this date
|
178
188
|
# @param [Date] _date
|
189
|
+
# @param [Boolean] _show_ids
|
179
190
|
# @return [String]
|
180
|
-
def event_headlines_for(_date)
|
181
|
-
|
191
|
+
def event_headlines_for(_date,_show_ids=false)
|
192
|
+
if !_show_ids
|
193
|
+
events_on(_date).map(&:event_headline).join(' + ').strip
|
194
|
+
else
|
195
|
+
events_on(_date).map{|e|
|
196
|
+
"%s > %s" % [e.respond_to?(:id) ? e.id : 'n/a' ,e.event_headline]
|
197
|
+
}.join("\n ").strip
|
198
|
+
end
|
182
199
|
end
|
183
200
|
|
184
201
|
# @endgroup
|
@@ -20,7 +20,7 @@ module RST
|
|
20
20
|
#
|
21
21
|
class CalendarEvent
|
22
22
|
|
23
|
-
attr_reader :event_date, :label
|
23
|
+
attr_reader :event_date, :label, :id
|
24
24
|
|
25
25
|
include Eventable
|
26
26
|
include CalendarHelper
|
@@ -29,6 +29,7 @@ module RST
|
|
29
29
|
# @param [String] _label - Events name
|
30
30
|
def initialize(_date,_label)
|
31
31
|
@label = _label
|
32
|
+
@id ||= SecureRandom::hex(4)
|
32
33
|
schedule! ensure_date(_date)
|
33
34
|
end
|
34
35
|
|
data/lib/rst.rb
CHANGED
@@ -112,10 +112,22 @@ module RST
|
|
112
112
|
@options[:delete_calendar] = name
|
113
113
|
end
|
114
114
|
|
115
|
+
opts.on('--delete-events ID[,ID,...]',Array, 'delete entries from calendar') do |ids|
|
116
|
+
@options[:delete_events] = ids
|
117
|
+
end
|
118
|
+
|
115
119
|
opts.on('--[no-]empty', 'Show empty entries') do |show|
|
116
120
|
@options[:show_empty] = show
|
117
121
|
end
|
118
122
|
|
123
|
+
opts.on('-i', '--with-ids', 'List entries with ids') do |ids|
|
124
|
+
@options[:with_ids] = ids
|
125
|
+
end
|
126
|
+
|
127
|
+
opts.on('-d', '--dump', 'Dump calendar-events' ) do |d|
|
128
|
+
@options[:dump] = d
|
129
|
+
end
|
130
|
+
|
119
131
|
opts.on('--save-defaults', 'Save given params as defaults') do |v|
|
120
132
|
@options[:save_defaults] = v
|
121
133
|
end
|
@@ -128,20 +140,25 @@ module RST
|
|
128
140
|
@options[:clear_defaults] = v
|
129
141
|
end
|
130
142
|
|
143
|
+
opts.separator ''
|
131
144
|
opts.separator 'Commands:'
|
132
145
|
|
133
146
|
opts.separator <<-EOT
|
134
147
|
nil .......... no command. Interpret options only (useful in combination with -v)
|
135
148
|
ls ........... list directory and files
|
136
149
|
cal[endar] ... print a calendar --from --to
|
150
|
+
EOT
|
151
|
+
.gsub(/^\s+/,' ')
|
137
152
|
|
138
|
-
|
139
|
-
|
153
|
+
opts.separator ''
|
154
|
+
opts.separator 'DATE-FORMATS FOR --new-event:'
|
155
|
+
opts.separator <<-EOT
|
156
|
+
omitted....... today
|
140
157
|
today ........ today
|
158
|
+
nDWM ......... today + n days, weeks, months eg 1w, 2d[ays], 1M[ONTH]
|
141
159
|
yyyy-mm-dd
|
142
160
|
dd.mm.yyyy
|
143
161
|
mm/dd/yyyy
|
144
|
-
nDWM ......... today + n days, weeks, months eg 1w, 2d[ays], 1M[ONTH]
|
145
162
|
EOT
|
146
163
|
.gsub(/^\s+/,' ')
|
147
164
|
|
@@ -203,7 +220,7 @@ module RST
|
|
203
220
|
# @return [Array] - one string Date: Event + Event + ... for each day.
|
204
221
|
def print_calendar
|
205
222
|
cal = find_calendar( Persistent::DiskStore.new(CALENDAR_FILE) )
|
206
|
-
cal.list_days(options[:from], options[:to], options[:show_empty]).compact.join("\n")
|
223
|
+
cal.list_days(options[:from], options[:to], options[:show_empty], options[:with_ids]).compact.join("\n")
|
207
224
|
end
|
208
225
|
|
209
226
|
# @group EXECUTE ACTION FROM OPTIONS
|
@@ -223,6 +240,10 @@ module RST
|
|
223
240
|
"Added: %s: %s" % [new_event.event_date.strftime(DEFAULT_DATE_FORMAT), new_event.event_headline.strip]
|
224
241
|
when 'list_calendars'
|
225
242
|
list_calendars
|
243
|
+
when 'dump'
|
244
|
+
dump_calendar
|
245
|
+
when 'delete_events'
|
246
|
+
delete_events
|
226
247
|
when 'delete_calendar'
|
227
248
|
delete_calendar
|
228
249
|
when 'save_defaults'
|
@@ -267,6 +288,27 @@ module RST
|
|
267
288
|
}
|
268
289
|
end
|
269
290
|
|
291
|
+
# Dump the calendar(s), thus the output can be used as input for -e again
|
292
|
+
# if no name-param is given all calendars are dumped.
|
293
|
+
# if name-param is given only the named calendar gets dumped.
|
294
|
+
# @return [String]
|
295
|
+
def dump_calendar
|
296
|
+
store = Persistent::DiskStore.new(CALENDAR_FILE)
|
297
|
+
store.all.map { |calendar|
|
298
|
+
calendar.dump if calendar.name == @options[:name] || @options[:name].blank?
|
299
|
+
}.compact.join("\n")
|
300
|
+
end
|
301
|
+
|
302
|
+
# Delete events with given IDs from calendar
|
303
|
+
# @example
|
304
|
+
# rst -n calname --delete-ids=34a4,44b3
|
305
|
+
def delete_events
|
306
|
+
store = Persistent::DiskStore.new(CALENDAR_FILE)
|
307
|
+
calendar = store.find(@options[:name])
|
308
|
+
calendar.events.reject!{|r| @options[:delete_events].include?(r.id)}
|
309
|
+
store << calendar
|
310
|
+
end
|
311
|
+
|
270
312
|
# Output the previous interpreted and parsed arguments
|
271
313
|
# Called when --verbose is given as an option
|
272
314
|
# @example
|
data/rst.rb
CHANGED
@@ -3,7 +3,7 @@ require 'logger'
|
|
3
3
|
# # Ruby Shell Tools Top-level file
|
4
4
|
module RST
|
5
5
|
# Gem-version
|
6
|
-
VERSION = '0.0.
|
6
|
+
VERSION = '0.0.6'
|
7
7
|
|
8
8
|
# Path to the docs used by the software
|
9
9
|
DOCS = File.expand_path('../assets/docs', __FILE__)
|
@@ -15,6 +15,10 @@ module RST
|
|
15
15
|
# @see Persistent::DiskStore
|
16
16
|
DEFAULT_STORE_FILENAME = 'rst_data.pstore'
|
17
17
|
|
18
|
+
# The length of an Eventable's id.
|
19
|
+
# @see Calendar::Eventable.id
|
20
|
+
EVENT_HEX_ID_LENGTH = 4
|
21
|
+
|
18
22
|
# intialize the logger
|
19
23
|
# @example Usage
|
20
24
|
# RST.logger.info('This will output to STDERR')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyshelltools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redcarpet
|