require 'thor' require 'httparty' module Hsp module Cli class Services < Thor no_commands do def print_services(json) puts "\n#{json['total_results']} total services found." puts "Page #{json['current_page']} of #{json['total_pages']} (Previous: #{json['previous_page'].nil? ? 'N/A' : json['previous_page']}, Next: #{json['next_page'].nil? ? 'N/A' : json['next_page']})" puts "ID\t\t\t\t\tName - Description" puts_bar json['results'].each do |n| puts "#{n['id']}\t#{n['name']} - #{n['description'][0..60]}..." end puts "\n" end def puts_bar puts '--------' * 8 end end desc 'list', 'Lists all available services' option :page, type: :numeric option :per_page, type: :numeric def list m = Marketplace.new query = { page: 1, per_page: 10 } query[:page] = options[:page].to_i if options[:page] query[:per_page] = options[:per_page].to_i if options[:per_page] response = HTTParty.get(m.services_url, query: query, headers: Hsp::Client.headers) json = JSON.parse(response.body) # puts json print_services(json) end desc 'show', 'Print details on a given service' option :service_id, required: true, type: :string def show m = Marketplace.new response = HTTParty.get(m.services_url(options[:service_id]), headers: Hsp::Client.headers) json = JSON.parse(response.body) # puts json puts '' puts json['name'] puts_bar puts json['description'] puts "URI: #{json['uri']}" puts "Support URL: #{json['support_url']}" puts "License: #{json['license_id']}" puts "Created: #{json['created_at']}" puts "Updated: #{json['updated_at']}" puts "Published: #{json['published_at']}" puts '' end end end end