sparkapi/spark_api

View on GitHub
lib/spark_api/models/subresource.rb

Summary

Maintainability
B
6 hrs
Test Coverage
module SparkApi
  module Models
    module Subresource

      def build_subclass
        Class.new(self)
      end

      def find_by_listing_key(key, arguments={})
        collect(connection.get("/listings/#{key}#{self.path}", arguments))
      end

      def find_by_id(id, parent_id, arguments={})
        collect(connection.get("/listings/#{parent_id}#{self.path}/#{id}", arguments)).first
      end

      def parse_date_start_and_end_times(attributes)
        # Transform the date strings
        unless attributes['Date'].nil? || attributes['Date'].empty?
          date = Date.strptime attributes['Date'], '%m/%d/%Y'
          ['StartTime','EndTime'].each do |time|
            next if attributes[time].nil? || attributes[time].empty?
            formatted_date = "#{attributes['Date']}T#{attributes[time]}"
            datetime = nil

            begin
              datetime = DateTime.strptime(formatted_date, '%m/%d/%YT%l:%M %P')
              dst_offset = 0
            rescue => ex
              ; # Do nothing; doesn't matter
            end

            unless datetime
              other_formats = ['%m/%d/%YT%H:%M%z', '%m/%d/%YT%H:%M:%S%z']
              other_formats.each_with_index do |format, i|
                begin
                  datetime = DateTime.strptime(formatted_date, format)
                  datetime = datetime.new_offset DateTime.now.offset
                  now = Time.now
                  dst_offset = now.dst? || now.zone == 'UTC' ? 0 : 1
                  break
                rescue => ex
                  next
                end
              end
            end

            # if we still don't have a valid time, raise an error
            unless datetime
              raise ArgumentError.new('invalid date')
            end
            
            

            attributes[time] = Time.local(datetime.year, datetime.month, datetime.day,
                                          datetime.hour + dst_offset, datetime.min, datetime.sec)
          end
          attributes['Date'] = date
        end
      end

    end
  end
end