Module: IronWorkerNG::Feature::Ruby::MergeGem::InstanceMethods

Included in:
Code::Ruby
Defined in:
lib/iron_worker_ng/feature/ruby/merge_gem.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#merge_gem_reqsObject (readonly)

Returns the value of attribute merge_gem_reqs.



53
54
55
# File 'lib/iron_worker_ng/feature/ruby/merge_gem.rb', line 53

def merge_gem_reqs
  @merge_gem_reqs
end

Class Method Details

.included(base) ⇒ Object



98
99
100
# File 'lib/iron_worker_ng/feature/ruby/merge_gem.rb', line 98

def self.included(base)
  IronWorkerNG::Code::Base.register_feature(:name => 'merge_gem', :for_klass => base, :args => 'NAME[,VERSION]')
end

Instance Method Details

#merge_gem(name, version = '>= 0') ⇒ Object Also known as: gem



55
56
57
58
59
60
# File 'lib/iron_worker_ng/feature/ruby/merge_gem.rb', line 55

def merge_gem(name, version = '>= 0')
  IronCore::Logger.info 'IronWorkerNG', "Adding ruby gem dependency with name='#{name}' and version='#{version}'"

  @merge_gem_reqs ||= []
  @merge_gem_reqs << Bundler::Dependency.new(name, version.split(', '))
end

#merge_gem_fixateObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/iron_worker_ng/feature/ruby/merge_gem.rb', line 64

def merge_gem_fixate
  IronCore::Logger.info 'IronWorkerNG', 'Fixating gems dependencies'

  @merge_gem_reqs ||= []

  @features.reject! do |f|
    f.class == IronWorkerNG::Feature::Ruby::MergeGem::Feature
  end

  if @merge_gem_reqs.length > 0
    reqs = @merge_gem_reqs.map { |req| Bundler::DepProxy.new(req, Gem::Platform::RUBY) }

    source = nil
    begin
      source = Bundler::Source::Rubygems.new
    rescue Bundler::GemfileNotFound
      ENV['BUNDLE_GEMFILE'] = 'Gemfile'
      source = Bundler::Source::Rubygems.new
    end

    index = Bundler::Index.build { |index| index.use source.specs }

    spec_set = Bundler::Resolver.resolve(reqs, index)

    spec_set.to_a.each do |spec|
      spec.__materialize__

      IronCore::Logger.info 'IronWorkerNG', "Merging ruby gem with name='#{spec.name}' and version='#{spec.version}'"

      @features << IronWorkerNG::Feature::Ruby::MergeGem::Feature.new(self, spec)
    end
  end
end