Class: EY::Serverside::DependencyManager::BundlerLock::Lockfile

Inherits:
Object
  • Object
show all
Defined in:
lib/engineyard-serverside/dependency_manager/bundler_lock.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lockfile_contents, default = EY::Serverside::DependencyManager::Bundler.default_version) ⇒ Lockfile

Returns a new instance of Lockfile.



64
65
66
67
68
69
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 64

def initialize(lockfile_contents, default = EY::Serverside::DependencyManager::Bundler.default_version)
  @contents = lockfile_contents
  @default = default
  @default_gem_version = Gem::Version.new(@default)
  parse
end

Instance Attribute Details

#bundler_versionObject (readonly)

Returns the value of attribute bundler_version.



62
63
64
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 62

def bundler_version
  @bundler_version
end

Instance Method Details

#any_database_adapter?Boolean

Returns:

  • (Boolean)


84
85
86
87
88
89
90
91
92
93
94
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 84

def any_database_adapter?
  any_ruby_adapter = %w[mysql2 mysql do_mysql pg do_postgres].any? do |type|
    @contents.index(/^\s+#{type}\s\([^\)]+\)$/)
  end

  any_jruby_adapter = %w[mysql postgresql postgres].any? do |type|
    @contents.index(/^\s+jdbc-#{type}\s\([^\)]+\)$/) || @contents.index(/^\s+activerecord-jdbc#{type}-adapter\s\([^\)]+\)$/)
  end

  any_ruby_adapter || any_jruby_adapter
end

#dependencies_sectionObject



126
127
128
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 126

def dependencies_section
  @dependencies_section ||= slice_section('DEPENDENCIES')
end

#fetch_version(operator, version) ⇒ Object



142
143
144
145
146
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 142

def fetch_version(operator, version)
  return version || @default unless operator && version
  req = Gem::Requirement.new(["#{operator} #{version}"])
  req.satisfied_by?(@default_gem_version) ? @default : version
end

#has_ey_config?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 71

def has_ey_config?
  !!@contents.index(/^\s+ey_config\s\([^\)]+\)$/)
end

#parseObject



100
101
102
103
104
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 100

def parse
   ||
    parse_from_dependencies ||
    raise("Malformed or pre bundler-1.0.0 Gemfile.lock: #{@contents[0,50]}...")
end

#parse_from_dependenciesObject



130
131
132
133
134
135
136
137
138
139
140
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 130

def parse_from_dependencies
  section = dependencies_section
  if section.empty?
    return nil
  end

  result = scan_gem('bundler', section)
  bundler_version = result ? result.last : nil
  version_qualifier = result ? result.first : nil
  @bundler_version = fetch_version(version_qualifier, bundler_version)
end

#parse_from_metadataObject



115
116
117
118
119
120
121
122
123
124
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 115

def 
  section = slice_section('METADATA')

  if section.empty?
    return nil
  end

  result = section.scan(/^\s*version:\s*(.*)$/).first
  @bundler_version = result ? result.first : @default
end

#rails_versionObject



75
76
77
78
79
80
81
82
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 75

def rails_version
  section = dependencies_section
  if section.empty?
    return nil
  end
  result = scan_gem('rails', section)
  result ? result.last : nil
end

#scan_gem(gem, dep_section) ⇒ Object



148
149
150
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 148

def scan_gem(gem, dep_section)
  dep_section.scan(/^\s*#{Regexp.escape(gem)}\s*\((>?=|~>)\s*([^,\)]+)/).first
end

#slice_section(header) ⇒ Object



106
107
108
109
110
111
112
113
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 106

def slice_section(header)
  if start = @contents.index(/^#{header}/)
    finish = @contents.index(/(^\S|\Z)/, start + header.length)
    @contents.slice(start..finish)
  else
    ""
  end
end

#uses_sqlite3?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/engineyard-serverside/dependency_manager/bundler_lock.rb', line 96

def uses_sqlite3?
  !any_database_adapter? && @contents.index(/^\s+sqlite3\s\([^\)]+\)$/)
end