class Kamaze::Project::Tools::Gemspec::Writer::Dependency

Describe dependency as an “Hash“ indexed by type

Sample of use:

“`ruby selector = lambda do |type|

Bundler.environment.dependencies
       .select { |d| d.groups.include?(type) }.to_a

end

dependency = Dependency.new({

runtime: selector.call(:default),
development: selector.call(:development),

})

puts dependency.keep(:runtime).to_s “`

Attributes

spec_name[R]

Public Class Methods

new(dependencies, spec_name = 's') click to toggle source

@param [Hash<Symbol, Gem::Dependency>] dependencies @param [String] spec_name

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 31
def initialize(dependencies, spec_name = 's')
  @dependencies = dependencies.to_h.freeze
  @spec_name = spec_name.to_s
  @keep = [:runtime, :development]
end

Public Instance Methods

keep(*keep) click to toggle source

@return [self]

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 38
def keep(*keep)
  @keep = keep

  self
end
to_a() click to toggle source

Get dependencies array representation.

@return [Array<Gem::Dependency>]

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 76
def to_a
  out = []

  @dependencies.each do |type, gems|
    next unless @keep.include?(type)

    out.concat(gems)
  end

  out
end
to_h() click to toggle source

Get dependencies hash representation.

@return [Hash<Symbol, Gem::Dependency>]

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 47
def to_h
  out = {}
  @dependencies.each do |type, gems|
    next unless @keep.include?(type)

    out[type] = Array.new(gems.clone)
  end

  out
end
to_s() click to toggle source

Get dependencies string representation.

@return [String]

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 61
def to_s
  lines = []

  self.to_h.each do |type, gems|
    gems.each do |gem|
      lines << make_spec_line(gem, type)
    end
  end

  lines.join("\n").rstrip
end

Protected Instance Methods

make_spec_line(gem, type) click to toggle source

@param [Bundler::Dependency] gem @param [String|Symbol] type @return [String]

# File lib/kamaze/project/tools/gemspec/writer/dependency.rb, line 95
def make_spec_line(gem, type)
  '%<spacer>s%<spec_name>s.%<method>s("%<gem>s", %<requirements>s)' % {
    spacer: "\s" * 2,
    spec_name: spec_name,
    method: "add_#{type}_dependency",
    gem: gem.name,
    requirements: gem.requirements_list
  }
end