Module: ExtBundler

Defined in:
lib/ext_bundler.rb,
lib/ext_bundler/version.rb

Constant Summary collapse

VERSION =
'2.1.0'

Instance Method Summary collapse

Instance Method Details

#_gem_lock(name, *args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/ext_bundler.rb', line 37

def _gem_lock(name, *args)
  @gemfile_lock ||= File.read('Gemfile.lock')
  options = args.last.is_a?(Hash) ? args.pop : {}
  type = options.delete(:type)&.to_sym

  regexes =
    case type
    when :ref
      [
        /^  revision: (\w+)(?:\n  branch: \w+)?\n  specs:\n    #{name} \([\w\.]+\)$/m,
        /^  remote: .*\/#{name}.git\n  revision: (\w+)(?:\n  branch: \w+)?\n  specs:\n/m
      ]
    else
      [/^    #{name} \(([\w\.]+)\)$/]
    end
  version = regexes.lazy.map{ |regex| @gemfile_lock.match(regex) }.reject(&:nil?).first[1]

  case type
  when :ref
    options[:ref] = version
  when :tag
    options[:tag] = "#{name}-v#{version}"
  else
    args.unshift(version)
  end
  args << options

  [name, args]
end

#gem_dev(names, *args) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ext_bundler.rb', line 2

def gem_dev(names, *args)
  if names.is_a? Hash
    @@gem_dev = names
    self.class.send :define_singleton_method, :gem_dev do
      env = defined?(Rails.env) ? Rails.env.to_sym : false
      @@gem_dev.find_all do |_gem, options|
        groups = options[:groups]
        options[:require] && (groups.empty? || groups.include?(env))
      end.map(&:first).each{ |gem| require gem.to_s }
    end
  else
    if File.exist? '.gem-dev'
      @gem_dev_paths ||= File.readlines('.gem-dev').map(&:strip).compact
      path = @gem_dev_paths.lazy.map{ |root| File.expand_path("#{root}/#{names}") }.find{ |path| Dir.exist? path }
    end
    @@gem_dev[names.to_sym] ? gem(names, path: path, require: false) : gem(names, *args)
    options = args.last.is_a?(Hash) ? args.last : {}
    groups = options[:group] ? Array(options[:group]) : options[:groups]
    @@gem_dev[names.to_sym] = {
      require: options[:require].nil?,
      groups: (groups || @groups.dup).map(&:to_sym),
    }
  end
end

#gem_lock(name, *args) ⇒ Object



27
28
29
30
# File 'lib/ext_bundler.rb', line 27

def gem_lock(name, *args)
  name, args = _gem_lock(name, *args)
  gem name, *args
end

#gem_lock_dev(name, *args) ⇒ Object



32
33
34
35
# File 'lib/ext_bundler.rb', line 32

def gem_lock_dev(name, *args)
  name, args = _gem_lock(name, *args)
  gem_dev name, *args
end