Sha256: 27f7e7e40fe0833580703d3d2e4e1464bd8b034c01ed7e4a2554d7a054f7a874

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

require 'safe_attribute_assignment'

class Thorwald::Exporter
  include SafeAttributeAssignment

  attr_reader :clazz, :params
  attr_accessor :includes, :attribute, :type

  def initialize(clazz, params, options = {})
    @clazz = clazz
    @params = params

    options = {
      includes: [],
      attribute: :id
    }.merge(options)

    assign_attributes(options)
  end

  def as_json(*args) 
    export.as_json(include: includes)
  end

  private

  def scoped
    @scoped ||= clazz.where(where, last_record_id).order(attribute)
  end

  def export
    scoped.limit(count)
  end

  def last_record_id
    params[:last_record] || clazz.last.try(attribute)
  end

  def count
    params[:count] || 100
  end

  def where
    "#{attribute} #{comparator} ?"
  end

  def comparator
    if is_datetime? || params[:last_record].blank?
      ">="
    else
      ">"
    end
  end

  def is_datetime?
    type == :datetime
  end

  def type
    @type ||= %w(updated_at created_at).include?(attribute.to_s) ? :datetime : :id
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thorwald-0.1.1 lib/thorwald/exporter.rb