Module: Extensions::GemRequirement
- Defined in:
- lib/baltix/extensions.rb
Constant Summary collapse
- INVALID_DEP =
:nodoc:
["<", Gem::Version.new(0)]
- AND_RELAS =
:nodoc:
{ #:nodoc: [ "=", ">=", 0 ] => ->(l, r) { [["=", l]] }, [ "=", ">=", 1 ] => ->(l, r) { [["=", l]] }, [ "=", "<=", -1 ] => ->(l, r) { [["=", l]] }, [ "=", "<=", 0 ] => ->(l, r) { [["=", l]] }, [ "=", ">", 1 ] => ->(l, r) { [["=", l]] }, [ "=", "<", -1 ] => ->(l, r) { [["=", l]] }, [ "=", "=", 0 ] => ->(l, r) { [["=", l]] }, [ "=", "~>", 0 ] => ->(l, r) { [["=", l]] }, [ "=", "~>", ->(l, r) { l > r && l < r.bump } ] => ->(l, r) { [["=", l]] }, [ "!=", "=", -1 ] => ->(l, r) { [["=", r]] }, [ "!=", "=", 1 ] => ->(l, r) { [["=", r]] }, [ "!=", "!=", -1 ] => ->(l, r) { [["!=", l]] }, [ "!=", "!=", 0 ] => ->(l, r) { [["!=", l]] }, [ "!=", "!=", 1 ] => ->(l, r) { [["!=", l]] }, [ "!=", ">", -1 ] => ->(l, r) { [[">", r]] }, [ "!=", ">", 0 ] => ->(l, r) { [[">", r]] }, [ "!=", ">", 1 ] => ->(l, r) { [[">", r], ["<", l]] }, [ "!=", "<", -1 ] => ->(l, r) { [[">", l], ["<", r]] }, [ "!=", "<", 0 ] => ->(l, r) { [["<", r]] }, [ "!=", "<", 1 ] => ->(l, r) { [["<", r]] }, [ "!=", ">=", -1 ] => ->(l, r) { [[">=", r]] }, [ "!=", ">=", 0 ] => ->(l, r) { [[">", r]] }, [ "!=", ">=", 1 ] => ->(l, r) { [[">=", r], ["<", l]] }, [ "!=", "<=", -1 ] => ->(l, r) { [[">", l], ["<=", r]] }, [ "!=", "<=", 0 ] => ->(l, r) { [["<", r]] }, [ "!=", "<=", 1 ] => ->(̀r, l) { [["<=", r]] }, [ "!=", "~>", -1 ] => ->(l, r) { [[">=", r], ["<", r.bump]] }, [ "!=", "~>", 0 ] => ->(l, r) { [[">", r], ["<", r.bump]] }, [ "!=", "~>", ->(l, r) { l > r && l < r.bump } ] => ->(l, r) { [[">", l], ["<", r.bump]] }, [ "!=", "~>", ->(l, r) { l >= r.bump } ] => ->(l, r) { [[">=", l]] }, [ ">", "=", -1 ] => ->(l, r) { [["=", r]] }, [ ">", "!=", -1 ] => ->(l, r) { [[">", l], ["<", r]] }, [ ">", "!=", 0 ] => ->(l, r) { [[">", l]] }, [ ">", "!=", 1 ] => ->(l, r) { [[">", l]] }, [ ">", ">", -1 ] => ->(l, r) { [[">", [r, l].max]] }, [ ">", ">=", -1 ] => ->(l, r) { [[">=", l]] }, [ ">", ">=", 0 ] => ->(l, r) { [[">", l]] }, [ ">", ">=", 1 ] => ->(l, r) { [[">", l]] }, [ ">", "<=", -1 ] => ->(l, r) { [[">", l], ["<=", r]] }, [ ">", "~>", -1 ] => ->(l, r) { [[">=", l], ["<", r.bump]] }, [ ">", "~>", 0 ] => ->(l, r) { [[">", l], ["<", r.bump]] }, [ ">", "~>", ->(l, r) { l > r && l < r.bump } ] => ->(l, r) { [[">", l], ["<", r.bump]] }, [ ">", "~>", ->(l, r) { l >= r.bump } ] => ->(l, r) { [[">", l]] }, [ "<", "=", 1 ] => ->(l, r) { [["=", r]] }, [ "<", "!=", -1 ] => ->(l, r) { [["<", l]] }, [ "<", "!=", 0 ] => ->(l, r) { [["<", l]] }, [ "<", "!=", 1 ] => ->(l, r) { [[">=", r], ["<", l]] }, [ "<", ">", 1 ] => ->(l, r) { [[">", r], ["<", l]] }, [ "<", "<", nil ] => ->(l, r) { [["<", [r, l].min]] }, [ "<", ">=", 1 ] => ->(l, r) { [[">=", r], ["<", l]] }, [ "<", "~>", 1 ] => ->(l, r) { [[">=", r], ["<", [l, r.bump].min]] }, [ ">=", "=", -1 ] => ->(l, r) { [["=", r]] }, [ ">=", "=", 0 ] => ->(l, r) { [["=", r]] }, [ ">=", "!=", -1 ] => ->(l, r) { [[">=", l], ["<", r]] }, [ ">=", "!=", 0 ] => ->(l, r) { [[">", l]] }, [ ">=", "!=", 1 ] => ->(l, r) { [[">=", l]] }, [ ">=", ">", -1 ] => ->(l, r) { [[">", r]] }, [ ">=", ">", 0 ] => ->(l, r) { [[">", r]] }, [ ">=", ">", 1 ] => ->(l, r) { [[">=", l]] }, [ ">=", "<", -1 ] => ->(l, r) { [[">=", l], ["<", r]] }, [ ">=", ">=", nil ] => ->(l, r) { [[">=", [r, l].max]] }, [ ">=", "<=", -1 ] => ->(l, r) { [[">=", l], ["<=", r]] }, [ ">=", "<=", 0 ] => ->(l, r) { [["=", l]] }, [ ">=", "~>", ->(l, r) { l < r.bump } ] => ->(l, r) { [[">=", [r, l].max], ["<", r.bump]] }, [ "<=", "=", 0 ] => ->(l, r) { [["=", r]] }, [ "<=", "=", 1 ] => ->(l, r) { [["=", r]] }, [ "<=", "!=", -1 ] => ->(l, r) { [["<=", l]] }, [ "<=", "!=", 0 ] => ->(l, r) { [["<=", l]] }, [ "<=", "!=", 1 ] => ->(l, r) { [[">", r], ["<=", l]] }, [ "<=", ">", 1 ] => ->(l, r) { [[">", r], ["<=", l]] }, [ "<=", "<", -1 ] => ->(l, r) { [["<=", l]] }, [ "<=", "<", 0 ] => ->(l, r) { [["<", l]] }, [ "<=", "<", 1 ] => ->(l, r) { [["<", r]] }, [ "<=", ">=", 0 ] => ->(l, r) { [["=", l]] }, [ "<=", ">=", 1 ] => ->(l, r) { [[">=", r], ["<=", l]] }, [ "<=", "~>", ->(l, r) { r.bump > l } ] => ->(l, r) { [[">=", r], ["<", r.bump]] }, [ "<=", "~>", ->(l, r) { r >= l && r.bump <= l } ] => ->(l, r) { [[">=", r], ["<=", l]] }, [ "~>", "=", 0 ] => ->(l, r) { [["=", r]] }, [ "~>", "=", ->(l, r) { l.bump > r } ] => ->(l, r) { [["=", r]] }, [ "~>", "!=", ->(l, r) { l.bump >= r } ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", "!=", ->(l, r) { l > r && l.bump < r } ] => ->(l, r) { [[">=", l], ["<", r]] }, [ "~>", "!=", 0 ] => ->(l, r) { [[">", l], ["<", l.bump]] }, [ "~>", "!=", 1 ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", ">", ->(l, r) { l < r && l.bump >= r } ] => ->(l, r) { [[">", r], ["<", l.bump]] }, [ "~>", ">", 0 ] => ->(l, r) { [[">", l], ["<", l.bump]] }, [ "~>", ">", 1 ] => ->(l, r) { [[">=", l], ["<", l.bump]]}, [ "~>", "<", nil ] => ->(l, r) { [[">=", l], ["<", [r, l.bump].max]] }, [ "~>", ">=", ->(l, r) { l < r && l.bump >= r } ] => ->(l, r) { [[">=", r], ["<", l.bump]] }, [ "~>", ">=", 0 ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", ">=", 1 ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", "<=", ->(l, r) { l < r && l.bump >= r } ] => ->(l, r) { [[">=", l], ["<=", r]] }, [ "~>", "<=", ->(l, r) { l.bump < r } ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", "<=", 0 ] => ->(l, r) { [["=", l]] }, [ "~>", "~>", ->(l, r) { l.bump >= r && l < r.bump || r.bump >= l && r < l.bump } ] => ->(l, r) { [[">=", [r, l].max], ["<", [r.bump, l.bump].min]] } }.freeze
- OR_RELAS =
:nodoc:
{ #:nodoc: [ "=", ">=", nil ] => ->(l, r) { [[">=", [r, l].min]] }, [ "=", "<=", -1 ] => ->(l, r) { [["<=", r]] }, [ "=", "<=", 0 ] => ->(l, r) { [["<=", r]] }, [ "=", ">", 0 ] => ->(l, r) { [[">=", r]] }, [ "=", ">", 1 ] => ->(l, r) { [[">", r]] }, [ "=", "<", -1 ] => ->(l, r) { [["<", r]] }, [ "=", "<", 0 ] => ->(l, r) { [["<=", r]] }, [ "=", "=", 0 ] => ->(l, r) { [["=", l]] }, [ "=", "~>", nil ] => ->(l, r) { [[">=", [r, l].min], ["<", r.bump]] }, [ "!=", "=", -1 ] => ->(l, r) { [["=", r], ["!=", l]] }, [ "!=", "=", 0 ] => ->(l, r) { [] }, [ "!=", "=", 1 ] => ->(l, r) { [["=", r], ["!=", l]] }, [ "!=", "!=", 0 ] => ->(l, r) { [["!=", l]] }, [ "!=", ">", -1 ] => ->(l, r) { [[">", r]] }, [ "!=", ">", 0 ] => ->(l, r) { [[">", r]] }, [ "!=", ">", 1 ] => ->(l, r) { [[">", r], ["!=", l]] }, [ "!=", "<", -1 ] => ->(l, r) { [["<", r], ["!=", l]] }, [ "!=", "<", 0 ] => ->(l, r) { [["<", r]] }, [ "!=", "<", 1 ] => ->(l, r) { [["<", r]] }, [ "!=", ">=", -1 ] => ->(l, r) { [[">=", r]] }, [ "!=", ">=", 0 ] => ->(l, r) { [[">", r]] }, [ "!=", ">=", 1 ] => ->(l, r) { [[">=", r], ["!=", l]] }, [ "!=", "<=", -1 ] => ->(l, r) { [["<=", r], ["!=", l]] }, [ "!=", "<=", 0 ] => ->(l, r) { [["<", r]] }, [ "!=", "<=", 1 ] => ->(̀r, l) { [["<=", r]] }, [ "!=", "~>", -1 ] => ->(l, r) { [[">=", r], ["<", r.bump], ["!=", l]] }, [ "!=", "~>", 0 ] => ->(l, r) { [[">", r], ["<", r.bump]] }, [ "!=", "~>", 1 ] => ->(l, r) { [[">=", r], ["<", r.bump], ["!=", l]] }, [ ">", "=", 0 ] => ->(l, r) { [[">=", l]] }, [ ">", "=", 1 ] => ->(l, r) { [[">", l]] }, [ ">", "!=", 0 ] => ->(l, r) { [[">", l]] }, [ ">", "!=", 1 ] => ->(l, r) { [[">", l]] }, [ ">", ">", nil ] => ->(l, r) { [[">", [r, l].min]] }, [ ">", "<", 0 ] => ->(l, r) { [] }, [ ">", "<", 1 ] => ->(l, r) { [] }, [ ">", ">=", -1 ] => ->(l, r) { [[">", l]] }, [ ">", ">=", 0 ] => ->(l, r) { [[">=", r]] }, [ ">", ">=", 1 ] => ->(l, r) { [[">=", r]] }, [ ">", "<=", 0 ] => ->(l, r) { [] }, [ ">", "<=", 1 ] => ->(l, r) { [] }, [ ">", "~>", -1 ] => ->(l, r) { [[">", l], ["<", r.bump]] }, [ ">", "~>", 0 ] => ->(l, r) { [[">=", r], ["<", r.bump]] }, [ ">", "~>", 1 ] => ->(l, r) { [[">=", r], ["<", r.bump]] }, [ "<", "=", 0 ] => ->(l, r) { [["<=", l]] }, [ "<", "=", 1 ] => ->(l, r) { [["<", l]] }, [ "<", "!=", -1 ] => ->(l, r) { [["<", l]] }, [ "<", "!=", 0 ] => ->(l, r) { [["<", l]] }, [ "<", ">", -1 ] => ->(l, r) { [] }, [ "<", ">", 0 ] => ->(l, r) { [] }, [ "<", ">", 1 ] => ->(l, r) { [[">", r], ["<", l]] }, [ "<", "<", nil ] => ->(l, r) { [["<", [r, l].max]] }, [ "<", ">=", -1 ] => ->(l, r) { [] }, [ "<", ">=", 0 ] => ->(l, r) { [] }, [ "<", ">=", 1 ] => ->(l, r) { [[">=", r], ["<", l]] }, [ "<", "~>", nil ] => ->(l, r) { [[">=", r], ["<", [l, r.bump].max]] }, [ ">=", "=", 0 ] => ->(l, r) { [[">=", l]] }, [ ">=", "=", -1 ] => ->(l, r) { [[">=", l], ["=", r]] }, [ ">=", "!=", 0 ] => ->(l, r) { [[">", l]] }, [ ">=", "!=", 1 ] => ->(l, r) { [[">=", l]] }, [ ">=", ">", -1 ] => ->(l, r) { [[">=", l]] }, [ ">=", ">", 0 ] => ->(l, r) { [[">=", l]] }, [ ">=", ">", 1 ] => ->(l, r) { [[">", r]] }, [ ">=", "<", 0 ] => ->(l, r) { [] }, [ ">=", "<", 1 ] => ->(l, r) { [] }, [ ">=", ">=", nil ] => ->(l, r) { [[">=", [r, l].min]] }, [ ">=", "<=", 0 ] => ->(l, r) { [["=", l]] }, [ ">=", "<=", 1 ] => ->(l, r) { [] }, [ ">=", "~>", nil ] => ->(l, r) { [[">=", [r, l].min], ["<", r.bump]] }, [ "<=", "=", 0 ] => ->(l, r) { [["<=", l]] }, [ "<=", "=", 1 ] => ->(l, r) { [["<=", l]] }, [ "<=", "!=", -1 ] => ->(l, r) { [["<", l]] }, [ "<=", "!=", 0 ] => ->(l, r) { [["<", l]] }, [ "<=", ">", -1 ] => ->(l, r) { [] }, [ "<=", ">", 0 ] => ->(l, r) { [] }, [ "<=", ">", 1 ] => ->(l, r) { [[">", r], ["<=", l]] }, [ "<=", "<", -1 ] => ->(l, r) { [["<=", l]] }, [ "<=", "<", 0 ] => ->(l, r) { [["<=", l]] }, [ "<=", "<", 1 ] => ->(l, r) { [["<", r]] }, [ "<=", ">=", -1 ] => ->(l, r) { [] }, [ "<=", ">=", 0 ] => ->(l, r) { [["=", l]] }, [ "<=", ">=", 1 ] => ->(l, r) { [[">=", r], ["<=", l]] }, [ "<=", "~>", ->(l, r) { r.bump > l } ] => ->(l, r) { [[">=", r], ["<", r.bump]] }, [ "<=", "~>", ->(l, r) { r.bump <= l } ] => ->(l, r) { [[">=", r], ["<=", l]] }, [ "~>", "=", nil ] => ->(l, r) { [[">=", [l, r].min], ["<", l.bump]] }, [ "~>", "!=", -1 ] => ->(l, r) { [[">=", l], ["<", l.bump], ["!=", r]] }, [ "~>", "!=", 0 ] => ->(l, r) { [[">", l], ["<", l.bump]] }, [ "~>", "!=", 1 ] => ->(l, r) { [[">=", l], ["<", l.bump], ["!=", r]] }, [ "~>", ">", -1 ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", ">", 0 ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", ">", 1 ] => ->(l, r) { [[">", r], ["<", l.bump]]}, [ "~>", "<", nil ] => ->(l, r) { [[">=", l], ["<", [r, l.bump].max]] }, [ "~>", ">=", nil ] => ->(l, r) { [[">=", [l, r].min], ["<", l.bump]] }, [ "~>", "<=", ->(l, r) { l.bump > r } ] => ->(l, r) { [[">=", l], ["<", l.bump]] }, [ "~>", "<=", ->(l, r) { l.bump <= r } ] => ->(l, r) { [[">=", l], ["<=", r]] }, [ "~>", "~>", nil ] => ->(l, r) { [[">=", [r, l].min], ["<", [r.bump, l.bump].max]] } }.freeze
Instance Method Summary collapse
- #expand ⇒ Object
- #expand_requirements(requirements) ⇒ Object
-
#merge(other_requirement) ⇒ Object
merging gem requirement with others strictizing the conditions.
- #|(other_requirement) ⇒ Object
Instance Method Details
#expand ⇒ Object
435 436 437 |
# File 'lib/baltix/extensions.rb', line 435 def self.(self.requirements) end |
#expand_requirements(requirements) ⇒ Object
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 |
# File 'lib/baltix/extensions.rb', line 439 def requirements reqs_in = [] res = requirements.dup #binding.pry while reqs_in != res do reqs_in = res reqs = reqs_in.dup res = [] #binding.pry while !reqs.empty? do op1, ver1 = reqs.shift op2, ver2 = reqs.shift || [op1, ver1] prc = Gem::Requirement::OR_RELAS.find do |((left, right, comp), _)| match = op1 == left && op2 == right && case comp when NilClass true when Integer comp == (ver1 <=> ver2) when Proc comp[ver1, ver2] end end #binding.pry res = if prc res.concat(prc.last[ver1, ver2]) elsif reqs.empty? res.concat([[op1, ver1], [op2, ver2]]) else #binding.pry reqs.unshift([op2, ver2]) res.concat([[op1, ver1]]) end end end #binding.pry Gem::Requirement.new(res.map {|x|x.join(" ")}) end |
#merge(other_requirement) ⇒ Object
merging gem requirement with others strictizing the conditions
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/baltix/extensions.rb', line 486 def merge other_requirement reqs_pre = self.requirements | other_requirement.requirements reqs_tmp = [] while reqs_tmp != reqs_pre reqs_tmp = reqs_pre reqs_pre = reqs_tmp[1..-1].reduce([reqs_tmp.first]) do |res, req| op1, ver1 = res.last op2, ver2 = req prc = Gem::Requirement::AND_RELAS.find do |((left, right, comp), _)| match = op1 == left && op2 == right && case comp when NilClass true when Integer comp == (ver1 <=> ver2) when Proc comp[ver1, ver2] end end res[0...-1] | prc ? prc.last[ver1, ver2] : [INVALID_DEP] end end # binding.pry Gem::Requirement.new(reqs_pre.map {|x|x.join(" ")}) end |
#|(other_requirement) ⇒ Object
431 432 433 |
# File 'lib/baltix/extensions.rb', line 431 def | other_requirement self.(self.requirements | other_requirement.requirements) end |