class Klimt::Commands::Partner

Constants

CHECK
CROSS
RADIUS

Public Instance Methods

check_locations(partner_id) click to toggle source
# File lib/klimt/commands/partner.rb, line 37
def check_locations(partner_id)
  coords = options.values_at :y, :x
  if coords.any? && !coords.all?
    $stderr.puts 'Must provide both X and Y'
    exit 1
  end
  point = coords.all? ? coords.join(',') : nil
  client = GravityClient.new(env: options[:env])
  response = client.find(type: 'partner', id: partner_id)
  partner = JSON.parse(response)

  # subscriber or institution ?
  if institution?(partner)
    puts "#{CHECK}  Institution"
  elsif gallery?(partner) && current_subscriber?(partner)
    puts "#{CHECK}  Gallery with current subscription"
  else
    puts "#{CROSS}  Neither Institution nor current subscriber Gallery"
    exit 1
  end

  # pubished locations?
  public_count = published_locations_count(partner)
  if public_count.zero?
    puts "#{CROSS}  No publicly viewable locations"
    exit 1
  else
    puts "#{CHECK}  #{public_count} publicly viewable locations"
  end

  return if point.nil?
  # close enough to desired coords?
  near_count = published_locations_count(partner, point: point)
  if near_count.zero?
    puts "#{CROSS}  No publicly viewable locations within #{RADIUS} of #{point}"
    report_distances(partner, point: point)
    exit 1
  else
    puts "#{CHECK}  #{near_count} publicly viewable locations within #{RADIUS} of #{point}"
  end
end
locations(partner_id, *params) click to toggle source
# File lib/klimt/commands/partner.rb, line 14
def locations(partner_id, *params)
  params << 'private=true' if options[:private]
  client = GravityClient.new(env: options[:env])
  response = client.partner_locations(id: partner_id, params: params)
  render response
end
near(*params) click to toggle source
# File lib/klimt/commands/partner.rb, line 26
def near(*params)
  params << "near=#{options[:y]},#{options[:x]}"
  params << 'eligible_for_listing=true' if options[:eligible]
  client = GravityClient.new(env: options[:env])
  response = client.partner_near(params: params)
  render response
end

Private Instance Methods

current_subscriber?(partner) click to toggle source
# File lib/klimt/commands/partner.rb, line 89
def current_subscriber?(partner)
  client = GravityClient.new(env: options[:env])
  params = [
    "partner_id=#{partner['id']}",
    'current=true'
  ]
  response = client.count(type: 'partner_subscriptions', params: params)
  count = response.to_i
  count.positive?
end
institution?(partner) click to toggle source
# File lib/klimt/commands/partner.rb, line 85
def institution?(partner)
  partner['type'] == 'Institution'
end
published_locations_count(partner, point: nil) click to toggle source
# File lib/klimt/commands/partner.rb, line 100
def published_locations_count(partner, point: nil)
  client = GravityClient.new(env: options[:env])
  params = []
  params << "near=#{point}" if point
  response = client.partner_locations_count(id: partner['id'], params: params)
  response.to_i
end
report_distances(partner, point:) click to toggle source
# File lib/klimt/commands/partner.rb, line 118
def report_distances(partner, point:)
  params = ['private=true', 'size=100']
  client = GravityClient.new(env: options[:env])
  response = client.partner_locations(id: partner['id'], params: params)
  locations = JSON.parse(response)
  target_y, target_x = point.split(',').map(&:to_f)
  puts "   Partner location distances from #{target_y}, #{target_x}"
  puts '   ---------------------------------------------------------------------------'
  locations.each do |location|
    name, city, pub = location.values_at 'name', 'city', 'publicly_viewable'
    loc_y, loc_x = location['coordinates'].values_at('lat', 'lng')
    dist = Calculations.spherical_distance([loc_y, loc_x], [target_y, target_x])
    puts '   %20.20s | %15.15s | %4s | %7.1f km | (%+.4f, %+.4f)' % [name, city, (pub ? 'pub' : 'priv'), dist, loc_y, loc_x]
  end
end
unpublished_locations_count(partner, point: nil) click to toggle source
# File lib/klimt/commands/partner.rb, line 108
def unpublished_locations_count(partner, point: nil)
  client = GravityClient.new(env: options[:env])
  params = ['private=true']
  params << "near=#{point}" if point
  response = client.partner_locations_count(id: partner['id'], params: params)
  total_count = response.to_i
  published_count = published_locations_count(partner, point: point)
  (total_count - published_count)
end