Module: Textus::Contract::DSL

Overview

Mixed onto a use-case class via ‘extend`. Calls accumulate into ivars, frozen into a Spec on first read of `.contract`.

Instance Method Summary collapse

Instance Method Details

#arg(name, type, required: false, positional: false, session_default: nil, description: nil, wire_name: nil) ⇒ Object

rubocop:disable Metrics/ParameterLists



80
81
82
83
84
85
86
87
88
# File 'lib/textus/contract.rb', line 80

def arg(name, type, required: false, positional: false, session_default: nil, description: nil, wire_name: nil) # rubocop:disable Metrics/ParameterLists
  raise "contract already built; declare args before reading .contract" if defined?(@__contract) && @__contract

  (@__args ||= []) << Arg.new(
    name: name, type: type, required: required,
    positional: positional, session_default: session_default,
    description: description, wire_name: wire_name
  )
end

#contractObject

rubocop:disable Naming/MemoizedInstanceVariableName (@__verb, @__args, etc.) and avoid name collision with user-defined ‘@contract`.



102
103
104
105
106
107
108
109
110
# File 'lib/textus/contract.rb', line 102

def contract
  @__contract ||= Spec.new(
    verb: @__verb,
    summary: @__summary,
    args: (@__args || []).freeze,
    surfaces: (@__surfaces || []).freeze,
    response: response,
  )
end

#contract?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/textus/contract.rb', line 95

def contract?
  !@__verb.nil?
end

#response(&blk) ⇒ Object



90
91
92
93
# File 'lib/textus/contract.rb', line 90

def response(&blk)
  @__response = blk if blk
  @__response || ->(v) { v }
end

#summary(text = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/textus/contract.rb', line 60

def summary(text = nil)
  if text
    raise "contract already built; declare summary before reading .contract" if defined?(@__contract) && @__contract

    @__summary = text
  else
    @__summary
  end
end

#surfaces(*list) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/textus/contract.rb', line 70

def surfaces(*list)
  if list.empty?
    @__surfaces ||= []
  else
    raise "contract already built; declare surfaces before reading .contract" if defined?(@__contract) && @__contract

    @__surfaces = list
  end
end

#verb(name = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/textus/contract.rb', line 50

def verb(name = nil)
  if name
    raise "contract already built; declare verb before reading .contract" if defined?(@__contract) && @__contract

    @__verb = name
  else
    @__verb
  end
end