class DependencyInspector::RubyGemfile::Dsl

Attributes

dependencies[RW]

Public Class Methods

evaluate(gemfile) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 14
def self.evaluate(gemfile)
  builder = new
  builder.eval_gemfile(gemfile)
  builder.to_definition
end
new() click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 6
def initialize
  @source               = nil
  @sources              = RubyGemfile::SourceList.new
  @dependencies         = []
  @groups               = []
  @optional_groups      = []
end

Public Instance Methods

eval_gemfile(gemfile) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 20
def eval_gemfile(gemfile)
  if gemfile.is_a?(String)
    instance_eval(gemfile)
  else
    txt = File.open(gemfile, 'rb', &:read)
    instance_eval(txt, gemfile.to_s)
  end
end
gem(name, *args) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 124
def gem(name, *args)
  options = args.last.is_a?(Hash) ? args.pop.dup : {}
  version = args.empty? ? ['>= 0'] : args

  normalize_options(name, version, options)

  dep = RubyGemfile::Dependency.new(name, version, options)
  return if @dependencies.find { |d| d.name == dep.name }

  @dependencies << dep
end
group(*args) { || ... } click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 77
def group(*args, &_blk)
  opts = Hash === args.last ? args.pop.dup : {}
  normalize_group_options(opts, args)

  @groups.concat args

  if opts['optional']
    optional_groups = args - @optional_groups
    @optional_groups.concat optional_groups
  end

  yield
ensure
  args.each { @groups.pop }
end
method_missing(name, *_args) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 58
def method_missing(name, *_args)
  name
  # p "currently #{name} is not supported"
end
normalize_group_options(opts, groups) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 63
def normalize_group_options(opts, groups)
  normalize_hash(opts)

  groups = groups.map { |group| ":#{group}" }.join(', ')
  validate_keys("group #{groups}", opts, %w(optional))

  opts['optional'] ||= false
end
normalize_hash(opts) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 93
def normalize_hash(opts)
  opts.keys.each do |k|
    opts[k.to_s] = opts.delete(k) unless k.is_a?(String)
  end
  opts
end
normalize_options(name, _version, opts) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 100
def normalize_options(name, _version, opts)
  if name.is_a?(Symbol)
    fail Exception, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead.)
  end
  if name =~ /\s/
    fail Exception, %('#{name}' is not a valid gem name because it contains whitespace.)
  end

  normalize_hash(opts)

  groups = @groups.dup
  opts['group'] = opts.delete('groups') || opts['group']
  groups.concat Array(opts.delete('group'))
  groups = [:default] if groups.empty?

  if opts.key?('source')
    source = normalize_source(opts['source'])
    opts['source'] = @sources.add_rubygems_source('remotes' => source)
  end

  opts['source'] ||= @source
  opts['group'] = groups
end
normalize_source(src) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 29
def normalize_source(src)
  case src
  when String
    src
  else
    fail Exception, "unknown source #{src}"
  end
end
source(source, &blk) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 38
def source(source, &blk)
  source = normalize_source(source)
  if block_given?
    with_source(@sources.add_rubygems_sources('remotes' => source), &blk)
  else
    @sources.add_rubygems_sources(source)
  end
end
to_definition() click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 136
def to_definition
  RubyGemfile::Definition.new(@dependencies, @sources)
end
validate_keys(_command, opts, valid_keys) click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 72
def validate_keys(_command, opts, valid_keys)
  invalid_keys = opts.keys - valid_keys
  p 'error' if invalid_keys.any?
end
with_source(source) { || ... } click to toggle source
# File lib/dependency_inspector/ruby_gemfile/dsl.rb, line 47
def with_source(source)
  old_source = @source
  if block_given?
    @source = source
    yield
  end
  source
ensure
  @source = old_source
end