polyrex-calendar 0.1.24 → 0.3.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/polyrex-calendar.rb +139 -203
- metadata +16 -2
- 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: c5b7f2adb9120d8bb6f30118816a105abb7321d5
|
4
|
+
data.tar.gz: 7d8db19931ccce31286d9d10962e75bf26f77554
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7f017e63343dce72c18ba5d7cc7f82c334f9e0eb6d155a3a037ab944c749fb7010d7fb35540ef99a0836a4a57871488e3802267ee6429f66b88335b2fc29597
|
7
|
+
data.tar.gz: 971706fa487574ebb81cff54bff62750bf880cc95ebb412b000dfd191cfd3f70254d645682b5817606e84c7a805573afe674f21c353ff9d072e7adb5b92a88f1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/polyrex-calendar.rb
CHANGED
@@ -6,6 +6,7 @@ require 'polyrex'
|
|
6
6
|
require 'date'
|
7
7
|
require 'nokogiri'
|
8
8
|
require 'chronic_duration'
|
9
|
+
require 'chronic_cron'
|
9
10
|
|
10
11
|
MINUTE = 60
|
11
12
|
HOUR = MINUTE * 60
|
@@ -14,9 +15,21 @@ WEEK = DAY * 7
|
|
14
15
|
MONTH = DAY * 30
|
15
16
|
|
16
17
|
|
18
|
+
|
19
|
+
h = {
|
20
|
+
calendar: 'calendar[year]',
|
21
|
+
month: 'month[n, title]',
|
22
|
+
week: 'week[n]',
|
23
|
+
day: 'day[n, event, date, bankholiday, title]',
|
24
|
+
entry: 'entry[time_start, time_end, duration, title]'
|
25
|
+
}
|
26
|
+
visual_schema = %i(calendar month week day entry).map{|x| h[x]}.join '/'
|
27
|
+
PolyrexObjects.new(visual_schema)
|
28
|
+
|
17
29
|
module LIBRARY
|
18
30
|
|
19
31
|
def fetch_file(filename)
|
32
|
+
|
20
33
|
lib = File.dirname(__FILE__)
|
21
34
|
File.read filename
|
22
35
|
end
|
@@ -30,137 +43,147 @@ module LIBRARY
|
|
30
43
|
end
|
31
44
|
end
|
32
45
|
|
33
|
-
class
|
46
|
+
class Polyrex
|
34
47
|
include LIBRARY
|
35
48
|
|
36
|
-
attr_accessor :
|
37
|
-
attr_reader :day
|
38
|
-
|
39
|
-
def initialize(calendar_file=nil, options={})
|
49
|
+
attr_accessor :xslt, :css_layout, :css_style, :filename
|
40
50
|
|
41
|
-
|
42
|
-
|
51
|
+
def inspect()
|
52
|
+
"#<Polyrex:%s" % __id__
|
53
|
+
end
|
43
54
|
|
44
|
-
|
45
|
-
'week[no, rel_no, mon, label]/day[wday, xday, title, event, date, ' + \
|
46
|
-
'ordinal, overlap, bankholiday]/' + \
|
47
|
-
'entry[time_start, time_end, duration, title]'
|
55
|
+
def to_webpage()
|
48
56
|
|
49
|
-
|
50
|
-
|
51
|
-
|
57
|
+
year_xsl = fetch_file self.xslt
|
58
|
+
year_layout_css = fetch_file self.css_layout
|
59
|
+
year_css = fetch_file self.css_style
|
52
60
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
weeks.records.each_with_index do|d,i|
|
57
|
-
@day[Date.parse(d.date)] = [m,w,i]
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
+
File.open('self.xml','w'){|f| f.write (self.to_xml pretty: true)}
|
62
|
+
File.open(self.xslt,'w'){|f| f.write year_xsl }
|
63
|
+
#html = Rexslt.new(month_xsl, self.to_xml).to_xml
|
61
64
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
65
|
+
html = generate_webpage self.to_xml, year_xsl
|
66
|
+
{self.filename => html,
|
67
|
+
self.css_layout => year_layout_css, self.css_style => year_css}
|
66
68
|
|
67
|
-
|
68
|
-
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class PolyrexObjects::Month
|
73
|
+
include LIBRARY
|
69
74
|
|
70
|
-
|
71
|
-
include LIBRARY
|
75
|
+
attr_accessor :xslt, :css_layout, :css_style
|
72
76
|
|
73
|
-
|
77
|
+
def inspect()
|
78
|
+
"#<PolyrexObjects::Month:%s" % __id__
|
79
|
+
end
|
74
80
|
|
75
|
-
|
76
|
-
"#<Polyrex:%s" % __id__
|
77
|
-
end
|
81
|
+
def to_webpage()
|
78
82
|
|
79
|
-
|
83
|
+
month_xsl = fetch_file self.xslt
|
84
|
+
month_layout_css = fetch_file self.css_layout
|
85
|
+
month_css = fetch_file self.css_style
|
80
86
|
|
81
|
-
|
82
|
-
|
83
|
-
|
87
|
+
File.open('self.xml','w'){|f| f.write self.to_xml pretty: true}
|
88
|
+
File.open('month.xsl','w'){|f| f.write month_xsl }
|
89
|
+
#html = Rexslt.new(month_xsl, self.to_xml).to_xml
|
84
90
|
|
85
|
-
|
86
|
-
|
87
|
-
|
91
|
+
# add a css selector for the current day
|
92
|
+
date = Time.now.strftime("%Y-%b-%d")
|
93
|
+
doc = Rexle.new self.to_xml
|
94
|
+
e = doc.root.element("records/week/records/day/summary[date='#{date}']")
|
95
|
+
e.add Rexle::Element.new('css_style').add_text('selected')
|
88
96
|
|
89
|
-
|
90
|
-
|
91
|
-
|
97
|
+
html = generate_webpage doc.xml, month_xsl
|
98
|
+
{self.title.downcase[0..2] + '_calendar.html' => html,
|
99
|
+
self.css_layout => month_layout_css, self.css_style => month_css}
|
100
|
+
end
|
101
|
+
|
102
|
+
def wk(n)
|
103
|
+
self.records[n-1]
|
104
|
+
end
|
105
|
+
end
|
92
106
|
|
93
|
-
|
94
|
-
|
95
|
-
end
|
107
|
+
class PolyrexObjects::Week
|
108
|
+
include LIBRARY
|
96
109
|
|
97
|
-
|
98
|
-
|
110
|
+
def inspect()
|
111
|
+
"#<PolyrexObjects::Week:%s" % __id__
|
112
|
+
end
|
113
|
+
|
114
|
+
def to_webpage()
|
99
115
|
|
100
|
-
|
116
|
+
week_xsl = fetch_file 'week_calendar.xsl'
|
117
|
+
week_layout_css = fetch_file 'week_layout.css'
|
118
|
+
week_css = fetch_file 'week.css'
|
101
119
|
|
102
|
-
|
103
|
-
|
104
|
-
|
120
|
+
File.open('self.xml','w'){|f| f.write self.to_xml pretty: true}
|
121
|
+
File.open('week.xsl','w'){|f| f.write week_xsl }
|
122
|
+
#html = Rexslt.new(week_xsl, self.to_xml).to_xml
|
123
|
+
#html = xsltproc 'week_calendar.xsl', self.to_xml
|
105
124
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
month_css = fetch_file self.css_style
|
111
|
-
|
112
|
-
File.open('self.xml','w'){|f| f.write self.to_xml pretty: true}
|
113
|
-
File.open('month.xsl','w'){|f| f.write month_xsl }
|
114
|
-
#html = Rexslt.new(month_xsl, self.to_xml).to_xml
|
115
|
-
|
116
|
-
# add a css selector for the current day
|
117
|
-
date = Time.now.strftime("%Y-%b-%d")
|
118
|
-
doc = Rexle.new self.to_xml
|
119
|
-
e = doc.root.element("records/week/records/day/summary[date='#{date}']")
|
120
|
-
e.add Rexle::Element.new('css_style').add_text('selected')
|
121
|
-
|
122
|
-
html = generate_webpage doc.xml, month_xsl
|
123
|
-
{self.title.downcase[0..2] + '_calendar.html' => html,
|
124
|
-
self.css_layout => month_layout_css, self.css_style => month_css}
|
125
|
-
end
|
126
|
-
|
127
|
-
def wk(n)
|
128
|
-
self.records[n-1]
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
PolyrexObjects::Week.class_eval do
|
133
|
-
include LIBRARY
|
125
|
+
# add a css selector for the current day
|
126
|
+
date = Time.now.strftime("%Y-%b-%d")
|
127
|
+
doc = Rexle.new self.to_xml
|
128
|
+
e = doc.root.element("records/day/summary[date='#{date}']")
|
134
129
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
130
|
+
e.add Rexle::Element.new('css_style').add_text('selected')
|
131
|
+
|
132
|
+
html = generate_webpage doc.xml, week_xsl
|
133
|
+
{'week' + self.no + '_planner.html' => html, 'week_layout.css' => week_layout_css, \
|
134
|
+
'week.css' => week_css}
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
class PolyrexCalendar
|
139
|
+
include LIBRARY
|
140
|
+
|
141
|
+
attr_accessor :xsl, :css, :polyrex, :month_xsl, :month_css
|
142
|
+
attr_reader :day
|
143
|
+
|
144
|
+
def initialize(calendar_file=nil, options={})
|
140
145
|
|
141
|
-
|
142
|
-
|
143
|
-
|
146
|
+
opts = {year: Time.now.year.to_s}.merge(options)
|
147
|
+
@year = opts[:year]
|
148
|
+
|
149
|
+
@h = {
|
150
|
+
calendar: 'calendar[year]',
|
151
|
+
month: 'month[n, title]',
|
152
|
+
week: 'week[n]',
|
153
|
+
day: 'day[n, event, date, bankholiday]',
|
154
|
+
entry: 'entry[time_start, time_end, duration, title]'
|
155
|
+
}
|
156
|
+
schema = %i(calendar month day entry).map{|x| @h[x]}.join '/'
|
157
|
+
#@visual_schema = %i(calendar month week day entry).map{|x| @h[x]}.join '/'
|
158
|
+
|
159
|
+
|
160
|
+
if calendar_file then
|
161
|
+
@polyrex = Polyrex.new calendar_file
|
162
|
+
@id = @polyrex.id_counter
|
163
|
+
|
164
|
+
else
|
165
|
+
@id = '1'
|
166
|
+
# generate the calendar
|
144
167
|
|
145
|
-
|
146
|
-
File.open('week.xsl','w'){|f| f.write week_xsl }
|
147
|
-
#html = Rexslt.new(week_xsl, self.to_xml).to_xml
|
148
|
-
#html = xsltproc 'week_calendar.xsl', self.to_xml
|
168
|
+
a = (Date.parse(@year + '-01-01')...Date.parse(@year.succ + '-01-01')).to_a
|
149
169
|
|
150
|
-
|
151
|
-
|
152
|
-
doc = Rexle.new self.to_xml
|
153
|
-
e = doc.root.element("records/day/summary[date='#{date}']")
|
170
|
+
@polyrex = Polyrex.new(schema, id_counter: @id)
|
171
|
+
@polyrex.summary.year = @year
|
154
172
|
|
155
|
-
|
173
|
+
a.group_by(&:month).each do |month, days|
|
156
174
|
|
157
|
-
|
158
|
-
|
159
|
-
|
175
|
+
@polyrex.create.month no: month.to_s, title: Date::MONTHNAMES[month] do |create|
|
176
|
+
days.each do |x|
|
177
|
+
create.day n: x.day, wday: x.wday, date: x.strftime("%Y-%b-%d")
|
178
|
+
end
|
179
|
+
end
|
160
180
|
end
|
161
|
-
|
181
|
+
|
162
182
|
end
|
163
|
-
|
183
|
+
|
184
|
+
@xsl = fetch_file 'calendar.xsl'
|
185
|
+
@css = fetch_file 'layout.css'
|
186
|
+
|
164
187
|
end
|
165
188
|
|
166
189
|
def to_a()
|
@@ -228,8 +251,7 @@ class PolyrexCalendar
|
|
228
251
|
|
229
252
|
records.delete
|
230
253
|
|
231
|
-
|
232
|
-
pxmonth = h['Month'].new doc_month.root
|
254
|
+
pxmonth = PolyrexObjects::Month.new doc_month.root
|
233
255
|
|
234
256
|
a = days_in_month
|
235
257
|
i = a[0].text('summary/wday').to_i
|
@@ -244,12 +266,13 @@ class PolyrexCalendar
|
|
244
266
|
|
245
267
|
a2.each_slice(7) do |days_in_week|
|
246
268
|
|
247
|
-
pxweek =
|
269
|
+
pxweek = PolyrexObjects::Week.new \
|
270
|
+
Rexle.new('<week><summary/><records/></week>').root
|
248
271
|
|
249
272
|
days_in_week.each do |day|
|
250
273
|
|
251
274
|
day = Rexle.new("<day><summary/><records/></day>") unless day
|
252
|
-
pxweek.add
|
275
|
+
pxweek.add PolyrexObjects::Day.new(day.root)
|
253
276
|
end
|
254
277
|
|
255
278
|
pxmonth.add pxweek
|
@@ -318,7 +341,7 @@ class PolyrexCalendar
|
|
318
341
|
|
319
342
|
week = doc_week.root.element 'records'
|
320
343
|
days_in_week.each {|day| week.add day }
|
321
|
-
PolyrexObjects
|
344
|
+
PolyrexObjects::Week.new doc_week.root
|
322
345
|
|
323
346
|
end
|
324
347
|
|
@@ -339,10 +362,10 @@ class PolyrexCalendar
|
|
339
362
|
dynarex.flat_records.each do |event|
|
340
363
|
|
341
364
|
dt = DateTime.parse(event[:date])
|
342
|
-
m,
|
365
|
+
m, d = dt.month, dt.day
|
343
366
|
record = {title: title, time_start: time_start}
|
344
367
|
|
345
|
-
@polyrex.records[m].
|
368
|
+
@polyrex.records[m-1].day[d-1].create.entry record
|
346
369
|
end
|
347
370
|
end
|
348
371
|
|
@@ -353,8 +376,8 @@ class PolyrexCalendar
|
|
353
376
|
dynarex.flat_records.each do |event|
|
354
377
|
|
355
378
|
dt = DateTime.parse(event[:date])
|
356
|
-
m,
|
357
|
-
@polyrex.records[m].
|
379
|
+
m, d = dt.month, dt.day
|
380
|
+
@polyrex.records[m-1].day[d-1].method(daytype).call event[:title]
|
358
381
|
end
|
359
382
|
end
|
360
383
|
|
@@ -420,97 +443,10 @@ class PolyrexCalendar
|
|
420
443
|
end
|
421
444
|
|
422
445
|
end
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
a = (Date.parse(@year + '-01-01')...Date.parse(@year.succ + '-01-01')).to_a
|
428
|
-
|
429
|
-
months = a.group_by(&:month).map do |key, month|
|
430
|
-
|
431
|
-
i = month.index(month.detect{|x| x.wday == 0})
|
432
|
-
unless i == 0 then
|
433
|
-
weeks = [month.slice!(0,i)] + month.each_slice(7).to_a
|
434
|
-
(weeks[0] = ([nil] * 6 + weeks[0]).slice(-7..-1))
|
435
|
-
else
|
436
|
-
weeks = month.each_slice(7).to_a
|
437
|
-
end
|
438
|
-
|
439
|
-
weeks[-1] = (weeks[-1] + [nil] * 6 ).slice(0,7) if weeks[-1].length < 7
|
440
|
-
|
441
|
-
weeks
|
442
|
-
end
|
443
|
-
|
444
|
-
@day = {}
|
445
|
-
months.each_with_index do |month,m|
|
446
|
-
month.each_with_index do |weeks,w|
|
447
|
-
weeks.each_with_index{|d,i| @day[d] = [m,w,i]}
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
@a = months
|
452
|
-
|
453
|
-
@polyrex = Polyrex.new(@schema, id_counter: @id)
|
454
|
-
year_start = months[0][0][-1]
|
455
|
-
@polyrex.summary.year = @year
|
456
|
-
old_year_week = (year_start - 7).cweek
|
457
|
-
|
458
|
-
week_i = 1
|
459
|
-
|
460
|
-
months.each_with_index do |month,i|
|
461
|
-
month_name = Date::MONTHNAMES[i+1]
|
462
|
-
@polyrex.create.month no: (i+1).to_s, title: month_name, year: @year do |create|
|
463
|
-
month.each_with_index do |week,j|
|
464
|
-
|
465
|
-
# jr241213 week_s = (week_i == 0 ? old_year_week : week_i).to_s
|
466
|
-
week_s = week_i.to_s
|
467
|
-
|
468
|
-
if week[0].nil? then
|
469
|
-
label = Date::MONTHNAMES[(i > 0 ? i : 12)] + " - " + month_name
|
470
|
-
end
|
471
|
-
|
472
|
-
if week[-1].nil? then
|
473
|
-
label = month_name + " - " + Date::MONTHNAMES[(i+2 <= 12 ? i+2 : 1)]
|
474
|
-
end
|
475
|
-
|
476
|
-
|
477
|
-
week_record = {
|
478
|
-
rel_no: (j+1).to_s,
|
479
|
-
no: week_s,
|
480
|
-
mon: month_name,
|
481
|
-
label: label
|
482
|
-
}
|
483
|
-
|
484
|
-
create.week week_record do |create|
|
485
|
-
week.each_with_index do |day, k|
|
486
|
-
|
487
|
-
# if it's a day in the month then ...
|
488
|
-
if day then
|
489
|
-
x = day
|
490
|
-
week_i += 1 if x.wday == 6
|
491
|
-
h = {wday: x.wday.to_s, xday: x.day.to_s, \
|
492
|
-
title: Date::DAYNAMES[k], date: x.strftime("%Y-%b-%d"), \
|
493
|
-
ordinal: ordinal(x.day.to_i)}
|
494
|
-
else
|
495
|
-
#if blank find the nearest date in the week and calculate this date
|
496
|
-
# check right and if nothing then it's at the end of the month
|
497
|
-
x = week[-1] ? (week[-1] - (7-(k+1))) : week[0] + k
|
498
|
-
h = {wday: x.wday.to_s, xday: x.day.to_s, \
|
499
|
-
title: Date::DAYNAMES[k], date: x.strftime("%Y-%b-%d"), \
|
500
|
-
ordinal: ordinal(x.day.to_i), overlap: 'true'}
|
501
|
-
end
|
502
|
-
|
503
|
-
create.day(h)
|
504
|
-
end
|
505
|
-
end
|
506
|
-
end
|
507
|
-
end
|
508
|
-
end
|
509
|
-
|
510
|
-
end
|
511
|
-
|
512
|
-
def ordinal
|
513
|
-
( (10...20).include?(self) ? 'th' : %w{ th st nd rd th th th th th th }[self % 10] )
|
446
|
+
|
447
|
+
def ordinal(val)
|
448
|
+
(10...20).include?(val) ? \
|
449
|
+
'th' : %w{ th st nd rd th th th th th th }[val % 10]
|
514
450
|
end
|
515
451
|
|
516
452
|
def slotted_sort(a)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyrex-calendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -29,7 +29,7 @@ cert_chain:
|
|
29
29
|
CIpMEIXEnQwmcmWL07xvpUquKTab0tCXtmcfjr74KP2KCm5guZyxeXaj9lD1OrnC
|
30
30
|
Kgt/mRI2beG8K7QY81GGMsQjiG95Dcko
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2014-01-
|
32
|
+
date: 2014-01-17 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: polyrex
|
@@ -73,6 +73,20 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
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'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
76
90
|
description:
|
77
91
|
email: james@r0bertson.co.uk
|
78
92
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|