Class: DRG::Tasks::Pinner

Inherits:
Object
  • Object
show all
Includes:
Log
Defined in:
lib/drg/tasks/pinner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Log

log

Constructor Details

#initialize(type = :full) ⇒ Pinner

Returns a new instance of Pinner.

Parameters:

  • type (Symbol) (defaults to: :full)

    of pin to perform. Available options are [:full, :major, :minor, :patch]



9
10
11
12
# File 'lib/drg/tasks/pinner.rb', line 9

def initialize(type = :full)
  @type = type
  @gemfile = Gemfile.new
end

Instance Attribute Details

#gemfileObject (readonly)

Returns the value of attribute gemfile.



6
7
8
# File 'lib/drg/tasks/pinner.rb', line 6

def gemfile
  @gemfile
end

#typeObject (readonly)

Returns the value of attribute type.



6
7
8
# File 'lib/drg/tasks/pinner.rb', line 6

def type
  @type
end

Instance Method Details

#full(version) ⇒ Object

Types



38
39
40
# File 'lib/drg/tasks/pinner.rb', line 38

def full(version)
  version
end

#major(version) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/drg/tasks/pinner.rb', line 42

def major(version)
  v = version[/(\d+)/, 1]
  if v == '0'
    minor(version)
  else
    "~> #{v}"
  end
end

#minor(version) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/drg/tasks/pinner.rb', line 51

def minor(version)
  v = version[/(\d+\.\d+)/, 1]
  if v == '0.0'
    version
  else
    "~> #{v}"
  end
end

#patch(version) ⇒ Object



60
61
62
# File 'lib/drg/tasks/pinner.rb', line 60

def patch(version)
  "~> #{version}"
end

#performObject



14
15
16
17
18
19
20
21
22
23
# File 'lib/drg/tasks/pinner.rb', line 14

def perform
  log %Q(Pinning Gemfile "#{gemfile.file}")
  ::Bundler.locked_gems.specs.each do |spec|
    gem = gemfile.find_by_name spec.name
    next unless gem
    gemfile.update gem, public_send(type, spec.version.to_s)
    gemfile.write
  end
  log %Q(Done)
end

#unpinObject



25
26
27
28
29
30
31
32
# File 'lib/drg/tasks/pinner.rb', line 25

def unpin
  log %Q(Unpinning Gemfile "#{gemfile.file}")
  ::Bundler.locked_gems.specs.each do |spec|
    gem = gemfile.find_by_name spec.name
    gemfile.remove_version gem if gem
  end
  log %Q(Done)
end