module AgapeRedRecipes::Gemfile
Public Instance Methods
gem(*args)
click to toggle source
# File lib/agape-red-recipes/modules/gemfile.rb, line 25 def gem(*args) options = args.extract_options! name, version = args # Set the message to be shown in logs. Uses the git repo if one is given, # otherwise use name (version). parts, message = [ "'#{name}'" ], name if version ||= options.delete(:version) parts << "'#{version}'" message << " (#{version})" end message = options[:git] if options[:git] log :gemfile, message options.each do |option, value| parts << "#{option}: '#{value}'" end @@installed_gem_names ||= Gem::Specification.map &:name return if @@installed_gem_names.include? name in_root do str = "gem #{parts.join(', ')}" str = " " + str if @in_group str = "\n" + str if @current_group insert_at_end_of_line_containing 'Gemfile', str, "group #{@current_group} do" else append_file 'Gemfile', str, verbose: false end end end
gem_group(*names, &block)
click to toggle source
Calls superclass method
# File lib/agape-red-recipes/modules/gemfile.rb, line 11 def gem_group(*names, &block) name = names.map(&:inspect).join(", ") if gem_group_exists?(*names) @in_group = true @current_group = name instance_eval(&block) @current_group = nil @in_group = false else super(*names, &block) end end
gem_group_exists?(*names)
click to toggle source
# File lib/agape-red-recipes/modules/gemfile.rb, line 3 def gem_group_exists?(*names) name = names.map(&:inspect).join(", ") File.open("Gemfile") do |file| file.read.include? "\ngroup #{name} do" end end
insert_at_end_of_line_containing(file_name, insert, contents)
click to toggle source
# File lib/agape-red-recipes/modules/gemfile.rb, line 61 def insert_at_end_of_line_containing(file_name, insert, contents) open(file_name, 'r+') do |file| while !file.eof? break if file.readline.include? contents end # Move back to the end of the previous line file.seek file.pos - 1 position = file.pos rest_of_file = file.read file.seek position file.write insert file.write rest_of_file end end