Class: EY::Serverside::LockfileParser::Parse10

Inherits:
Parse09 show all
Defined in:
lib/engineyard-serverside/lockfile_parser.rb

Direct Known Subclasses

Parse106

Constant Summary collapse

DEFAULT =
"1.0.10"

Instance Method Summary collapse

Methods inherited from Parse09

#safe_yaml_load

Methods inherited from BaseParser

#initialize

Constructor Details

This class inherits a constructor from EY::Serverside::LockfileParser::BaseParser

Instance Method Details

#fetch_version(bundler_version, version_qualifier) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/engineyard-serverside/lockfile_parser.rb', line 75

def fetch_version(bundler_version, version_qualifier)
  return bundler_version || DEFAULT unless version_qualifier

  case version_qualifier
  when '='
    bundler_version
  when '>='
    Gem::Version.new(bundler_version) > Gem::Version.new(DEFAULT) ? bundler_version : DEFAULT
  when '~>'
    bundler_gem_version = Gem::Version.new(bundler_version)
    recommendation = bundler_gem_version.spermy_recommendation.gsub(/~>\s*(.+)$/, '\1.')
    recommends_default = DEFAULT.index(recommendation) == 0
    default_newer_than_requested = Gem::Version.new(DEFAULT) > bundler_gem_version
    (recommends_default && default_newer_than_requested) ? DEFAULT : bundler_version
  end
end

#parseObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/engineyard-serverside/lockfile_parser.rb', line 48

def parse
  unless @contents.index(/^DEPENDENCIES/)
    return super
  end
  dep_section = ""
  in_dependencies_section = false
  @contents.each_line do |line|
    if line =~ /^DEPENDENCIES/
      in_dependencies_section = true
    elsif line =~ /^\S/
      in_dependencies_section = false
    elsif in_dependencies_section
      dep_section << line
    end
  end

  unless dep_section.length > 0
    raise "Couldn't parse #{@contents}; exiting"
    exit(1)
  end

  result = scan_bundler(dep_section)
  bundler_version = result ? result.last : nil
  version_qualifier = result ? result.first : nil
  [:bundler10, fetch_version(bundler_version, version_qualifier)]
end

#scan_bundler(dep_section) ⇒ Object



92
93
94
# File 'lib/engineyard-serverside/lockfile_parser.rb', line 92

def scan_bundler(dep_section)
  dep_section.scan(/^\s*bundler\s*\((>?=|~>)\s*([^,\)]+)/).first
end