class Kamaze::Project::Tools::Gemspec::Reader::Decorator

Decorator for “Gem::Specification“

@note Decorator is not recursive

Attributes

spec[R]

@return [Gem::Specification]

Public Class Methods

new(spec) click to toggle source

@param [Gem::Specification] spec

# File lib/kamaze/project/tools/gemspec/reader/decorator.rb, line 17
def initialize(spec)
  @spec = spec
end

Public Instance Methods

to(type) click to toggle source

Decorate specification to a given type

@param [Class|symbol] type @return [Object]

@raise [ArgumentError] @see methods

# File lib/kamaze/project/tools/gemspec/reader/decorator.rb, line 28
def to(type)
  method = methods_mapping.fetch(type)
rescue KeyError
  raise ArgumentError, "invalid type: #{type}"
else
  self.__send__(method)
end

Protected Instance Methods

decorate_to_hash() click to toggle source

Decorate to obtain a “Hash“

@return [Hash]

# File lib/kamaze/project/tools/gemspec/reader/decorator.rb, line 57
def decorate_to_hash
  result = {}

  spec.instance_variables.each do |k|
    k = k.to_s.gsub(/^@/, '').to_sym

    result[k] = spec.__send__(k) if spec.respond_to?(k)
  end

  result
end
decorate_to_ostruct() click to toggle source

Decorate to obtain an “OpenStruct“

@return [OpenStruct]

# File lib/kamaze/project/tools/gemspec/reader/decorator.rb, line 72
def decorate_to_ostruct
  OpenStruct.new(decorate_to_h)
end
methods_mapping() click to toggle source

Provides methods mapping

@return [Hash]

# File lib/kamaze/project/tools/gemspec/reader/decorator.rb, line 44
def methods_mapping
  {
    Hash => :decorate_to_hash,
    hash: :decorate_to_hash,
    OpenStruct => :decorate_to_ostruct,
    ostruct: :decorate_to_ostruct,
    open_struct: :decorate_to_ostruct,
  }
end