class Piculet::DSL::EC2::SecurityGroup::Permissions
Public Class Methods
new(context, security_group, direction, &block)
click to toggle source
# File lib/piculet/dsl/permissions.rb, line 9 def initialize(context, security_group, direction, &block) @security_group = security_group @direction = direction @context = context.merge(:direction => direction) @result = {} instance_eval(&block) end
Public Instance Methods
result()
click to toggle source
# File lib/piculet/dsl/permissions.rb, line 17 def result @result.map do |key, perm| protocol, port_range = key OpenStruct.new({ :protocol => protocol, :port_range => port_range, :ip_ranges => perm.ip_ranges, :groups => perm.groups, }) end end
Private Instance Methods
permission(protocol, port_range = nil, &block)
click to toggle source
# File lib/piculet/dsl/permissions.rb, line 31 def permission(protocol, port_range = nil, &block) if port_range if port_range.kind_of?(Integer) port_range = port_range..port_range elsif not port_range.kind_of?(Range) raise TypeError, "SecurityGroup `#{@security_group}`: #{@direction}: can't convert #{port_range} into Range" end end key = [protocol, port_range] res = Permission.new(@context, @security_group, @direction, key, &block).result if @result.has_key?(key) @result[key] = OpenStruct.new(@result[key].marshal_dump.merge(res.marshal_dump) {|hash_key, old_val, new_val| if (duplicated = old_val & new_val).any? log(:warn, "SecurityGroup `#{@security_group}`: #{@direction}: #{key}: #{hash_key}: #{duplicated} are duplicated", :yellow) end old_val | new_val }) else @result[key] = res end end