polyrex-calendar 0.1.22 → 0.1.23

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a60bc682b237e98a83ffe54d832f99cc86b8006
4
- data.tar.gz: c2c2a3ea1b29c8e2bb5047f28a960cf389ee6dfd
3
+ metadata.gz: 812128340cca8d02db68ea71ed8b86c8d062f83c
4
+ data.tar.gz: e87ce48043da7284605ce595fbb2041fc95b1dae
5
5
  SHA512:
6
- metadata.gz: 3043cef3be8f7b5967af3e12613ad6aeb291f5fbf9ae4b93c9cb4c0fb15ae97eddaca0c4f8fe9a5e73a524c8e24047034ce265b797954a79164ea21dcf337453
7
- data.tar.gz: f58a52b4de11fc484d6c59ec3eb3f89ad6c03e273cdd9c28058ba1da65b1eda35a0576a4a03067845f0ffa6f73ba9746d60853604fbf733c0f77556779f04f67
6
+ metadata.gz: d63d5e56bfb6655e376095d4d7aa7b0424926817e7d992e499dfdae27c9103bc956114f2770ee9af4bf27b3e428930bcac77dcd1993e00752775b13d9639f4f6
7
+ data.tar.gz: 4e006ce2307af7f5fe91d0d35e8e651739ce1a58f6e5c8f77ddbea250f6ae456a609a9b3d19db47b84bd47613f8f62bd1df98d6e76d6f0a1f87384c5aabbb267
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/kplanner.xsl ADDED
File without changes
File without changes
data/lib/monthday.css ADDED
File without changes
File without changes
@@ -13,25 +13,41 @@ DAY = HOUR * 24
13
13
  WEEK = DAY * 7
14
14
  MONTH = DAY * 30
15
15
 
16
- class Numeric
17
- def ordinal
18
- ( (10...20).include?(self) ? 'th' : %w{ th st nd rd th th th th th th }[self % 10] )
16
+
17
+ module LIBRARY
18
+
19
+ def fetch_file(filename)
20
+ #lib = File.dirname(__FILE__)
21
+ #File.read filename
22
+ lib = 'http://rorbuilder.info/r/ruby/polyrex-calendar'
23
+ open(File.join(lib, filename),
24
+ 'UserAgent' => 'PolyrexCalendar'){|x| x.read }
25
+ end
26
+
27
+ def generate_webpage(xml, xsl)
28
+
29
+ # transform the xml to html
30
+ doc = Nokogiri::XML(xml)
31
+ xslt = Nokogiri::XSLT(xsl)
32
+ xslt.transform(doc).to_s
19
33
  end
20
- end
34
+ end
21
35
 
22
36
  class PolyrexCalendar
37
+ include LIBRARY
23
38
 
24
39
  attr_accessor :xsl, :css, :polyrex, :month_xsl, :month_css
25
40
  attr_reader :day
26
-
41
+
27
42
  def initialize(calendar_file=nil, options={})
28
43
 
29
- lib = File.dirname(__FILE__)
30
- opts = {calendar_xsl: lib + '/calendar.xsl'
31
- }.merge(options)
32
- year = opts[:year]
33
- @year = year ? year.to_s : Time.now.year.to_s
44
+ opts = {year: Time.now.year.to_s}.merge(options)
45
+ @year = opts[:year]
34
46
 
47
+ @schema = 'calendar[year]/month[no,title,year]/' + \
48
+ 'week[no, rel_no, mon, label]/day[wday, xday, title, event, date, ' + \
49
+ 'ordinal, overlap, bankholiday]/' + \
50
+ 'entry[time_start, time_end, duration, title]'
35
51
 
36
52
  if calendar_file then
37
53
  @polyrex = Polyrex.new calendar_file
@@ -49,23 +65,52 @@ class PolyrexCalendar
49
65
  else
50
66
  @id = '1'
51
67
  generate_calendar
