polyrex-calendar 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/polyrex-calendar.rb +90 -0
  2. metadata +74 -0
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # file: polyrex-calendar.rb
4
+
5
+ require 'polyrex'
6
+ require 'date'
7
+ require 'nokogiri'
8
+
9
+ class PolyrexCalendar
10
+
11
+ def initialize(year=nil)
12
+ @year = year ? year : Time.now.year
13
+ generate_calendar
14
+ end
15
+
16
+ def to_a()
17
+ @a
18
+ end
19
+
20
+ def to_xml()
21
+ @xml
22
+ end
23
+
24
+ def to_webpage()
25
+
26
+ # transform the xml to html
27
+
28
+ doc = Nokogiri::XML(@xml)
29
+ xslt = Nokogiri::XSLT(open('calendar.xsl','r'))
30
+ html = xslt.transform(doc).to_xml
31
+ css = File.open('layout.css','r').read
32
+
33
+ {'calendar.html' => html, 'layout.css' => css}
34
+ end
35
+
36
+ private
37
+
38
+ def generate_calendar()
39
+
40
+ d = Date.parse(@year.to_s + '-Jan-01')
41
+ a = []
42
+ (a << d; d += 1) while d.year == Time.now.year
43
+
44
+ months = a.group_by(&:month).map do |key, month|
45
+ i = month.index(month.detect{|x| x.wday == 0})
46
+ unless i == 0 then
47
+ weeks = [month.slice!(0,i)] + month.each_slice(7).to_a
48
+ (weeks[0] = ([nil] * 6 + weeks[0]).slice(-7..-1))
49
+ else
50
+ weeks = month.each_slice(7).to_a
51
+ end
52
+
53
+ weeks
54
+ end
55
+
56
+ @a = months
57
+
58
+ calendar = Polyrex.new('calendar[year]/month[no,name]/week[no, rel_no]/day[wday, xday, name, event]')
59
+ year_start = months[0][0][-1]
60
+ calendar.summary.year = year_start.year.to_s
61
+ old_year_week = year_start.prev_day.cweek
62
+
63
+ week_i = 0
64
+
65
+ months.each_with_index do |month,i|
66
+
67
+ calendar.create.month no: (i+1).to_s, name: Date::MONTHNAMES[i+1] do |create|
68
+ month.each_with_index do |week,j|
69
+
70
+ week_s = (week_i == 0 ? old_year_week : week_i).to_s
71
+ create.week rel_no: (j+1).to_s, no: week_s do |create|
72
+ week.each_with_index do |x,k|
73
+
74
+ if x then
75
+ week_i += 1 if x.wday == 6
76
+ h = {wday: x.wday.to_s, xday: x.day.to_s, name: Date::DAYNAMES[k]}
77
+ else
78
+ h = {}
79
+ end
80
+ create.day(h)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ @xml = calendar.to_xml pretty: true
88
+
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polyrex-calendar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors: []
7
+
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2011-01-22 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: polyrex
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description:
36
+ email:
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/polyrex-calendar.rb
45
+ has_rdoc: true
46
+ homepage:
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: polyrex-calendar
73
+ test_files: []
74
+