Sha256: 494663d3e04a7c8abeb7bf97fdccc52987e2ada9ecd92e813558dd05e4fb7ef8

Contents?: true

Size: 1.54 KB

Versions: 16

Compression:

Stored size: 1.54 KB

Contents

class Iro::Alert
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia
  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, type: String
  validates :symbol, presence: true

  field :direction, type: String
  validates :direction, presence: true

  field :strike, type: Float
  validates :strike, presence: true

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

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

        if Rails.env.production?
          Iro::AlertMailer.stock_alert( alert.id.to_s ).deliver_later
        else
          Iro::AlertMailer.stock_alert( alert.id.to_s ).deliver_now
        end
        alert.update({ status: alert.class::STATUS_INACTIVE })
        print '^'

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

end

Version data entries

16 entries across 16 versions & 2 rubygems

Version Path
wco_models-3.1.0.189 app/models/iro/alert.rb
wco_models-3.1.0.188 app/models/iro/alert.rb
iron_warbler-2.0.7.43 app/models/iro/alert.rb
iron_warbler-2.0.7.42 app/models/iro/alert.rb
iron_warbler-2.0.7.41 app/models/iro/alert.rb
iron_warbler-2.0.7.40 app/models/iro/alert.rb
iron_warbler-2.0.7.39 app/models/iro/alert.rb
iron_warbler-2.0.7.38 app/models/iro/alert.rb
iron_warbler-2.0.7.37 app/models/iro/alert.rb
iron_warbler-2.0.7.36 app/models/iro/alert.rb
iron_warbler-2.0.7.35 app/models/iro/alert.rb
iron_warbler-2.0.7.34 app/models/iro/alert.rb
iron_warbler-2.0.7.33 app/models/iro/alert.rb
iron_warbler-2.0.7.32 app/models/iro/alert.rb
iron_warbler-2.0.7.31 app/models/iro/alert.rb
iron_warbler-2.0.7.30 app/models/iro/alert.rb