Class: Release::Gem::GemDep

Inherits:
Object
  • Object
show all
Includes:
TR::CondUtils
Defined in:
lib/release/gem/gemdep.rb

Instance Method Summary collapse

Constructor Details

#initialize(root, opts = { }) ⇒ GemDep

Returns a new instance of GemDep.



12
13
14
15
16
17
18
19
# File 'lib/release/gem/gemdep.rb', line 12

def initialize(root, opts = {  })
  @root = root
  @devGems = {}
  @gemConfig = {}
  @fileHistory = {}
  load_gemfile_deps
  load_gemspec_deps
end

Instance Method Details

#all_dev_gems_has_config?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/release/gem/gemdep.rb', line 69

def all_dev_gems_has_config?
  not_configured_gem.length == 0   
end

#configure_gem(name, opts = { type: :runtime, version: "" }) ⇒ Object

Raises:



47
48
49
50
51
52
53
54
55
56
57
# File 'lib/release/gem/gemdep.rb', line 47

def configure_gem(name, opts = { type: :runtime, version: "" })
  raise GemDepError, "Given option to configure the gem is empty" if is_empty?(opts)
  raise GemDepError, "Given option is not a hash. Hash wity keys :type and/or :version (can be empty) is expected" if not opts.is_a?(Hash)
  raise GemDepError, "Production gem type not given. Please provide the gem type via key :type (valid value is either :runtime or :dev)" if is_empty?(opts[:type])

  if @devGems.keys.include?(name.to_s) 
    @gemConfig[name.to_s] = opts
  else
    raise GemDepError, "Name '#{name}' is not in the list of development gems. Valid value including : #{@devGems.keys.join(", ")}"
  end
end

#development_gemObject



43
44
45
# File 'lib/release/gem/gemdep.rb', line 43

def development_gem
  @devGems
end

#has_development_gem?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/release/gem/gemdep.rb', line 39

def has_development_gem?
  not_empty?(@devGems)
end

#load_gemfile_depsObject



21
22
23
24
25
26
27
28
# File 'lib/release/gem/gemdep.rb', line 21

def load_gemfile_deps
  gdef = Bundler::Definition.build(gemfile_file, nil, {})
  gdef.dependencies.each do |d|
    if not d.source.nil? and d.source.path.to_s != "."
      @devGems[d.name] = d.source.path.to_s
    end
  end
end

#load_gemspec_depsObject



30
31
32
33
34
35
36
37
# File 'lib/release/gem/gemdep.rb', line 30

def load_gemspec_deps
  gs = ::Gem::Specification.load(gemspec_file)
  gs.dependencies.each do |d|
    if not d.source.nil? and d.source.path.to_s != "."
      @devGems[d.name] = d.source.path.to_s
    end
  end
end

#not_configured_gemObject



73
74
75
# File 'lib/release/gem/gemdep.rb', line 73

def not_configured_gem
  @devGems.keys.difference(@gemConfig.keys)
end

#restore_dev_gemObject



77
78
79
80
81
82
83
# File 'lib/release/gem/gemdep.rb', line 77

def restore_dev_gem
  @fileHistory.each do |k,v|
    FileUtils.mv(k,"#{k}.prod")
    FileUtils.cp(v,k)
  end
  @fileHistory.clear
end

#transfer_gemObject



59
60
61
62
63
64
65
66
67
# File 'lib/release/gem/gemdep.rb', line 59

def transfer_gem
  if not all_dev_gems_has_config?
    raise GemDepError, "Not all gem has configuration. Gem required configuration includes: #{not_configured_gem.join(", ")}"
  end

  remove_dev_gem_from_gemfile
  add_gem_to_gemspec(@gemConfig)

end