Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
fortinet / lib / fortinet / firewallgroup.rb
Size: Mime:
# frozen_string_literal: true

module Fortinet
  # Represents a firewall address group
  class FirewallGroup
    def initialize(data)
      @data = data
    end

    def self.all
      Fortinet.do('get', '/api/v2/cmdb/firewall/addrgrp')['results'].map { |data| new(data) }
    end

    def self.get(name)
      data = Fortinet.do('get', "/api/v2/cmdb/firewall/addrgrp/#{name}")['results'].first
      new(data)
    rescue RestClient::NotFound
      nil
    end

    def self.create(name)
      Fortinet.do('post', '/api/v2/cmdb/firewall/addrgrp', { 'name' => name, 'member' => [{ 'name' => 'none' }] })
      get(name)
    end

    def delete
      Fortinet.do('delete', "/api/v2/cmdb/firewall/addrgrp/#{@data['name']}")
    end

    def details
      @data
    end

    def set(what, value)
      Fortinet.do('put', "/api/v2/cmdb/firewall/addrgrp/#{@data['name']}", { 'name' => @data['name'], what => value })
    end

    def name
      @data['name']
    end

    def members
      @data['member'].map { |m| FirewallObject.get(m['name']) }
    end

    def members=(members)
      if members.empty?
        set('member', [{ 'name' => 'none' }])
      else
        set('member', members.map { |m| Hash['name', m.is_a?(FirewallObject) || m.is_a?(FirewallGroup) ? m.name : m] })
      end
    end

    # Meta program up some nice methods
    ['comment'].each do |property|
      define_method property do
        @data[property]
      end

      define_method "#{property}=" do |value|
        set(property, value)
      end
    end
  end
end