class MixinBot::CLI

Constants

UI

github.com/Shopify/cli-ui

Attributes

api[R]
config[R]

Public Class Methods

exit_on_failure?() click to toggle source
# File lib/mixin_bot/cli.rb, line 85
def self.exit_on_failure?
  true
end
new(*args) click to toggle source
Calls superclass method
# File lib/mixin_bot/cli.rb, line 22
def initialize(*args)
  super
  if File.exist? options[:config].to_s
    @config =
      begin
        YAML.load_file options[:config]
      rescue StandardError => e
        log UI.fmt(
          format(
            '{{x}} %<file>s is not a valid .yml file',
            file: options[:config]
          )
        )
        UI::Frame.open('{{x}}', color: :red) do
          log e
        end
      end
  elsif options[:config]
    @confg =
      begin
        JSON.parse options[:config]
      rescue StandardError => e
        log UI.fmt(
          format(
            '{{x}} Failed to parse %<config>s',
            config: options[:config]
          )
        )
        UI::Frame.open('{{x}}', color: :red) do
          log e
        end
      end
  end

  return unless @config

  MixinBot.api_host = options[:apihost]
  @api ||=
    begin
      MixinBot::API.new(
        client_id: @config['client_id'],
        client_secret: @config['client_secret'],
        session_id: @config['session_id'],
        pin_token: @config['pin_token'],
        private_key: @config['private_key'],
        pin_code: @config['pin_code']
      )
    rescue StandardError => e
      log UI.fmt '{{x}}: Failed to initialize api, maybe your config is incorrect.'
      UI.Frame.open('{{x}}', color: :red) do
        log e
      end
    end
end

Public Instance Methods

all_multisigs() click to toggle source
# File lib/mixin_bot/cli/multisig.rb, line 7
def all_multisigs
  api_method(:get_all_multisigs)
end
cal_assets_as_usd() click to toggle source
# File lib/mixin_bot/cli/me.rb, line 19
def cal_assets_as_usd
  assets, success = read_assets
  return unless success

  sum = assets['data'].map(
    &lambda { |asset|
       asset['balance'].to_f * asset['price_usd'].to_f
     }
  ).sum
  UI::Frame.open('USD') do
    log sum
  end
end
read_asset() click to toggle source
# File lib/mixin_bot/cli/me.rb, line 36
def read_asset
  api_method(:read_asset, options[:assetid])
end
read_assets() click to toggle source
# File lib/mixin_bot/cli/me.rb, line 13
def read_assets
  api_method(:read_assets)
end
read_me() click to toggle source
# File lib/mixin_bot/cli/me.rb, line 7
def read_me
  api_method(:read_me)
end
version() click to toggle source
# File lib/mixin_bot/cli.rb, line 81
def version
  log MixinBot::VERSION
end

Private Instance Methods

api_method(method, *args, **params) click to toggle source
# File lib/mixin_bot/cli.rb, line 91
def api_method(method, *args, **params)
  if api.nil?
    log UI.fmt '{{x}} MixinBot api not initialized!'
    return
  end

  res = if args.empty? && params.empty?
          api&.public_send method
        elsif args.empty? && !params.empty?
          api&.public_send method params
        elsif !args.empty? && params.empty?
          api&.public_send method, args
        else
          args.push params
          api&.public_send method, args
        end
  log res

  [res, res && res['error'].nil?]
rescue MixinBot::Errors => e
  UI::Frame.open('{{x}}', color: :red) do
    log e
  end
end
log(obj) click to toggle source
# File lib/mixin_bot/cli.rb, line 116
def log(obj)
  if options[:pretty]
    if obj.is_a? String
      puts obj
    else
      ap obj
    end
  else
    puts obj.inspect
  end
end