state_machine 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.gitignore +11 -0
  2. data/.travis.yml +16 -0
  3. data/.yardopts +5 -0
  4. data/Appraisals +260 -0
  5. data/CHANGELOG.rdoc +15 -0
  6. data/Gemfile +3 -0
  7. data/README.rdoc +156 -29
  8. data/Rakefile +31 -57
  9. data/gemfiles/active_model-3.0.0.gemfile +7 -0
  10. data/gemfiles/active_model-3.0.0.gemfile.lock +32 -0
  11. data/gemfiles/active_model-3.0.5.gemfile +7 -0
  12. data/gemfiles/active_model-3.0.5.gemfile.lock +32 -0
  13. data/gemfiles/active_record-2.0.0.gemfile +8 -0
  14. data/gemfiles/active_record-2.0.0.gemfile.lock +30 -0
  15. data/gemfiles/active_record-2.0.5.gemfile +8 -0
  16. data/gemfiles/active_record-2.0.5.gemfile.lock +30 -0
  17. data/gemfiles/active_record-2.1.0.gemfile +8 -0
  18. data/gemfiles/active_record-2.1.0.gemfile.lock +30 -0
  19. data/gemfiles/active_record-2.1.2.gemfile +8 -0
  20. data/gemfiles/active_record-2.1.2.gemfile.lock +30 -0
  21. data/gemfiles/active_record-2.2.3.gemfile +8 -0
  22. data/gemfiles/active_record-2.2.3.gemfile.lock +30 -0
  23. data/gemfiles/active_record-2.3.12.gemfile +8 -0
  24. data/gemfiles/active_record-2.3.12.gemfile.lock +30 -0
  25. data/gemfiles/active_record-3.0.0.gemfile +8 -0
  26. data/gemfiles/active_record-3.0.0.gemfile.lock +44 -0
  27. data/gemfiles/active_record-3.0.5.gemfile +8 -0
  28. data/gemfiles/active_record-3.0.5.gemfile.lock +43 -0
  29. data/gemfiles/data_mapper-0.10.2.gemfile +12 -0
  30. data/gemfiles/data_mapper-0.10.2.gemfile.lock +45 -0
  31. data/gemfiles/data_mapper-0.9.11.gemfile +12 -0
  32. data/gemfiles/data_mapper-0.9.11.gemfile.lock +47 -0
  33. data/gemfiles/data_mapper-0.9.4.gemfile +12 -0
  34. data/gemfiles/data_mapper-0.9.4.gemfile.lock +61 -0
  35. data/gemfiles/data_mapper-0.9.7.gemfile +12 -0
  36. data/gemfiles/data_mapper-0.9.7.gemfile.lock +57 -0
  37. data/gemfiles/data_mapper-1.0.0.gemfile +12 -0
  38. data/gemfiles/data_mapper-1.0.0.gemfile.lock +53 -0
  39. data/gemfiles/data_mapper-1.0.1.gemfile +12 -0
  40. data/gemfiles/data_mapper-1.0.1.gemfile.lock +53 -0
  41. data/gemfiles/data_mapper-1.0.2.gemfile +12 -0
  42. data/gemfiles/data_mapper-1.0.2.gemfile.lock +53 -0
  43. data/gemfiles/data_mapper-1.1.0.gemfile +12 -0
  44. data/gemfiles/data_mapper-1.1.0.gemfile.lock +51 -0
  45. data/gemfiles/default.gemfile +7 -0
  46. data/gemfiles/default.gemfile.lock +24 -0
  47. data/gemfiles/mongo_mapper-0.5.5.gemfile +8 -0
  48. data/gemfiles/mongo_mapper-0.5.5.gemfile.lock +33 -0
  49. data/gemfiles/mongo_mapper-0.5.8.gemfile +8 -0
  50. data/gemfiles/mongo_mapper-0.5.8.gemfile.lock +33 -0
  51. data/gemfiles/mongo_mapper-0.6.0.gemfile +8 -0
  52. data/gemfiles/mongo_mapper-0.6.0.gemfile.lock +33 -0
  53. data/gemfiles/mongo_mapper-0.6.10.gemfile +8 -0
  54. data/gemfiles/mongo_mapper-0.6.10.gemfile.lock +33 -0
  55. data/gemfiles/mongo_mapper-0.7.0.gemfile +8 -0
  56. data/gemfiles/mongo_mapper-0.7.0.gemfile.lock +33 -0
  57. data/gemfiles/mongo_mapper-0.7.5.gemfile +8 -0
  58. data/gemfiles/mongo_mapper-0.7.5.gemfile.lock +36 -0
  59. data/gemfiles/mongo_mapper-0.8.0.gemfile +10 -0
  60. data/gemfiles/mongo_mapper-0.8.0.gemfile.lock +40 -0
  61. data/gemfiles/mongo_mapper-0.8.3.gemfile +10 -0
  62. data/gemfiles/mongo_mapper-0.8.3.gemfile.lock +40 -0
  63. data/gemfiles/mongo_mapper-0.8.4.gemfile +8 -0
  64. data/gemfiles/mongo_mapper-0.8.4.gemfile.lock +38 -0
  65. data/gemfiles/mongo_mapper-0.8.6.gemfile +8 -0
  66. data/gemfiles/mongo_mapper-0.8.6.gemfile.lock +38 -0
  67. data/gemfiles/mongo_mapper-0.9.0.gemfile +7 -0
  68. data/gemfiles/mongo_mapper-0.9.0.gemfile.lock +41 -0
  69. data/gemfiles/mongoid-2.0.0.gemfile +7 -0
  70. data/gemfiles/mongoid-2.0.0.gemfile.lock +42 -0
  71. data/gemfiles/mongoid-2.1.4.gemfile +7 -0
  72. data/gemfiles/mongoid-2.1.4.gemfile.lock +40 -0
  73. data/gemfiles/sequel-2.11.0.gemfile +8 -0
  74. data/gemfiles/sequel-2.11.0.gemfile.lock +28 -0
  75. data/gemfiles/sequel-2.12.0.gemfile +8 -0
  76. data/gemfiles/sequel-2.12.0.gemfile.lock +28 -0
  77. data/gemfiles/sequel-2.8.0.gemfile +8 -0
  78. data/gemfiles/sequel-2.8.0.gemfile.lock +28 -0
  79. data/gemfiles/sequel-3.0.0.gemfile +8 -0
  80. data/gemfiles/sequel-3.0.0.gemfile.lock +28 -0
  81. data/gemfiles/sequel-3.13.0.gemfile +8 -0
  82. data/gemfiles/sequel-3.13.0.gemfile.lock +28 -0
  83. data/gemfiles/sequel-3.14.0.gemfile +8 -0
  84. data/gemfiles/sequel-3.14.0.gemfile.lock +28 -0
  85. data/gemfiles/sequel-3.23.0.gemfile +8 -0
  86. data/gemfiles/sequel-3.23.0.gemfile.lock +28 -0
  87. data/gemfiles/sequel-3.24.0.gemfile +8 -0
  88. data/gemfiles/sequel-3.24.0.gemfile.lock +28 -0
  89. data/lib/state_machine/event.rb +13 -90
  90. data/lib/state_machine/helper_module.rb +17 -0
  91. data/lib/state_machine/integrations/active_model.rb +35 -0
  92. data/lib/state_machine/integrations/active_record.rb +41 -2
  93. data/lib/state_machine/integrations/data_mapper.rb +17 -2
  94. data/lib/state_machine/integrations/mongo_mapper.rb +34 -7
  95. data/lib/state_machine/integrations/mongoid.rb +34 -26
  96. data/lib/state_machine/integrations/mongoid/versions.rb +29 -3
  97. data/lib/state_machine/integrations/sequel.rb +22 -72
  98. data/lib/state_machine/integrations/sequel/versions.rb +87 -6
  99. data/lib/state_machine/machine.rb +279 -19
  100. data/lib/state_machine/state.rb +2 -2
  101. data/lib/state_machine/state_context.rb +133 -0
  102. data/lib/state_machine/version.rb +3 -0
  103. data/state_machine.gemspec +22 -0
  104. data/test/test_helper.rb +1 -3
  105. data/test/unit/branch_test.rb +1 -3
  106. data/test/unit/event_collection_test.rb +3 -3
  107. data/test/unit/event_test.rb +1 -3
  108. data/test/unit/helper_module_test.rb +17 -0
  109. data/test/unit/integrations/active_model_test.rb +0 -4
  110. data/test/unit/integrations/active_record_test.rb +50 -9
  111. data/test/unit/integrations/data_mapper_test.rb +267 -253
  112. data/test/unit/integrations/mongo_mapper_test.rb +47 -15
  113. data/test/unit/integrations/mongoid_test.rb +50 -8
  114. data/test/unit/integrations/sequel_test.rb +10 -6
  115. data/test/unit/machine_test.rb +206 -25
  116. data/test/unit/state_context_test.rb +421 -0
  117. data/test/unit/state_test.rb +20 -3
  118. metadata +303 -128
  119. data/lib/state_machine/condition_proxy.rb +0 -94
  120. data/test/unit/condition_proxy_test.rb +0 -328
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "dm-validations", "1.0.1"
6
+ gem "dm-observer", "1.0.1"
7
+ gem "dm-core", "1.0.1"
8
+ gem "dm-sqlite-adapter", "1.0.1"
9
+ gem "dm-transactions", "1.0.1"
10
+ gem "dm-migrations", "1.0.1"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ addressable (2.2.6)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ data_objects (0.10.6)
14
+ addressable (~> 2.1)
15
+ dm-core (1.0.1)
16
+ addressable (~> 2.2)
17
+ extlib (~> 0.9.15)
18
+ dm-do-adapter (1.0.1)
19
+ data_objects (~> 0.10.2)
20
+ dm-core (~> 1.0.1)
21
+ dm-migrations (1.0.1)
22
+ dm-core (~> 1.0.1)
23
+ dm-observer (1.0.1)
24
+ dm-core (~> 1.0.1)
25
+ dm-sqlite-adapter (1.0.1)
26
+ dm-do-adapter (~> 1.0.1)
27
+ do_sqlite3 (~> 0.10.2)
28
+ dm-transactions (1.0.1)
29
+ dm-core (~> 1.0.1)
30
+ dm-validations (1.0.1)
31
+ dm-core (~> 1.0.1)
32
+ do_sqlite3 (0.10.6)
33
+ data_objects (= 0.10.6)
34
+ extlib (0.9.15)
35
+ rake (0.9.2)
36
+ rcov (0.9.10)
37
+ ruby-graphviz (1.0.0)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ appraisal (~> 0.3.8)
44
+ dm-core (= 1.0.1)
45
+ dm-migrations (= 1.0.1)
46
+ dm-observer (= 1.0.1)
47
+ dm-sqlite-adapter (= 1.0.1)
48
+ dm-transactions (= 1.0.1)
49
+ dm-validations (= 1.0.1)
50
+ rake
51
+ rcov
52
+ ruby-graphviz (~> 1.0)
53
+ state_machine!
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "dm-validations", "1.0.2"
6
+ gem "dm-observer", "1.0.2"
7
+ gem "dm-core", "1.0.2"
8
+ gem "dm-sqlite-adapter", "1.0.2"
9
+ gem "dm-transactions", "1.0.2"
10
+ gem "dm-migrations", "1.0.2"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ addressable (2.2.6)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ data_objects (0.10.6)
14
+ addressable (~> 2.1)
15
+ dm-core (1.0.2)
16
+ addressable (~> 2.2)
17
+ extlib (~> 0.9.15)
18
+ dm-do-adapter (1.0.2)
19
+ data_objects (~> 0.10.2)
20
+ dm-core (~> 1.0.2)
21
+ dm-migrations (1.0.2)
22
+ dm-core (~> 1.0.2)
23
+ dm-observer (1.0.2)
24
+ dm-core (~> 1.0.2)
25
+ dm-sqlite-adapter (1.0.2)
26
+ dm-do-adapter (~> 1.0.2)
27
+ do_sqlite3 (~> 0.10.2)
28
+ dm-transactions (1.0.2)
29
+ dm-core (~> 1.0.2)
30
+ dm-validations (1.0.2)
31
+ dm-core (~> 1.0.2)
32
+ do_sqlite3 (0.10.6)
33
+ data_objects (= 0.10.6)
34
+ extlib (0.9.15)
35
+ rake (0.9.2)
36
+ rcov (0.9.10)
37
+ ruby-graphviz (1.0.0)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ appraisal (~> 0.3.8)
44
+ dm-core (= 1.0.2)
45
+ dm-migrations (= 1.0.2)
46
+ dm-observer (= 1.0.2)
47
+ dm-sqlite-adapter (= 1.0.2)
48
+ dm-transactions (= 1.0.2)
49
+ dm-validations (= 1.0.2)
50
+ rake
51
+ rcov
52
+ ruby-graphviz (~> 1.0)
53
+ state_machine!
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "dm-validations", "1.1.0"
6
+ gem "dm-observer", "1.1.0"
7
+ gem "dm-core", "1.1.0"
8
+ gem "dm-sqlite-adapter", "1.1.0"
9
+ gem "dm-transactions", "1.1.0"
10
+ gem "dm-migrations", "1.1.0"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,51 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ addressable (2.2.6)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ data_objects (0.10.6)
14
+ addressable (~> 2.1)
15
+ dm-core (1.1.0)
16
+ addressable (~> 2.2.4)
17
+ dm-do-adapter (1.1.0)
18
+ data_objects (~> 0.10.2)
19
+ dm-core (~> 1.1.0)
20
+ dm-migrations (1.1.0)
21
+ dm-core (~> 1.1.0)
22
+ dm-observer (1.1.0)
23
+ dm-core (~> 1.1.0)
24
+ dm-sqlite-adapter (1.1.0)
25
+ dm-do-adapter (~> 1.1.0)
26
+ do_sqlite3 (~> 0.10.2)
27
+ dm-transactions (1.1.0)
28
+ dm-core (~> 1.1.0)
29
+ dm-validations (1.1.0)
30
+ dm-core (~> 1.1.0)
31
+ do_sqlite3 (0.10.6)
32
+ data_objects (= 0.10.6)
33
+ rake (0.9.2)
34
+ rcov (0.9.10)
35
+ ruby-graphviz (1.0.0)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ appraisal (~> 0.3.8)
42
+ dm-core (= 1.1.0)
43
+ dm-migrations (= 1.1.0)
44
+ dm-observer (= 1.1.0)
45
+ dm-sqlite-adapter (= 1.1.0)
46
+ dm-transactions (= 1.1.0)
47
+ dm-validations (= 1.1.0)
48
+ rake
49
+ rcov
50
+ ruby-graphviz (~> 1.0)
51
+ state_machine!
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ appraisal (0.3.8)
10
+ bundler
11
+ rake
12
+ rake (0.9.2)
13
+ rcov (0.9.10)
14
+ ruby-graphviz (1.0.0)
15
+
16
+ PLATFORMS
17
+ ruby
18
+
19
+ DEPENDENCIES
20
+ appraisal (~> 0.3.8)
21
+ rake
22
+ rcov
23
+ ruby-graphviz (~> 1.0)
24
+ state_machine!
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "mongo_mapper", "0.5.5"
6
+ gem "activesupport", "2.3.11"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ activesupport (2.3.11)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ jnunemaker-validatable (1.7.4)
14
+ mongo (0.15.1)
15
+ mongo_mapper (0.5.5)
16
+ activesupport (>= 2.3)
17
+ jnunemaker-validatable (= 1.7.4)
18
+ mongo (= 0.15.1)
19
+ rake (0.9.2)
20
+ rcov (0.9.10)
21
+ ruby-graphviz (1.0.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (= 2.3.11)
28
+ appraisal (~> 0.3.8)
29
+ mongo_mapper (= 0.5.5)
30
+ rake
31
+ rcov
32
+ ruby-graphviz (~> 1.0)
33
+ state_machine!
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "mongo_mapper", "0.5.8"
6
+ gem "activesupport", "2.3.11"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ activesupport (2.3.11)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ jnunemaker-validatable (1.8.0)
14
+ mongo (0.16)
15
+ mongo_mapper (0.5.8)
16
+ activesupport (>= 2.3)
17
+ jnunemaker-validatable (= 1.8.0)
18
+ mongo (= 0.16)
19
+ rake (0.9.2)
20
+ rcov (0.9.10)
21
+ ruby-graphviz (1.0.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (= 2.3.11)
28
+ appraisal (~> 0.3.8)
29
+ mongo_mapper (= 0.5.8)
30
+ rake
31
+ rcov
32
+ ruby-graphviz (~> 1.0)
33
+ state_machine!
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "mongo_mapper", "0.6.0"
6
+ gem "activesupport", "2.3.11"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ activesupport (2.3.11)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ jnunemaker-validatable (1.8.1)
14
+ mongo (0.16)
15
+ mongo_mapper (0.6.0)
16
+ activesupport (>= 2.3)
17
+ jnunemaker-validatable (= 1.8.1)
18
+ mongo (= 0.16)
19
+ rake (0.9.2)
20
+ rcov (0.9.10)
21
+ ruby-graphviz (1.0.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (= 2.3.11)
28
+ appraisal (~> 0.3.8)
29
+ mongo_mapper (= 0.6.0)
30
+ rake
31
+ rcov
32
+ ruby-graphviz (~> 1.0)
33
+ state_machine!
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "mongo_mapper", "0.6.10"
6
+ gem "activesupport", "2.3.11"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ activesupport (2.3.11)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ jnunemaker-validatable (1.8.1)
14
+ mongo (0.18.2)
15
+ mongo_mapper (0.6.10)
16
+ activesupport (>= 2.3)
17
+ jnunemaker-validatable (= 1.8.1)
18
+ mongo (= 0.18.2)
19
+ rake (0.9.2)
20
+ rcov (0.9.10)
21
+ ruby-graphviz (1.0.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (= 2.3.11)
28
+ appraisal (~> 0.3.8)
29
+ mongo_mapper (= 0.6.10)
30
+ rake
31
+ rcov
32
+ ruby-graphviz (~> 1.0)
33
+ state_machine!
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "http://www.rubygems.org"
4
+
5
+ gem "mongo_mapper", "0.7.0"
6
+ gem "activesupport", "2.3.11"
7
+
8
+ gemspec :path=>"../"
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: /home/aaron/Projects/Personal/pluginaweek/state_machine
3
+ specs:
4
+ state_machine (1.0.1)
5
+
6
+ GEM
7
+ remote: http://www.rubygems.org/
8
+ specs:
9
+ activesupport (2.3.11)
10
+ appraisal (0.3.8)
11
+ bundler
12
+ rake
13
+ jnunemaker-validatable (1.8.1)
14
+ mongo (0.18.3)
15
+ mongo_mapper (0.7.0)
16
+ activesupport (>= 2.3)
17
+ jnunemaker-validatable (= 1.8.1)
18
+ mongo (= 0.18.3)
19
+ rake (0.9.2)
20
+ rcov (0.9.10)
21
+ ruby-graphviz (1.0.0)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activesupport (= 2.3.11)
28
+ appraisal (~> 0.3.8)
29
+ mongo_mapper (= 0.7.0)
30
+ rake
31
+ rcov
32
+ ruby-graphviz (~> 1.0)
33
+ state_machine!