Class: Prebundler::GemfileSubset

Inherits:
Object
  • Object
show all
Defined in:
lib/prebundler/gemfile_subset.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(gemfile) ⇒ GemfileSubset

Returns a new instance of GemfileSubset.



11
12
13
14
15
16
# File 'lib/prebundler/gemfile_subset.rb', line 11

def initialize(gemfile)
  @gemfile = gemfile
  @included_gems = Set.new
  @additional_gems = []
  @raw = []
end

Instance Attribute Details

#additional_gemsObject (readonly)

Returns the value of attribute additional_gems.



5
6
7
# File 'lib/prebundler/gemfile_subset.rb', line 5

def additional_gems
  @additional_gems
end

#gemfileObject (readonly)

Returns the value of attribute gemfile.



5
6
7
# File 'lib/prebundler/gemfile_subset.rb', line 5

def gemfile
  @gemfile
end

#included_gemsObject (readonly)

Returns the value of attribute included_gems.



5
6
7
# File 'lib/prebundler/gemfile_subset.rb', line 5

def included_gems
  @included_gems
end

#rawObject (readonly)

Returns the value of attribute raw.



5
6
7
# File 'lib/prebundler/gemfile_subset.rb', line 5

def raw
  @raw
end

Class Method Details

.from(*args) ⇒ Object



7
8
9
# File 'lib/prebundler/gemfile_subset.rb', line 7

def self.from(*args)
  new(GemfileInterpreter.interpret(*args))
end

Instance Method Details

#add(gem_name, **params) ⇒ Object



22
23
24
# File 'lib/prebundler/gemfile_subset.rb', line 22

def add(gem_name, **params)
  additional_gems << [gem_name, params]
end

#add_raw(str, group: nil) ⇒ Object



26
27
28
# File 'lib/prebundler/gemfile_subset.rb', line 26

def add_raw(str, group: nil)
  raw << [str, group]
end

#include(gem_name) ⇒ Object



18
19
20
# File 'lib/prebundler/gemfile_subset.rb', line 18

def include(gem_name)
  @included_gems << gem_name
end

#to_gemfile(include_dev_deps: true) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/prebundler/gemfile_subset.rb', line 30

def to_gemfile(include_dev_deps: true)
  deps = aggregate_deps(include_dev_deps)
  groups = group_deps(deps)

  additional_gems.each do |gem_name, params|
    options = params.dup
    version = options.delete(:version)
    group = options.delete(:group)

    requirements = ["gem '#{gem_name}'"]
    requirements << "'#{version}'" if version
    requirements += options.map { |k, v| "#{k}: '#{v}'" }

    groups[group] << requirements.join(', ')
  end

  raw.each do |str, group|
    groups[group] << str
  end

  ''.tap do |result|
    groups.each_with_index do |(remote, _), idx|
      result << "\n" if idx > 0
      result << "source '#{remote}' do\n"
      result << groups[remote].map { |g| "  #{g}" }.join("\n")
      result << "\nend\n"
    end
  end
end