Sha256: fc0d8e9b40b3cd1aca7f54e8009f5a6c5c1ab9ce6a0dcbb8ef0c346c5f0056aa

Contents?: true

Size: 1.08 KB

Versions: 4

Compression:

Stored size: 1.08 KB

Contents

module Geckoboard
  class PayloadFormatter
    attr_reader :dataset

    def initialize(dataset)
      @dataset = dataset
    end

    def format(payload)
      payload.map do |item|
        item.inject({}) do |hash, (field_name, value)|
          field_name = field_name.to_s

          value = case field_type(field_name)
                  when 'date'     then format_date(value)
                  when 'datetime' then format_datetime(value)
                  else
                    value
                  end

          hash.merge(field_name => value)
        end
      end
    end

    private

    def field_type(name)
      @field_types ||= dataset.fields.inject({}) do |hash, (field_name, definition)|
        hash.merge(field_name => definition.fetch('type'))
      end

      @field_types.fetch(name, 'string')
    end

    def format_date(value)
      return value unless value.respond_to? :strftime
      value.strftime('%Y-%m-%d')
    end

    def format_datetime(value)
      return value unless value.respond_to? :strftime
      value.strftime('%Y-%m-%dT%H:%M:%S%:z')
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
geckoboard-ruby-0.4.0 lib/geckoboard/payload_formatter.rb
geckoboard-ruby-0.3.0 lib/geckoboard/payload_formatter.rb
geckoboard-ruby-0.2.0 lib/geckoboard/payload_formatter.rb
geckoboard-ruby-0.1.0 lib/geckoboard/payload_formatter.rb