class Ruth::Gemfile::Hash

Hash parser

Attributes

data[W]
file[RW]
gem[RW]
gemfile[RW]

Public Class Methods

new() click to toggle source
# File lib/ruth/hash.rb, line 10
def initialize
  @gem = []
end

Public Instance Methods

output() click to toggle source

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

detailed_gem_list(hash, format) click to toggle source

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
format_gem_item(gem, format) click to toggle source

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
gem_group(group) click to toggle source

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
gem_inline_item(item, value) click to toggle source

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
gem_list(item, tab = nil) click to toggle source

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
general_list() click to toggle source

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
group_list() click to toggle source

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
parse_gemfile_item() click to toggle source

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
sources() click to toggle source

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
verify_version(version) click to toggle source

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