Module: Superhosting::Helper::States
- Included in:
- Controller::Container, Controller::Site
- Defined in:
- lib/superhosting/helper/states.rb
Instance Method Summary collapse
- #method_options(method_name, options) ⇒ Object
- #on_state(states:, state_mapper:, **options) ⇒ Object
- #set_state(name:, state:) ⇒ Object
- #state(name:) ⇒ Object
Instance Method Details
#method_options(method_name, options) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/superhosting/helper/states.rb', line 38 def (method_name, ) method = self.method(method_name) opts = {} method.parameters.each do |req, name| opt = [name] opts.merge!(name => opt) end opts end |
#on_state(states:, state_mapper:, **options) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/superhosting/helper/states.rb', line 4 def on_state(states:, state_mapper:, **) current_state = state_mapper.state default: :none while (state = states[current_state.to_sym]) do method = state[:action] opts = (method, ) self.debug_block(desc: { code: :transition, data: { name: method } }) do unless (resp = self.send(method, opts)).net_status_ok? resp.net_status_ok! end if state[:next].nil? state_mapper.state.delete!(full: true, logger: false) else self.set_state(name: [:name], state: state[:next]) end end break if (current_state = state[:next]).nil? end {} rescue Exception => e undo_method = state[:undo] || :"undo_#{method}" if respond_to? undo_method self.debug_block(desc: { code: :transition_undo, data: { name: undo_method } }) do opts = (undo_method, ) self.send(undo_method, opts) end end raise end |
#set_state(name:, state:) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/superhosting/helper/states.rb', line 53 def set_state(name:, state:) state_mapper = self.state(name: name) old_state = state_mapper.value self.debug_operation(desc: { code: :change_state, data: { obj: name, from: old_state, to: state } }) do |&b| self.with_logger(logger: false) do if state.nil? state_mapper.delete!(full: full) else state_mapper.put!(state) end end b.call(code: :ok) end end |
#state(name:) ⇒ Object
48 49 50 51 |
# File 'lib/superhosting/helper/states.rb', line 48 def state(name:) self.existing_validation(name: name).net_status_ok! self.index[name][:state_mapper] end |