Module: J

Extended by:
J
Included in:
Affidavit, Affidavit, J
Defined in:
lib/affidavit/j.rb

Defined Under Namespace

Classes: Expression, Short, Term

Instance Method Summary collapse

Instance Method Details

#exp(receiver, operation, *args, label: nil, metadata: {}) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/affidavit/j.rb', line 109

def exp(receiver, operation, *args, label: nil, metadata: {})
  klass = (
    if Enumerable.instance_methods.include?(operation)
      Short
    else
      Expression
    end
  )

  klass.new(
    receiver: receiver,
    operation: operation,
    args: args,
    label: label,
    metadata: 
  )
end

#reify(obj, lazy: false) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/affidavit/j.rb', line 6

def reify(obj, lazy: false)
  enumerator = lazy ? :lazy : :itself

  if obj.is_a?(Array)
    obj.send(enumerator).map { reify(_1) }
  elsif obj.is_a?(Hash)
    obj.send(enumerator).map { [reify(_1), reify(_2)] }.to_h
  elsif obj.respond_to?(:__is__J__)
    obj.value
  else
    obj
  end
end

#term(value, label, metadata: {}) ⇒ Object



97
98
99
# File 'lib/affidavit/j.rb', line 97

def term(value, label, metadata: {})
  Term.new(val: value, label: label, metadata: )
end

#vObject



101
102
103
# File 'lib/affidavit/j.rb', line 101

def v(...)
  term(...)
end

#xObject



105
106
107
# File 'lib/affidavit/j.rb', line 105

def x(...)
  exp(...)
end