Class: Browserctl::Flow

Inherits:
Object
  • Object
show all
Defined in:
lib/browserctl/flow.rb

Constant Summary collapse

SEMVER_RE =
/\A\d+\.\d+\.\d+\z/

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Flow

Returns a new instance of Flow.



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/browserctl/flow.rb', line 45

def initialize(name)
  @name                   = name.to_s
  @version_string         = "0.0.0"
  @description            = nil
  @param_defs             = {}
  @steps                  = []
  @preconditions          = []
  @postconditions         = []
  @produces_state_block   = nil
  @min_browserctl_version = nil
end

Instance Attribute Details

#descriptionObject (readonly)

Returns the value of attribute description.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def description
  @description
end

#min_browserctl_versionObject (readonly)

Returns the value of attribute min_browserctl_version.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def min_browserctl_version
  @min_browserctl_version
end

#nameObject (readonly)

Returns the value of attribute name.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def name
  @name
end

#param_defsObject (readonly)

Returns the value of attribute param_defs.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def param_defs
  @param_defs
end

#postconditionsObject (readonly)

Returns the value of attribute postconditions.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def postconditions
  @postconditions
end

#preconditionsObject (readonly)

Returns the value of attribute preconditions.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def preconditions
  @preconditions
end

#produces_state_blockObject (readonly)

Returns the value of attribute produces_state_block.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def produces_state_block
  @produces_state_block
end

#stepsObject (readonly)

Returns the value of attribute steps.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def steps
  @steps
end

#version_stringObject (readonly)

Returns the value of attribute version_string.



35
36
37
# File 'lib/browserctl/flow.rb', line 35

def version_string
  @version_string
end

Instance Method Details

#desc(text) ⇒ Object



67
68
69
# File 'lib/browserctl/flow.rb', line 67

def desc(text)
  @description = text.to_s
end

#param(name, required: false, secret: false, default: nil, secret_ref: nil) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/browserctl/flow.rb', line 71

def param(name, required: false, secret: false, default: nil, secret_ref: nil)
  secret = true if secret_ref
  @param_defs[name] = FlowParamDef.new(
    name: name,
    required: required,
    secret: secret,
    default: default,
    secret_ref: secret_ref
  )
end

#postcondition(label = "postcondition", &block) ⇒ Object

Raises:

  • (ArgumentError)


94
95
96
97
98
# File 'lib/browserctl/flow.rb', line 94

def postcondition(label = "postcondition", &block)
  raise ArgumentError, "postcondition '#{label}' requires a block" unless block

  @postconditions << FlowConditionDef.new(kind: :postcondition, label: label, block: block)
end

#precondition(label = "precondition", &block) ⇒ Object

Raises:

  • (ArgumentError)


88
89
90
91
92
# File 'lib/browserctl/flow.rb', line 88

def precondition(label = "precondition", &block)
  raise ArgumentError, "precondition '#{label}' requires a block" unless block

  @preconditions << FlowConditionDef.new(kind: :precondition, label: label, block: block)
end

#produces_state(&block) ⇒ Object

Raises:

  • (ArgumentError)


100
101
102
103
104
# File 'lib/browserctl/flow.rb', line 100

def produces_state(&block)
  raise ArgumentError, "produces_state requires a block" unless block

  @produces_state_block = block
end

#requires_browserctl(value) ⇒ Object



62
63
64
65
# File 'lib/browserctl/flow.rb', line 62

def requires_browserctl(value)
  validate_semver!(value, label: "requires_browserctl")
  @min_browserctl_version = value.to_s
end

#run(page: nil, client: nil, **params) ⇒ Object



106
107
108
109
110
111
112
113
114
# File 'lib/browserctl/flow.rb', line 106

def run(page: nil, client: nil, **params)
  ctx = FlowContext.new(page: page, client: client, params: resolve_params(params))

  run_conditions(ctx, @preconditions, error_class: FlowPreconditionError)
  run_steps(ctx)
  run_conditions(ctx, @postconditions, error_class: FlowPostconditionError)

  produce_state(ctx)
end

#step(label, retry_count: 0, timeout: nil, &block) ⇒ Object

Raises:

  • (ArgumentError)


82
83
84
85
86
# File 'lib/browserctl/flow.rb', line 82

def step(label, retry_count: 0, timeout: nil, &block)
  raise ArgumentError, "flow step '#{label}' requires a block" unless block

  @steps << FlowStepDef.new(label: label, block: block, retry_count: retry_count, timeout: timeout)
end

#version(value) ⇒ Object



57
58
59
60
# File 'lib/browserctl/flow.rb', line 57

def version(value)
  validate_semver!(value, label: "version")
  @version_string = value.to_s
end