Sha256: ed0e9b39667b5fa826df1bb3dd91d98069ec881b07ecc538fcd0e19abb389bdf

Contents?: true

Size: 1.84 KB

Versions: 5

Compression:

Stored size: 1.84 KB

Contents

module Calendrier
  module EventExtension

    def sort_events(events)
      events_by_date = {}

      events.sort_by { |obj| get_event_stamp(obj) }.each do |event|

        begin_date = Time.at(get_event_stamp(event)).to_date
        end_date = Time.at(get_event_stamp(event, :end_time => true)).to_date

        duration_in_days = (end_date - begin_date).to_i + 1

        duration_in_days.times do |index|
          current_date = begin_date + index
          date_arr = [current_date.year.to_s, current_date.month.to_s, current_date.day.to_s]
          exist = begin
            true if events_by_date[current_date.year.to_s][current_date.month.to_s][current_date.day.to_s]
          rescue NoMethodError
            false
          end
          # create recursive hash {"2012"=>{"5"=>{"21"=>[]}}}
          events_by_date = events_rmerge(events_by_date, date_arr.reverse.inject([]) { |a, n| {n=>a} }) unless exist

          unless events_by_date[current_date.year.to_s][current_date.month.to_s][current_date.day.to_s].include? event
            events_by_date[current_date.year.to_s][current_date.month.to_s][current_date.day.to_s] << event
          end
        end
      end

      return events_by_date
    end

    protected

    def events_rmerge(hash, other_hash)
      r = {}
      hash.merge(other_hash) do |key, oldval, newval|
        r[key] = oldval.class == hash.class ? events_rmerge(oldval, newval) : newval
      end
    end

    def get_event_stamp(event, options = {})
      end_time = options[:end_time]
      ret = nil

      if event.respond_to?(:year) && event.respond_to?(:month) && event.respond_to?(:day)
        ret = Time.utc(event.year, event.month, event.day).to_i
      elsif event.respond_to?(:begin_time) && event.respond_to?(:end_time)
        ret = end_time ? event.end_time : event.begin_time
      end

      return ret
    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
calendrier-0.9.5 lib/calendrier/controllers/event_extension.rb
calendrier-0.9.4 lib/calendrier/controllers/event_extension.rb
calendrier-0.9.3 lib/calendrier/controllers/event_extension.rb
calendrier-0.9.1 lib/calendrier/controllers/event_extension.rb
calendrier-0.9.0 lib/calendrier/controllers/event_extension.rb