class Bim::Action::Pool

Node class uses by Bim::Subcommands::Node

Constants

POOL_PATH
POOL_URI

Public Class Methods

add_members(name, members) click to toggle source
# File lib/bim/action/pool.rb, line 72
def add_members(name, members)
  members_link = specify_link(POOL_URI, %w[membersReference link]) do |item|
    item['name'] == name
  end

  add_members = []

  members.each do |member|
    if post(URI(sub_localhost(members_link)), { 'name': member }.to_json, false).code == '200'
      add_members.push(member)
    end
  end

  { 'add_members': add_members }
end
create(name, monitor, slow_ramp_time, members) click to toggle source
# File lib/bim/action/pool.rb, line 21
def create(name, monitor, slow_ramp_time, members)
  j = { 'name' => name, 'monitor' => monitor, 'slowRampTime' => slow_ramp_time }
  j['members'] = JSON.parse(members.delete('\\')) unless members.nil?
  post(POOL_URI, j.to_json)
end
disable(name, members) click to toggle source
# File lib/bim/action/pool.rb, line 48
def disable(name, members)
  { 'disabled_members': change_session(name, members, 'user-disabled') }
end
drop_members(name, members) click to toggle source
# File lib/bim/action/pool.rb, line 52
def drop_members(name, members)
  members_link = specify_link(POOL_URI, %w[membersReference link]) do |item|
    item['name'] == name
  end

  drop_members = []

  cond = proc { |item| members.include?(item['name']) }
  JSON.parse(select_map(URI(sub_localhost(members_link)), cond) do |item|
    { 'name': item['name'], 'self_link': sub_localhost(item['selfLink']) }
  end).each do |item|
    next unless yes_or_no?("drop #{item['name']} from #{name}? [y|n]")
    uri = URI.parse(item['self_link'])
    req = request(uri, Bim::AUTH, 'application/json', 'DELETE')
    drop_members.push(item['name']) if http(uri).request(req).code == '200'
  end

  { 'drop_members': drop_members }
end
enable(name, members) click to toggle source
# File lib/bim/action/pool.rb, line 44
def enable(name, members)
  { 'enabled_members': change_session(name, members, 'user-enabled') }
end
ls() click to toggle source
# File lib/bim/action/pool.rb, line 11
def ls
  map(POOL_URI) do |item|
    r = { name: item['name'] }
    r['members'] = JSON.parse(map(URI(sub_localhost(item['membersReference']['link']))) do |in_item|
      { name: in_item['name'], address: in_item['address'] }
    end)
    r
  end
end
members(name) click to toggle source
# File lib/bim/action/pool.rb, line 35
def members(name)
  cond = proc { |item| name == item['name'] }
  select_map(POOL_URI, cond) do |item|
    JSON.parse(map(URI(sub_localhost(item['membersReference']['link']))) do |in_item|
      { name: in_item['name'], address: in_item['address'] }
    end)
  end
end
update(name, monitor, slow_ramp_time, members) click to toggle source
# File lib/bim/action/pool.rb, line 27
def update(name, monitor, slow_ramp_time, members)
  uri = URI(sub_localhost(specify_link_by_name(POOL_URI, name)))
  j = { 'name' => name, 'monitor' => monitor, 'slowRampTime' => slow_ramp_time }
  j['members'] = JSON.parse(members.delete('\\')) unless members.nil?
  req = request(uri, Bim::AUTH, 'application/json', 'PATCH', j.to_json)
  http(uri).request(req).body
end

Private Class Methods

change_session(name, members, session_value) click to toggle source
# File lib/bim/action/pool.rb, line 90
def change_session(name, members, session_value)
  uri = URI(sub_localhost(specify_link_by_name(POOL_URI, name, %w[membersReference link])))

  success_members = []
  cond = proc { |item| members.include?(item['name']) }
  JSON.parse(select_map(uri, cond) do |item|
    { 'name': item['name'], 'self_link': sub_localhost(item['selfLink']) }
  end).each do |item|
    uri = URI.parse(item['self_link'])
    req = request(uri, Bim::AUTH, 'application/json', 'PATCH', { session: session_value }.to_json)
    success_members.push(item['name']) if http(uri).request(req).code == '200'
  end

  success_members
end