From 22e3d2d3fe35ce934c1c9cce3f707658d31f1603 Mon Sep 17 00:00:00 2001 From: Ilya Bylich Date: Thu, 30 May 2013 11:42:18 +0300 Subject: [PATCH] Moved functions to separated module. --- lib/naught/null_class_builder.rb | 44 +------------- .../null_class_builder/conversions_module.rb | 58 +++++++++++++++++++ 2 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 lib/naught/null_class_builder/conversions_module.rb diff --git a/lib/naught/null_class_builder.rb b/lib/naught/null_class_builder.rb index d7d5ac4..a279af8 100644 --- a/lib/naught/null_class_builder.rb +++ b/lib/naught/null_class_builder.rb @@ -1,3 +1,5 @@ +require 'naught/null_class_builder/conversions_module' + module Naught class NullClassBuilder # make sure this module exists @@ -30,47 +32,7 @@ def null_equivalents end def generate_conversions_module(null_class) - null_equivs = null_equivalents # get a local binding - @conversions_module ||= Module.new do - define_method(:Null) do |object=:nothing_passed| - case object - when NullObjectTag then object - when :nothing_passed, *null_equivs - null_class.get(caller: caller(1)) - else raise ArgumentError, "#{object.inspect} is not null!" - end - end - - define_method(:Maybe) do |object=nil, &block| - object = block ? block.call : object - case object - when NullObjectTag then object - when *null_equivs - null_class.get(caller: caller(1)) - else - object - end - end - - define_method(:Just) do |object=nil, &block| - object = block ? block.call : object - case object - when NullObjectTag, *null_equivs - raise ArgumentError, "Null value: #{object.inspect}" - else - object - end - end - - define_method(:Actual) do |object=nil, &block| - object = block ? block.call : object - case object - when NullObjectTag then nil - else - object - end - end - end + @conversions_module ||= ::Naught::ConversionsModule.build(null_equivalents, null_class) end def generate_class diff --git a/lib/naught/null_class_builder/conversions_module.rb b/lib/naught/null_class_builder/conversions_module.rb new file mode 100644 index 0000000..99c27bc --- /dev/null +++ b/lib/naught/null_class_builder/conversions_module.rb @@ -0,0 +1,58 @@ +module Naught + + module ConversionsModule + + def Null(object = :nothing_passed) + case object + when NullObjectTag then object + when :nothing_passed, *null_equivs + null_class.get(caller: caller(1)) + else raise ArgumentError, "#{object.inspect} is not null!" + end + end + + def Maybe(object = nil, &block) + object = block ? block.call : object + case object + when NullObjectTag then object + when *null_equivs + null_class.get(caller: caller(1)) + else + object + end + end + + def Just(object = nil, &block) + object = block ? block.call : object + case object + when NullObjectTag, *null_equivs + raise ArgumentError, "Null value: #{object.inspect}" + else + object + end + end + + def Actual(object=nil, &block) + object = block ? block.call : object + case object + when NullObjectTag then nil + else + object + end + end + + class << self + + def build(null_equivs, null_class) + Module.new do + define_method(:null_equivs) { null_equivs } + define_method(:null_class) { null_class } + include ::Naught::ConversionsModule + end + end + + end + + end + +end \ No newline at end of file