polyrex-calendar 0.3.11 → 0.5.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 +1 -2
 - data/lib/polyrex-calendar.rb +30 -399
 - data/lib/polyrex-calendar.rb~ +30 -400
 - data.tar.gz.sig +0 -0
 - metadata +5 -86
 - 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: bce4882cc2ad150e9fb2edd2d6a786896b5ebeb9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3451f7a0e86515f3186875b6c3026f42cd94fcbb
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: b6f54c2840a6833dc3720cb8c331558b3baca82250606969ea3bea904a2773281ea8463318c184c4192a873b2ac29e50263c9fd535a7bc277e0fff7beb630a8a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 45b084ec740fdd9163163e22aff6a32ed13a0b83f6ec7fc7d05b9f2316eb69c7120bef21fabe59ec9e0cabf2f3cccdeb405ad8532ad61c75b986685e2d6a2bc4
         
     | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | 
         @@ -1,2 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
            ������E;r�CAEE���/�ΧI�	�Jf���A�$Ԕ����0�Ζ��*��r�e�M���ˮ{��p�r>h�r&���p��������r'����T���e5k�����ɂ����r��J7�%�/��+��yHj�n��W�W�/�io_�@E8�`ݜ��'ɷ�4m�ݑ��T�_��U�QwB��,����I$��#�)+�������E
         
     | 
| 
      
 1 
     | 
    
         
            +
            F�Ȭ2泚8���wb$�9r�_%HX��O��)��@ii=�IɊ�疓	@������k�P�.G�~q[�pgM�n~��X:����o�	E�e�x� VH����r��j��̱Ak���P�����W��U�����{+�0J��L��\��oqS#�h��]�B��:��J;��\mbe#x�t�������-+�����G�!�[`�=#�	(U��~��1�5�wGQ������^I�A7AlĈw!,l
         
     | 
    
        data/lib/polyrex-calendar.rb
    CHANGED
    
    | 
         @@ -2,230 +2,65 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            # file: polyrex-calendar.rb
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            require ' 
     | 
| 
       6 
     | 
    
         
            -
            require 'date'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'nokogiri'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'chronic_duration'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'chronic_cron'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'rxfhelper'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'px-calendarbase'
         
     | 
| 
       11 
6 
     | 
    
         | 
| 
       12 
7 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            h = {
         
     | 
| 
       17 
     | 
    
         
            -
              calendar: 'calendar[year]',
         
     | 
| 
       18 
     | 
    
         
            -
                 month: 'month[n, title]',
         
     | 
| 
       19 
     | 
    
         
            -
                  week: 'week[n, mon, no, label]',
         
     | 
| 
       20 
     | 
    
         
            -
                   day: 'day[sdate, xday, event, bankholiday, title, sunrise, sunset]',
         
     | 
| 
       21 
     | 
    
         
            -
                 entry: 'entry[time_start, time_end, duration, title]'
         
     | 
| 
       22 
     | 
    
         
            -
            }
         
     | 
| 
       23 
     | 
    
         
            -
            visual_schema = h.values.join '/'
         
     | 
| 
       24 
     | 
    
         
            -
            PolyrexObjects.new(visual_schema)
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
            module LIBRARY
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              def fetch_file(filename)
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                lib = File.dirname(__FILE__)
         
     | 
| 
       31 
     | 
    
         
            -
                File.read filename      
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
              def generate_webpage(xml, xsl)
         
     | 
| 
       36 
     | 
    
         
            -
                
         
     | 
| 
       37 
     | 
    
         
            -
                # transform the xml to html
         
     | 
| 
       38 
     | 
    
         
            -
                doc = Nokogiri::XML(xml)
         
     | 
| 
       39 
     | 
    
         
            -
                xslt  = Nokogiri::XSLT(xsl)
         
     | 
| 
       40 
     | 
    
         
            -
                xslt.transform(doc).to_s   
         
     | 
| 
       41 
     | 
    
         
            -
              end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
              def read(s)
         
     | 
| 
       44 
     | 
    
         
            -
                RXFHelper.read(s).first
         
     | 
| 
       45 
     | 
    
         
            -
              end
         
     | 
| 
       46 
     | 
    
         
            -
            end 
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
            class Polyrex
         
     | 
| 
       49 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              attr_accessor :xslt, :css_layout, :css_style, :filename
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       54 
     | 
    
         
            -
                "#<Polyrex:%s" % __id__
         
     | 
| 
       55 
     | 
    
         
            -
              end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                year_xsl        = self.xslt ? read(self.xslt) : fetch_file(self.xslt)
         
     | 
| 
       60 
     | 
    
         
            -
                year_layout_css = fetch_file self.css_layout
         
     | 
| 
       61 
     | 
    
         
            -
                year_css        = fetch_file self.css_style
         
     | 
| 
       62 
     | 
    
         
            -
                File.open('self.xml','w'){|f| f.write (self.to_xml pretty: true)}
         
     | 
| 
       63 
     | 
    
         
            -
                File.open(self.xslt,'w'){|f| f.write year_xsl }
         
     | 
| 
       64 
     | 
    
         
            -
                #html = Rexslt.new(month_xsl, self.to_xml).to_xml
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                html = generate_webpage self.to_xml, year_xsl
         
     | 
| 
       67 
     | 
    
         
            -
                {self.filename => html, 
         
     | 
| 
       68 
     | 
    
         
            -
                  self.css_layout => year_layout_css, self.css_style => year_css}
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              end           
         
     | 
| 
       71 
     | 
    
         
            -
            end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
            class PolyrexObjects::Month
         
     | 
| 
       74 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
              attr_accessor :xslt, :css_layout, :css_style
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       79 
     | 
    
         
            -
                "#<PolyrexObjects::Month:%s" % __id__
         
     | 
| 
       80 
     | 
    
         
            -
              end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                month_xsl        = fetch_file self.xslt
         
     | 
| 
       85 
     | 
    
         
            -
                month_layout_css = fetch_file self.css_layout
         
     | 
| 
       86 
     | 
    
         
            -
                month_css        = fetch_file self.css_style
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                # add a css selector for the current day
         
     | 
| 
       89 
     | 
    
         
            -
                date = Time.now.strftime("%Y-%b-%d")
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                e = self.element("records/week/records/day/summary[sdate='#{date}']")
         
     | 
| 
       92 
     | 
    
         
            -
                e.attributes[:class] = 'selected' if e
         
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
                File.write 'self.xml', self.to_xml(pretty: true)
         
     | 
| 
       95 
     | 
    
         
            -
                File.write 'month.xsl', month_xsl 
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                html = generate_webpage self.to_xml, month_xsl
         
     | 
| 
       99 
     | 
    
         
            -
                {self.title.downcase[0..2] + '_calendar.html' => html, 
         
     | 
| 
       100 
     | 
    
         
            -
                  self.css_layout => month_layout_css, self.css_style => month_css}
         
     | 
| 
       101 
     | 
    
         
            -
              end      
         
     | 
| 
      
 8 
     | 
    
         
            +
            class PolyrexObjects
         
     | 
| 
       102 
9 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
               
     | 
| 
       104 
     | 
    
         
            -
                 
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
            class PolyrexObjects::Week
         
     | 
| 
       109 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       112 
     | 
    
         
            -
                "#<PolyrexObjects::Week:%s" % __id__
         
     | 
| 
      
 10 
     | 
    
         
            +
              class Month
         
     | 
| 
      
 11 
     | 
    
         
            +
                
         
     | 
| 
      
 12 
     | 
    
         
            +
                def wk(n)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.records[n-1]        
         
     | 
| 
      
 14 
     | 
    
         
            +
                end      
         
     | 
| 
       113 
15 
     | 
    
         
             
              end
         
     | 
| 
       114 
     | 
    
         
            -
              
         
     | 
| 
       115 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
                week_xsl        = fetch_file 'week_calendar.xsl'
         
     | 
| 
       118 
     | 
    
         
            -
                week_layout_css = fetch_file 'week_layout.css'
         
     | 
| 
       119 
     | 
    
         
            -
                week_css        = fetch_file 'week.css'
         
     | 
| 
       120 
16 
     | 
    
         | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
                 
     | 
| 
      
 17 
     | 
    
         
            +
              class Week
         
     | 
| 
      
 18 
     | 
    
         
            +
                
         
     | 
| 
      
 19 
     | 
    
         
            +
                def to_webpage()
         
     | 
| 
       123 
20 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                  week_xsl        = fetch_file 'week_calendar.xsl'
         
     | 
| 
      
 22 
     | 
    
         
            +
                  week_layout_css = fetch_file 'week_layout.css'
         
     | 
| 
      
 23 
     | 
    
         
            +
                  week_css        = fetch_file 'week.css'
         
     | 
| 
       126 
24 
     | 
    
         | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                  File.write 'self.xml', self.to_xml(pretty: true)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  File.write 'week.xsl', week_xsl
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #html = Rexslt.new(week_xsl, self.to_xml).to_xml
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #html = xsltproc 'week_calendar.xsl', self.to_xml
         
     | 
| 
       129 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                  # add a css selector for the current day
         
     | 
| 
      
 31 
     | 
    
         
            +
                  date = Time.now.strftime("%Y-%b-%d")
         
     | 
| 
       130 
32 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                 'week.css' => week_css}
         
     | 
| 
       134 
     | 
    
         
            -
              end  
         
     | 
| 
       135 
     | 
    
         
            -
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  e = self.element("records/day/summary[sdate='#{date}']")
         
     | 
| 
      
 34 
     | 
    
         
            +
                  e.attributes[:class] = 'selected' if e
         
     | 
| 
       136 
35 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
            class PolyrexObjects::Day
         
     | 
| 
       138 
36 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                  html = generate_webpage self.to_xml, week_xsl
         
     | 
| 
      
 38 
     | 
    
         
            +
                  {'week' + self.no + '_planner.html' => html, 'week_layout.css' => week_layout_css, \
         
     | 
| 
      
 39 
     | 
    
         
            +
                  'week.css' => week_css}
         
     | 
| 
      
 40 
     | 
    
         
            +
                end  
         
     | 
| 
       141 
41 
     | 
    
         
             
              end
         
     | 
| 
       142 
42 
     | 
    
         | 
| 
       143 
     | 
    
         
            -
              def wday()
         
     | 
| 
       144 
     | 
    
         
            -
                self.date.wday
         
     | 
| 
       145 
     | 
    
         
            -
              end
         
     | 
| 
       146 
43 
     | 
    
         | 
| 
       147 
     | 
    
         
            -
              def day()
         
     | 
| 
       148 
     | 
    
         
            -
                self.date.day
         
     | 
| 
       149 
     | 
    
         
            -
              end
         
     | 
| 
       150 
44 
     | 
    
         
             
            end
         
     | 
| 
       151 
45 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
            class PolyrexCalendar
         
     | 
| 
       153 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
              attr_accessor :xsl, :css, :polyrex, :month_xsl, :month_css
         
     | 
| 
       156 
     | 
    
         
            -
              attr_reader :day
         
     | 
| 
      
 46 
     | 
    
         
            +
            class PolyrexCalendar < PolyrexCalendarBase
         
     | 
| 
       157 
47 
     | 
    
         | 
| 
       158 
48 
     | 
    
         
             
              def initialize(calendar_file=nil, options={})
         
     | 
| 
       159 
49 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
                 
     | 
| 
       161 
     | 
    
         
            -
                @year = opts[:year]
         
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
                h = {
         
     | 
| 
       164 
     | 
    
         
            -
                  calendar: 'calendar[year]',
         
     | 
| 
       165 
     | 
    
         
            -
                     month: 'month[n, title]',
         
     | 
| 
       166 
     | 
    
         
            -
                      week: 'week[n]',
         
     | 
| 
       167 
     | 
    
         
            -
                       day: 'day[sdate, xday, event, bankholiday, title, sunrise, sunset]',
         
     | 
| 
       168 
     | 
    
         
            -
                     entry: 'entry[time_start, time_end, duration, title]'
         
     | 
| 
       169 
     | 
    
         
            -
                }
         
     | 
| 
       170 
     | 
    
         
            -
                @schema = %i(calendar month day entry).map{|x| h[x]}.join '/'
         
     | 
| 
       171 
     | 
    
         
            -
                @visual_schema = h.values.join '/'
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                if calendar_file then
         
     | 
| 
       175 
     | 
    
         
            -
                  @polyrex = Polyrex.new calendar_file
         
     | 
| 
       176 
     | 
    
         
            -
                  @id = @polyrex.id_counter
         
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
                else
         
     | 
| 
       179 
     | 
    
         
            -
                  @id = '1'
         
     | 
| 
       180 
     | 
    
         
            -
                  # generate the calendar
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                  a = (Date.parse(@year + '-01-01')...Date.parse(@year.succ + '-01-01')).to_a
         
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
                  @polyrex = Polyrex.new(@schema, id_counter: @id)
         
     | 
| 
       185 
     | 
    
         
            -
                  @polyrex.summary.year = @year
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
                  a.group_by(&:month).each do |month, days| 
         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
                    @polyrex.create.month no: month.to_s, title: Date::MONTHNAMES[month]  do |create|
         
     | 
| 
       190 
     | 
    
         
            -
                      days.each do |x|
         
     | 
| 
       191 
     | 
    
         
            -
                        create.day sdate: x.strftime("%Y-%b-%d"), xday: x.day.to_s, title: Date::DAYNAMES[x.wday]
         
     | 
| 
       192 
     | 
    
         
            -
                      end
         
     | 
| 
       193 
     | 
    
         
            -
                    end
         
     | 
| 
       194 
     | 
    
         
            -
                  end
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                end
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                visual_schema = h.values.join '/'
         
     | 
| 
       199 
     | 
    
         
            -
                PolyrexObjects.new(visual_schema)
         
     | 
| 
      
 50 
     | 
    
         
            +
                super(calendar_file, options)
         
     | 
| 
       200 
51 
     | 
    
         | 
| 
       201 
52 
     | 
    
         
             
                @xsl = fetch_file 'calendar.xsl'
         
     | 
| 
       202 
53 
     | 
    
         
             
                @css = fetch_file 'layout.css'
         
     | 
| 
       203 
54 
     | 
    
         | 
| 
       204 
55 
     | 
    
         
             
              end
         
     | 
| 
       205 
56 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
              def to_a()
         
     | 
| 
       207 
     | 
    
         
            -
                @a
         
     | 
| 
       208 
     | 
    
         
            -
              end
         
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
              def to_xml()
         
     | 
| 
       211 
     | 
    
         
            -
                @polyrex.to_xml pretty: true
         
     | 
| 
       212 
     | 
    
         
            -
              end
         
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
              def import_events(objx)
         
     | 
| 
       215 
     | 
    
         
            -
                @id = @polyrex.id_counter
         
     | 
| 
       216 
     | 
    
         
            -
                method('import_'.+(objx.class.to_s.downcase).to_sym).call(objx)
         
     | 
| 
       217 
     | 
    
         
            -
                self
         
     | 
| 
       218 
     | 
    
         
            -
              end
         
     | 
| 
       219 
     | 
    
         
            -
              
         
     | 
| 
       220 
     | 
    
         
            -
              alias import! import_events
         
     | 
| 
       221 
     | 
    
         
            -
             
     | 
| 
       222 
57 
     | 
    
         
             
              def inspect()
         
     | 
| 
       223 
58 
     | 
    
         
             
                 %Q(=> #<PolyrexCalendar:#{self.object_id} @id="#{@id}", @year="#{@year}">)
         
     | 
| 
       224 
59 
     | 
    
         
             
              end
         
     | 
| 
       225 
60 
     | 
    
         | 
| 
       226 
61 
     | 
    
         
             
              def kitchen_planner()
         
     | 
| 
       227 
62 
     | 
    
         | 
| 
       228 
     | 
    
         
            -
                px = @ 
     | 
| 
      
 63 
     | 
    
         
            +
                px = @calendar
         
     | 
| 
       229 
64 
     | 
    
         | 
| 
       230 
65 
     | 
    
         
             
                # add a css selector for the current day
         
     | 
| 
       231 
66 
     | 
    
         
             
                date = DateTime.now.strftime("%Y-%b-%d")
         
     | 
| 
         @@ -285,7 +120,6 @@ class PolyrexCalendar 
     | 
|
| 
       285 
120 
     | 
    
         | 
| 
       286 
121 
     | 
    
         
             
                    r
         
     | 
| 
       287 
122 
     | 
    
         | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
       289 
123 
     | 
    
         
             
                  end
         
     | 
| 
       290 
124 
     | 
    
         | 
| 
       291 
125 
     | 
    
         
             
                  pxmonth.xslt = 'monthday_calendar.xsl'
         
     | 
| 
         @@ -320,37 +154,11 @@ class PolyrexCalendar 
     | 
|
| 
       320 
154 
     | 
    
         
             
                end
         
     | 
| 
       321 
155 
     | 
    
         | 
| 
       322 
156 
     | 
    
         
             
              end
         
     | 
| 
       323 
     | 
    
         
            -
              def month_day()
         
     | 
| 
       324 
     | 
    
         
            -
              end
         
     | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
       326 
     | 
    
         
            -
              def months
         
     | 
| 
       327 
     | 
    
         
            -
                @polyrex.records
         
     | 
| 
       328 
     | 
    
         
            -
              end
         
     | 
| 
       329 
     | 
    
         
            -
              
         
     | 
| 
       330 
     | 
    
         
            -
              def parse_events(list)    
         
     | 
| 
       331 
157 
     | 
    
         | 
| 
       332 
     | 
    
         
            -
                polyrex = Polyrex.new('events/dayx[date, title]/entryx[start_time, end_time,' + \
         
     | 
| 
       333 
     | 
    
         
            -
                  ' duration, title]')
         
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
                polyrex.format_masks[1] = '([!start_time] \([!duration]\) [!title]|' +  \
         
     | 
| 
       336 
     | 
    
         
            -
                  '[!start_time]-[!end_time] [!title]|' + \
         
     | 
| 
       337 
     | 
    
         
            -
                  '[!start_time] [!title])'
         
     | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
       339 
     | 
    
         
            -
                polyrex.parse(list)
         
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
     | 
    
         
            -
                self.import_events polyrex
         
     | 
| 
       342 
     | 
    
         
            -
                # for testing only
         
     | 
| 
       343 
     | 
    
         
            -
                #polyrex
         
     | 
| 
       344 
     | 
    
         
            -
              end
         
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
     | 
    
         
            -
              def save(filename='polyrex.xml')
         
     | 
| 
       347 
     | 
    
         
            -
                @polyrex.save filename
         
     | 
| 
       348 
     | 
    
         
            -
              end
         
     | 
| 
       349 
     | 
    
         
            -
              
         
     | 
| 
       350 
158 
     | 
    
         
             
              def this_week()
         
     | 
| 
       351 
159 
     | 
    
         | 
| 
       352 
160 
     | 
    
         
             
                dt = DateTime.now
         
     | 
| 
       353 
     | 
    
         
            -
                days = @ 
     | 
| 
      
 161 
     | 
    
         
            +
                days = @calendar.month(dt.month).day
         
     | 
| 
       354 
162 
     | 
    
         | 
| 
       355 
163 
     | 
    
         
             
                r = days.find {|day| day.date.cweek == dt.cweek }    
         
     | 
| 
       356 
164 
     | 
    
         
             
                pxweek = PolyrexObjects::Week.new
         
     | 
| 
         @@ -365,165 +173,13 @@ class PolyrexCalendar 
     | 
|
| 
       365 
173 
     | 
    
         
             
              def this_month()
         
     | 
| 
       366 
174 
     | 
    
         
             
                self.month(DateTime.now.month)
         
     | 
| 
       367 
175 
     | 
    
         
             
              end
         
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
       369 
     | 
    
         
            -
              def import_bankholidays(dynarex)
         
     | 
| 
       370 
     | 
    
         
            -
                import_dynarex(dynarex, :bankholiday=)
         
     | 
| 
       371 
     | 
    
         
            -
              end
         
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
       373 
     | 
    
         
            -
              def import_recurring_events(dynarex)
         
     | 
| 
       374 
     | 
    
         
            -
             
     | 
| 
       375 
     | 
    
         
            -
                title = dynarex.summary[:event_title]
         
     | 
| 
       376 
     | 
    
         
            -
                cc = ChronicCron.new dynarex.summary[:description].split(/,/,2).first
         
     | 
| 
       377 
     | 
    
         
            -
                time_start= "%s:%02d" % cc.to_time.to_a.values_at(2,1)
         
     | 
| 
       378 
     | 
    
         
            -
             
     | 
| 
       379 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
       381 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       382 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       383 
     | 
    
         
            -
                  record = {title: title, time_start: time_start}
         
     | 
| 
       384 
     | 
    
         
            -
             
     | 
| 
       385 
     | 
    
         
            -
                  @polyrex.records[m-1].day[d-1].create.entry record
         
     | 
| 
       386 
     | 
    
         
            -
                end
         
     | 
| 
       387 
     | 
    
         
            -
              end
         
     | 
| 
       388 
     | 
    
         
            -
             
     | 
| 
       389 
     | 
    
         
            -
              def import_sunrise_times(dynarex)
         
     | 
| 
       390 
     | 
    
         
            -
                import_suntimes dynarex, :sunrise=
         
     | 
| 
       391 
     | 
    
         
            -
              end
         
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
       393 
     | 
    
         
            -
              def import_sunset_times(dynarex)
         
     | 
| 
       394 
     | 
    
         
            -
                import_suntimes dynarex, :sunset=
         
     | 
| 
       395 
     | 
    
         
            -
              end
         
     | 
| 
       396 
176 
     | 
    
         | 
| 
       397 
177 
     | 
    
         
             
              private
         
     | 
| 
       398 
178 
     | 
    
         | 
| 
       399 
     | 
    
         
            -
              def import_suntimes(dynarex, event_type=:sunrise=)
         
     | 
| 
       400 
     | 
    
         
            -
             
     | 
| 
       401 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       402 
     | 
    
         
            -
             
     | 
| 
       403 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       404 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       405 
     | 
    
         
            -
                  @polyrex.records[m-1].day[d-1].method(event_type).call event[:time]
         
     | 
| 
       406 
     | 
    
         
            -
                end
         
     | 
| 
       407 
     | 
    
         
            -
              end
         
     | 
| 
       408 
     | 
    
         
            -
              
         
     | 
| 
       409 
     | 
    
         
            -
              def import_dynarex(dynarex, daytype=:event=)
         
     | 
| 
       410 
     | 
    
         
            -
             
     | 
| 
       411 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       412 
     | 
    
         
            -
             
     | 
| 
       413 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       414 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       415 
     | 
    
         
            -
             
     | 
| 
       416 
     | 
    
         
            -
                  case daytype
         
     | 
| 
       417 
     | 
    
         
            -
                    when :event=
         
     | 
| 
       418 
     | 
    
         
            -
                      if dynarex.fields.include?(:time) then
         
     | 
| 
       419 
     | 
    
         
            -
             
     | 
| 
       420 
     | 
    
         
            -
                        match = event[:time].match(/(\S+)\s*(?:to|-)\s*(\S+)/) 
         
     | 
| 
       421 
     | 
    
         
            -
             
     | 
| 
       422 
     | 
    
         
            -
                        if match then
         
     | 
| 
       423 
     | 
    
         
            -
             
     | 
| 
       424 
     | 
    
         
            -
                          start_time, end_time = match.captures
         
     | 
| 
       425 
     | 
    
         
            -
                          # add an event entry
         
     | 
| 
       426 
     | 
    
         
            -
                          title = [event[:title], dynarex.summary[:label], 
         
     | 
| 
       427 
     | 
    
         
            -
                                            event[:desc]].compact.join(': ')
         
     | 
| 
       428 
     | 
    
         
            -
                          record = {
         
     | 
| 
       429 
     | 
    
         
            -
                            title: title, 
         
     | 
| 
       430 
     | 
    
         
            -
                            time_start: Time.parse(start_time).strftime("%H:%M%p"), 
         
     | 
| 
       431 
     | 
    
         
            -
                            time_end: Time.parse(end_time).strftime("%H:%M%p")
         
     | 
| 
       432 
     | 
    
         
            -
                          }
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
                          @polyrex.records[m-1].day[d-1].create.entry record
         
     | 
| 
       435 
     | 
    
         
            -
                        else
         
     | 
| 
       436 
     | 
    
         
            -
             
     | 
| 
       437 
     | 
    
         
            -
                          dt = DateTime.parse(event[:date] + ' ' + event[:time])
         
     | 
| 
       438 
     | 
    
         
            -
                          # add the event
         
     | 
| 
       439 
     | 
    
         
            -
                          title = [event[:title], dynarex.summary[:label], 
         
     | 
| 
       440 
     | 
    
         
            -
                                            event[:desc]].compact.join(': ')
         
     | 
| 
       441 
     | 
    
         
            -
                          event_label = "%s at %s" % [title, dt.strftime("%H:%M%p")]
         
     | 
| 
       442 
     | 
    
         
            -
             
     | 
| 
       443 
     | 
    
         
            -
                          @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       444 
     | 
    
         
            -
                        end
         
     | 
| 
       445 
     | 
    
         
            -
             
     | 
| 
       446 
     | 
    
         
            -
                      else
         
     | 
| 
       447 
     | 
    
         
            -
             
     | 
| 
       448 
     | 
    
         
            -
                        event_label = "%s at %s" % [event[:title], dt.strftime("%H:%M%p")]
         
     | 
| 
       449 
     | 
    
         
            -
                        @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       450 
     | 
    
         
            -
                      end
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                    else
         
     | 
| 
       453 
     | 
    
         
            -
             
     | 
| 
       454 
     | 
    
         
            -
                      event_label = "%s" % event[:title]
         
     | 
| 
       455 
     | 
    
         
            -
                      @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       456 
     | 
    
         
            -
                  end
         
     | 
| 
       457 
     | 
    
         
            -
             
     | 
| 
       458 
     | 
    
         
            -
                end
         
     | 
| 
       459 
     | 
    
         
            -
              end
         
     | 
| 
       460 
     | 
    
         
            -
             
     | 
| 
       461 
     | 
    
         
            -
              def import_polyrex(polyrex)
         
     | 
| 
       462 
     | 
    
         
            -
             
     | 
| 
       463 
     | 
    
         
            -
                polyrex.records.each do |day|
         
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
       465 
     | 
    
         
            -
                  dt = day.date
         
     | 
| 
       466 
     | 
    
         
            -
             
     | 
| 
       467 
     | 
    
         
            -
                  sd = dt.strftime("%Y-%b-%d ")
         
     | 
| 
       468 
     | 
    
         
            -
                  m, i = dt.month, dt.day
         
     | 
| 
       469 
     | 
    
         
            -
                  cal_day = @polyrex.records[m - 1].day[i-1]
         
     | 
| 
       470 
     | 
    
         
            -
             
     | 
| 
       471 
     | 
    
         
            -
                  cal_day.event = day.title
         
     | 
| 
       472 
     | 
    
         
            -
             
     | 
| 
       473 
     | 
    
         
            -
                  if day.records.length > 0 then
         
     | 
| 
       474 
     | 
    
         
            -
             
     | 
| 
       475 
     | 
    
         
            -
                    raw_entries = day.records
         
     | 
| 
       476 
     | 
    
         
            -
             
     | 
| 
       477 
     | 
    
         
            -
                    entries = raw_entries.inject({}) do |r,entry|
         
     | 
| 
       478 
     | 
    
         
            -
             
     | 
| 
       479 
     | 
    
         
            -
                      start_time = entry.start_time  
         
     | 
| 
       480 
     | 
    
         
            -
             
     | 
| 
       481 
     | 
    
         
            -
                      if entry.end_time.length > 0 then
         
     | 
| 
       482 
     | 
    
         
            -
             
     | 
| 
       483 
     | 
    
         
            -
                        end_time = entry.end_time
         
     | 
| 
       484 
     | 
    
         
            -
                        duration = ChronicDuration.output(Time.parse(sd + end_time) \
         
     | 
| 
       485 
     | 
    
         
            -
                          - Time.parse(sd + start_time))
         
     | 
| 
       486 
     | 
    
         
            -
                      else
         
     | 
| 
       487 
     | 
    
         
            -
             
     | 
| 
       488 
     | 
    
         
            -
                        if entry.duration.length > 0 then
         
     | 
| 
       489 
     | 
    
         
            -
                          duration = entry.duration
         
     | 
| 
       490 
     | 
    
         
            -
                        else
         
     | 
| 
       491 
     | 
    
         
            -
                          duration = '10 mins'
         
     | 
| 
       492 
     | 
    
         
            -
                        end
         
     | 
| 
       493 
     | 
    
         
            -
             
     | 
| 
       494 
     | 
    
         
            -
                        end_time = (Time.parse(sd + start_time) + ChronicDuration.parse(duration))\
         
     | 
| 
       495 
     | 
    
         
            -
                          .strftime("%H:%M")
         
     | 
| 
       496 
     | 
    
         
            -
                      end
         
     | 
| 
       497 
     | 
    
         
            -
             
     | 
| 
       498 
     | 
    
         
            -
                      r.merge!(start_time => {time_start: start_time, time_end: end_time, \
         
     | 
| 
       499 
     | 
    
         
            -
                        duration: duration, title: entry.title})
         
     | 
| 
       500 
     | 
    
         
            -
             
     | 
| 
       501 
     | 
    
         
            -
                    end
         
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
                    seconds = entries.keys.map{|x| Time.parse(x) - Time.parse('08:00')}
         
     | 
| 
       504 
     | 
    
         
            -
             
     | 
| 
       505 
     | 
    
         
            -
                    unless dt.saturday? or dt.sunday? then
         
     | 
| 
       506 
     | 
    
         
            -
                      rows = slotted_sort(seconds).map do |x| 
         
     | 
| 
       507 
     | 
    
         
            -
                        (Time.parse('08:00') + x.to_i).strftime("%H:%M") if x
         
     | 
| 
       508 
     | 
    
         
            -
                      end
         
     | 
| 
       509 
     | 
    
         
            -
                    else
         
     | 
| 
       510 
     | 
    
         
            -
                      rows = entries.keys
         
     | 
| 
       511 
     | 
    
         
            -
                    end
         
     | 
| 
       512 
     | 
    
         
            -
             
     | 
| 
       513 
     | 
    
         
            -
                    rows.each do |row|
         
     | 
| 
       514 
     | 
    
         
            -
                      create = cal_day.create
         
     | 
| 
       515 
     | 
    
         
            -
                      create.id = @id
         
     | 
| 
       516 
     | 
    
         
            -
                      create.entry entries[row] || {}
         
     | 
| 
       517 
     | 
    
         
            -
                    end        
         
     | 
| 
       518 
     | 
    
         
            -
             
     | 
| 
       519 
     | 
    
         
            -
                  end  
         
     | 
| 
       520 
     | 
    
         
            -
                end 
         
     | 
| 
       521 
     | 
    
         
            -
                
         
     | 
| 
       522 
     | 
    
         
            -
              end
         
     | 
| 
       523 
179 
     | 
    
         | 
| 
       524 
180 
     | 
    
         
             
              def make_month(m)
         
     | 
| 
       525 
181 
     | 
    
         | 
| 
       526 
     | 
    
         
            -
                cal_month = @ 
     | 
| 
      
 182 
     | 
    
         
            +
                cal_month = @calendar.month(m)
         
     | 
| 
       527 
183 
     | 
    
         
             
                days_in_month = cal_month.records
         
     | 
| 
       528 
184 
     | 
    
         
             
                pxmonth = cal_month.clone
         
     | 
| 
       529 
185 
     | 
    
         
             
                pxmonth.records.each(&:delete)
         
     | 
| 
         @@ -578,29 +234,4 @@ class PolyrexCalendar 
     | 
|
| 
       578 
234 
     | 
    
         
             
                  'th' : %w{ th st nd rd th th th th th th }[val % 10] 
         
     | 
| 
       579 
235 
     | 
    
         
             
              end
         
     | 
| 
       580 
236 
     | 
    
         | 
| 
       581 
     | 
    
         
            -
              def slotted_sort(a)
         
     | 
| 
       582 
     | 
    
         
            -
             
     | 
| 
       583 
     | 
    
         
            -
                upper = 36000 # upper slot value
         
     | 
| 
       584 
     | 
    
         
            -
                slot_width = 9000 # 2.5 hours
         
     | 
| 
       585 
     | 
    
         
            -
                max_slots = 3  
         
     | 
| 
       586 
     | 
    
         
            -
             
     | 
| 
       587 
     | 
    
         
            -
                b = a.reverse.inject([]) do |r,x|
         
     | 
| 
       588 
     | 
    
         
            -
             
     | 
| 
       589 
     | 
    
         
            -
                  upper ||= 10;  i ||= 0
         
     | 
| 
       590 
     | 
    
         
            -
                  diff = upper - x
         
     | 
| 
       591 
     | 
    
         
            -
             
     | 
| 
       592 
     | 
    
         
            -
                  if diff >= slot_width and (i + a.length) < max_slots then
         
     | 
| 
       593 
     | 
    
         
            -
                    r << nil
         
     | 
| 
       594 
     | 
    
         
            -
                    i += 1
         
     | 
| 
       595 
     | 
    
         
            -
                    upper -= slot_width
         
     | 
| 
       596 
     | 
    
         
            -
                    redo
         
     | 
| 
       597 
     | 
    
         
            -
                  else
         
     | 
| 
       598 
     | 
    
         
            -
                    upper -= slot_width if x <= upper
         
     | 
| 
       599 
     | 
    
         
            -
                    r << x
         
     | 
| 
       600 
     | 
    
         
            -
                  end
         
     | 
| 
       601 
     | 
    
         
            -
                end
         
     | 
| 
       602 
     | 
    
         
            -
             
     | 
| 
       603 
     | 
    
         
            -
                a = b.+([nil] * max_slots).take(max_slots).reverse
         
     | 
| 
       604 
     | 
    
         
            -
              end
         
     | 
| 
       605 
     | 
    
         
            -
              
         
     | 
| 
       606 
237 
     | 
    
         
             
            end
         
     | 
    
        data/lib/polyrex-calendar.rb~
    CHANGED
    
    | 
         @@ -2,228 +2,65 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            # file: polyrex-calendar.rb
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            require ' 
     | 
| 
       6 
     | 
    
         
            -
            require 'date'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'nokogiri'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'chronic_duration'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'chronic_cron'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'px-calendarbase'
         
     | 
| 
       10 
6 
     | 
    
         | 
| 
       11 
7 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            h = {
         
     | 
| 
       16 
     | 
    
         
            -
              calendar: 'calendar[year]',
         
     | 
| 
       17 
     | 
    
         
            -
                 month: 'month[n, title]',
         
     | 
| 
       18 
     | 
    
         
            -
                  week: 'week[n, mon, no, label]',
         
     | 
| 
       19 
     | 
    
         
            -
                   day: 'day[sdate, xday, event, bankholiday, title, sunrise, sunset]',
         
     | 
| 
       20 
     | 
    
         
            -
                 entry: 'entry[time_start, time_end, duration, title]'
         
     | 
| 
       21 
     | 
    
         
            -
            }
         
     | 
| 
       22 
     | 
    
         
            -
            visual_schema = h.values.join '/'
         
     | 
| 
       23 
     | 
    
         
            -
            PolyrexObjects.new(visual_schema)
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            module LIBRARY
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              def fetch_file(filename)
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                lib = File.dirname(__FILE__)
         
     | 
| 
       30 
     | 
    
         
            -
                File.read File.join(lib, filename )
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              def generate_webpage(xml, xsl)
         
     | 
| 
       34 
     | 
    
         
            -
                
         
     | 
| 
       35 
     | 
    
         
            -
                # transform the xml to html
         
     | 
| 
       36 
     | 
    
         
            -
                doc = Nokogiri::XML(xml)
         
     | 
| 
       37 
     | 
    
         
            -
                xslt  = Nokogiri::XSLT(xsl)
         
     | 
| 
       38 
     | 
    
         
            -
                xslt.transform(doc).to_s   
         
     | 
| 
       39 
     | 
    
         
            -
              end
         
     | 
| 
       40 
     | 
    
         
            -
            end 
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            class Polyrex
         
     | 
| 
       43 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              attr_accessor :xslt, :css_layout, :css_style, :filename
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       48 
     | 
    
         
            -
                "#<Polyrex:%s" % __id__
         
     | 
| 
       49 
     | 
    
         
            -
              end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                year_xsl        = fetch_file self.xslt
         
     | 
| 
       54 
     | 
    
         
            -
                year_layout_css = fetch_file self.css_layout
         
     | 
| 
       55 
     | 
    
         
            -
                year_css        = fetch_file self.css_style
         
     | 
| 
       56 
     | 
    
         
            -
                File.open('self.xml','w'){|f| f.write (self.to_xml pretty: true)}
         
     | 
| 
       57 
     | 
    
         
            -
                File.open(self.xslt,'w'){|f| f.write year_xsl }
         
     | 
| 
       58 
     | 
    
         
            -
                #html = Rexslt.new(month_xsl, self.to_xml).to_xml
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                html = generate_webpage self.to_xml, year_xsl
         
     | 
| 
       61 
     | 
    
         
            -
                {self.filename => html, 
         
     | 
| 
       62 
     | 
    
         
            -
                  self.css_layout => year_layout_css, self.css_style => year_css}
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
              end           
         
     | 
| 
       65 
     | 
    
         
            -
            end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
            class PolyrexObjects::Month
         
     | 
| 
       68 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
              attr_accessor :xslt, :css_layout, :css_style
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       73 
     | 
    
         
            -
                "#<PolyrexObjects::Month:%s" % __id__
         
     | 
| 
       74 
     | 
    
         
            -
              end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                month_xsl        = fetch_file self.xslt
         
     | 
| 
       79 
     | 
    
         
            -
                month_layout_css = fetch_file self.css_layout
         
     | 
| 
       80 
     | 
    
         
            -
                month_css        = fetch_file self.css_style
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                #html = Rexslt.new(month_xsl, self.to_xml).to_xml
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                # add a css selector for the current day
         
     | 
| 
       85 
     | 
    
         
            -
                date = Time.now.strftime("%Y-%b-%d")
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                e = self.element("records/week/records/day/summary[sdate='#{date}']")
         
     | 
| 
       88 
     | 
    
         
            -
                e.attributes[:class] = 'selected' if e
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                File.write 'self.xml', self.to_xml(pretty: true)
         
     | 
| 
       91 
     | 
    
         
            -
                File.write 'month.xsl', month_xsl 
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
                html = generate_webpage self.to_xml, month_xsl
         
     | 
| 
       95 
     | 
    
         
            -
                {self.title.downcase[0..2] + '_calendar.html' => html, 
         
     | 
| 
       96 
     | 
    
         
            -
                  self.css_layout => month_layout_css, self.css_style => month_css}
         
     | 
| 
       97 
     | 
    
         
            -
              end      
         
     | 
| 
      
 8 
     | 
    
         
            +
            class PolyrexObjects
         
     | 
| 
       98 
9 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
               
     | 
| 
       100 
     | 
    
         
            -
                 
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
            class PolyrexObjects::Week
         
     | 
| 
       105 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
              def inspect()
         
     | 
| 
       108 
     | 
    
         
            -
                "#<PolyrexObjects::Week:%s" % __id__
         
     | 
| 
      
 10 
     | 
    
         
            +
              class Month
         
     | 
| 
      
 11 
     | 
    
         
            +
                
         
     | 
| 
      
 12 
     | 
    
         
            +
                def wk(n)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.records[n-1]        
         
     | 
| 
      
 14 
     | 
    
         
            +
                end      
         
     | 
| 
       109 
15 
     | 
    
         
             
              end
         
     | 
| 
       110 
     | 
    
         
            -
              
         
     | 
| 
       111 
     | 
    
         
            -
              def to_webpage()
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
                week_xsl        = fetch_file 'week_calendar.xsl'
         
     | 
| 
       114 
     | 
    
         
            -
                week_layout_css = fetch_file 'week_layout.css'
         
     | 
| 
       115 
     | 
    
         
            -
                week_css        = fetch_file 'week.css'
         
     | 
| 
       116 
16 
     | 
    
         | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                 
     | 
| 
       119 
     | 
    
         
            -
                 
     | 
| 
       120 
     | 
    
         
            -
                #html = xsltproc 'week_calendar.xsl', self.to_xml
         
     | 
| 
      
 17 
     | 
    
         
            +
              class Week
         
     | 
| 
      
 18 
     | 
    
         
            +
                
         
     | 
| 
      
 19 
     | 
    
         
            +
                def to_webpage()
         
     | 
| 
       121 
20 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                  week_xsl        = fetch_file 'week_calendar.xsl'
         
     | 
| 
      
 22 
     | 
    
         
            +
                  week_layout_css = fetch_file 'week_layout.css'
         
     | 
| 
      
 23 
     | 
    
         
            +
                  week_css        = fetch_file 'week.css'
         
     | 
| 
       124 
24 
     | 
    
         | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 25 
     | 
    
         
            +
                  File.write 'self.xml', self.to_xml(pretty: true)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  File.write 'week.xsl', week_xsl
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #html = Rexslt.new(week_xsl, self.to_xml).to_xml
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #html = xsltproc 'week_calendar.xsl', self.to_xml
         
     | 
| 
       127 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                  # add a css selector for the current day
         
     | 
| 
      
 31 
     | 
    
         
            +
                  date = Time.now.strftime("%Y-%b-%d")
         
     | 
| 
       128 
32 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                 'week.css' => week_css}
         
     | 
| 
       132 
     | 
    
         
            -
              end  
         
     | 
| 
       133 
     | 
    
         
            -
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
                  e = self.element("records/day/summary[sdate='#{date}']")
         
     | 
| 
      
 34 
     | 
    
         
            +
                  e.attributes[:class] = 'selected' if e
         
     | 
| 
       134 
35 
     | 
    
         | 
| 
       135 
     | 
    
         
            -
            class PolyrexObjects::Day
         
     | 
| 
       136 
36 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                  html = generate_webpage self.to_xml, week_xsl
         
     | 
| 
      
 38 
     | 
    
         
            +
                  {'week' + self.no + '_planner.html' => html, 'week_layout.css' => week_layout_css, \
         
     | 
| 
      
 39 
     | 
    
         
            +
                  'week.css' => week_css}
         
     | 
| 
      
 40 
     | 
    
         
            +
                end  
         
     | 
| 
       139 
41 
     | 
    
         
             
              end
         
     | 
| 
       140 
42 
     | 
    
         | 
| 
       141 
     | 
    
         
            -
              def wday()
         
     | 
| 
       142 
     | 
    
         
            -
                self.date.wday
         
     | 
| 
       143 
     | 
    
         
            -
              end
         
     | 
| 
       144 
43 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
              def day()
         
     | 
| 
       146 
     | 
    
         
            -
                self.date.day
         
     | 
| 
       147 
     | 
    
         
            -
              end
         
     | 
| 
       148 
44 
     | 
    
         
             
            end
         
     | 
| 
       149 
45 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
            class PolyrexCalendar
         
     | 
| 
       151 
     | 
    
         
            -
              include LIBRARY
         
     | 
| 
       152 
     | 
    
         
            -
             
     | 
| 
       153 
     | 
    
         
            -
              attr_accessor :xsl, :css, :polyrex, :month_xsl, :month_css
         
     | 
| 
       154 
     | 
    
         
            -
              attr_reader :day
         
     | 
| 
      
 46 
     | 
    
         
            +
            class PolyrexCalendar < PolyrexCalendarBase
         
     | 
| 
       155 
47 
     | 
    
         | 
| 
       156 
48 
     | 
    
         
             
              def initialize(calendar_file=nil, options={})
         
     | 
| 
       157 
49 
     | 
    
         | 
| 
       158 
     | 
    
         
            -
                 
     | 
| 
       159 
     | 
    
         
            -
                @year = opts[:year]
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                h = {
         
     | 
| 
       162 
     | 
    
         
            -
                  calendar: 'calendar[year]',
         
     | 
| 
       163 
     | 
    
         
            -
                     month: 'month[n, title]',
         
     | 
| 
       164 
     | 
    
         
            -
                      week: 'week[n]',
         
     | 
| 
       165 
     | 
    
         
            -
                       day: 'day[sdate, xday, event, bankholiday, title, sunrise, sunset]',
         
     | 
| 
       166 
     | 
    
         
            -
                     entry: 'entry[time_start, time_end, duration, title]'
         
     | 
| 
       167 
     | 
    
         
            -
                }
         
     | 
| 
       168 
     | 
    
         
            -
                @schema = %i(calendar month day entry).map{|x| h[x]}.join '/'
         
     | 
| 
       169 
     | 
    
         
            -
                @visual_schema = h.values.join '/'
         
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
                if calendar_file then
         
     | 
| 
       173 
     | 
    
         
            -
                  @polyrex = Polyrex.new calendar_file
         
     | 
| 
       174 
     | 
    
         
            -
                  @id = @polyrex.id_counter
         
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
                else
         
     | 
| 
       177 
     | 
    
         
            -
                  @id = '1'
         
     | 
| 
       178 
     | 
    
         
            -
                  # generate the calendar
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                  a = (Date.parse(@year + '-01-01')...Date.parse(@year.succ + '-01-01')).to_a
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
                  @polyrex = Polyrex.new(@schema, id_counter: @id)
         
     | 
| 
       183 
     | 
    
         
            -
                  @polyrex.summary.year = @year
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                  a.group_by(&:month).each do |month, days| 
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
                    @polyrex.create.month no: month.to_s, title: Date::MONTHNAMES[month]  do |create|
         
     | 
| 
       188 
     | 
    
         
            -
                      days.each do |x|
         
     | 
| 
       189 
     | 
    
         
            -
                        create.day sdate: x.strftime("%Y-%b-%d"), xday: x.day.to_s, title: Date::DAYNAMES[x.wday]
         
     | 
| 
       190 
     | 
    
         
            -
                      end
         
     | 
| 
       191 
     | 
    
         
            -
                    end
         
     | 
| 
       192 
     | 
    
         
            -
                  end
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
                end
         
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
                visual_schema = h.values.join '/'
         
     | 
| 
       197 
     | 
    
         
            -
                PolyrexObjects.new(visual_schema)
         
     | 
| 
      
 50 
     | 
    
         
            +
                super(calendar_file, options)
         
     | 
| 
       198 
51 
     | 
    
         | 
| 
       199 
52 
     | 
    
         
             
                @xsl = fetch_file 'calendar.xsl'
         
     | 
| 
       200 
53 
     | 
    
         
             
                @css = fetch_file 'layout.css'
         
     | 
| 
       201 
54 
     | 
    
         | 
| 
       202 
55 
     | 
    
         
             
              end
         
     | 
| 
       203 
56 
     | 
    
         | 
| 
       204 
     | 
    
         
            -
              def to_a()
         
     | 
| 
       205 
     | 
    
         
            -
                @a
         
     | 
| 
       206 
     | 
    
         
            -
              end
         
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
              def to_xml()
         
     | 
| 
       209 
     | 
    
         
            -
                @polyrex.to_xml pretty: true
         
     | 
| 
       210 
     | 
    
         
            -
              end
         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
              def import_events(objx)
         
     | 
| 
       213 
     | 
    
         
            -
                @id = @polyrex.id_counter
         
     | 
| 
       214 
     | 
    
         
            -
                method('import_'.+(objx.class.to_s.downcase).to_sym).call(objx)
         
     | 
| 
       215 
     | 
    
         
            -
                self
         
     | 
| 
       216 
     | 
    
         
            -
              end
         
     | 
| 
       217 
     | 
    
         
            -
              
         
     | 
| 
       218 
     | 
    
         
            -
              alias import! import_events
         
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
57 
     | 
    
         
             
              def inspect()
         
     | 
| 
       221 
58 
     | 
    
         
             
                 %Q(=> #<PolyrexCalendar:#{self.object_id} @id="#{@id}", @year="#{@year}">)
         
     | 
| 
       222 
59 
     | 
    
         
             
              end
         
     | 
| 
       223 
60 
     | 
    
         | 
| 
       224 
61 
     | 
    
         
             
              def kitchen_planner()
         
     | 
| 
       225 
62 
     | 
    
         | 
| 
       226 
     | 
    
         
            -
                px = @ 
     | 
| 
      
 63 
     | 
    
         
            +
                px = @calendar
         
     | 
| 
       227 
64 
     | 
    
         | 
| 
       228 
65 
     | 
    
         
             
                # add a css selector for the current day
         
     | 
| 
       229 
66 
     | 
    
         
             
                date = DateTime.now.strftime("%Y-%b-%d")
         
     | 
| 
         @@ -252,8 +89,6 @@ class PolyrexCalendar 
     | 
|
| 
       252 
89 
     | 
    
         
             
                                                          + "summary[sdate='#{date}']")
         
     | 
| 
       253 
90 
     | 
    
         
             
                e.attributes[:class] = 'selected' if e
         
     | 
| 
       254 
91 
     | 
    
         | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
       256 
     | 
    
         
            -
                px.xslt = 'calendar.xsl'
         
     | 
| 
       257 
92 
     | 
    
         
             
                px.css_layout = 'layout.css'
         
     | 
| 
       258 
93 
     | 
    
         
             
                px.css_style = 'year.css'
         
     | 
| 
       259 
94 
     | 
    
         
             
                px.filename = px.summary.year.to_s + '-planner.html'
         
     | 
| 
         @@ -285,7 +120,6 @@ class PolyrexCalendar 
     | 
|
| 
       285 
120 
     | 
    
         | 
| 
       286 
121 
     | 
    
         
             
                    r
         
     | 
| 
       287 
122 
     | 
    
         | 
| 
       288 
     | 
    
         
            -
             
     | 
| 
       289 
123 
     | 
    
         
             
                  end
         
     | 
| 
       290 
124 
     | 
    
         | 
| 
       291 
125 
     | 
    
         
             
                  pxmonth.xslt = 'monthday_calendar.xsl'
         
     | 
| 
         @@ -320,37 +154,11 @@ class PolyrexCalendar 
     | 
|
| 
       320 
154 
     | 
    
         
             
                end
         
     | 
| 
       321 
155 
     | 
    
         | 
| 
       322 
156 
     | 
    
         
             
              end
         
     | 
| 
       323 
     | 
    
         
            -
              def month_day()
         
     | 
| 
       324 
     | 
    
         
            -
              end
         
     | 
| 
       325 
     | 
    
         
            -
             
     | 
| 
       326 
     | 
    
         
            -
              def months
         
     | 
| 
       327 
     | 
    
         
            -
                @polyrex.records
         
     | 
| 
       328 
     | 
    
         
            -
              end
         
     | 
| 
       329 
     | 
    
         
            -
              
         
     | 
| 
       330 
     | 
    
         
            -
              def parse_events(list)    
         
     | 
| 
       331 
157 
     | 
    
         | 
| 
       332 
     | 
    
         
            -
                polyrex = Polyrex.new('events/dayx[date, title]/entryx[start_time, end_time,' + \
         
     | 
| 
       333 
     | 
    
         
            -
                  ' duration, title]')
         
     | 
| 
       334 
     | 
    
         
            -
             
     | 
| 
       335 
     | 
    
         
            -
                polyrex.format_masks[1] = '([!start_time] \([!duration]\) [!title]|' +  \
         
     | 
| 
       336 
     | 
    
         
            -
                  '[!start_time]-[!end_time] [!title]|' + \
         
     | 
| 
       337 
     | 
    
         
            -
                  '[!start_time] [!title])'
         
     | 
| 
       338 
     | 
    
         
            -
             
     | 
| 
       339 
     | 
    
         
            -
                polyrex.parse(list)
         
     | 
| 
       340 
     | 
    
         
            -
             
     | 
| 
       341 
     | 
    
         
            -
                self.import_events polyrex
         
     | 
| 
       342 
     | 
    
         
            -
                # for testing only
         
     | 
| 
       343 
     | 
    
         
            -
                #polyrex
         
     | 
| 
       344 
     | 
    
         
            -
              end
         
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
     | 
    
         
            -
              def save(filename='polyrex.xml')
         
     | 
| 
       347 
     | 
    
         
            -
                @polyrex.save filename
         
     | 
| 
       348 
     | 
    
         
            -
              end
         
     | 
| 
       349 
     | 
    
         
            -
              
         
     | 
| 
       350 
158 
     | 
    
         
             
              def this_week()
         
     | 
| 
       351 
159 
     | 
    
         | 
| 
       352 
160 
     | 
    
         
             
                dt = DateTime.now
         
     | 
| 
       353 
     | 
    
         
            -
                days = @ 
     | 
| 
      
 161 
     | 
    
         
            +
                days = @calendar.month(dt.month).day
         
     | 
| 
       354 
162 
     | 
    
         | 
| 
       355 
163 
     | 
    
         
             
                r = days.find {|day| day.date.cweek == dt.cweek }    
         
     | 
| 
       356 
164 
     | 
    
         
             
                pxweek = PolyrexObjects::Week.new
         
     | 
| 
         @@ -365,165 +173,13 @@ class PolyrexCalendar 
     | 
|
| 
       365 
173 
     | 
    
         
             
              def this_month()
         
     | 
| 
       366 
174 
     | 
    
         
             
                self.month(DateTime.now.month)
         
     | 
| 
       367 
175 
     | 
    
         
             
              end
         
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
       369 
     | 
    
         
            -
              def import_bankholidays(dynarex)
         
     | 
| 
       370 
     | 
    
         
            -
                import_dynarex(dynarex, :bankholiday=)
         
     | 
| 
       371 
     | 
    
         
            -
              end
         
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
       373 
     | 
    
         
            -
              def import_recurring_events(dynarex)
         
     | 
| 
       374 
     | 
    
         
            -
             
     | 
| 
       375 
     | 
    
         
            -
                title = dynarex.summary[:event_title]
         
     | 
| 
       376 
     | 
    
         
            -
                cc = ChronicCron.new dynarex.summary[:description].split(/,/,2).first
         
     | 
| 
       377 
     | 
    
         
            -
                time_start= "%s:%02d" % cc.to_time.to_a.values_at(2,1)
         
     | 
| 
       378 
     | 
    
         
            -
             
     | 
| 
       379 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
       381 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       382 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       383 
     | 
    
         
            -
                  record = {title: title, time_start: time_start}
         
     | 
| 
       384 
     | 
    
         
            -
             
     | 
| 
       385 
     | 
    
         
            -
                  @polyrex.records[m-1].day[d-1].create.entry record
         
     | 
| 
       386 
     | 
    
         
            -
                end
         
     | 
| 
       387 
     | 
    
         
            -
              end
         
     | 
| 
       388 
     | 
    
         
            -
             
     | 
| 
       389 
     | 
    
         
            -
              def import_sunrise_times(dynarex)
         
     | 
| 
       390 
     | 
    
         
            -
                import_suntimes dynarex, :sunrise=
         
     | 
| 
       391 
     | 
    
         
            -
              end
         
     | 
| 
       392 
     | 
    
         
            -
             
     | 
| 
       393 
     | 
    
         
            -
              def import_sunset_times(dynarex)
         
     | 
| 
       394 
     | 
    
         
            -
                import_suntimes dynarex, :sunset=
         
     | 
| 
       395 
     | 
    
         
            -
              end
         
     | 
| 
       396 
176 
     | 
    
         | 
| 
       397 
177 
     | 
    
         
             
              private
         
     | 
| 
       398 
178 
     | 
    
         | 
| 
       399 
     | 
    
         
            -
              def import_suntimes(dynarex, event_type=:sunrise=)
         
     | 
| 
       400 
     | 
    
         
            -
             
     | 
| 
       401 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       402 
     | 
    
         
            -
             
     | 
| 
       403 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       404 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       405 
     | 
    
         
            -
                  @polyrex.records[m-1].day[d-1].method(event_type).call event[:time]
         
     | 
| 
       406 
     | 
    
         
            -
                end
         
     | 
| 
       407 
     | 
    
         
            -
              end
         
     | 
| 
       408 
     | 
    
         
            -
              
         
     | 
| 
       409 
     | 
    
         
            -
              def import_dynarex(dynarex, daytype=:event=)
         
     | 
| 
       410 
     | 
    
         
            -
             
     | 
| 
       411 
     | 
    
         
            -
                dynarex.flat_records.each do |event|
         
     | 
| 
       412 
     | 
    
         
            -
             
     | 
| 
       413 
     | 
    
         
            -
                  dt = DateTime.parse(event[:date])
         
     | 
| 
       414 
     | 
    
         
            -
                  m, d = dt.month, dt.day
         
     | 
| 
       415 
     | 
    
         
            -
             
     | 
| 
       416 
     | 
    
         
            -
                  case daytype
         
     | 
| 
       417 
     | 
    
         
            -
                    when :event=
         
     | 
| 
       418 
     | 
    
         
            -
                      if dynarex.fields.include?(:time) then
         
     | 
| 
       419 
     | 
    
         
            -
             
     | 
| 
       420 
     | 
    
         
            -
                        match = event[:time].match(/(\S+)\s*(?:to|-)\s*(\S+)/) 
         
     | 
| 
       421 
     | 
    
         
            -
             
     | 
| 
       422 
     | 
    
         
            -
                        if match then
         
     | 
| 
       423 
     | 
    
         
            -
             
     | 
| 
       424 
     | 
    
         
            -
                          start_time, end_time = match.captures
         
     | 
| 
       425 
     | 
    
         
            -
                          # add an event entry
         
     | 
| 
       426 
     | 
    
         
            -
                          title = [event[:title], dynarex.summary[:label], 
         
     | 
| 
       427 
     | 
    
         
            -
                                            event[:desc]].compact.join(': ')
         
     | 
| 
       428 
     | 
    
         
            -
                          record = {
         
     | 
| 
       429 
     | 
    
         
            -
                            title: title, 
         
     | 
| 
       430 
     | 
    
         
            -
                            time_start: Time.parse(start_time).strftime("%H:%M%p"), 
         
     | 
| 
       431 
     | 
    
         
            -
                            time_end: Time.parse(end_time).strftime("%H:%M%p")
         
     | 
| 
       432 
     | 
    
         
            -
                          }
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
                          @polyrex.records[m-1].day[d-1].create.entry record
         
     | 
| 
       435 
     | 
    
         
            -
                        else
         
     | 
| 
       436 
     | 
    
         
            -
             
     | 
| 
       437 
     | 
    
         
            -
                          dt = DateTime.parse(event[:date] + ' ' + event[:time])
         
     | 
| 
       438 
     | 
    
         
            -
                          # add the event
         
     | 
| 
       439 
     | 
    
         
            -
                          title = [event[:title], dynarex.summary[:label], 
         
     | 
| 
       440 
     | 
    
         
            -
                                            event[:desc]].compact.join(': ')
         
     | 
| 
       441 
     | 
    
         
            -
                          event_label = "%s at %s" % [title, dt.strftime("%H:%M%p")]
         
     | 
| 
       442 
     | 
    
         
            -
             
     | 
| 
       443 
     | 
    
         
            -
                          @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       444 
     | 
    
         
            -
                        end
         
     | 
| 
       445 
     | 
    
         
            -
             
     | 
| 
       446 
     | 
    
         
            -
                      else
         
     | 
| 
       447 
     | 
    
         
            -
             
     | 
| 
       448 
     | 
    
         
            -
                        event_label = "%s at %s" % [event[:title], dt.strftime("%H:%M%p")]
         
     | 
| 
       449 
     | 
    
         
            -
                        @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       450 
     | 
    
         
            -
                      end
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                    else
         
     | 
| 
       453 
     | 
    
         
            -
             
     | 
| 
       454 
     | 
    
         
            -
                      event_label = "%s" % event[:title]
         
     | 
| 
       455 
     | 
    
         
            -
                      @polyrex.records[m-1].day[d-1].method(daytype).call event_label
         
     | 
| 
       456 
     | 
    
         
            -
                  end
         
     | 
| 
       457 
     | 
    
         
            -
             
     | 
| 
       458 
     | 
    
         
            -
                end
         
     | 
| 
       459 
     | 
    
         
            -
              end
         
     | 
| 
       460 
     | 
    
         
            -
             
     | 
| 
       461 
     | 
    
         
            -
              def import_polyrex(polyrex)
         
     | 
| 
       462 
     | 
    
         
            -
             
     | 
| 
       463 
     | 
    
         
            -
                polyrex.records.each do |day|
         
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
       465 
     | 
    
         
            -
                  dt = day.date
         
     | 
| 
       466 
     | 
    
         
            -
             
     | 
| 
       467 
     | 
    
         
            -
                  sd = dt.strftime("%Y-%b-%d ")
         
     | 
| 
       468 
     | 
    
         
            -
                  m, i = dt.month, dt.day
         
     | 
| 
       469 
     | 
    
         
            -
                  cal_day = @polyrex.records[m - 1].day[i-1]
         
     | 
| 
       470 
     | 
    
         
            -
             
     | 
| 
       471 
     | 
    
         
            -
                  cal_day.event = day.title
         
     | 
| 
       472 
     | 
    
         
            -
             
     | 
| 
       473 
     | 
    
         
            -
                  if day.records.length > 0 then
         
     | 
| 
       474 
     | 
    
         
            -
             
     | 
| 
       475 
     | 
    
         
            -
                    raw_entries = day.records
         
     | 
| 
       476 
     | 
    
         
            -
             
     | 
| 
       477 
     | 
    
         
            -
                    entries = raw_entries.inject({}) do |r,entry|
         
     | 
| 
       478 
     | 
    
         
            -
             
     | 
| 
       479 
     | 
    
         
            -
                      start_time = entry.start_time  
         
     | 
| 
       480 
     | 
    
         
            -
             
     | 
| 
       481 
     | 
    
         
            -
                      if entry.end_time.length > 0 then
         
     | 
| 
       482 
     | 
    
         
            -
             
     | 
| 
       483 
     | 
    
         
            -
                        end_time = entry.end_time
         
     | 
| 
       484 
     | 
    
         
            -
                        duration = ChronicDuration.output(Time.parse(sd + end_time) \
         
     | 
| 
       485 
     | 
    
         
            -
                          - Time.parse(sd + start_time))
         
     | 
| 
       486 
     | 
    
         
            -
                      else
         
     | 
| 
       487 
     | 
    
         
            -
             
     | 
| 
       488 
     | 
    
         
            -
                        if entry.duration.length > 0 then
         
     | 
| 
       489 
     | 
    
         
            -
                          duration = entry.duration
         
     | 
| 
       490 
     | 
    
         
            -
                        else
         
     | 
| 
       491 
     | 
    
         
            -
                          duration = '10 mins'
         
     | 
| 
       492 
     | 
    
         
            -
                        end
         
     | 
| 
       493 
     | 
    
         
            -
             
     | 
| 
       494 
     | 
    
         
            -
                        end_time = (Time.parse(sd + start_time) + ChronicDuration.parse(duration))\
         
     | 
| 
       495 
     | 
    
         
            -
                          .strftime("%H:%M")
         
     | 
| 
       496 
     | 
    
         
            -
                      end
         
     | 
| 
       497 
     | 
    
         
            -
             
     | 
| 
       498 
     | 
    
         
            -
                      r.merge!(start_time => {time_start: start_time, time_end: end_time, \
         
     | 
| 
       499 
     | 
    
         
            -
                        duration: duration, title: entry.title})
         
     | 
| 
       500 
     | 
    
         
            -
             
     | 
| 
       501 
     | 
    
         
            -
                    end
         
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
                    seconds = entries.keys.map{|x| Time.parse(x) - Time.parse('08:00')}
         
     | 
| 
       504 
     | 
    
         
            -
             
     | 
| 
       505 
     | 
    
         
            -
                    unless dt.saturday? or dt.sunday? then
         
     | 
| 
       506 
     | 
    
         
            -
                      rows = slotted_sort(seconds).map do |x| 
         
     | 
| 
       507 
     | 
    
         
            -
                        (Time.parse('08:00') + x.to_i).strftime("%H:%M") if x
         
     | 
| 
       508 
     | 
    
         
            -
                      end
         
     | 
| 
       509 
     | 
    
         
            -
                    else
         
     | 
| 
       510 
     | 
    
         
            -
                      rows = entries.keys
         
     | 
| 
       511 
     | 
    
         
            -
                    end
         
     | 
| 
       512 
     | 
    
         
            -
             
     | 
| 
       513 
     | 
    
         
            -
                    rows.each do |row|
         
     | 
| 
       514 
     | 
    
         
            -
                      create = cal_day.create
         
     | 
| 
       515 
     | 
    
         
            -
                      create.id = @id
         
     | 
| 
       516 
     | 
    
         
            -
                      create.entry entries[row] || {}
         
     | 
| 
       517 
     | 
    
         
            -
                    end        
         
     | 
| 
       518 
     | 
    
         
            -
             
     | 
| 
       519 
     | 
    
         
            -
                  end  
         
     | 
| 
       520 
     | 
    
         
            -
                end 
         
     | 
| 
       521 
     | 
    
         
            -
                
         
     | 
| 
       522 
     | 
    
         
            -
              end
         
     | 
| 
       523 
179 
     | 
    
         | 
| 
       524 
180 
     | 
    
         
             
              def make_month(m)
         
     | 
| 
       525 
181 
     | 
    
         | 
| 
       526 
     | 
    
         
            -
                cal_month = @ 
     | 
| 
      
 182 
     | 
    
         
            +
                cal_month = @calendar.month(m)
         
     | 
| 
       527 
183 
     | 
    
         
             
                days_in_month = cal_month.records
         
     | 
| 
       528 
184 
     | 
    
         
             
                pxmonth = cal_month.clone
         
     | 
| 
       529 
185 
     | 
    
         
             
                pxmonth.records.each(&:delete)
         
     | 
| 
         @@ -578,30 +234,4 @@ class PolyrexCalendar 
     | 
|
| 
       578 
234 
     | 
    
         
             
                  'th' : %w{ th st nd rd th th th th th th }[val % 10] 
         
     | 
| 
       579 
235 
     | 
    
         
             
              end
         
     | 
| 
       580 
236 
     | 
    
         | 
| 
       581 
     | 
    
         
            -
              def slotted_sort(a)
         
     | 
| 
       582 
     | 
    
         
            -
             
     | 
| 
       583 
     | 
    
         
            -
                upper = 36000 # upper slot value
         
     | 
| 
       584 
     | 
    
         
            -
                slot_width = 9000 # 2.5 hours
         
     | 
| 
       585 
     | 
    
         
            -
                max_slots = 3  
         
     | 
| 
       586 
     | 
    
         
            -
             
     | 
| 
       587 
     | 
    
         
            -
                b = a.reverse.inject([]) do |r,x|
         
     | 
| 
       588 
     | 
    
         
            -
             
     | 
| 
       589 
     | 
    
         
            -
                  upper ||= 10;  i ||= 0
         
     | 
| 
       590 
     | 
    
         
            -
                  diff = upper - x
         
     | 
| 
       591 
     | 
    
         
            -
             
     | 
| 
       592 
     | 
    
         
            -
                  if diff >= slot_width and (i + a.length) < max_slots then
         
     | 
| 
       593 
     | 
    
         
            -
                    r << nil
         
     | 
| 
       594 
     | 
    
         
            -
                    i += 1
         
     | 
| 
       595 
     | 
    
         
            -
                    upper -= slot_width
         
     | 
| 
       596 
     | 
    
         
            -
                    redo
         
     | 
| 
       597 
     | 
    
         
            -
                  else
         
     | 
| 
       598 
     | 
    
         
            -
                    upper -= slot_width if x <= upper
         
     | 
| 
       599 
     | 
    
         
            -
                    r << x
         
     | 
| 
       600 
     | 
    
         
            -
                  end
         
     | 
| 
       601 
     | 
    
         
            -
                end
         
     | 
| 
       602 
     | 
    
         
            -
             
     | 
| 
       603 
     | 
    
         
            -
                a = b.+([nil] * max_slots).take(max_slots).reverse
         
     | 
| 
       604 
     | 
    
         
            -
              end
         
     | 
| 
       605 
     | 
    
         
            -
              
         
     | 
| 
       606 
     | 
    
         
            -
             
     | 
| 
       607 
237 
     | 
    
         
             
            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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - James Robertson
         
     | 
| 
         @@ -31,90 +31,10 @@ cert_chain: 
     | 
|
| 
       31 
31 
     | 
    
         
             
              V2LbfuIuDVCUDR9ON1ozFySFLuTnZSmO6lR4UsFjHKwbtnnbapfQVvEJ1PLW/F13
         
     | 
| 
       32 
32 
     | 
    
         
             
              1r3+lzIVNJhpdQ==
         
     | 
| 
       33 
33 
     | 
    
         
             
              -----END CERTIFICATE-----
         
     | 
| 
       34 
     | 
    
         
            -
            date: 2014- 
     | 
| 
      
 34 
     | 
    
         
            +
            date: 2014-10-02 00:00:00.000000000 Z
         
     | 
| 
       35 
35 
     | 
    
         
             
            dependencies:
         
     | 
| 
       36 
36 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       37 
     | 
    
         
            -
              name:  
     | 
| 
       38 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       39 
     | 
    
         
            -
                requirements:
         
     | 
| 
       40 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       41 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       42 
     | 
    
         
            -
                    version: '0.9'
         
     | 
| 
       43 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       44 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       45 
     | 
    
         
            -
                    version: 0.9.3
         
     | 
| 
       46 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       47 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       48 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       49 
     | 
    
         
            -
                requirements:
         
     | 
| 
       50 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       51 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       52 
     | 
    
         
            -
                    version: '0.9'
         
     | 
| 
       53 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       54 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       55 
     | 
    
         
            -
                    version: 0.9.3
         
     | 
| 
       56 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       57 
     | 
    
         
            -
              name: nokogiri
         
     | 
| 
       58 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       59 
     | 
    
         
            -
                requirements:
         
     | 
| 
       60 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       61 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       62 
     | 
    
         
            -
                    version: '1.6'
         
     | 
| 
       63 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       64 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       65 
     | 
    
         
            -
                    version: 1.6.2.1
         
     | 
| 
       66 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       67 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       68 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       69 
     | 
    
         
            -
                requirements:
         
     | 
| 
       70 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       71 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       72 
     | 
    
         
            -
                    version: '1.6'
         
     | 
| 
       73 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       74 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version: 1.6.2.1
         
     | 
| 
       76 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       77 
     | 
    
         
            -
              name: chronic_duration
         
     | 
| 
       78 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
     | 
    
         
            -
                requirements:
         
     | 
| 
       80 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       81 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version: '0.10'
         
     | 
| 
       83 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       84 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       85 
     | 
    
         
            -
                    version: 0.10.4
         
     | 
| 
       86 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       87 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       88 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       89 
     | 
    
         
            -
                requirements:
         
     | 
| 
       90 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       91 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       92 
     | 
    
         
            -
                    version: '0.10'
         
     | 
| 
       93 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       94 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       95 
     | 
    
         
            -
                    version: 0.10.4
         
     | 
| 
       96 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       97 
     | 
    
         
            -
              name: chronic_cron
         
     | 
| 
       98 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       99 
     | 
    
         
            -
                requirements:
         
     | 
| 
       100 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       101 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       102 
     | 
    
         
            -
                    version: '0.2'
         
     | 
| 
       103 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       104 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       105 
     | 
    
         
            -
                    version: 0.2.33
         
     | 
| 
       106 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       107 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       108 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       109 
     | 
    
         
            -
                requirements:
         
     | 
| 
       110 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       111 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       112 
     | 
    
         
            -
                    version: '0.2'
         
     | 
| 
       113 
     | 
    
         
            -
                - - ">="
         
     | 
| 
       114 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       115 
     | 
    
         
            -
                    version: 0.2.33
         
     | 
| 
       116 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       117 
     | 
    
         
            -
              name: rxfhelper
         
     | 
| 
      
 37 
     | 
    
         
            +
              name: polyrex_calendarbase
         
     | 
| 
       118 
38 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       119 
39 
     | 
    
         
             
                requirements:
         
     | 
| 
       120 
40 
     | 
    
         
             
                - - "~>"
         
     | 
| 
         @@ -122,7 +42,7 @@ dependencies: 
     | 
|
| 
       122 
42 
     | 
    
         
             
                    version: '0.1'
         
     | 
| 
       123 
43 
     | 
    
         
             
                - - ">="
         
     | 
| 
       124 
44 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       125 
     | 
    
         
            -
                    version: 0.1. 
     | 
| 
      
 45 
     | 
    
         
            +
                    version: 0.1.3
         
     | 
| 
       126 
46 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       127 
47 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       128 
48 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -132,7 +52,7 @@ dependencies: 
     | 
|
| 
       132 
52 
     | 
    
         
             
                    version: '0.1'
         
     | 
| 
       133 
53 
     | 
    
         
             
                - - ">="
         
     | 
| 
       134 
54 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       135 
     | 
    
         
            -
                    version: 0.1. 
     | 
| 
      
 55 
     | 
    
         
            +
                    version: 0.1.3
         
     | 
| 
       136 
56 
     | 
    
         
             
            description: 
         
     | 
| 
       137 
57 
     | 
    
         
             
            email: james@r0bertson.co.uk
         
     | 
| 
       138 
58 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -180,4 +100,3 @@ signing_key: 
     | 
|
| 
       180 
100 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       181 
101 
     | 
    
         
             
            summary: Generates an HTML calendar from a Polyrex document
         
     | 
| 
       182 
102 
     | 
    
         
             
            test_files: []
         
     | 
| 
       183 
     | 
    
         
            -
            has_rdoc: 
         
     | 
    
        metadata.gz.sig
    CHANGED
    
    | 
         Binary file 
     |