Sha256: e69ddde8e995f7b0576c51c2caa07030a505b7afe8b629ce2855e0966576ee32

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

module Quandl::Cassinatra::Dataset::Searchable

  extend ActiveSupport::Concern

  module ClassMethods
    
    def search_scopes
      @search_scopes ||+ search_scope.scopes.keys
    end
    
  end
  
  included do
    
    scope.class_eval do
      delegate :each, :collect, :to_a, :to_h, :count, :inspect, :[], to: :to_table, allow_nil: true
      delegate *Quandl::Data::Table.forwardable_methods, to: :to_table, allow_nil: true
    end
    
    scope_helper :to_table, -> { fetch_once.data }
    
    scope :row,          ->(v)       { where( row: v.to_i ) }
    scope :limit,        ->(v)       { where( limit: v.to_i ) }
    scope :offset,       ->(v)       { where( offset: v.to_i ) }
    scope :accuracy,     ->(v)       { where( accuracy: v.to_i ) }
    scope :column,       ->(v)       { where( column: v.to_i ) }
    scope :order,        ->(dir)     { where( order: (dir.to_sym == :asc) ? 'asc' : 'desc' ) }
    scope :trim_start,   ->(date)    { where( trim_start:  format_trim_date(date, :start)) }
    scope :trim_end,     ->(date)    { where( trim_end:    format_trim_date(date, :end)) }
    scope :with_id,      ->(value)   { where( id: value.to_i )}
    scope :transform,    ->(value)   { where( transform: value.to_sym ) if Quandl::Operation::Transform.valid_transformation?( value.try(:to_sym) ) }
    
    scope :collapse, ->(value){
      # set collapse
      where( collapse: value ) if Quandl::Operation::Collapse.valid_collapse?( value.try(:to_sym) )
      # reset trims to force them to edge of frequency
      trim_start(trim_start) if trim_start
      trim_end(trim_end) if trim_end
    }
    
  end

  def data
    return read_data if data?
    return scope unless queried?
    nil
  end
  
  def data=(value)
    write_data(value)
  end
  
  def scope
    @scope ||= self.class.scope.new.references( self )
  end
  
  
  protected
  
  def read_data
    Quandl::Data::Table.new( read_attribute(:data) )
  end
  
  def write_data(value )
    write_attribute(:data, Quandl::Data::Table.new(value).to_csv )
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quandl_cassinatra-0.2.3 lib/quandl/cassinatra/models/dataset/searchable.rb