Class: MetricFu::GemVersion
- Inherits:
-
Object
- Object
- MetricFu::GemVersion
- Defined in:
- lib/metric_fu/gem_version.rb
Constant Summary collapse
- GEM_NAME =
regexp from github.com/gemnasium/gemnasium-parser/blob/807d7ccc/lib/gemnasium/parser/patterns.rb#L11
under MIT License
/[a-zA-Z0-9\-_\.]+/
- QUOTED_GEM_NAME =
/(?:(?<gq>["'])(?<name>#{GEM_NAME})\k<gq>|%q<(?<name>#{GEM_NAME})>)/
- MATCHER =
/(?:=|!=|>|<|>=|<=|~>)/
- VERSION =
/[0-9]+(?:\.[a-zA-Z0-9]+)*/
- REQUIREMENT =
/[ \t]*(?:#{MATCHER}[ \t]*)?#{VERSION}[ \t]*/
- REQUIREMENT_LIST =
/(?<qr1>["'])(?<req1>#{REQUIREMENT})\k<qr1>(?:[ \t]*,[ \t]*(?<qr2>["'])(?<req2>#{REQUIREMENT})\k<qr2>)?/
- REQUIREMENTS =
/(?:#{REQUIREMENT_LIST}|\[[ \t]*#{REQUIREMENT_LIST}[ \t]*\])/
- COMMENT =
/(#[^\n]*)?/
- ADD_DEPENDENCY_CALL =
/^[ \t]*\w+\.add(?<type>_runtime|_development)?_dependency\(?[ \t]*#{QUOTED_GEM_NAME}(.freeze)?(?:[ \t]*,[ \t]*#{REQUIREMENTS})?[ \t]*\)?[ \t]*#{COMMENT}$/
- RESOLVER =
new
Class Method Summary collapse
- .activated_gems ⇒ Object
- .activated_version(name) ⇒ Object
- .dependencies ⇒ Object
- .dependencies_summary ⇒ Object
- .dependency_summary(gem_dep) ⇒ Object
- .for(name) ⇒ Object
Instance Method Summary collapse
- #for(name) ⇒ Object
- #gem_runtime_dependencies ⇒ Object
- #gemspec ⇒ Object
-
#initialize ⇒ GemVersion
constructor
A new instance of GemVersion.
- #new_dependency(name, version) ⇒ Object
- #unknown_dependency(name) ⇒ Object
Constructor Details
#initialize ⇒ GemVersion
Returns a new instance of GemVersion.
17 18 19 |
# File 'lib/metric_fu/gem_version.rb', line 17 def initialize @gem_spec = File.open(gemspec, "rb") { |f| f.readlines } end |
Class Method Details
.activated_gems ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/metric_fu/gem_version.rb', line 63 def self.activated_gems if Gem::Specification.respond_to?(:stubs) Gem::Specification.stubs else Gem.loaded_specs.values end.select(&:activated?) end |
.activated_version(name) ⇒ Object
71 72 73 74 75 |
# File 'lib/metric_fu/gem_version.rb', line 71 def self.activated_version(name) activated_gems.find do |gem| return gem.version.version if gem.name == name end end |
.dependencies ⇒ Object
59 60 61 |
# File 'lib/metric_fu/gem_version.rb', line 59 def self.dependencies RESOLVER.gem_runtime_dependencies.dup end |
.dependencies_summary ⇒ Object
86 87 88 89 90 |
# File 'lib/metric_fu/gem_version.rb', line 86 def self.dependencies_summary dependencies.map do |gem_dep| dependency_summary(gem_dep) end end |
.dependency_summary(gem_dep) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/metric_fu/gem_version.rb', line 77 def self.dependency_summary(gem_dep) name = gem_dep.name version = activated_version(gem_dep.name) || gem_dep.requirements_list { "name" => name, "version" => version, } end |
.for(name) ⇒ Object
55 56 57 |
# File 'lib/metric_fu/gem_version.rb', line 55 def self.for(name) RESOLVER.for(name).dup end |
Instance Method Details
#for(name) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/metric_fu/gem_version.rb', line 41 def for(name) name.downcase! dep = gem_runtime_dependencies.find(unknown_dependency(name)) do |gem_dep| gem_dep.name == name end dep.requirements_list end |
#gem_runtime_dependencies ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/metric_fu/gem_version.rb', line 29 def gem_runtime_dependencies @gem_runtime_dependencies ||= begin @gem_spec.grep(/add_dependency|add_runtime/).map do |line| match = line.match(ADD_DEPENDENCY_CALL) name = match["name"].downcase.sub("metric_fu-", "") version = [match["req1"], match["req2"]].compact new_dependency(name, version) end.compact << new_dependency("rcov", ["~> 0.8"]) end end |
#gemspec ⇒ Object
21 22 23 |
# File 'lib/metric_fu/gem_version.rb', line 21 def gemspec File.join(MetricFu.root_dir, "metric_fu.gemspec") end |
#new_dependency(name, version) ⇒ Object
25 26 27 |
# File 'lib/metric_fu/gem_version.rb', line 25 def new_dependency(name, version) Gem::Dependency.new(name, version, :runtime) end |
#unknown_dependency(name) ⇒ Object
50 51 52 |
# File 'lib/metric_fu/gem_version.rb', line 50 def unknown_dependency(name) -> { new_dependency(name, [">= 0"]) } end |