Ruby’s Magical case Statement

Preview:

DESCRIPTION

Ruby's case statement has a lot of cool tricks. See how to use it to match classes, ranges, regular expressions, and your own custom matcher classes.

Citation preview

Ruby’scase Statement

by Tim Moore

Ruby’s Magicalcase Statement

by Tim Moore

Magical

There is Totally

Such a Thing as Magic

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301 handle_redirect(http_response) when 302 handle_redirect(http_response) when 303 handle_redirect(http_response) when 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301, 302, 303, 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301, 302, 303, 307 handle_redirect(http_response) when 404 handle_not_found(http_response) else handle_unknown_error(http_response) end end

def handle_response(http_response) case http_response.status when 200 handle_success(http_response) when 301, 302, 303, 307 handle_redirect(http_response) when 404 handle_not_found(http_response) when 400...500 handle_client_error(http_response) when 500...600 handle_server_error(http_response) else handle_unknown_error(http_response) end end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

irb> nickname 'Christopher' => "Chris" irb> nickname 'Abigail' => "Abby" irb> nickname 'Christina' => "Chris" irb> nickname 'Fabio' => "Fabio"

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' nickname = 'Abe' when 'Abigail' nickname = 'Abby' when 'Christopher', 'Christian', 'Christina' nickname = 'Chris' # etc., etc. else nickname = first_name end nickname end

def nickname(first_name) nickname = case first_name when 'Abraham' 'Abe' when 'Abigail' 'Abby' when 'Christopher', 'Christian', 'Christina' 'Chris' # etc., etc. else first_name end nickname end

def nickname(first_name) nickname = case first_name when 'Abraham' 'Abe' when 'Abigail' 'Abby' when 'Christopher', 'Christian', 'Christina' 'Chris' # etc., etc. else first_name end nickname end

def nickname(first_name) case first_name when 'Abraham' 'Abe' when 'Abigail' 'Abby' when 'Christopher', 'Christian', 'Christina' 'Chris' # etc., etc. else first_name end !end

class Color < Struct.new(:r,:g,:b) ! RED = Color.new( 0xFF, 0x00, 0x00 ) GREEN = Color.new( 0x00, 0xFF, 0x00 ) BLUE = Color.new( 0x00, 0x00, 0xFF ) CYAN = Color.new( 0x00, 0xFF, 0xFF ) MAGENTA = Color.new( 0xFF, 0x00, 0xFF ) YELLOW = Color.new( 0xFF, 0xFF, 0x00 ) !end

def primary?(color, mode) case color when Color::RED, Color::GREEN, Color::BLUE mode == :additive when Color::CYAN, Color::MAGENTA, Color::YELLOW mode == :subtractive else false end end

class Color < Struct.new(:r,:g,:b) ! RED = Color.new( 0xFF, 0x00, 0x00 ) GREEN = Color.new( 0x00, 0xFF, 0x00 ) BLUE = Color.new( 0x00, 0x00, 0xFF ) CYAN = Color.new( 0x00, 0xFF, 0xFF ) MAGENTA = Color.new( 0xFF, 0x00, 0xFF ) YELLOW = Color.new( 0xFF, 0xFF, 0x00 ) !end

def primary?(color, mode) case color when Color::RED, Color::GREEN, Color::BLUE mode == :additive when Color::CYAN, Color::MAGENTA, Color::YELLOW mode == :subtractive else false end end

irb> primary? Color::RED, :additive => true irb> primary? Color::RED, :subtractive => false irb> primary? Color::CYAN, :subtractive => true irb> primary? Color.new(0,0,255), :additive => true irb> primary? Color.new(0,127,255), :additive => false

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def local_search(query) case query when String specs_by_name(query) when Gem::Dependency search_by_dependency(query) when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification search_by_spec(query) else raise "You can't search for #{query}." end end

def want_a_beer?(beer_type) case beer_type when /^Sierra Nevada|IPA/ :yes when /V(ictoria)? ?B(itter)?/, /Bud(weiser)?/ :no else :probably end end

def want_a_beer?(beer_type) case beer_type when /^Sierra Nevada|IPA/ :yes when /V(ictoria)? ?B(itter)?/, /Bud(weiser)?/ :no else :probably end end

