Class: TradingviewScreener::Base

Inherits:
Object
  • Object
show all
Extended by:
QueryMethods
Defined in:
lib/tradingview_screener/base.rb

Overview

ActiveRecord-style model base.

class Stock < TradingviewScreener::Base
market "america"
default_scope { where(is_primary: true) }
scope :liquid, -> { where(volume: gt(1_000_000)) }
end

Stock.liquid.where(close: 10..300).order(volume: :desc).limit(20).load

Direct Known Subclasses

Stock

Class Method Summary collapse

Methods included from QueryMethods

gt, gte, has, has_none_of, lt, lte, not_eq

Class Method Details

.[](name) ⇒ Object



125
126
127
# File 'lib/tradingview_screener/base.rb', line 125

def [](name)
  Field.new(name)
end

.allObject



92
93
94
95
96
97
98
# File 'lib/tradingview_screener/base.rb', line 92

def all
  rel = Relation.new(self)
  default_scopes.reduce(rel) do |memo, callable|
    result = memo.instance_exec(&callable)
    result.nil? ? memo : result
  end
end

.columns(*names) ⇒ Object Also known as: default_columns



30
31
32
33
34
35
36
# File 'lib/tradingview_screener/base.rb', line 30

def columns(*names)
  if names.empty?
    @default_columns
  else
    @default_columns = names.flatten.map(&:to_s)
  end
end

.count(**kwargs) ⇒ Object



116
# File 'lib/tradingview_screener/base.rb', line 116

def count(**kwargs) = all.count(**kwargs)

.default_filter2Object



60
61
62
# File 'lib/tradingview_screener/base.rb', line 60

def default_filter2
  @default_filter2
end

.default_limit(value = nil) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/tradingview_screener/base.rb', line 39

def default_limit(value = nil)
  if value.nil?
    @default_limit
  else
    @default_limit = Integer(value)
  end
end

.default_order_valuesObject Also known as: default_order



47
48
49
# File 'lib/tradingview_screener/base.rb', line 47

def default_order_values
  @default_order
end

.default_scope(body = nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


85
86
87
88
89
90
# File 'lib/tradingview_screener/base.rb', line 85

def default_scope(body = nil, &block)
  callable = body || block
  raise ArgumentError, "default_scope needs a callable" unless callable

  default_scopes << callable
end

.default_whereObject



56
57
58
# File 'lib/tradingview_screener/base.rb', line 56

def default_where
  @default_where
end

.exceptObject



113
# File 'lib/tradingview_screener/base.rb', line 113

def except(...) = all.except(...)

.exists?(**kwargs) ⇒ Boolean

Returns:

  • (Boolean)


122
# File 'lib/tradingview_screener/base.rb', line 122

def exists?(**kwargs) = all.exists?(**kwargs)

.filter2(value) ⇒ Object



64
65
66
# File 'lib/tradingview_screener/base.rb', line 64

def filter2(value)
  @default_filter2 = value
end

.find_each(**opts, &block) ⇒ Object



123
# File 'lib/tradingview_screener/base.rb', line 123

def find_each(**opts, &block) = all.to_a(**opts).each(&block)

.firstObject



117
# File 'lib/tradingview_screener/base.rb', line 117

def first(...) = all.first(...)

.from_payload(payload) ⇒ Object



133
134
135
# File 'lib/tradingview_screener/base.rb', line 133

def from_payload(payload)
  Relation.from_payload(self, payload)
end

.from_screen_data(screen_data) ⇒ Object



137
138
139
# File 'lib/tradingview_screener/base.rb', line 137

def from_screen_data(screen_data)
  from_payload(ScreenData.to_payload(screen_data))
end

.from_screener_url(url, cookies: nil, proxy: nil, timeout: 20) ⇒ Object



141
142
143
144
# File 'lib/tradingview_screener/base.rb', line 141

def from_screener_url(url, cookies: nil, proxy: nil, timeout: 20)
  fetched = ScreenData.fetch(url, cookies: cookies, proxy: proxy, timeout: timeout)
  from_payload(fetched["payload"])
end

.ids(**kwargs) ⇒ Object



121
# File 'lib/tradingview_screener/base.rb', line 121

def ids(**kwargs) = all.ids(**kwargs)

.inherited(subclass) ⇒ Object



15
16
17
18
19
# File 'lib/tradingview_screener/base.rb', line 15

def inherited(subclass)
  super
  subclass.instance_variable_set(:@scopes, {})
  subclass.instance_variable_set(:@default_scopes, [])
end

.lastObject



118
# File 'lib/tradingview_screener/base.rb', line 118

def last(...) = all.last(...)

.limitObject



108
# File 'lib/tradingview_screener/base.rb', line 108

def limit(...) = all.limit(...)

.load(**kwargs) ⇒ Object



114
# File 'lib/tradingview_screener/base.rb', line 114

def load(**kwargs) = all.load(**kwargs)

.market(name = nil) ⇒ Object Also known as: default_market



21
22
23
24
25
26
27
# File 'lib/tradingview_screener/base.rb', line 21

def market(name = nil)
  if name.nil?
    @default_market
  else
    @default_market = name.to_s
  end
end

.market!Object



110
# File 'lib/tradingview_screener/base.rb', line 110

def market!(...) = all.market(...)

.mergeObject



112
# File 'lib/tradingview_screener/base.rb', line 112

def merge(...) = all.merge(...)

.noneObject



100
101
102
# File 'lib/tradingview_screener/base.rb', line 100

def none
  all.none
end

.offsetObject



109
# File 'lib/tradingview_screener/base.rb', line 109

def offset(...) = all.offset(...)

.orderObject



107
# File 'lib/tradingview_screener/base.rb', line 107

def order(...) = all.order(...)

.order_by(column, direction = :desc) ⇒ Object



52
53
54
# File 'lib/tradingview_screener/base.rb', line 52

def order_by(column, direction = :desc)
  @default_order = [{ "sortBy" => column.to_s, "sortOrder" => direction.to_s == "asc" ? "asc" : "desc" }]
end

.pickObject



120
# File 'lib/tradingview_screener/base.rb', line 120

def pick(...) = all.pick(...)

.pluckObject



119
# File 'lib/tradingview_screener/base.rb', line 119

def pluck(...) = all.pluck(...)

.rewhereObject



105
# File 'lib/tradingview_screener/base.rb', line 105

def rewhere(...) = all.rewhere(...)

.scope(name, body = nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/tradingview_screener/base.rb', line 68

def scope(name, body = nil, &block)
  callable = body || block
  raise ArgumentError, "scope needs a callable" unless callable

  scopes[name.to_sym] = callable
  define_singleton_method(name) do |*args, **kwargs|
    rel = all
    result =
      if callable.arity.nonzero? || kwargs.any?
        rel.instance_exec(*args, **kwargs, &callable)
      else
        rel.instance_exec(&callable)
      end
    result.nil? ? none : result
  end
end

.selectObject



106
# File 'lib/tradingview_screener/base.rb', line 106

def select(...) = all.select(...)

.tickersObject



111
# File 'lib/tradingview_screener/base.rb', line 111

def tickers(...) = all.tickers(...)

.to_a(**kwargs) ⇒ Object



115
# File 'lib/tradingview_screener/base.rb', line 115

def to_a(**kwargs) = all.to_a(**kwargs)

.unscopedObject



129
130
131
# File 'lib/tradingview_screener/base.rb', line 129

def unscoped
  Relation.new(self)
end

.whereObject



104
# File 'lib/tradingview_screener/base.rb', line 104

def where(...) = all.where(...)