Class: Buildr::VersionRequirement
- Defined in:
- lib/buildr/packaging/version_requirement.rb
Overview
See ArtifactNamespace#need
Constant Summary collapse
- CMP_PROCS =
Gem::Requirement::OPS.dup
- CMP_REGEX =
Gem::Requirement::OPS.keys.map { |k| Regexp.quote k }.join "|"
- CMP_CHARS =
CMP_PROCS.keys.join
- BOOL_CHARS =
'\|\&\!'- VER_CHARS =
'\w\.\-'
Instance Attribute Summary collapse
-
#negative ⇒ Object
Returns the value of attribute negative.
Class Method Summary collapse
-
.create(str) ⇒ Object
:call-seq: VersionRequirement.create(“ >1 <2 !(1.5) ”) -> requirement.
-
.requirement?(str) ⇒ Boolean
is
stra version requirement?. -
.version?(str) ⇒ Boolean
is
stra version string?.
Instance Method Summary collapse
-
#&(other) ⇒ Object
Either modify the current requirement (if it’s already an and operation) or create a new requirement.
-
#composed? ⇒ Boolean
Is this object a composed requirement? VersionRequirement.create(‘1’).composed? -> false VersionRequirement.create(‘1 | 2’).composed? -> true VersionRequirement.create(‘1 & 2’).composed? -> true.
-
#default ⇒ Object
Return the last requirement on this object having an = operator.
-
#initialize(op, *requirements) ⇒ VersionRequirement
constructor
:nodoc:.
-
#satisfied_by?(version) ⇒ Boolean
Test if this requirement can be satisfied by
version. -
#to_s ⇒ Object
return the parsed expression.
-
#|(other) ⇒ Object
Either modify the current requirement (if it’s already an or operation) or create a new requirement.
Constructor Details
#initialize(op, *requirements) ⇒ VersionRequirement
:nodoc:
109 110 111 |
# File 'lib/buildr/packaging/version_requirement.rb', line 109 def initialize(op, *requirements) #:nodoc: @op, @requirements = op, requirements end |
Instance Attribute Details
#negative ⇒ Object
Returns the value of attribute negative.
176 177 178 |
# File 'lib/buildr/packaging/version_requirement.rb', line 176 def negative @negative end |
Class Method Details
.create(str) ⇒ Object
:call-seq:
VersionRequirement.create(" >1 <2 !(1.5) ") -> requirement
parse the str requirement
59 60 61 62 63 |
# File 'lib/buildr/packaging/version_requirement.rb', line 59 def create(str) instance_eval normalize(str) rescue StandardError => e raise "Failed to parse #{str.inspect} due to: #{e}" end |
.requirement?(str) ⇒ Boolean
is str a version requirement?
51 52 53 |
# File 'lib/buildr/packaging/version_requirement.rb', line 51 def requirement?(str) /[#{BOOL_CHARS}#{CMP_CHARS}\(\)]/ === str end |
.version?(str) ⇒ Boolean
is str a version string?
46 47 48 |
# File 'lib/buildr/packaging/version_requirement.rb', line 46 def version?(str) /^\s*r?\d[#{VER_CHARS}]*\s*$/ === str end |
Instance Method Details
#&(other) ⇒ Object
Either modify the current requirement (if it’s already an and operation) or create a new requirement
164 165 166 |
# File 'lib/buildr/packaging/version_requirement.rb', line 164 def &(other) operation(:&, other) end |
#composed? ⇒ Boolean
Is this object a composed requirement?
VersionRequirement.create('1').composed? -> false
VersionRequirement.create('1 | 2').composed? -> true
VersionRequirement.create('1 & 2').composed? -> true
117 118 119 |
# File 'lib/buildr/packaging/version_requirement.rb', line 117 def composed? requirements.size > 1 end |
#default ⇒ Object
Return the last requirement on this object having an = operator.
122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/buildr/packaging/version_requirement.rb', line 122 def default default = nil requirements.reverse.find do |r| if Array === r if !negative && (r.first.nil? || r.first.include?('=')) default = r.last.to_s end else default = r.default end end default end |
#satisfied_by?(version) ⇒ Boolean
Test if this requirement can be satisfied by version
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/buildr/packaging/version_requirement.rb', line 137 def satisfied_by?(version) return false unless version unless version.kind_of?(Gem::Version) raise "Invalid version: #{version.inspect}" unless self.class.version?(version) # dup required due to jruby 1.7.13 bug/feature that caches versions? version = Gem::Version.new(0).dup.tap { |v| v.version = version.strip } end = op == :| ? :any? : :all? result = requirements.send do |req| if Array === req cmp, rv = *req CMP_PROCS[cmp || '='].call(version, rv) else req.satisfied_by?(version) end end negative ? !result : result end |
#to_s ⇒ Object
return the parsed expression
169 170 171 172 173 174 |
# File 'lib/buildr/packaging/version_requirement.rb', line 169 def to_s str = requirements.map(&:to_s).join(" " + @op.to_s + " ").to_s str = "( " + str + " )" if negative || requirements.size > 1 str = "!" + str if negative str end |
#|(other) ⇒ Object
Either modify the current requirement (if it’s already an or operation) or create a new requirement
158 159 160 |
# File 'lib/buildr/packaging/version_requirement.rb', line 158 def |(other) operation(:|, other) end |