def want_a_beer?(beer_type) case beer_type when /^Sierra Nevada|IPA/ :yes when /V(ictoria)? ?B(itter)?/, /Bud(weiser)?/ :no else :probably end end

def want_a_beer?(beer_type) case beer_type when /^Sierra Nevada|IPA/ :yes when /V(ictoria)? ?B(itter)?/, /Bud(weiser)?/ :no else :probably end end

def want_a_beer?(beer_type) case beer_type when /^Sierra Nevada|IPA/ :yes when /V(ictoria)? ?B(itter)?/, /Bud(weiser)?/ :no else :probably end end

irb> want_a_beer? 'Sierra Nevada Pale Ale' => :yes irb> want_a_beer? 'Sierra Nevada Torpedo IPA' => :yes irb> want_a_beer? 'Mountain Goat IPA' => :yes irb> want_a_beer? 'Victoria Bitter' => :no irb> want_a_beer? 'VB' => :no irb> want_a_beer? 'V Bitter' => :no irb> want_a_beer? 'Budweiser' => :no irb> want_a_beer? 'Bud' => :no irb> want_a_beer? 'Bud Light' => :no irb> want_a_beer? 'Coopers Pale Ale' => :probably irb> want_a_beer? 'Stella Artois' => :probably

class Color def more_blue? b > r && b > g end ! def more_red? r > b && r > g end ! def more_green? g > r && g > b end end

def describe_color(color) case color when proc {|color| color.more_blue? } "blueish" when proc {|color| color.more_red? } "reddish" when proc {|color| color.more_green? } "greenish" else "pretty" end end

class Color def more_blue? b > r && b > g end ! def more_red? r > b && r > g end ! def more_green? g > r && g > b end end

def describe_color(color) case color when proc {|color| color.more_blue? } "blueish" when proc {|color| color.more_red? } "reddish" when proc {|color| color.more_green? } "greenish" else "pretty" end end

irb> describe_color Color::RED => "reddish" irb> describe_color Color::GREEN => "greenish" irb> describe_color Color.new(0xCC,0x11,0xFF) => "blueish" irb> describe_color Color::CYAN => "pretty"

class Color def more_blue? b > r && b > g end ! def more_red? r > b && r > g end ! def more_green? g > r && g > b end end

def describe_color(color) case color when proc {|color| color.more_blue? } "blueish" when proc {|color| color.more_red? } "reddish" when proc {|color| color.more_green? } "greenish" else "pretty" end end

class Color def more_blue? b > r && b > g end ! def more_red? r > b && r > g end ! def more_green? g > r && g > b end end

def describe_color(color) case color when :more_blue?.to_proc "blueish" when :more_red?.to_proc "reddish" when :more_green?.to_proc "greenish" else "pretty" end end

===“case equality operator”

===“threequals”

case object when case1 do_something when case2 do_another_thing else do_something_else end

object case1 do_something case2 do_another_thing else do_something_else end

!

if case1 === object do_something elsif case2 === object do_another_thing else do_something_else end

class Range def ===(value) self.include?(value) end end

class Module def ===(object) object.is_a?(self) end end

class Regexp def ===(string) if self =~ string true else false end end end

class Proc def ===(object) self.call(object) end end

class Object def ===(other) self == other end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

class VersionMatcher < Struct.new(:operator, :req_version) def ===(version) case operator when "=" version == req_version when ">" version > req_version when "<" version < req_version when ">=" version >= req_version when "<=" version <= req_version else false end end end

class VersionMatcher < Struct.new(:operator, :req_version) def ===(version) case operator when "=" version == req_version when ">" version > req_version when "<" version < req_version when ">=" version >= req_version when "<=" version <= req_version else false end end end

class VersionMatcher < Struct.new(:operator, :req_version) def ===(version) case operator when "=" version == req_version when ">" version > req_version when "<" version < req_version when ">=" version >= req_version when "<=" version <= req_version else false end end end

class VersionMatcher < Struct.new(:operator, :req_version) def ===(version) case operator when "=" version == req_version when ">" version > req_version when "<" version < req_version when ">=" version >= req_version when "<=" version <= req_version else false end end end

