class ShopifyAPIConsole::Console

Public Instance Methods

add(connection) click to toggle source
# File lib/shopify_api_console/console.rb, line 22
def add(connection)
  file = config_file(connection)
  if File.exist?(file)
    raise ConfigFileError, "There is already a config file at #{file}"
  else
    config = {'protocol' => 'https'}
    config['domain']   = ask("Domain? (leave blank for #{connection}.myshopify.com)")
    config['domain']   = "#{connection}.myshopify.com" if config['domain'].blank?
    config['domain']   = "#{config['domain']}.myshopify.com" unless config['domain'].match(/[.:]/)
    puts "\nopen https://#{config['domain']}/admin/apps/private in your browser to create a private app and get API credentials\n"
    config['api_key']  = ask("API key?")
    config['password'] = ask("Password?")
    if ask("Would you like to use pry as your shell? (y/n)") === "y"
      config["shell"] = "pry"
    else
      config["shell"] = "irb"
    end
    create_file(file, config.to_yaml)
  end
  if available_connections.one?
    default(connection)
  end
end
console(connection=nil) click to toggle source
# File lib/shopify_api_console/console.rb, line 102
def console(connection=nil)
  file = config_file(connection)

  config = YAML.load(File.read(file))
  puts "using #{config['domain']}"
  ShopifyAPI::Base.site = site_from_config(config)

  logger = Logger.new(STDOUT)
  logger.level = Logger::WARN
  ActiveResource::Base.logger = logger

  launch_shell(config)
end
default(connection=nil) click to toggle source
# File lib/shopify_api_console/console.rb, line 84
def default(connection=nil)
  if connection
    target = config_file(connection)
    if File.exist?(target)
      remove_file(default_symlink)
      `ln -s #{target} #{default_symlink}`
    else
      no_config_file_error(target)
    end
  end
  if File.exist?(default_symlink)
    puts "Default connection is #{default_connection}"
  else
    puts "There is no default connection set"
  end
end
edit(connection=nil) click to toggle source
# File lib/shopify_api_console/console.rb, line 58
def edit(connection=nil)
  file = config_file(connection)
  if File.exist?(file)
    if ENV['EDITOR'].present?
      system(ENV['EDITOR'], file)
    else
      puts "Please set an editor in the EDITOR environment variable"
    end
  else
    no_config_file_error(file)
  end
end
list() click to toggle source
# File lib/shopify_api_console/console.rb, line 14
def list
  available_connections.each do |c|
    prefix = default?(c) ? " * " : "   "
    puts prefix + c
  end
end
remove(connection) click to toggle source
# File lib/shopify_api_console/console.rb, line 47
def remove(connection)
  file = config_file(connection)
  if File.exist?(file)
    remove_file(default_symlink) if default?(connection)
    remove_file(file)
  else
    no_config_file_error(file)
  end
end
show(connection=nil) click to toggle source
# File lib/shopify_api_console/console.rb, line 72
def show(connection=nil)
  connection ||= default_connection
  file = config_file(connection)
  if File.exist?(file)
    puts file
    puts `cat #{file}`
  else
    no_config_file_error(file)
  end
end

Private Instance Methods

available_connections() click to toggle source
# File lib/shopify_api_console/console.rb, line 160
def available_connections
  @available_connections ||= begin
    pattern = File.join(shop_config_dir, "*.yml")
    Dir.glob(pattern).map { |f| File.basename(f, ".yml") }
  end
end
config_file(connection) click to toggle source
# File lib/shopify_api_console/console.rb, line 130
def config_file(connection)
  if connection
    File.join(shop_config_dir, "#{connection}.yml")
  else
    default_symlink
  end
end
default?(connection) click to toggle source
# File lib/shopify_api_console/console.rb, line 175
def default?(connection)
  default_connection == connection
end
default_connection() click to toggle source
# File lib/shopify_api_console/console.rb, line 171
def default_connection
  @default_connection ||= File.basename(default_connection_target, ".yml")
end
default_connection_target() click to toggle source
# File lib/shopify_api_console/console.rb, line 167
def default_connection_target
  @default_connection_target ||= File.readlink(default_symlink)
end
launch_shell(config) click to toggle source
# File lib/shopify_api_console/console.rb, line 147
def launch_shell(config)
  if config["shell"] === "pry"
    require 'pry'
    ARGV.clear
    Pry.start
  else
    require 'irb'
    require 'irb/completion'
    ARGV.clear
    IRB.start
  end
end
no_config_file_error(filename) click to toggle source
# File lib/shopify_api_console/console.rb, line 179
def no_config_file_error(filename)
  raise ConfigFileError, "There is no config file at #{filename}"
end
shop_config_dir() click to toggle source
# File lib/shopify_api_console/console.rb, line 122
def shop_config_dir
  @shop_config_dir ||= File.join(ENV['HOME'], '.shopify', 'shops')
end
site_from_config(config) click to toggle source
# File lib/shopify_api_console/console.rb, line 138
def site_from_config(config)
  protocol = config['protocol'] || 'https'
  api_key  = config['api_key']
  password = config['password']
  domain   = config['domain']

  ShopifyAPI::Base.site = "#{protocol}://#{api_key}:#{password}@#{domain}/admin"
end