52
- end
68
+ end
69
+
70
+ @xsl = fetch_file 'calendar.xsl'
71
+ @css = fetch_file 'layout.css'
72
+
73
+ Polyrex.class_eval do
74
+ include LIBRARY
75
+
76
+ attr_accessor :xslt, :css_layout, :css_style, :filename
77
+
78
+ def inspect()
79
+ "#<Polyrex:%s" % __id__
80
+ end
81
+
82
+ def to_webpage()
83
+
84
+ year_xsl = fetch_file self.xslt
85
+ year_layout_css = fetch_file self.css_layout
86
+ year_css = fetch_file self.css_style
87
+
88
+ File.open('self.xml','w'){|f| f.write (self.to_xml pretty: true)}
89
+ File.open(self.xslt,'w'){|f| f.write year_xsl }
90
+ #html = Rexslt.new(month_xsl, self.to_xml).to_xml
91
+
92
+ html = generate_webpage self.to_xml, year_xsl
93
+ {self.filename => html,
94
+ self.css_layout => year_layout_css, self.css_style => year_css}
95
+
96
+ end
97
+
98
+ end
53
99
 
54
- @xsl = File.read lib + '/calendar.xsl'
55
- @css = File.read lib + '/layout.css'
56
-
57
100
  PolyrexObjects::Month.class_eval do
101
+ include LIBRARY
102
+
103
+ attr_accessor :xslt, :css_layout, :css_style
58
104
 
59
105
  def inspect()
60
106
  "#<PolyrexObjects::Month:%s" % __id__
61
107
  end
62
108
 
63
109
  def to_webpage()
64
- lib = File.dirname(__FILE__)
65
110
 
66
- month_xsl = File.read lib + '/month_calendar.xsl'
67
- month_layout_css = File.read lib + '/month_layout.css'
68
- month_css = File.read lib + '/month.css'
111
+ month_xsl = fetch_file self.xslt
112
+ month_layout_css = fetch_file self.css_layout
113
+ month_css = fetch_file self.css_style
69
114
 
70
115
  File.open('self.xml','w'){|f| f.write self.to_xml pretty: true}
71
116
  File.open('month.xsl','w'){|f| f.write month_xsl }
@@ -77,11 +122,9 @@ class PolyrexCalendar
77
122
  e = doc.root.element("records/week/records/day/summary[date='#{date}']")
78
123
  e.add Rexle::Element.new('css_style').add_text('selected')
79
124
 
80
- xslt = Nokogiri::XSLT(month_xsl)
81
- html = xslt.transform(Nokogiri::XML(doc.xml)).to_s
125
+ html = generate_webpage doc.xml, month_xsl
82
126
  {self.title.downcase[0..2] + '_calendar.html' => html,
83
- 'month_layout.css' => month_layout_css, 'month.css' => month_css}
84
-
127
+ self.css_layout => month_layout_css, self.css_style => month_css}
85
128
  end
86
129
 
87
130
  def wk(n)
@@ -90,33 +133,31 @@ class PolyrexCalendar
90
133
  end
91
134
 
92
135
  PolyrexObjects::Week.class_eval do
136
+ include LIBRARY
93
137
 
94
138
  def inspect()
95
139
  "#<PolyrexObjects::Week:%s" % __id__
96
140
  end
97
141
 
98
142
  def to_webpage()
99
-
100
- lib = File.dirname(__FILE__)
101
-
102
- week_xsl = File.read lib + '/week_calendar.xsl'
103
- week_layout_css = File.read lib + '/week_layout.css'
104
- week_css = File.read lib + '/week.css'
105
-
143
+
144
+ week_xsl = fetch_file 'week_calendar.xsl'
145
+ week_layout_css = fetch_file 'week_layout.css'
146
+ week_css = fetch_file 'week.css'
147
+
106
148
  File.open('self.xml','w'){|f| f.write self.to_xml pretty: true}
107
149
  File.open('week.xsl','w'){|f| f.write week_xsl }
108
150
  #html = Rexslt.new(week_xsl, self.to_xml).to_xml
109
151
  #html = xsltproc 'week_calendar.xsl', self.to_xml
110
-
152
+
111
153
  # add a css selector for the current day
112
154
  date = Time.now.strftime("%Y-%b-%d")
113
155
  doc = Rexle.new self.to_xml
114
156
  e = doc.root.element("records/day/summary[date='#{date}']")
115
157
 
116
- e.add Rexle::Element.new('css_style').add_text('selected')
117
- xslt = Nokogiri::XSLT(week_xsl)
118
- html = xslt.transform(Nokogiri::XML(doc.xml)).to_s
119
-
158
+ e.add Rexle::Element.new('css_style').add_text('selected')
159
+
160
+ html = generate_webpage doc.xml, week_xsl
120
161
  {'week' + self.no + '_planner.html' => html, 'week_layout.css' => week_layout_css, \
121
162
  'week.css' => week_css}
122
163
  end
