Class: WebFunction::Type::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/web_function/type/base.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_type:, refinement: nil) ⇒ Base

Returns a new instance of Base.



8
9
10
11
# File 'lib/web_function/type/base.rb', line 8

def initialize(base_type:, refinement: nil)
  @base_type = base_type
  @refinement = refinement
end

Instance Attribute Details

#base_typeObject (readonly)

Returns the value of attribute base_type.



6
7
8
# File 'lib/web_function/type/base.rb', line 6

def base_type
  @base_type
end

#refinementObject (readonly)

Returns the value of attribute refinement.



6
7
8
# File 'lib/web_function/type/base.rb', line 6

def refinement
  @refinement
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



42
43
44
# File 'lib/web_function/type/base.rb', line 42

def ==(other)
  other.is_a?(Base) && other.base_type == @base_type && other.refinement == @refinement
end

#format(format = :default) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/web_function/type/base.rb', line 21

def format(format = :default)
  case format
  when :compact
    @refinement || @base_type
  when :base
    @base_type
  when :default
    if @refinement
      "#{@base_type}.#{@refinement}"
    else
      @base_type
    end
  else
    raise ArgumentError, "unknown format: #{format.inspect}"
  end
end

#hashObject



47
48
49
# File 'lib/web_function/type/base.rb', line 47

def hash
  [Base, @base_type, @refinement].hash
end

#inspectObject



13
14
15
16
17
18
19
# File 'lib/web_function/type/base.rb', line 13

def inspect
  if @refinement
    "#<#{@base_type} #{@refinement}>"
  else
    "#<#{@base_type}>"
  end
end

#objectsObject



51
52
53
54
55
56
57
# File 'lib/web_function/type/base.rb', line 51

def objects
  if @base_type == "object" && @refinement
    [@refinement]
  else
    []
  end
end

#to_sObject



38
39
40
# File 'lib/web_function/type/base.rb', line 38

def to_s
  format(:default)
end

#valid?(value) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/web_function/type/base.rb', line 65

def valid?(value)
  case @base_type
  when "string"
    value.is_a?(String) && refinement_valid?(value)
  when "number"
    value.is_a?(Numeric) && !value.is_a?(Complex) && refinement_valid?(value)
  when "object"
    value.is_a?(Hash)
  when "boolean"
    value == true || value == false
  when "null"
    value.nil?
  else
    false
  end
end

#without_refinementsObject



59
60
61
62
63
# File 'lib/web_function/type/base.rb', line 59

def without_refinements
  return self if @refinement.nil?

  Base.new(base_type: @base_type)
end