mel-scene-fsm 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.standard.yml +3 -0
- data/CHANGELOG.md +5 -0
- data/README.md +8 -0
- data/Rakefile +10 -0
- data/lib/mel/scene-fsm/version.rb +5 -0
- data/lib/mel/scene-fsm.rb +76 -0
- data/sig/mel/scene/fsm.rbs +8 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3baa69e6ac3e391efa044b8353644503bc5be57ea2c86d7bba710cbffc69790c
|
4
|
+
data.tar.gz: daa40b680d0b4bb4fe612acadfec521012f9b6687fb3408437b38a13f2636a56
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: '000922db5c67676c48def20f9c4bf7f23cc95f0891df6317089d0f48263f7d83a410b07b75b9e0f4e7eb4e5ddc245861140de6385338cfbef7dd939ec8d689e9'
|
7
|
+
data.tar.gz: edb61bb2ad75d8a1a9b5166a6009f456b4c17c1aab951831c7891e485158d647c4ccaffdb3a2192ae163daeab5ed7727c792ba6fd26ab565699e5943394ca711
|
data/.rspec
ADDED
data/.standard.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# Mel::Scene::Fsm
|
2
|
+
|
3
|
+
The whole point of this gem is to extract and ecapsulate the FSM system for switching scenes in a console application.
|
4
|
+
|
5
|
+
This is only a winner if it is easy to make sets of FSM's that can switch between each other and encapsulate functionality.
|
6
|
+
|
7
|
+
Test looks promising, now to use it to refactor mobilis
|
8
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "state_machines"
|
4
|
+
require "tty-prompt"
|
5
|
+
|
6
|
+
require_relative "scene-fsm/version"
|
7
|
+
|
8
|
+
module Mel
|
9
|
+
class SceneFSM
|
10
|
+
def prompt
|
11
|
+
@prompt ||= TTY::Prompt.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def spacer
|
15
|
+
puts "|+--------------------------------------------------------+|"
|
16
|
+
end
|
17
|
+
|
18
|
+
def blank_space
|
19
|
+
puts ""
|
20
|
+
end
|
21
|
+
|
22
|
+
def ask_prompt(choices)
|
23
|
+
prompt.select("Choose your Path", choices, per_page: choices_per_page)
|
24
|
+
end
|
25
|
+
|
26
|
+
def choices_per_page
|
27
|
+
20
|
28
|
+
end
|
29
|
+
|
30
|
+
# runs a machine until completion, signaled by still_running? returning false
|
31
|
+
def visit_submachine(machine)
|
32
|
+
while machine.still_running?
|
33
|
+
machine.choose_destination
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# all states should override this method
|
38
|
+
def choices
|
39
|
+
[]
|
40
|
+
end
|
41
|
+
|
42
|
+
# all states should override this method
|
43
|
+
def display = false
|
44
|
+
|
45
|
+
# all states should override this method
|
46
|
+
def action = false
|
47
|
+
|
48
|
+
def still_running?
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# display, choices, and action methods all change per-state
|
54
|
+
def choose_destination
|
55
|
+
if (some_choices = choices)
|
56
|
+
blank_space
|
57
|
+
display
|
58
|
+
blank_space
|
59
|
+
ask_prompt(some_choices)
|
60
|
+
else
|
61
|
+
action
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def decobox(*lines)
|
66
|
+
lines = lines[0].split("\n") if lines.length == 1
|
67
|
+
max_length = lines.map(&:length).max
|
68
|
+
puts "+-#{"-" * max_length}-+"
|
69
|
+
lines.each do |line|
|
70
|
+
num_spacers = max_length - line.length
|
71
|
+
puts "| #{line}#{" " * num_spacers} |"
|
72
|
+
end
|
73
|
+
puts "+-#{"-" * max_length}-+"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mel-scene-fsm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Meleneth
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-prompt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: state_machines
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Uses TTY::Prompt and state_machines, extracted implementation
|
42
|
+
email:
|
43
|
+
- meleneth@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".rspec"
|
49
|
+
- ".standard.yml"
|
50
|
+
- CHANGELOG.md
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/mel/scene-fsm.rb
|
54
|
+
- lib/mel/scene-fsm/version.rb
|
55
|
+
- sig/mel/scene/fsm.rbs
|
56
|
+
homepage: https://github.com/meleneth/mel-scene-fsm
|
57
|
+
licenses: []
|
58
|
+
metadata:
|
59
|
+
homepage_uri: https://github.com/meleneth/mel-scene-fsm
|
60
|
+
source_code_uri: https://github.com/meleneth/mel-scene-fsm
|
61
|
+
changelog_uri: https://github.com/meleneth/mel-scene-fsm/CHANGELOG.md
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 3.0.0
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubygems_version: 3.4.22
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: FSM base configured to run multiple choice based text UI's
|
81
|
+
test_files: []
|