Sha256: 94846f222725e905d79c33a21a15f7ea6e9116e1331b5995d3ad65f1b6613184

Contents?: true

Size: 1.44 KB

Versions: 44

Compression:

Stored size: 1.44 KB

Contents

module Awspec
  module BlackListForwardable
    class CalledMethodInBlackList < StandardError
    end

    def method_missing_via_black_list(name, delegate_to: nil)
      raise ArgumentError, 'delegate_to: must be specified' unless delegate_to
      if match_black_list?(name) && !match_white_list?(name)
        raise CalledMethodInBlackList, "Method call #{name.inspect} is black-listed"
      end
      attr = delegate_to.send(name)
      if !attr.is_a?(Struct) && attr.class.name.match(/^Aws::/)
        ResourceReader.new(attr)
      else
        attr
      end
    end

    private

    BLACK_LIST_RE = /
      clear|
      create|delete|put|update|add|
      attach|detach|
      reboot|start|stop|terminate|
      modify|reset|replace|
      authorize|revoke|
      deregister|enable_|remove
    /ix

    def match_black_list?(name)
      BLACK_LIST_RE =~ name
    end

    WHITE_LIST_RE = /password_reset_required|attached_policies/ix

    def match_white_list?(name)
      WHITE_LIST_RE =~ name
    end
  end

  class ResourceReader
    include BlackListForwardable

    def initialize(resource)
      @resource_via_client = resource
    end

    # TODO: this method is specific to DynamoDB and probably should be moved somewhere else
    def describe_time_to_live(*args)
      @resource_via_client.send('describe_time_to_live', *args)
    end

    def method_missing(name)
      method_missing_via_black_list(name, delegate_to: @resource_via_client)
    end
  end
end

Version data entries

44 entries across 44 versions & 3 rubygems

Version Path
awspec-1.25.1 lib/awspec/resource_reader.rb
awspec-1.25.0 lib/awspec/resource_reader.rb
awspec-1.24.4 lib/awspec/resource_reader.rb
awspec-1.24.3 lib/awspec/resource_reader.rb
awspec-1.24.2 lib/awspec/resource_reader.rb
awspec-1.24.1 lib/awspec/resource_reader.rb
awspec-1.24.0 lib/awspec/resource_reader.rb
awspec-1.23.0 lib/awspec/resource_reader.rb
awspec-1.22.1 lib/awspec/resource_reader.rb
awspec-1.22.0 lib/awspec/resource_reader.rb
awspec-1.21.1 lib/awspec/resource_reader.rb
awspec-1.21.0 lib/awspec/resource_reader.rb
awspec-1.20.0 lib/awspec/resource_reader.rb
awspec-1.19.2 lib/awspec/resource_reader.rb
awspec-1.19.1 lib/awspec/resource_reader.rb
awspec-1.19.0 lib/awspec/resource_reader.rb
cthiesfork-awspec-1.2.4 lib/awspec/resource_reader.rb
awspec-api_gateway_extended-1.2.4 lib/awspec/resource_reader.rb
awspec-api_gateway_extended-1.2.3 lib/awspec/resource_reader.rb
awspec-1.18.6 lib/awspec/resource_reader.rb