nmachine 0.1.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/nmachine.rb +31 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bc677092c388338ac8f36eeab83810b47e25a3d223e9da7986bf890058aea7e0
4
+ data.tar.gz: ad8f929d73ab1a717890b22eb80d838e14be50c745c44886e19880415a08c1c9
5
+ SHA512:
6
+ metadata.gz: ef941d3e91e31fcc4c4ea699463081cbd0a7afc9900b4303f35633bdde463e66a4649a511e95c2e46d7875ee31171716ccf13c99d6a812b6566718f7f678393f
7
+ data.tar.gz: a8859cfc97d0f129c70fc1a61ec39e63053927fe066ee50712d227181e6695f2e9c45226fd315f4b2dcd52cb5a81e132b3285e2f961a19d8309d6ced1d79443c
data/lib/nmachine.rb ADDED
@@ -0,0 +1,31 @@
1
+ class NMachine
2
+ InvalidEventError = Class.new(ArgumentError)
3
+
4
+ attr_reader :state
5
+
6
+ def initialize(initial_state)
7
+ @state = initial_state
8
+ @events = Hash.new
9
+ end
10
+
11
+ def when(event, transistions = {}, &block)
12
+ @events[event] = [transistions, block]
13
+ end
14
+
15
+ private
16
+
17
+ def transition(event)
18
+ ensure_allowed(event)
19
+ @state = @events[event][0][state]
20
+ @events[event][1]&.call
21
+ self
22
+ end
23
+
24
+ def ensure_allowed(event)
25
+ raise InvalidEventError.new("#{event} not valid from #{state}") unless @events[event][0].has_key?(state)
26
+ end
27
+
28
+ def method_missing(m, *args, &block)
29
+ if @events.has_key?(m) then transition(m) else super end
30
+ end
31
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nmachine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Jacob Herrington
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A nanoscopic Finite State Machine. Like micromachine, but smaller.
14
+ email:
15
+ - jacobherringtondeveloper+nmachine@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/nmachine.rb
21
+ homepage: http://github.com/jacobherrington/nmachine
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubygems_version: 3.2.27
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Nanoscopic Finite State Machine
44
+ test_files: []