Class: Kamaze::Project::Tools::Gemspec::Writer

Inherits:
BaseTool show all
Defined in:
lib/kamaze/project/tools/gemspec/writer.rb,
lib/kamaze/project/tools/gemspec.rb

Overview

Class intended to generate gemspec file from a template

Default template filename is gemspec.tpl. Consider to use Dir.chdir in order read and generate contents from the right directory (especially during tests).

Defined Under Namespace

Classes: DepGen, Dependency

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from Kamaze::Project::Tools::BaseTool

Instance Attribute Details

#observer_peersHash|nil (readonly, protected) Originally defined in module Concern::Observable

Returns:

  • (Hash|nil)

#projectKamaze::Project

Returns:

See Also:



30
31
32
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 30

def project
  @project
end

#templatedPathname

Get path (almost filename) to templated gemspec

Returns:

  • (Pathname)


39
40
41
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 39

def templated
  Pathname.new(@templated)
end

Instance Method Details

#contentString

Get generated/templated content

Returns:

  • (String)


93
94
95
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 93

def content
  template.render(templated.to_s, context)
end

#contextHahsh

Get template's context (variables)

Returns:

  • (Hahsh)


80
81
82
83
84
85
86
87
88
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 80

def context
  {
    name: project.name,
    version: project.version,
    dependencies: dependency,
  }.yield_self do |variables|
    project.version.to_h.merge(variables)
  end
end

#dependencyDependency

Get dependency

Returns:



71
72
73
74
75
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 71

def dependency
  require_relative 'writer/dep_gen'

  DepGen.new(spec_id).dependency
end

#deps_genGemspecDepsGen (protected)

Get GemspecDepsGen instance

Returns:

  • (GemspecDepsGen)

See Also:



117
118
119
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 117

def deps_gen
  GemspecDepsGen.new
end

#generatedPathname

Get path (almost filename) to generated gemspec

Returns:

  • (Pathname)


46
47
48
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 46

def generated
  Pathname.new("#{project.name}.gemspec")
end

#mutable_attributesObject



32
33
34
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 32

def mutable_attributes
  [:templated, :project]
end

#setupObject (protected)



108
109
110
111
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 108

def setup
  @templated ||= 'gemspec.tpl'
  @project   ||= Kamaze.project
end

#spec_idString

Get variable used in template for Gem::Specification instantiation

Returns:

  • (String)


61
62
63
64
65
66
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 61

def spec_id
  templated
    .read
    .scan(/Gem::Specification\.new\s+do\s+\|([a-z]+)\|/)
    .flatten.fetch(0)
end

#templateTenjin::Engine (protected)

Get template engine

Returns:

  • (Tenjin::Engine)


124
125
126
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 124

def template
  Tenjin::Engine.new(cache: false)
end

#to_sString

Get string representation

Returns:

  • (String)

See Also:



54
55
56
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 54

def to_s
  generated.to_s
end

#writeself

Write gemspec file

Returns:

  • (self)


100
101
102
103
104
# File 'lib/kamaze/project/tools/gemspec/writer.rb', line 100

def write
  generated.write(content)

  self
end