@@ -133,13 +174,6 @@ class PolyrexCalendar
133
174
  @polyrex.to_xml pretty: true
134
175
  end
135
176
 
136
- def to_webpage()
137
- # jr2441213 html = Rexslt.new(@xsl, @polyrex.to_xml).to_xml
138
- xslt = Nokogiri::XSLT(@xsl)
139
- html = xslt.transform(Nokogiri::XML(@polyrex.to_xml)).to_s
140
- {'calendar.html' => html, 'layout.css' => @css}
141
- end
142
-
143
177
  def import_events(objx)
144
178
  @id = @polyrex.id_counter
145
179
  method('import_'.+(objx.class.to_s.downcase).to_sym).call(objx)
@@ -152,8 +186,91 @@ class PolyrexCalendar
152
186
  %Q(=> #<PolyrexCalendar:#{self.object_id} @id="#{@id}", @year="#{@year}">)
153
187
  end
154
188
 
155
- def month(m)
156
- @polyrex.records[m-1]
189
+ def kitchen_planner()
190
+
191
+ px = Polyrex.new(@schema, id_counter: @id)
192
+ px.summary.year = @year
193
+ (1..12).each {|n| px.add self.month(n, strict: true) }
194
+
195
+ px.xslt = 'kplanner.xsl'
196
+ px.css_layout = 'monthday_layout.css'
197
+ px.css_style = 'monthday.css'
198
+ px.filename = summary.year.to_s + '-kitchen-planner.html'
199
+
200
+ px
201
+
202
+ end
203
+
204
+ def year_planner()
205
+
206
+ px = Polyrex.new(@schema, id_counter: @id)
207
+ px.summary.year = @year
208
+ (1..12).each {|n| px.add self.month(n, strict: true) }
209
+
210
+ px.xslt = 'calendar.xsl'
211
+ px.css_layout = 'layout.css'
212
+ px.css_style = 'year.css'
213
+ px.filename = px.summary.year.to_s + '-planner.html'
214
+
215
+ px
216
+
217
+ end
218
+
219
+ def month(m, strict: false)
220
+
221
+ cal_month = @polyrex.records[m-1]
222
+
223
+ if strict == true then
224
+
225
+ days_in_month = cal_month.xpath('records/week/records/.')\
226
+ .select {|x| Date.parse(x.text('summary/date')).month == m}
227
+
228
+ doc_month = Rexle.new cal_month.to_xml
229
+ records = doc_month.root.element 'records'
230
+ records.insert_before Rexle::Element.new('records')
231
+
232
+ records.delete
233
+
234
+ h = PolyrexObjects.new(@schema).to_h
235
+ pxmonth = h['Month'].new doc_month.root
236
+
237
+ a = days_in_month
238
+ i = a[0].text('summary/wday').to_i
239
+
240
+ a2 = if i > 1 then
241
+ Array.new(i - 1) + a
242
+ elsif i < 1 then
243
+ Array.new(6) + a
244
+ else
245
+ a
246
+ end
247
+
248
+ a2.each_slice(7) do |days_in_week|
249
+
250
+ pxweek = h['Week'].new Rexle.new('<week><summary/><records/></week>').root
251
+
252
+ days_in_week.each do |day|
253
+
254
+ day = Rexle.new("<day><summary/><records/></day>") unless day
255
+ pxweek.add h['Day'].new(day.root)
256
+ end
257
+
258
+ pxmonth.add pxweek
259
+ end
260
+
261
+ pxmonth.xslt = 'monthday_calendar.xsl'
262
+ pxmonth.css_layout = 'monthday_layout.css'
263
+ pxmonth.css_style = 'monthday.css'
264
+ pxmonth
265
+
266
+ else
267
+ cal_month.xslt = 'month_calendar.xsl'
268
+ cal_month.css_layout = 'month_layout.css'
269
+ cal_month.css_style = 'month.css'
270
+
271
+ cal_month
272
+ end
273
+
157
274
  end
158
275
 
159
276
  def months
@@ -215,6 +332,22 @@ class PolyrexCalendar
215
332
  def import_bankholidays(dynarex)
216
333
  import_dynarex(dynarex, :bankholiday=)
217
334
  end
335
+
336
+ def import_recurring_events(dynarex)
337
+
338
+ title = dynarex.summary[:event_title]
339
+ cc = ChronicCron.new dynarex.summary[:description].split(/,/,2).first
340
+ time_start= "%s:%02d" % cc.to_time.to_a.values_at(2,1)
341
+
342
+ dynarex.flat_records.each do |event|
343
+
344
+ dt = DateTime.parse(event[:date])
345
+ m,w,i = @day[dt.to_date]
346
+ record = {title: title, time_start: time_start}
347
+
348
+ @polyrex.records[m].week[w].day[i].create.entry record
349
+ end
350
+ end
218
351
 
219
352
  private
220
353
 
@@ -222,8 +355,8 @@ class PolyrexCalendar
222
355
 
223
356
  dynarex.flat_records.each do |event|
224
357
 
225
- date = Date.parse(event[:date])
226
- m,w,i = @day[date]
358
+ dt = DateTime.parse(event[:date])
359
+ m,w,i = @day[dt.to_date]
227
360
  @polyrex.records[m].week[w].day[i].method(daytype).call event[:title]
228
361
  end
229
362
  end
@@ -319,9 +452,7 @@ class PolyrexCalendar
319
452
  end
320
453
 
321
454
  @a = months
322
- @schema = 'calendar[year]/month[no,title,year]/week[no, rel_no, mon, label]/' + \
323
- 'day[wday, xday, title, event, date, ordinal, overlap, bankholiday]/' + \
324
- 'entry[time_start, time_end, duration, title]'
455
+
325
456
  @polyrex = Polyrex.new(@schema, id_counter: @id)
326
457
  year_start = months[0][0][-1]
327
458
  @polyrex.summary.year = @year
@@ -362,14 +493,14 @@ class PolyrexCalendar
362
493
  week_i += 1 if x.wday == 6
363
494
  h = {wday: x.wday.to_s, xday: x.day.to_s, \
364
495
  title: Date::DAYNAMES[k], date: x.strftime("%Y-%b-%d"), \
365
- ordinal: x.day.to_i.ordinal}
496
+ ordinal: ordinal(x.day.to_i)}
366
497
  else