class VersionMatcher < Struct.new(:operator, :req_version) def ===(version) case operator when "=" version == req_version when ">" version > req_version when "<" version < req_version when ">=" version >= req_version when "<=" version <= req_version else false end end end

class VersionMatcher::All < Struct.new(:version_matchers) ! def ===(version) version_matchers .all? {|matcher| matcher === version } end !end

class VersionMatcher::All < Struct.new(:version_matchers) ! def ===(version) version_matchers .all? {|matcher| matcher === version } end !end

class VersionMatcher::All < Struct.new(:version_matchers) ! def ===(version) version_matchers .all? {|matcher| matcher === version } end !end

class VersionMatcher::All < Struct.new(:version_matchers) ! def ===(version) version_matchers .all? {|matcher| matcher === version } end !end

class VersionMatcher::All < Struct.new(:version_matchers) ! def ===(version) version_matchers .all? {|matcher| matcher === version } end !end

def version(requirements) case requirements when String op, req_version = requirements.split VersionMatcher.new(op, req_version) when Array matchers = requirements.map {|r| version(r)} VersionMatcher::All.new(matchers) end end

def version(requirements) case requirements when String op, req_version = requirements.split VersionMatcher.new(op, req_version) when Array matchers = requirements.map {|r| version(r)} VersionMatcher::All.new(matchers) end end

def version(requirements) case requirements when String op, req_version = requirements.split VersionMatcher.new(op, req_version) when Array matchers = requirements.map {|r| version(r)} VersionMatcher::All.new(matchers) end end

def version(requirements) case requirements when String op, req_version = requirements.split VersionMatcher.new(op, req_version) when Array matchers = requirements.map {|r| version(r)} VersionMatcher::All.new(matchers) end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when version("< 1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when version([">= 1.0", "< 2.0"]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ version(">= 1.0"), version("< 2.0") ]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ version(">= 1.0"), version("< 2.0") ]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) OtherGemAdapter::Version1x.new when version(">= 2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) OtherGemAdapter::Version1x.new when VersionMatcher.new(">=", "2.0") OtherGemAdapter::Current.new end end

def somegem_adapter case OtherGem::VERSION when VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new when VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) OtherGemAdapter::Version1x.new when VersionMatcher.new(">=", "2.0") OtherGemAdapter::Current.new end end

def somegem_adapter OtherGem::VERSION VersionMatcher.new("<", "1.0") OtherGemAdapter::Prerelease.new VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) OtherGemAdapter::Version1x.new VersionMatcher.new(">=", "2.0") OtherGemAdapter::Current.new end end

def somegem_adapter ! if VersionMatcher.new("<", "1.0") \ === OtherGem::VERSION OtherGemAdapter::Prerelease.new elsif VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) \ === OtherGem::VERSION OtherGemAdapter::Version1x.new elsif VersionMatcher.new(">=", "2.0") \ === OtherGem::VERSION OtherGemAdapter::Current.new end !end

def somegem_adapter ! if VersionMatcher.new("<", "1.0") \ === OtherGem::VERSION OtherGemAdapter::Prerelease.new elsif VersionMatcher::All.new([ VersionMatcher.new(">=", "1.0"), VersionMatcher.new("<" , "2.0") ]) \ === OtherGem::VERSION OtherGemAdapter::Version1x.new elsif VersionMatcher.new(">=", "2.0") \ === OtherGem::VERSION OtherGemAdapter::Current.new end !end

irb> OtherGem::VERSION = '0.9' irb> somegem_adapter => #<OtherGemAdapter::Prerelease> irb> OtherGem::VERSION = '1.0' irb> somegem_adapter => #<OtherGemAdapter::Version1x> irb> OtherGem::VERSION = '1.2' irb> somegem_adapter => #<OtherGemAdapter::Version1x> irb> OtherGem::VERSION = '2.0' irb> somegem_adapter => #<OtherGemAdapter::Current> irb> OtherGem::VERSION = '4.0' irb> somegem_adapter => #<OtherGemAdapter::Current>

Thank you!

Recommended