class Ruth::Gemfile::Hash
Hash
parser
Attributes
Public Class Methods
# File lib/ruth/hash.rb, line 10 def initialize @gem = [] end
Public Instance Methods
Public - Generate Gemfile
contents
Returns Array
# File lib/ruth/hash.rb, line 17 def output parse_gemfile_item @gem.join("\n") end
Private Instance Methods
Private - Generate “gem” line depending onthe provided options
hash - Hash
Gem definition format - true/false states if tabbed formatting should be added
Returns Array
# File lib/ruth/hash.rb, line 86 def detailed_gem_list(hash, format) items = [] hash.keys.map do |key| case key when :name then items << format_gem_item(hash[key], format) when :version then items << verify_version(hash[key]) when :group then items << gem_group else items << gem_inline_item(key, hash[key]) end end items.join(', ') end
Private - Outputs gem line formatted or not
gem - String gem line formatting - true/false
Returns String
# File lib/ruth/hash.rb, line 105 def format_gem_item(gem, format) if format " gem '#{gem}'" else "gem '#{gem}'" end end
Private - Check kind of group we hav
group - Array or String of groups where gem belongs
Returns String
# File lib/ruth/hash.rb, line 128 def gem_group(group) if group.kind_of?(String) "group :#{group} do" elsif group.kind_of?(Array) ":group [#{group.join(', ')}]" end end
Private - Return String for Gem line of additional options
item - String name of the definition value - String value to assing
Return String
# File lib/ruth/hash.rb, line 119 def gem_inline_item(item, value) ":#{item} => '#{value}'" end
Private - Create gem listing from a provided Array or Hash
item - Array or Hash
gem list tab - nil/true add tab indentation
Returns nil
# File lib/ruth/hash.rb, line 72 def gem_list(item, tab = nil) item.key?(:name) rescue NoMethodError @gem << format_gem_item(item, tab) else @gem << detailed_gem_list(item, tab) end
Private - Generate gem list depending on type
Returns nil
# File lib/ruth/hash.rb, line 51 def general_list @data[:general].each { |g| gem_list(g) } end
Private - Generate gem group
Returns nil
# File lib/ruth/hash.rb, line 58 def group_list @data[:group].each do |group| @gem << gem_group(group[:group_name]) group[:gems].each { |item| gem_list(item, true) } @gem << "end\n" end end
Private - Go trough provided keys and generate output
Returns nil
# File lib/ruth/hash.rb, line 27 def parse_gemfile_item @data.keys.map do |key| case key when :source then sources when :general then general_list when :group then group_list end end end
Private - Fill in source list
Returns nil
# File lib/ruth/hash.rb, line 40 def sources case @data[:source] when String then gem << "source '#{@data[:source]}" when Array then @data[:source].each { |h| @gem << "source '#{h}'" } end @gem << '' end
Private - Check if version key data syntax is correct
version - String
Returns String
# File lib/ruth/hash.rb, line 141 def verify_version(version) ver = [/>=/, /~>/, /</].any? { |w| w =~ version } if ver "'#{version}'" else fail "Please provide correct version: ~> #{hash[:version]} / >= \ #{hash[:version]}" end end