lib/pact_broker/pacts/selector.rb in pact_broker-2.47.1 vs lib/pact_broker/pacts/selector.rb in pact_broker-2.48.0
- old
+ new
@@ -1,43 +1,99 @@
module PactBroker
module Pacts
class Selector < Hash
- def initialize(options)
+ def initialize(options = {})
merge!(options)
end
+ def tag= tag
+ self[:tag] = tag
+ end
+
+ def latest= latest
+ self[:latest] = latest
+ end
+
+ def latest
+ self[:latest]
+ end
+
+ def fallback_tag= fallback_tag
+ self[:fallback_tag] = fallback_tag
+ end
+
+ def fallback_tag
+ self[:fallback_tag]
+ end
+
def self.overall_latest
Selector.new(latest: true)
end
def self.latest_for_tag(tag)
Selector.new(latest: true, tag: tag)
end
- def self.one_of_tag(tag)
+ def self.latest_for_tag_with_fallback(tag, fallback_tag)
+ Selector.new(latest: true, tag: tag, fallback_tag: fallback_tag)
+ end
+
+ def self.all_for_tag(tag)
Selector.new(tag: tag)
end
+
+ def self.from_hash hash
+ Selector.new(hash)
+ end
+
+ def fallback_tag?
+ !!fallback_tag
+ end
+
def tag
self[:tag]
end
def overall_latest?
- !!(latest && !tag)
+ !!(latest? && !tag)
end
- def latest_for_tag?
- !!(latest && tag)
+ # Not sure if the fallback_tag logic is needed
+ def latest_for_tag? potential_tag = nil
+ if potential_tag
+ !!(latest && tag == potential_tag)
+ else
+ !!(latest && !!tag)
+ end
end
- private
+ def all_for_tag?
+ !!(tag && !latest?)
+ end
- def latest?
- self[:latest]
+ def <=> other
+ if overall_latest? || other.overall_latest?
+ if overall_latest? == other.overall_latest?
+ 0
+ else
+ overall_latest? ? -1 : 1
+ end
+ elsif latest_for_tag? || other.latest_for_tag?
+ if latest_for_tag? == other.latest_for_tag?
+ tag <=> other.tag
+ else
+ latest_for_tag? ? -1 : 1
+ end
+ else
+ tag <=> other.tag
+ end
end
- def latest
- self[:latest]
+ private
+
+ def latest?
+ !!self[:latest]
end
end
end
end