Sha256: bd0fdc266dd555f33005b0e61742a119d420866471ce2d6be3651ddb5894d049

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

class Iro::Alert
  include Mongoid::Document
  include Mongoid::Timestamps
  store_in collection: 'iro_alerts'

  # SLEEP_TIME_SECONDS = Rails.env.production? ? 60 : 15

  DIRECTION_ABOVE = 'ABOVE'
  DIRECTION_BELOW = 'BELOW'
  def self.directions_list
    [ nil, DIRECTION_ABOVE, DIRECTION_BELOW ]
  end

  STATUS_ACTIVE   = 'active'
  STATUS_INACTIVE = 'inactive'
  STATUSES        = [ nil, 'active', 'inactive' ]
  field :status, default: STATUS_ACTIVE
  def self.active
    where( status: STATUS_ACTIVE )
  end

  field :class_name, default: 'Iro::Stock'
  validates :class_name, presence: true

  field :symbol
  validates :symbol, presence: true

  field :direction
  validates :direction, presence: true

  field :strike
  validates :strike, presence: true

  def do_run
    alert = self
    begin
      price = Tda::Stock.get_quote( alert.symbol ).last

      if  alert.direction == self.class::DIRECTION_ABOVE && price >= alert.strike ||
          alert.direction == self.class::DIRECTION_BELOW && price <= alert.strike



        Iro::AlertMailer.stock_alert( alert.id.to_s ).deliver_later
        alert.update({ status: self.class::STATUS_INACTIVE })
        print '^'

      end
    rescue => err
      puts! err, 'err'
      ::ExceptionNotifier.notify_exception(
        err,
        data: { alert: alert }
      )
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
iron_warbler-2.0.7.16 app/models/iro/alert.rb