Class: Browserctl::Flow
- Inherits:
-
Object
- Object
- Browserctl::Flow
- Defined in:
- lib/browserctl/flow.rb
Constant Summary collapse
- SEMVER_RE =
/\A\d+\.\d+\.\d+\z/
Instance Attribute Summary collapse
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#min_browserctl_version ⇒ Object
readonly
Returns the value of attribute min_browserctl_version.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#param_defs ⇒ Object
readonly
Returns the value of attribute param_defs.
-
#postconditions ⇒ Object
readonly
Returns the value of attribute postconditions.
-
#preconditions ⇒ Object
readonly
Returns the value of attribute preconditions.
-
#produces_state_block ⇒ Object
readonly
Returns the value of attribute produces_state_block.
-
#steps ⇒ Object
readonly
Returns the value of attribute steps.
-
#version_string ⇒ Object
readonly
Returns the value of attribute version_string.
Instance Method Summary collapse
- #desc(text) ⇒ Object
-
#initialize(name) ⇒ Flow
constructor
A new instance of Flow.
- #param(name, required: false, secret: false, default: nil, secret_ref: nil) ⇒ Object
- #postcondition(label = "postcondition", &block) ⇒ Object
- #precondition(label = "precondition", &block) ⇒ Object
- #produces_state(&block) ⇒ Object
- #requires_browserctl(value) ⇒ Object
- #run(page: nil, client: nil, **params) ⇒ Object
- #step(label, retry_count: 0, timeout: nil, &block) ⇒ Object
- #version(value) ⇒ Object
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
#description ⇒ Object (readonly)
Returns the value of attribute description.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def description @description end |
#min_browserctl_version ⇒ Object (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 |
#name ⇒ Object (readonly)
Returns the value of attribute name.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def name @name end |
#param_defs ⇒ Object (readonly)
Returns the value of attribute param_defs.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def param_defs @param_defs end |
#postconditions ⇒ Object (readonly)
Returns the value of attribute postconditions.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def postconditions @postconditions end |
#preconditions ⇒ Object (readonly)
Returns the value of attribute preconditions.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def preconditions @preconditions end |
#produces_state_block ⇒ Object (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 |
#steps ⇒ Object (readonly)
Returns the value of attribute steps.
35 36 37 |
# File 'lib/browserctl/flow.rb', line 35 def steps @steps end |
#version_string ⇒ Object (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
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
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
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
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 |