class Fcoin::Orders::CreateOrderMarketValidator

Public Class Methods

new(params) click to toggle source

@param params [Hash] Parameter you want to verify including the called method name @option params :symbol [String or Symbol] Transaction pair @option params :side [String or Symbol] Direction of the transaction @option params :total [Float] @option params :amount [Float]

# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 14
def initialize(params)
  self.symbol      = params[:symbol]
  self.side        = params[:side]
  self.total       = params[:amount] # this is not a mistake
  self.amount      = params[:amount]
end

Public Instance Methods

messages() click to toggle source

Error message when invalid

# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 39
def messages
  return {} if valid?
  results = []
  results << presence_error_message(symbol, :symbol) unless valid_symbol?
  results << includes_error_message(side, :side, valid_sides) unless valid_side?

  case
  when valid_symbol_setting_exist?
    case
    when sell?
      results << between_error_message(amount, :amount, min(:amount), max(:amount)) unless valid_amount?
    when buy?
      results << between_error_message(total, :total, min(:total), max(:total)) unless valid_total?
    end
  when invalid_symbol_setting_exist?
    results << invalid_create_order_market_error_message(symbol, :symbol)
  end
  results.compact&.each_with_object({}) { |message, data| data.merge!(message) }
end
valid?() click to toggle source

Validate according to method_name

# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 22
def valid?
  case
  when valid_symbol_setting_exist?
    case
    when sell?
      valid_amount?
    when buy?
      valid_total?
    end
  when invalid_symbol_setting_exist?
    false
  else
    valid_symbol? && valid_side?
  end
end

Private Instance Methods

buy?() click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 65
def buy?
  side.to_s == 'buy'
end
invalid_create_order_market_error_message(value, type) click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 69
def invalid_create_order_market_error_message(value, type)
  message = {}
  adjusted_value = value.present? ? value : 'nil'
  message[type] = "#{type} is #{adjusted_value}. This #{type} board is not adapted on-going order."
  message
end
invalid_symbol_setting_exist?() click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 76
def invalid_symbol_setting_exist?
  invalid_symbols[symbol].present?
end
invalid_symbols() click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 87
def invalid_symbols
  return HashWithIndifferentAccess.new unless valid_side?
  ::Settings.fcoin.validation.market.invalid[side].to_h.values.flatten.compact.each_with_object(HashWithIndifferentAccess.new) do |setting, data|
    data[setting] = setting
  end
end
sell?() click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 61
def sell?
  side.to_s == 'sell'
end
valid_symbols() click to toggle source
# File lib/fcoin/validator/orders/create_order_market_validator.rb, line 80
def valid_symbols
  return HashWithIndifferentAccess.new unless valid_side?
  ::Settings.fcoin.validation.market.valid[side].to_h.values.flatten.compact.each_with_object(HashWithIndifferentAccess.new) do |setting, data|
    data[setting.symbol] = setting
  end
end