class Quickeebooks::Shared::Service::Filter

Constants

DATE_FORMAT
DATE_TIME_FORMAT

Attributes

after[RW]

For Date/Time filtering

before[RW]

For Date/Time filtering

eq[RW]

For number comparisons

field[RW]
gt[RW]

For number comparisons

lt[RW]

For number comparisons

type[R]
value[RW]

Public Class Methods

new(type, *args) click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 18
def initialize(type, *args)
  @type = type
  if args.first.is_a?(Hash)
    args.first.each_pair do |key, value|
      instance_variable_set("@#{key}", value)
    end
  end
end

Public Instance Methods

to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 27
def to_s
  case @type.to_sym
  when :date
    date_to_s
  when :datetime
    date_time_to_s
  when :text
    text_to_s
  when :boolean
    boolean_to_s
  when :number
    number_to_s
  else
    raise ArgumentError, "Don't know how to generate a Filter for type #{@type}"
  end
end
to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 44
def to_xml
  case @type.to_sym
  when :text
    text_to_xml
  when :boolean
    boolean_to_xml
  when :date
    date_to_xml
  when :datetime
    datetime_to_xml
  when :number
    number_to_xml
  else
    raise ArgumentError, "Don't know how to generate a Filter for type #{@type}"
  end
end

Private Instance Methods

boolean_to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 121
def boolean_to_s
  "#{@field} :EQUALS: #{@value}"
end
boolean_to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 125
def boolean_to_xml
  "<#{@field}>#{CGI::escapeHTML(@value.to_s)}</#{@field}>"
end
date_time_to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 95
def date_time_to_s
  clauses = []
  if @before
    raise ':before is not a valid DateTime-like object' unless valid_datetime?(@before)
    clauses << "#{@field} :BEFORE: #{formatted_datetime(@before)}"
  end
  if @after
    raise ':after is not a valid DateTime-like object' unless valid_datetime?(@after)
    clauses << "#{@field} :AFTER: #{formatted_datetime(@after)}"
  end

  if @before.nil? && @after.nil?
    clauses << "#{@field} :EQUALS: #{formatted_datetime(@value)}"
  end

  clauses.join(" :AND: ")
end
date_to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 77
def date_to_s
  clauses = []
  if @before
    raise ':before is not a valid Date-like object' unless valid_datetime?(@before)
    clauses << "#{@field} :BEFORE: #{formatted_date(@before)}"
  end
  if @after
    raise ':after is not a valid Date-like object' unless valid_datetime?(@after)
    clauses << "#{@field} :AFTER: #{formatted_date(@after)}"
  end

  if @before.nil? && @after.nil?
    clauses << "#{@field} :EQUALS: #{formatted_date(@value)}"
  end

  clauses.join(" :AND: ")
end
date_to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 133
def date_to_xml
  "<#{@field}>#{formatted_date(@value)}</#{@field}>"
end
datetime_to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 137
def datetime_to_xml
  "<#{@field}>#{formatted_datetime(@value)}</#{@field}>"
end
formatted_date(date) click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 141
def formatted_date(date)
  date.strftime(DATE_FORMAT)
end
formatted_datetime(datetime) click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 145
def formatted_datetime(datetime)
  datetime.strftime(DATE_TIME_FORMAT)
end
number_to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 63
def number_to_s
  clauses = []
  if @eq
    clauses << "#{@field} :EQUALS: #{@eq}"
  end
  if @gt
    clauses << "#{@field} :GreaterThan: #{@gt}"
  end
  if @lt
    clauses << "#{@field} :LessThan: #{@lt}"
  end
  clauses.join(" :AND: ")
end
number_to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 129
def number_to_xml
  "<#{@field}>#{CGI::escapeHTML(@value.to_s)}</#{@field}>"
end
text_to_s() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 113
def text_to_s
  "#{@field} :EQUALS: #{@value}"
end
text_to_xml() click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 117
def text_to_xml
  "<#{@field}>#{CGI::escapeHTML(@value.to_s)}</#{@field}>"
end
valid_datetime?(value) click to toggle source
# File lib/quickeebooks/shared/service/filter.rb, line 149
def valid_datetime?(value)
  value.respond_to?(:strftime)
end