lib/active_admin/dependency.rb in activeadmin-1.0.0.pre1 vs lib/active_admin/dependency.rb in activeadmin-1.0.0.pre2
- old
+ new
@@ -1,8 +1,10 @@
module ActiveAdmin
module Dependency
- DEVISE = '~> 3.2'
+ module Requirements
+ DEVISE = '~> 3.2'
+ end
# Provides a clean interface to check for gem dependencies at runtime.
#
# ActiveAdmin::Dependency.draper
# => #<ActiveAdmin::Dependency::Matcher for draper 1.2.1>
@@ -52,41 +54,41 @@
def self.[](name)
Matcher.new name.to_s
end
class Matcher
+ attr_reader :name
+
def initialize(name)
- @name, @spec = name, Gem.loaded_specs[name]
+ @name = name
end
+ def spec
+ @spec ||= Gem.loaded_specs[name]
+ end
+
+ def spec!
+ spec || raise(DependencyError, "To use #{name} you need to specify it in your Gemfile.")
+ end
+
def match?(*reqs)
- !!@spec && Gem::Requirement.create(reqs).satisfied_by?(@spec.version)
+ !!spec && Gem::Requirement.create(reqs).satisfied_by?(spec.version)
end
def match!(*reqs)
- unless @spec
- raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
- end
-
unless match? reqs
- raise DependencyError, "You provided #{@spec.name} #{@spec.version} but we need: #{reqs.join ', '}."
+ raise DependencyError, "You provided #{spec!.name} #{spec!.version} but we need: #{reqs.join ', '}."
end
end
include Comparable
def <=>(other)
- if @spec
- @spec.version <=> Gem::Version.create(other)
- else
- # you'd otherwise get an unhelpful error message:
- # ArgumentError: comparison of ActiveAdmin::Dependency::Matcher with 2 failed
- raise DependencyError, "To use #{@name} you need to specify it in your Gemfile."
- end
+ spec!.version <=> Gem::Version.create(other)
end
def inspect
- info = @spec ? "#{@spec.name} #{@spec.version}" : '(missing)'
+ info = spec ? "#{spec.name} #{spec.version}" : '(missing)'
"<ActiveAdmin::Dependency::Matcher for #{info}>"
end
end
end
end