Class: OopRailsServer::Gemfile

Inherits:
Object
  • Object
show all
Defined in:
lib/oop_rails_server/gemfile.rb

Overview

This is not intended to be anything even close to a real Gemfile parser – it is just enough to create/parse the simple Gemfiles we create or that are generated by ‘rails new’.

Instance Method Summary collapse

Constructor Details

#initialize(file_path) ⇒ Gemfile

Returns a new instance of Gemfile.



5
6
7
# File 'lib/oop_rails_server/gemfile.rb', line 5

def initialize(file_path)
  @file_path = File.expand_path(file_path)
end

Instance Method Details

#add_version_constraints!(gem_name, *version_specs) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/oop_rails_server/gemfile.rb', line 9

def add_version_constraints!(gem_name, *version_specs)
  additional_version_constraints = version_specs.map { |vs| ", '#{vs}'" }.join

  update_gemfile_line!(gem_name) do |gemdecl, specs|
    "#{gemdecl}#{additional_version_constraints}#{specs}"
  end
end

#ensure_gem!(gem_name) ⇒ Object



30
31
32
33
34
# File 'lib/oop_rails_server/gemfile.rb', line 30

def ensure_gem!(gem_name)
  update_gemfile_line!(gem_name) do |gemdecl, specs|
    "#{gemdecl}#{specs}"
  end
end

#set_specs!(gem_name, new_specs) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/oop_rails_server/gemfile.rb', line 17

def set_specs!(gem_name, new_specs)
  new_specs_line = new_specs.inspect
  if new_specs_line =~ /^\s*\{\s*(.*?)\s*\}\s*$/
    new_specs_line = $1
  else
    raise "Object doesn't seem to #inspect into a Hash string: #{new_specs.inspect}"
  end

  update_gemfile_line!(gem_name) do |gemdecl, specs|
    "#{gemdecl}, #{new_specs_line}"
  end
end

#write!Object



36
37
38
39
40
# File 'lib/oop_rails_server/gemfile.rb', line 36

def write!
  File.open(file_path, "w") do |f|
    contents.each { |l| f.puts l }
  end
end