367
498
  #if blank find the nearest date in the week and calculate this date
368
499
  # check right and if nothing then it's at the end of the month
369
500
  x = week[-1] ? (week[-1] - (7-(k+1))) : week[0] + k
370
501
  h = {wday: x.wday.to_s, xday: x.day.to_s, \
371
502
  title: Date::DAYNAMES[k], date: x.strftime("%Y-%b-%d"), \
372
- ordinal: x.day.to_i.ordinal, overlap: 'true'}
503
+ ordinal: ordinal(x.day.to_i), overlap: 'true'}
373
504
  end
374
505
 
375
506
  create.day(h)
@@ -381,6 +512,10 @@ class PolyrexCalendar
381
512
 
382
513
  end
383
514
 
515
+ def ordinal
516
+ ( (10...20).include?(self) ? 'th' : %w{ th st nd rd th th th th th th }[self % 10] )
517
+ end
518
+
384
519
  def slotted_sort(a)
385
520
 
386
521
  upper = 36000 # upper slot value
@@ -406,13 +541,5 @@ class PolyrexCalendar
406
541
  a = b.+([nil] * max_slots).take(max_slots).reverse
407
542
  end
408
543
 
409
- def generate_webpage(xml, xsl)
410
-
411
- # transform the xml to html
412
- doc = Nokogiri::XML(xml)
413
- xslt = Nokogiri::XSLT(xsl)
414
- html = xslt.transform(doc).to_xml
415
- html
416
544
 
417
- end
418
545
  end
data.tar.gz.sig CHANGED
Binary file
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.1.22
4
+ version: 0.1.23
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-02 00:00:00.000000000 Z
32
+ date: 2014-01-15 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: polyrex
@@ -79,15 +79,19 @@ executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
+ - lib/kplanner_month.xsl
82
83
  - lib/calendar.xsl
83
84
  - lib/month_calendar.xsl
84
85
  - lib/week.css
85
86
  - lib/layout.css
86
87
  - lib/week_layout.css
87
88
  - lib/polyrex-calendar.rb~
89
+ - lib/monthday_layout.css
88
90
  - lib/polyrex-calendar.rb
89
91
  - lib/week_calendar.xsl
90
92
  - lib/calendar.xsl~
93
+ - lib/kplanner.xsl
94
+ - lib/monthday.css
91
95
  - lib/month_layout.css
92
96
  - lib/month.css
93
97
  homepage: https://github.com/jrobertson/polyrex-calendar
metadata.gz.sig CHANGED
Binary file