Class: NRSER::Types::When

Inherits:
Type show all
Defined in:
lib/nrser/types/when.rb

Overview

Note:

This was kinda hacked in when my idiot-ass figured out that all this types BS could fit in real well with Ruby’s ‘===`, allowing types to be used in `when` clauses.

Previously, make used to see if something was a module, and turn those into ‘is_a` types, and turn everything else into `is`, but this kind of sucked for a bunch of reasons I don’t totally remember.

Now, if a value is not a special case (like ‘nil`) or already a type, make turns it into a When.

When instances are totally Ruby-centric, and are thus mostly to support in-runtime testing - you wouldn’t want a When type to be part of an API schema or something - but they’re really nice for the internal stuff.

Wraps an object as a type, using Ruby’s “case equality” ‘===` to test membership (like a `when` clause in a `case` expression).

Deals with some data loading too.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Type

#===, #builtin_inspect, #check, #check!, #default_name, #default_symbolic, #from_s, #has_to_data?, #inspect, #intersection, #name, #not, #respond_to?, #symbolic, #test, #to_data, #to_proc, #to_s, #union, #xor

Constructor Details

#initialize(object, **options) ⇒ When

Instantiate a new ‘::When`.



59
60
61
62
# File 'lib/nrser/types/when.rb', line 59

def initialize object, **options
  super **options
  @object = object
end

Instance Attribute Details

#objectObject (readonly)

The wrapped Object whose ‘#===` will be used to test membership.

Returns:



52
53
54
# File 'lib/nrser/types/when.rb', line 52

def object
  @object
end

Instance Method Details

#==(other) ⇒ Object



116
117
118
119
120
# File 'lib/nrser/types/when.rb', line 116

def == other
  equal?( other ) ||
  ( self.class == other.class &&
    self.object == other.object )
end

#custom_from_s(string) ⇒ Object



83
84
85
# File 'lib/nrser/types/when.rb', line 83

def custom_from_s string
  object.from_s string
end

#explainObject



73
74
75
# File 'lib/nrser/types/when.rb', line 73

def explain
  @object.inspect
end

#from_data(data) ⇒ Object

If #object responds to ‘#from_data`, call that and check results.

Otherwise, forward up to Type#from_data.

Parameters:

  • data (Object)

    Data to create the value from that will satisfy the type.

Returns:



98
99
100
101
102
103
104
105
106
107
108
# File 'lib/nrser/types/when.rb', line 98

def from_data data
  if @from_data.nil?
    if @object.respond_to? :from_data
      check @object.from_data( data )
    else
      super data
    end
  else
    @from_data.call data
  end
end

#has_from_data?Boolean

Returns:



111
112
113
# File 'lib/nrser/types/when.rb', line 111

def has_from_data?
  @from_data || @object.respond_to?( :from_data )
end

#has_from_s?Boolean

Returns:



78
79
80
# File 'lib/nrser/types/when.rb', line 78

def has_from_s?
  @from_s || object.respond_to?( :from_s )
end

#test?(value) ⇒ Boolean

Instance Methods

Returns:



68
69
70
# File 'lib/nrser/types/when.rb', line 68

def test? value
  @object === value
end