aapis/evertils-common

View on GitHub
lib/evertils/common/entity.rb

Summary

Maintainability
A
25 mins
Test Coverage
module Evertils
  module Common
    module Entity
      class Base < Common::Generic
        attr_accessor :entity

        REPLACEMENTS = {
          '%DOY%': Date.today.yday,
          '%MONTH_NAME%': Date.today.strftime('%B'),
          '%MONTH%': Date.today.month,
          '%DAY%': Date.today.day,
          '%DOW%': Date.today.wday,
          '%DOW_NAME%': Date.today.strftime('%a'),
          '%YEAR%': Date.today.year,
          '%WEEK%': Date.today.cweek,
          '%WEEK_START%': Date.commercial(Date.today.year, Date.today.cweek, 1),
          '%WEEK_END%': Date.commercial(Date.today.year, Date.today.cweek, 5)
        }

        def initialize
          @evernote = Authentication.instance

          super
        end

        def placeholders_for(items)
          items.map do |item|
            REPLACEMENTS.each_pair do |k, v|
              item.last.gsub!(k.to_s, v.to_s) if item.last.is_a? String
              item.last.map { |i| i.gsub!(k.to_s, v.to_s) } if item.last.is_a? Array
            end
          end

          symbolize_keys(items)
        end

        def symbolize_keys(hash)
          hash.inject({}){ |result, (key, value)|
            new_key = case key
                      when String then key.to_sym
                      else key
                      end
            new_value = case value
                        when Hash then symbolize_keys(value)
                        else value
                        end
            result[new_key] = new_value
            result
          }
        end

        #
        # @since 0.2.8
        def start_of_day(date = ::Time.now)
          ::Time.mktime(date.year, date.month, date.day, 12, 0, 0, 0, 0).to_datetime
        end

        #
        # @since 0.2.8
        def end_of_day(date = ::Time.now)
          ::Time.mktime(date.year, date.month, date.day, 23, 59, 59, 0).to_datetime
        end

        #
        # @since 0.2.9
        def prop(name)
          @entity.send(name)
        end

        #
        # @since 0.3.2
        def to_s
          prop(:guid)
        end
      end
    end
  end
end