Module: FreezerMode

Included in:
Freezer
Defined in:
lib/merb-freezer/freezer_mode.rb

Instance Method Summary collapse

Instance Method Details

#create_freezer_dir(path) ⇒ Object



90
91
92
93
94
95
# File 'lib/merb-freezer/freezer_mode.rb', line 90

def create_freezer_dir(path)
  unless File.directory?(path)
    puts "Creating freezer directory ..."
    FileUtils.mkdir_p(path)
  end
end

#gitmodulesObject



12
13
14
# File 'lib/merb-freezer/freezer_mode.rb', line 12

def gitmodules
  File.join(Dir.pwd, ".gitmodules")
end

#install_rubygem(gem, version = nil) ⇒ Object

Install a gem - looks remotely and locally won’t process rdoc or ri options.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/merb-freezer/freezer_mode.rb', line 65

def install_rubygem(gem, version = nil)
  Gem.configuration.update_sources = false
  Gem.clear_paths
  installer = Gem::DependencyInstaller.new(:install_dir => freezer_dir)
  exception = nil
  begin
    installer.install gem, version
  rescue Gem::InstallError => e
    exception = e
  rescue Gem::GemNotFoundException => e
    puts "Locating #{gem} in local gem path cache..."
    spec = version ? Gem.cache.find_name(gem, "= #{version}").first : Gem.cache.find_name(gem).sort_by { |g| g.version }.last
    if spec && File.exists?(gem_file = spec.installation_path / 'cache' / "#{spec.full_name}.gem")
      installer.install gem_file
    end
    exception = e
  end
  if installer.installed_gems.empty? && e
    puts "Failed to install gem '#{gem}' (#{e.message})"
  end
  installer.installed_gems.each do |spec|
    puts "Successfully installed #{spec.full_name}"
  end
end

#rubygems_freezeObject

Uses rubygems to freeze the components locally



54
55
56
57
58
59
60
61
# File 'lib/merb-freezer/freezer_mode.rb', line 54

def rubygems_freeze
  create_freezer_dir(freezer_dir)
  puts "Install #{@component} and dependencies from rubygems"
  if File.exist?(freezer_dir) && !File.writable?("#{freezer_dir}/cache")
    puts "you might want to CHOWN the gems folder so it's not owned by root: sudo chown -R #{`whoami`} #{freezer_dir}"
  end
  install_rubygem @component
end

#submodules_freezeObject

Uses the Git submodules to freeze a component



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/merb-freezer/freezer_mode.rb', line 18

def submodules_freeze
  # Ensure that required git commands are available
  %w(git-pull git-submodule).each do |bin|
    next if in_path?(bin)
    $stderr.puts "ERROR: #{bin} must be avaible in PATH - you might want to freeze using MODE=rubygems"
    exit 1
  end

  # Create directory to receive the frozen components
  create_freezer_dir(freezer_dir)

  if managed?(@component)
    puts "#{@component} seems to be already managed by git-submodule."
    if @update
      puts "Trying to update #{@component} ..."
      `cd #{freezer_dir}/#{@component} && git-pull`
    else
      puts "you might want to call this rake task using UPDATE=true if you wish to update the frozen gems using this task"
    end
  else
    puts "Creating submodule for #{@component} ..."
    if framework_component?
      `cd #{Dir.pwd} & git-submodule --quiet add #{Freezer.components[@component.gsub("merb-", '')]} #{File.basename(freezer_dir)}/#{@component}`
    else
      `cd #{Dir.pwd} & git-submodule --quiet add #{@component} gems/submodules/#{@component.match(/.*\/(.*)\..{3}$/)[1]}`
    end
    if $?.success?
      `git-submodule init`
    else
      # Should this instead be a raise?
      $stderr.puts("ERROR: unable to create submodule for #{@component} - you might want to freeze using MODE=rubygems (make sure the current project has a git repository)")
    end
  end
end

#sudoObject



7
8
9
10
# File 'lib/merb-freezer/freezer_mode.rb', line 7

def sudo
  windows = (PLATFORM =~ /win32|cygwin/) rescue nil
  sudo = windows ? "" : "sudo"
end