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 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
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.standard.yml ADDED
@@ -0,0 +1,3 @@
1
+ # For available configuration options, see:
2
+ # https://github.com/testdouble/standard
3
+ ruby_version: 3.1
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.1.0] - 2023-11-11
4
+
5
+ - Initial release
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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "standard/rake"
9
+
10
+ task default: %i[spec standard]
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mel
4
+ SCENE_FSM_VERSION = "0.1.0"
5
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ module Mel
2
+ module Scene
3
+ module Fsm
4
+ VERSION: String
5
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
6
+ end
7
+ end
8
+ 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: []