Class: Money::Helpers::Controls::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/money/resources/helpers/controls/validator.rb

Constant Summary collapse

EXCHANGES =
['Binance', 'Coinbase Exchange', 'Kraken', 'Bybit', 'KuCoin', 'OKX'].freeze
LIQUIDITY =
200
LR =
20
MINUTES =
15
HR =
30

Instance Method Summary collapse

Constructor Details

#initialize(data:) ⇒ Validator

Returns a new instance of Validator.



14
15
16
17
# File 'lib/money/resources/helpers/controls/validator.rb', line 14

def initialize(data:)
  @data = data
  @log = Beacon::Service.instance
end

Instance Method Details

#existObject



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/money/resources/helpers/controls/validator.rb', line 45

def exist
  cryptos = []
  @data&.map do |item|
    request = Money::Helpers::RequestApp.new.operation_exist(item)
    @log.info("item: #{item[:name]} ,exist: #{request[:response]['exist']}")
    next if request[:response]['exist'] == true

    cryptos << item
  end&.compact

  cryptos
end

#gainObject

rubocop: disable Metrics/MethodLength, Lint/MissingCopEnableDirective



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/money/resources/helpers/controls/validator.rb', line 20

def gain
  cryptos = []
  @data&.map do |item|
    exchanges = item[:exchanges]
    @gainer = Money::Helpers::Controls::Gain.new(exchanges)

    potential = @gainer.greater_difference
    next if potential[:gain] == false

    item[:exchanges] = potential.dig(:payload, :exchanges)
    item.each { |i| i.delete(:price) }

    cryptos << item
  end&.compact

  cryptos
end

#juniorObject



78
79
80
81
82
# File 'lib/money/resources/helpers/controls/validator.rb', line 78

def junior
  timezone = Money.configuration
  partial = @data&.dig('data', 'body', 'data')
  partial&.reject! { |c| convert_local_time(date: c['date_added'], timezone: timezone) > difference_time }
end

#liquidityObject



38
39
40
41
42
43
# File 'lib/money/resources/helpers/controls/validator.rb', line 38

def liquidity
  @data&.reject do |es|
    es[:exchanges].reject! { |exchange| exchange[:liquidity] < LIQUIDITY }
    es[:exchanges].empty?
  end
end

#pairsObject



58
59
60
61
62
63
# File 'lib/money/resources/helpers/controls/validator.rb', line 58

def pairs
  @data&.map do |item|
    filtered = item[:exchanges].select { |cmc_item| EXCHANGES.include?(cmc_item[:exchange]) }
    item.merge(exchanges: filtered) unless filtered.empty?
  end&.compact
end

#positiveObject



65
66
67
68
# File 'lib/money/resources/helpers/controls/validator.rb', line 65

def positive
  quotes = @data&.dig('data', 'body', 'data')
  quotes&.select! { |item| (positive_hour?(item) && positive_day?(item)) }
end

#positive_day?(item) ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/money/resources/helpers/controls/validator.rb', line 74

def positive_day?(item)
  item&.dig('quote', 'USD', 'percent_change_24h')&.between?(LR, HR)
end

#positive_hour?(item) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/money/resources/helpers/controls/validator.rb', line 70

def positive_hour?(item)
  item&.dig('quote', 'USD', 'percent_change_1h')&.positive?
end