Class: Gel::GemfileParser::GemfileContent

Inherits:
Object
  • Object
show all
Defined in:
lib/gel/gemfile_parser.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename) ⇒ GemfileContent

Returns a new instance of GemfileContent.



92
93
94
95
96
97
98
# File 'lib/gel/gemfile_parser.rb', line 92

def initialize(filename)
  @filename = filename
  @sources = []
  @git_sources = {}
  @ruby = []
  @gems = []
end

Instance Attribute Details

#filenameObject (readonly)

Returns the value of attribute filename.



84
85
86
# File 'lib/gel/gemfile_parser.rb', line 84

def filename
  @filename
end

#gemsObject (readonly)

Returns the value of attribute gems.



90
91
92
# File 'lib/gel/gemfile_parser.rb', line 90

def gems
  @gems
end

#git_sourcesObject (readonly)

Returns the value of attribute git_sources.



87
88
89
# File 'lib/gel/gemfile_parser.rb', line 87

def git_sources
  @git_sources
end

#rubyObject (readonly)

Returns the value of attribute ruby.



88
89
90
# File 'lib/gel/gemfile_parser.rb', line 88

def ruby
  @ruby
end

#sourcesObject (readonly)

Returns the value of attribute sources.



86
87
88
# File 'lib/gel/gemfile_parser.rb', line 86

def sources
  @sources
end

Instance Method Details

#add_gem(name, requirements, options) ⇒ Object



113
114
115
116
117
118
119
# File 'lib/gel/gemfile_parser.rb', line 113

def add_gem(name, requirements, options)
  return if name == "bundler"
  raise "Only git sources can specify a :branch" if options[:branch] && !options[:git]
  raise "Duplicate entry for gem #{name.inspect}" if @gems.assoc(name)

  @gems << [name, requirements, options]
end

#autorequire(target, gems = self.gems) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/gel/gemfile_parser.rb', line 121

def autorequire(target, gems = self.gems)
  gems.each do |name, _version, options|
    next if options[:require] == false

    if [nil, true].include?(options[:require])
      alt_name = name.include?("-") && name.tr("-", "/")
      if target.gem_has_file?(name, name)
        target.scoped_require name, name
      elsif alt_name && target.gem_has_file?(name, alt_name)
        target.scoped_require name, alt_name
      elsif options[:require] == true
        target.scoped_require name, name
      end
    elsif options[:require].is_a?(Array)
      options[:require].each do |path|
        target.scoped_require name, path
      end
    else
      target.scoped_require name, options[:require]
    end
  end
end

#flatten(options, stack) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/gel/gemfile_parser.rb', line 100

def flatten(options, stack)
  options = options.dup
  stack.reverse_each do |layer|
    options.update(layer) { |_, current, outer| current }
  end
  @git_sources.each do |key, block|
    next unless options.key?(key)
    raise "Multiple git sources specified" if options.key?(:git)
    options[:git] = block.call(options.delete(key))
  end
  options
end