class Gemrat::Gem

Constants

ACTIONS

Attributes

action[RW]
name[RW]
no_version[RW]
valid[RW]
valid?[RW]
version_constraint[RW]

Public Class Methods

new() click to toggle source
# File lib/gemrat/gem.rb, line 12
def initialize
  self.valid = true

  add!
end

Public Instance Methods

add!() click to toggle source
# File lib/gemrat/gem.rb, line 50
def add!
  self.action = ACTIONS.add
end
add?() click to toggle source
# File lib/gemrat/gem.rb, line 54
def add?
  self.action == ACTIONS.add
end
invalid!() click to toggle source
# File lib/gemrat/gem.rb, line 22
def invalid!
  self.valid = false 
end
no_version!() click to toggle source
# File lib/gemrat/gem.rb, line 62
def no_version!
  self.no_version = true
end
no_version?() click to toggle source
# File lib/gemrat/gem.rb, line 58
def no_version?
  no_version
end
skip!() click to toggle source
# File lib/gemrat/gem.rb, line 42
def skip!
  self.action = ACTIONS.skip
end
skip?() click to toggle source
# File lib/gemrat/gem.rb, line 46
def skip?
  self.action == ACTIONS.skip
end
to_s() click to toggle source
# File lib/gemrat/gem.rb, line 18
def to_s
  @output ||= get_output
end
update!() click to toggle source
# File lib/gemrat/gem.rb, line 34
def update!
  self.action = ACTIONS.update
end
update?() click to toggle source
# File lib/gemrat/gem.rb, line 38
def update?
  self.action == ACTIONS.update
end
version() click to toggle source
# File lib/gemrat/gem.rb, line 26
def version
  if platform_dependent?
    platform_dependent_version
  else
    standard_version
  end
end

Private Instance Methods

fetch_all() click to toggle source
# File lib/gemrat/gem.rb, line 144
def fetch_all
  `gem search -r #{name}`
end
find_all() click to toggle source
# File lib/gemrat/gem.rb, line 140
def find_all
  fetch_all.split(/\n/)
end
find_exact_match() click to toggle source
# File lib/gemrat/gem.rb, line 134
def find_exact_match
  find_all.reject do |n|
    /^#{name} / !~ n 
  end.first || raise(NotFound)
end
get_output() click to toggle source
# File lib/gemrat/gem.rb, line 68
def get_output
  if self.no_version? && self.version_constraint
    raise InvalidFlags
  end
  if self.no_version?
    return with_no_version
  elsif self.version_constraint
    return with_version_constraint
  else
    return "gem '#{name}', '#{version}'"
  end
end
normalize_name() click to toggle source
# File lib/gemrat/gem.rb, line 125
def normalize_name
  if no_version?
    normalized = ("gem '" + name + "'")
  else
    normalized = ("gem " + find_exact_match).gsub(/[()]/, "'")
    normalized.gsub(/#{name}/, "'#{name}',")
  end
end
platform_dependent?() click to toggle source
# File lib/gemrat/gem.rb, line 94
def platform_dependent?
  versions.count > 1
end
platform_dependent_version() click to toggle source
# File lib/gemrat/gem.rb, line 113
def platform_dependent_version
  version_for_platform = versions.select do |key, value|
    key.join =~ /#{SYSTEM}/ if key.is_a? Array
  end.values

  if version_for_platform.empty?
    versions[:default].strip
  else
    version_for_platform.first
  end
end
standard_version() click to toggle source
# File lib/gemrat/gem.rb, line 98
def standard_version
  normalize_name.match(/\d[\d\.]+/).to_s
end
versions() click to toggle source
# File lib/gemrat/gem.rb, line 102
def versions
  platform_versions = normalize_name.gsub(/'/,"").split(",")[1..-1]

  hash = {:default => platform_versions.shift}

  platform_versions.inject(hash) do |hash, part|
    hash[part.split(" ")[1..-1]] = part.split(" ").first
    hash
  end
end
with_no_version() click to toggle source
# File lib/gemrat/gem.rb, line 81
def with_no_version
  "gem '#{name}'"
end
with_version_constraint() click to toggle source
# File lib/gemrat/gem.rb, line 85
def with_version_constraint
  case self.version_constraint
  when "optimistic"
    "gem '#{name}', '>= #{version}'"
  when "pessimistic"
    "gem '#{name}', '~> #{version}'"
  end
end