lib/cryptum/option.rb in cryptum-0.0.379 vs lib/cryptum/option.rb in cryptum-0.0.380
- old
+ new
@@ -1,203 +1,14 @@
# frozen_string_literal: true
-require 'optparse'
-require 'yaml'
-
module Cryptum
# Cryptum::UI Module used for Presenting the
# Cryptum Curses Interface
module Option
require 'cryptum/option/choice'
-
- # Options for cryptum Driver
- public_class_method def self.parser(opts = {})
- option_choice = Option::Choice.new
- option_choice.driver_name = opts[:driver_name]
-
- OptionParser.new do |options|
- options.banner = "USAGE: #{option_choice.driver_name} [opts]"
-
- options.on(
- '-sSYMBOL',
- '--symbol=SYMBOL',
- '<Required - Crypto Symbol.(e.g. btc-usd, eth-usd, etc.)'
- ) { |s| option_choice.symbol = s.to_s.gsub('-', '_').downcase.to_sym }
-
- options.on(
- '-A',
- '--[no-]autotrade',
- '<Optional - Automatically Buy and Sell Crypto>'
- ) { |a| option_choice.autotrade = a }
-
- options.on(
- '-l',
- '--[no-]list-products',
- '<Optional - List Supported Crypto Currency Products and Exit>'
- ) { |l| option_choice.list_products = l }
-
- options.on(
- '-pPROXY',
- '--proxy=PROXY',
- '<Optional - HTTP Proxy e.g. "http://127.0.0.1:8080">'
- ) { |p| option_choice.proxy = p }
-
- options.on(
- '-R',
- '--[no-]reset-trend-countdown',
- '<Optional - Reset Market Trend Countdown at Session Init (Defaults to false)>'
- ) { |t| option_choice.reset_session_countdown = t }
-
- options.on(
- '-rPATH',
- '--session-root=PATH',
- '<Optional - Directory with etc && order_books (Defaults to ~/cryptum)>'
- ) { |r| option_choice.session_root = r }
-
- options.on(
- '-S',
- '--[no-]sandbox',
- '<Optional - Use Coinbase Sandbox Environment for Testing Ideas>'
- ) { |n| option_choice.sandbox = n }
-
- options.on(
- '-tSECONDS',
- '--trend-reset-time=SECONDS',
- '<Optional - Seconds Between Market Trend Reset (Default 86_400 i.e. 1 day)>'
- ) { |t| option_choice.market_trend_reset = t.to_i }
- end.parse!
-
- input_validation(option_choice: option_choice)
-
- option_choice
- rescue OptionParser::InvalidOption => e
- # Print Usage if unsupported flags are passed
- puts "ERROR: #{e.message}\n\n"
- puts `#{option_choice.driver_name} --help`
- exit 1
- rescue StandardError => e
- raise e
- end
-
- # Validate Options for cryptum Driver
- public_class_method def self.input_validation(opts = {})
- option_choice = opts[:option_choice]
-
- # Conditions to display cryptum usage
- if option_choice.symbol.nil? && option_choice.list_products.nil?
- usage = true
- reason = :symbol
- end
-
- option_choice.session_root = "#{Dir.home}/cryptum" if option_choice.session_root.nil?
-
- unless Dir.exist?(option_choice.session_root)
- usage = true
- reason = :session_root
- end
-
- option_choice.market_trend_reset = 86_400 if option_choice.market_trend_reset.to_i.zero?
- unless option_choice.market_trend_reset.to_i >= 60 &&
- option_choice.market_trend_reset <= 604_800
- usage = true
- reason = :market_trend_reset
- end
-
- case option_choice.market_trend_reset
- when 604_800
- option_choice.market_trend_reset_label = '1W'
- when 86_400
- option_choice.market_trend_reset_label = '1D'
- when 14_400
- option_choice.market_trend_reset_label = '4h'
- when 10_800
- option_choice.market_trend_reset_label = '3h'
- when 7_200
- option_choice.market_trend_reset_label = '2h'
- when 3_600
- option_choice.market_trend_reset_label = '1h'
- when 2_700
- option_choice.market_trend_reset_label = '45m'
- when 1_800
- option_choice.market_trend_reset_label = '30m'
- when 900
- option_choice.market_trend_reset_label = '15m'
- when 300
- option_choice.market_trend_reset_label = '5m'
- when 180
- option_choice.market_trend_reset_label = '3m'
- when 60
- option_choice.market_trend_reset_label = '1m'
- else
- usage = true
- reason = :market_trend_reset
- end
-
- if usage
- case reason
- when :symbol
- puts "ERROR: --symbol Flag is Required.\n\n"
- when :session_root
- puts "ERROR: #{option_choice.session_root} does not exist.\n\n"
- when :market_trend_reset
- puts "ERROR: #{option_choice.market_trend_reset} - Possible values are: 604_800 || 86_400 || 14_400 || 10_800 || 7_200 || 3_600 || 2_700 || 1_800 || 900 || 300 || 180 || 60\n\n"
- end
-
- puts `#{option_choice.driver_name} --help`
- exit 1
- end
- rescue StandardError => e
- raise e
- end
-
- # List Supported Cryptum Products and Exit
- public_class_method def self.list_products_and_exit(opts = {})
- option_choice = opts[:option_choice]
- env = opts[:env]
-
- puts "\n#{option_choice.driver_name} Supports the Following Products:"
- products = Cryptum::API.get_products(
- option_choice: option_choice,
- env: env
- )
-
- products.map do |product|
- puts product[:id].downcase
- end
-
- exit 0
- rescue StandardError => e
- raise e
- end
-
- # Initialize Cryptum Session Environment
- public_class_method def self.get_env(opts = {})
- option_choice = opts[:option_choice]
-
- yaml_conf_file = "#{option_choice.session_root}/etc/coinbase_pro.yaml"
- yaml_conf = YAML.load_file(
- yaml_conf_file,
- symbolize_names: true
- )
-
- env = yaml_conf[:prod]
- env[:env] = :prod
- env = yaml_conf[:sandbox] if option_choice.sandbox
- env[:env] = :sandbox if option_choice.sandbox
-
- open_ai_yaml_conf_file = "#{option_choice.session_root}/etc/open_ai.yaml"
- if File.exist?(open_ai_yaml_conf_file)
- open_ai_yaml_conf = YAML.load_file(
- open_ai_yaml_conf_file,
- symbolize_names: true
- )
- env[:open_ai_bearer_token] = open_ai_yaml_conf[:bearer_token]
- end
-
- env
- rescue StandardError => e
- raise e
- end
+ require 'cryptum/option/environment'
+ require 'cryptum/option/input_validation'
+ require 'cryptum/option/parser'
# Display a List of Every UI Module
public_class_method def self.help
constants.sort
end