require 'date'
module HelixWebServices
# Displays the information stored in the `p4 protect` command.
class Protections
# Each item in the protections array is a line in the protections table, and is split into five columns.\n\n1. Access level or mode.\nOne of the access levels list, read, open, write, admin, super, review; or one of the rights =read, =open, =write, and =branch,\n\n2. Either `user` or `group`, to indicate what's identified by this entry.\n\n3. The group name or user name.\nTo grant permission to all users, use a wildcard with just an asterix symbol.\n\n4. The IP address of the client host.\n\n5. The depot file path, which can contain wildcards.\nTo exclude this mapping from the permission set, use a dash `-` as the first character of this value.\n\nIPv6 addresses and IPv4 addresses are also supported.\nYou can use the * wildcard to refer to all IP addresses, but only when you are not using CIDR notation.\n\nIf you use the * wildcard with an IPv6 address, you must enclose the entire IPv6 address in square brackets.\nFor example, [2001:db8:1:2:*] is equivalent to [2001:db8:1:2::]/64.\nBest practice is to use CIDR notation, surround IPv6 addresses with brackets, and to avoid the * wildcard.\n\nHow the system forms host addresses depends on the setting of the dm.proxy.protects variable.\nBy default, this variable is set to 1.\nThis means that if the client host uses some intermediary (proxy, broker, replica) to access the server, the proxy- prefix is prepended to the client host address to indicate that the connection is not direct.\nIf you specify proxy-* for the Host field, that will affect all connections made via proxies, brokers, and replicas. A value like proxy-10.0.0.5 identifies a client machine with an IP address of 10.0.0.5 that is connected to the server through an intermediary.\n\nSetting the dm.proxy.protects variable to 0, removes the proxy- prefix and allows you to write a single set of protection entries that apply both to directly-connected clients as well as to those that connect via an intermediary.\nThis is more convenient but less secure if it matters that a connection is made using an intermediary. If you use this setting, all intermediaries must be at release 2012.1 or higher.
attr_accessor :protections
# Attribute mapping from ruby-style variable name to JSON key.
def self.attribute_map
{
:'protections' => :'protections'
}
end
# Attribute type mapping.
def self.swagger_types
{
:'protections' => :'Array<String>'
}
end
def initialize(attributes = {})
return unless attributes.is_a?(Hash)
# convert string to symbol for hash key
attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
if attributes[:'protections']
if (value = attributes[:'protections']).is_a?(Array)
self.protections = value
end
end
end
# Check equality by comparing each attribute.
def ==(o)
return true if self.equal?(o)
self.class == o.class &&
protections == o.protections
end
# @see the `==` method
def eql?(o)
self == o
end
# Calculate hash code according to all attributes.
def hash
[protections].hash
end
# build the object from hash
def build_from_hash(attributes)
return nil unless attributes.is_a?(Hash)
self.class.swagger_types.each_pair do |key, type|
if type =~ /^Array<(.*)>/i
if attributes[self.class.attribute_map[key]].is_a?(Array)
self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
else
#TODO show warning in debug mode
end
elsif !attributes[self.class.attribute_map[key]].nil?
self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
else
# data not found in attributes(hash), not an issue as the data can be optional
end
end
self
end
def _deserialize(type, value)
case type.to_sym
when :DateTime
DateTime.parse(value)
when :Date
Date.parse(value)
when :String
value.to_s
when :Integer
value.to_i
when :Float
value.to_f
when :BOOLEAN
if value.to_s =~ /^(true|t|yes|y|1)$/i
true
else
false
end
when /\AArray<(?<inner_type>.+)>\z/
inner_type = Regexp.last_match[:inner_type]
value.map { |v| _deserialize(inner_type, v) }
when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
k_type = Regexp.last_match[:k_type]
v_type = Regexp.last_match[:v_type]
{}.tap do |hash|
value.each do |k, v|
hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
end
end
when :Object
value
else # model
_model = HelixWebServices.const_get(type).new
_model.build_from_hash(value)
end
end
def to_s
to_hash.to_s
end
# to_body is an alias to to_body (backward compatibility))
def to_body
to_hash
end
# return the object in the form of hash
def to_hash
hash = {}
self.class.attribute_map.each_pair do |attr, param|
value = self.send(attr)
next if value.nil?
hash[param] = _to_hash(value)
end
hash
end
# Method to output non-array value in the form of hash
# For object, use to_hash. Otherwise, just return the value
def _to_hash(value)
if value.is_a?(Array)
value.compact.map{ |v| _to_hash(v) }
elsif value.is_a?(Hash)
{}.tap do |hash|
value.each { |k, v| hash[k] = _to_hash(v) }
end
elsif value.respond_to? :to_hash
value.to_hash
else
value
end
end
end
end