lizarb 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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.tool-versions +1 -0
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +7 -4
  6. data/README.md +23 -64
  7. data/README_SYSTEMS.md +80 -0
  8. data/Rakefile +3 -1
  9. data/app/dev/benches/loops_bench.rb +35 -0
  10. data/app/dev/commands/calculator_command.rb +69 -0
  11. data/app/dev/commands/calculator_command_test.rb +58 -0
  12. data/app/dev/commands/circle_command.rb +70 -0
  13. data/app/dev/commands/circle_command_test.rb +76 -0
  14. data/app/dev/commands/narrative_method_command.rb +60 -0
  15. data/app/dev/commands/narrative_method_command_test.rb +36 -0
  16. data/app/dev/commands/quadratic_command.rb +66 -0
  17. data/app/dev/commands/quadratic_command_test.rb +47 -0
  18. data/app/dev/generators/bench_generator/bench.rb.erb +24 -0
  19. data/app/dev/generators/bench_generator/bench_test.rb.erb +12 -0
  20. data/app/dev/generators/bench_generator.rb +2 -51
  21. data/app/dev/generators/command_generator/command.rb.erb +26 -0
  22. data/app/dev/generators/command_generator/command_test.rb.erb +12 -0
  23. data/app/dev/generators/command_generator.rb +2 -35
  24. data/app/dev/generators/record_generator.rb +46 -0
  25. data/app/dev/generators/{model_generator_test.rb → record_generator_test.rb} +2 -2
  26. data/app/net/{models/app_model.rb → records/app_record.rb} +2 -1
  27. data/app/net/{models/post_model_test.rb → records/app_record_test.rb} +2 -2
  28. data/app/net/records/post_record.rb +4 -0
  29. data/app/net/{models/app_model_test.rb → records/post_record_test.rb} +2 -2
  30. data/app/net/records/user_record.rb +4 -0
  31. data/app/net/{models/user_model_test.rb → records/user_record_test.rb} +2 -2
  32. data/app/web/requests/api_request.rb +8 -7
  33. data/app/web/requests/assets_request.rb +12 -13
  34. data/app/web/requests/root_request.rb +6 -7
  35. data/app/web/requests/root_request_test.rb +1 -1
  36. data/app/web_box.rb +8 -0
  37. data/app_new/Procfile +1 -1
  38. data/exe/lrb +3 -0
  39. data/lib/app.rb +18 -14
  40. data/lib/dev_system/dev/controllers/bench/not_found_bench.rb +29 -0
  41. data/lib/dev_system/dev/controllers/bench/not_found_bench_test.rb +14 -0
  42. data/lib/dev_system/dev/controllers/command/bench_command.rb +11 -1
  43. data/lib/dev_system/dev/controllers/command/generate_command.rb +14 -2
  44. data/lib/dev_system/dev/controllers/command/not_found_command.rb +29 -0
  45. data/lib/dev_system/dev/controllers/command/{dev_command_test.rb → not_found_command_test.rb} +2 -2
  46. data/lib/dev_system/dev/controllers/command/{dev_command.rb → terminal_command.rb} +1 -1
  47. data/lib/dev_system/dev/controllers/command/terminal_command_test.rb +14 -0
  48. data/lib/dev_system/dev/controllers/command/test_command.rb +6 -2
  49. data/lib/dev_system/dev/controllers/generator_dsl_main_part.rb +1 -1
  50. data/lib/dev_system/dev/controllers/generators/app_generator.rb +30 -5
  51. data/lib/dev_system/dev/controllers/generators/generator_generator/generator.rb.erb +18 -0
  52. data/lib/dev_system/dev/controllers/generators/generator_generator/generator_test.rb.erb +12 -0
  53. data/lib/dev_system/dev/controllers/generators/generator_generator/template.rb.erb +9 -0
  54. data/lib/dev_system/dev/controllers/generators/generator_generator/template_test.rb.erb +12 -0
  55. data/lib/dev_system/dev/controllers/generators/generator_generator.rb +30 -0
  56. data/lib/dev_system/dev/controllers/generators/generator_generator_test.rb +12 -0
  57. data/lib/dev_system/dev/controllers/generators/not_found_generator.rb +29 -0
  58. data/lib/dev_system/dev/controllers/generators/not_found_generator_test.rb +14 -0
  59. data/lib/dev_system/dev/controllers/shell/bin_shell.rb +22 -0
  60. data/lib/dev_system/dev/controllers/shell/bin_shell_test.rb +87 -0
  61. data/lib/dev_system/dev/controllers/shell/dir_shell.rb +27 -0
  62. data/lib/dev_system/dev/controllers/shell/dir_shell_test.rb +73 -0
  63. data/lib/dev_system/dev/controllers/shell/file_shell.rb +56 -26
  64. data/lib/dev_system/dev/controllers/shell/file_shell_test.rb +143 -7
  65. data/lib/dev_system/dev/controllers/shell/text_shell.rb +23 -0
  66. data/lib/dev_system/dev/controllers/shell/text_shell_test.rb +84 -0
  67. data/lib/dev_system/dev/controllers/shell.rb +26 -14
  68. data/lib/dev_system/dev/controllers/shell_test.rb +42 -9
  69. data/lib/dev_system/dev/panels/command_panel.rb +21 -1
  70. data/lib/dev_system/dev/panels/log_panel.rb +1 -1
  71. data/lib/lerb.rb +106 -0
  72. data/lib/liza/base/controller.rb +2 -0
  73. data/lib/liza/base/panel.rb +6 -5
  74. data/lib/liza/base_parts/controller_renderer_part.rb +140 -0
  75. data/lib/liza/base_parts/controller_renderer_part_test.rb +16 -0
  76. data/lib/liza/meta/part_extension.rb +6 -1
  77. data/lib/liza/ruby_test.rb +9 -0
  78. data/lib/liza/ruby_tests/module_test.rb +21 -0
  79. data/lib/liza/ruby_tests/string_test.rb +59 -0
  80. data/lib/liza/test/test.rb +3 -1
  81. data/lib/liza/test/test_test.rb +108 -15
  82. data/lib/liza/test_parts/test_assertions_advanced_part.rb +127 -0
  83. data/lib/liza/test_parts/test_assertions_part.rb +7 -6
  84. data/lib/liza/test_parts/test_dsl_part.rb +37 -89
  85. data/lib/liza/test_parts/test_log_part.rb +124 -0
  86. data/lib/liza/test_parts/test_tree_part.rb +139 -0
  87. data/lib/liza/unit.rb +2 -0
  88. data/lib/liza/unit_parts/unit_procedure_part.rb +17 -0
  89. data/lib/liza/unit_parts/unit_procedure_part_test.rb +65 -0
  90. data/lib/liza.rb +5 -0
  91. data/lib/lizarb/ruby/module.rb +17 -0
  92. data/lib/lizarb/ruby/string.rb +10 -2
  93. data/lib/lizarb/version.rb +1 -1
  94. data/lib/lizarb.rb +24 -2
  95. data/lib/net_system/net/controllers/record.rb +31 -0
  96. data/lib/net_system/net/controllers/{model_test.rb → record_test.rb} +2 -2
  97. data/lib/web_system/dev/rack_command.rb +26 -0
  98. data/lib/web_system/dev/request_command.rb +143 -0
  99. data/lib/web_system/dev/web_command.rb +3 -34
  100. data/lib/web_system/web/controllers/rack.rb +8 -0
  101. data/lib/web_system/web/controllers/rack_test.rb +18 -0
  102. data/lib/web_system/web/controllers/request/client_error_request.rb +0 -1
  103. data/lib/web_system/web/controllers/request/not_found_request.rb +0 -1
  104. data/lib/web_system/web/controllers/request/server_error_request.rb +0 -1
  105. data/lib/web_system/web/panels/rack_panel.rb +44 -0
  106. data/lib/web_system/web/panels/rack_panel_test.rb +14 -0
  107. data/lib/web_system/web/panels/request_panel.rb +51 -32
  108. data/lib/web_system/web/panels/request_panel_test.rb +28 -9
  109. data/lib/web_system/web/web_box.rb +12 -0
  110. data/lizarb.gemspec +2 -2
  111. metadata +68 -25
  112. data/app/dev/commands/example_command.rb +0 -57
  113. data/app/dev/commands/example_command_test.rb +0 -43
  114. data/app/dev/commands/macro_child_command.rb +0 -32
  115. data/app/dev/commands/macro_child_command_test.rb +0 -7
  116. data/app/dev/commands/macro_parent_command.rb +0 -70
  117. data/app/dev/commands/macro_parent_command_test.rb +0 -7
  118. data/app/dev/commands/my_command.rb +0 -7
  119. data/app/dev/commands/my_command_test.rb +0 -7
  120. data/app/dev/generators/model_generator.rb +0 -46
  121. data/app/net/models/post_model.rb +0 -4
  122. data/app/net/models/user_model.rb +0 -4
  123. data/lib/liza/test_parts/test_context_part.rb +0 -81
  124. data/lib/net_system/net/controllers/model.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c4e73803f6fe207c86ff2e6799e3bdbe50979bbe9fb409750c067ef6ce299c5b
4
- data.tar.gz: 46c590ae60a43c0fd0b901f800da5f8761cc70baae0ace96e64a772941c6512f
3
+ metadata.gz: ebe2ac1c0a6d2e86f70577662d985ea755707a6855e67bcc0fc1e3d8f89ac563
4
+ data.tar.gz: 47544f75a230d272e38bd50adacd388d4cb8a8710da689ae24ca0fe187e7d3f6
5
5
  SHA512:
6
- metadata.gz: 1c83f9babff78a0487784c8c62bf98cf3dd44e64a01267c57bcb1bd4938c980ec09759f4069ef6819088511e25ef6e29f6acc3920ae950c71d00e43d362970c9
7
- data.tar.gz: 043bbe7ac4dc5102f3a2b8b261ff13e7a8784d6217a5474b40d8110005b4060d281cf73f938172e0487564c80427d7f63f3e2c1df6c9a3b252f6fd214052070a
6
+ metadata.gz: 8427b2e5710ccff4f9031adc64b9ad9e3fcdc4dea4565f933dc34b91f72378230b7946e020074832c8e7f44c7c5085bc0c3dc503b98d9852a2fb207b685f41b1
7
+ data.tar.gz: a8fa9c03c1cfa03947e3be6a35b610192cb2a50f5111f175b3211ee1ca35fcafbc371583c53e3b006735873fd5c07897c8dd3edcf6fb0235fac49353e19a460d
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.2
1
+ 3.2.0
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.2.0
data/Gemfile CHANGED
@@ -25,4 +25,5 @@ group :web do
25
25
  gem "rack", "~> 3.0"
26
26
  gem "rackup", "~> 0.2.2"
27
27
  gem "puma", "~> 5.6"
28
+ gem "htmlbeautifier", "~> 1.4"
28
29
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lizarb (1.0.1)
4
+ lizarb (1.0.2)
5
5
  colorize (~> 0.8)
6
6
  dotenv (~> 2.8)
7
7
  zeitwerk (~> 2.6)
@@ -13,7 +13,9 @@ GEM
13
13
  colorize (0.8.1)
14
14
  connection_pool (2.3.0)
15
15
  dotenv (2.8.1)
16
+ htmlbeautifier (1.4.2)
16
17
  method_source (1.0.0)
18
+ mini_portile2 (2.8.1)
17
19
  nio4r (2.5.8)
18
20
  pry (0.14.1)
19
21
  coderay (~> 1.1)
@@ -29,16 +31,17 @@ GEM
29
31
  redis-client (>= 0.9.0)
30
32
  redis-client (0.10.0)
31
33
  connection_pool
32
- sqlite3 (1.5.3-arm64-darwin)
33
- sqlite3 (1.5.3-x86_64-linux)
34
+ sqlite3 (1.5.4)
35
+ mini_portile2 (~> 2.8.0)
34
36
  webrick (1.7.0)
35
- zeitwerk (2.6.1)
37
+ zeitwerk (2.6.7)
36
38
 
37
39
  PLATFORMS
38
40
  arm64-darwin-21
39
41
  x86_64-linux
40
42
 
41
43
  DEPENDENCIES
44
+ htmlbeautifier (~> 1.4)
42
45
  lizarb!
43
46
  pry (~> 0.14.1)
44
47
  puma (~> 5.6)
data/README.md CHANGED
@@ -6,97 +6,56 @@ Liza is a light, experimental framework primarily developed to help study the Ru
6
6
 
7
7
  Install the gem by executing:
8
8
 
9
- $ gem install lizarb
9
+ gem install lizarb
10
10
 
11
11
  You will get the following three shims:
12
12
 
13
- $ lizarb version
14
- $ liza version
13
+ lizarb version
14
+ liza version
15
+ lrb version
15
16
 
16
- ## Try
17
-
18
- Try Liza with an interactive prompt
19
-
20
- $ liza dev
21
-
22
- ## Running Tests
23
-
24
- Run your Liza tests
25
-
26
- $ liza test
27
-
28
- ## Happy
29
-
30
- Try Liza and build an ASCII game
17
+ ## Create a liza app
31
18
 
32
- $ liza happy axo
19
+ So you can run your experiments:
33
20
 
34
- ## Networking
21
+ liza new
35
22
 
36
- Try Liza to connect with Sqlite and Redis
23
+ Then enter your automagically generated liza app:
37
24
 
38
- $ liza net
25
+ cd app_1
26
+ bundle install
39
27
 
40
- ```ruby
28
+ Now you're ready to go and try some stuff!
41
29
 
42
- NetBox.clients.get :sqlite
43
- NetBox.clients.get :redis_url
44
-
45
- NetBox.databases.sql
46
- NetBox.databases.sqlite
47
- NetBox.databases.redis
48
-
49
- RedisDb.current
50
- SqliteDb.current
51
-
52
- RedisDb.current.call "TIME"
53
- SqliteDb.current.call "SELECT name, sql FROM sqlite_master WHERE type = 'table';"
54
-
55
- ```
56
-
57
- ## Web Server
30
+ ## Try
58
31
 
59
- Try Liza with the Rack Web Server
32
+ Try Liza with an interactive terminal
60
33
 
61
- $ liza web
34
+ liza terminal
62
35
 
63
- http://localhost:3000/
64
-
65
- http://localhost:3000/xxxxxxx
66
-
67
- http://localhost:3000/api/xxxxxxx
68
-
69
- http://localhost:3000/api/auth/sign_up
70
-
71
- http://localhost:3000/api/auth/sign_in
72
-
73
- http://localhost:3000/api/auth/account
74
-
75
- http://localhost:3000/api/auth/sign_out
76
-
77
- http://localhost:3000/assets/app.css
78
-
79
- http://localhost:3000/assets/app.js
36
+ ## Running Tests
80
37
 
81
- ## Usage
38
+ Run your Liza tests
82
39
 
83
- TODO: Write usage instructions here
40
+ liza test
84
41
 
85
42
  ## Development
86
43
 
87
44
  To install dependencies, run this bash script:
88
45
 
89
- $ bin/setup
46
+ bin/setup
90
47
 
91
48
  For development experiments, use the local executable script
92
49
 
93
- $ exe/lizarb test
50
+ exe/lizarb test
94
51
 
95
52
  To build and install lizarb in your local machine
96
53
 
97
- $ bundle exec rake install
54
+ bundle exec rake install
55
+
56
+ For systems in development, see [README_SYSTEMS.md](https://github.com/rubyonrails-brasil/lizarb/blob/master/README_SYSTEMS.md).
98
57
 
99
- ## Release
58
+ ## Release
100
59
 
101
60
  To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
102
61
 
data/README_SYSTEMS.md ADDED
@@ -0,0 +1,80 @@
1
+ # Liza - Systems in Development
2
+
3
+ These systems operate at a very small capacity, and will be fleshed out in the future.
4
+
5
+ ## Happy
6
+
7
+ Try Liza and build an ASCII game
8
+
9
+ liza happy axo
10
+
11
+ ## Networking
12
+
13
+ Try Liza to connect with Sqlite and Redis
14
+
15
+ liza net
16
+
17
+ ```ruby
18
+
19
+ NetBox.clients.get :sqlite
20
+ NetBox.clients.get :redis_url
21
+
22
+ NetBox.databases.sql
23
+ NetBox.databases.sqlite
24
+ NetBox.databases.redis
25
+
26
+ RedisDb.current
27
+ SqliteDb.current
28
+
29
+ RedisDb.current.call "TIME"
30
+ SqliteDb.current.call "SELECT name, sql FROM sqlite_master WHERE type = 'table';"
31
+
32
+ ```
33
+
34
+ ## Rack Web Server
35
+
36
+ Try Liza with the Rack Web Server
37
+
38
+ liza rack
39
+
40
+ http://localhost:3000/
41
+
42
+ http://localhost:3000/xxxxxxx
43
+
44
+ http://localhost:3000/api/xxxxxxx
45
+
46
+ http://localhost:3000/api/auth/sign_up
47
+
48
+ http://localhost:3000/api/auth/sign_in
49
+
50
+ http://localhost:3000/api/auth/account
51
+
52
+ http://localhost:3000/api/auth/sign_out
53
+
54
+ http://localhost:3000/assets/app.css
55
+
56
+ http://localhost:3000/assets/app.js
57
+
58
+ ## Web Request
59
+
60
+ Try Liza with the Rack Web Server
61
+
62
+ liza request get /
63
+
64
+ liza request post /
65
+
66
+ liza request get /xxxxxxx
67
+
68
+ liza request get /api/xxxxxxx
69
+
70
+ liza request get /api/auth/sign_up
71
+
72
+ liza request get /api/auth/sign_in
73
+
74
+ liza request get /api/auth/account
75
+
76
+ liza request get /api/auth/sign_out
77
+
78
+ liza request get /assets/app.css
79
+
80
+ liza request get /assets/app.js
data/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- task default: %i[]
4
+ task default: %i[] do
5
+ system "lizarb test"
6
+ end
@@ -70,6 +70,24 @@ class LoopsBench < AppBench
70
70
  end
71
71
  end
72
72
 
73
+ mark "HASH_INT.each_pair do |i, iv|" do
74
+ HASH_INT.each_pair do |i, iv|
75
+ a = "1"
76
+ end
77
+ end
78
+
79
+ mark "HASH_STR.each_pair do |i, iv|" do
80
+ HASH_STR.each_pair do |i, iv|
81
+ a = "1"
82
+ end
83
+ end
84
+
85
+ mark "HASH_SYM.each_pair do |i, iv|" do
86
+ HASH_SYM.each_pair do |i, iv|
87
+ a = "1"
88
+ end
89
+ end
90
+
73
91
  mark "RANGE.map do |i|" do
74
92
  RANGE.map do |i|
75
93
  a = "1"
@@ -112,6 +130,17 @@ class LoopsBench < AppBench
112
130
  end
113
131
  end
114
132
 
133
+ mark "1.upto N next" do
134
+ it = 1.upto N
135
+ begin
136
+ it.next while true
137
+ rescue StopIteration
138
+ end
139
+ # do |i|
140
+ # a = "1"
141
+ # end
142
+ end
143
+
115
144
  mark "loop break" do
116
145
  i = 0
117
146
 
@@ -129,6 +158,12 @@ class LoopsBench < AppBench
129
158
  end
130
159
  end
131
160
 
161
+ mark "while inline" do
162
+ i = 0
163
+
164
+ a = "1" while (i += 1) <= N
165
+ end
166
+
132
167
  mark "begin end while" do
133
168
  i = 0
134
169
 
@@ -0,0 +1,69 @@
1
+ class CalculatorCommand < NarrativeMethodCommand
2
+ class Error < Error; end
3
+
4
+ def self.sum(a, b)= a + b
5
+ def self.sub(a, b)= a - b
6
+ def self.mul(a, b)= a * b
7
+ def self.div(a, b)= a / b
8
+
9
+ # instance methods
10
+
11
+ def validate
12
+ log "Called #{self}.#{__method__}"
13
+ raise Invalid, "liza calculator 0 + 0" if @args.size != 3
14
+
15
+ @a = @args[0].to_f
16
+ @op = @args[1].to_sym
17
+ @b = @args[2].to_f
18
+
19
+ log "@a = #{@a}"
20
+ log "@op = #{@op}"
21
+ log "@b = #{@b}"
22
+
23
+ raise Invalid, "#{@op} is not a valid operator" unless [:+, :-, :*, :/].include? @op
24
+ end
25
+
26
+ def perform
27
+ log "Called #{self}.#{__method__}"
28
+ @result = \
29
+ case @op
30
+ when :+ then self.class.sum(@a, @b)
31
+ when :- then self.class.sub(@a, @b)
32
+ when :* then self.class.mul(@a, @b)
33
+ when :/ then self.class.div(@a, @b)
34
+ end
35
+ log "RESULT: #{@result}"
36
+ log render "success.txt"
37
+ end
38
+
39
+ end
40
+
41
+ __END__
42
+
43
+ # help.txt.erb
44
+
45
+ NAME:
46
+
47
+ liza calculator
48
+
49
+ DESCRIPTION:
50
+
51
+ Calculates the result of an arithmetic operation.
52
+
53
+ USAGE:
54
+
55
+ liza calculator <a> <op> <b>
56
+
57
+ where <a> and <b> are numbers and <op> is one of the following operators:
58
+
59
+ + addition
60
+ - subtraction
61
+ * multiplication
62
+ / division
63
+
64
+ EXAMPLES:
65
+
66
+ liza calculator 1 + 2
67
+ liza calculator 3 - 4
68
+ liza calculator 5 * 6
69
+ liza calculator 7 / 8
@@ -0,0 +1,58 @@
1
+ class CalculatorCommandTest < NarrativeMethodCommandTest
2
+
3
+ test :subject_class do
4
+ assert subject_class == CalculatorCommand
5
+ end
6
+
7
+ test :settings do
8
+ assert subject_class.log_level == :normal
9
+ assert subject_class.log_color == :green
10
+ end
11
+
12
+ test :subject_class, :sum do
13
+ assert subject_class.sum(1, 2) == 3
14
+ end
15
+
16
+ test :subject_class, :sub do
17
+ assert subject_class.sub(1, 2) == -1
18
+ end
19
+
20
+ test :subject_class, :mul do
21
+ assert subject_class.mul(1, 2) == 2
22
+ end
23
+
24
+ test :subject_class, :div do
25
+ assert subject_class.div(10, 2) == 5
26
+ end
27
+
28
+ test :validate, :valid do
29
+ subject = subject_class.new
30
+ subject.instance_variable_set :@args, ["1", "+", "2"]
31
+ subject.validate
32
+ assert subject.instance_variable_get(:@a) == 1
33
+ assert subject.instance_variable_get(:@op) == :+
34
+ assert subject.instance_variable_get(:@b) == 2
35
+ end
36
+
37
+ test :validate, :invalid do
38
+ subject = subject_class.new
39
+ subject.instance_variable_set :@args, ["1", "x", "2"]
40
+ begin
41
+ subject.validate
42
+ assert false
43
+ rescue CalculatorCommand::Invalid
44
+ assert true
45
+ else
46
+ assert false
47
+ end
48
+ end
49
+
50
+ test :perform do
51
+ subject = subject_class.new
52
+ subject.instance_variable_set :@args, ["1", "+", "2"]
53
+ subject.validate
54
+ subject.perform
55
+ assert subject.instance_variable_get(:@result) == 3
56
+ end
57
+
58
+ end
@@ -0,0 +1,70 @@
1
+ class CircleCommand < NarrativeMethodCommand
2
+ class Error < Error; end
3
+
4
+ def self.area(radius)
5
+ log "Called #{self}.#{__method__} with radius #{radius}"
6
+ log "The answer is #{radius**2}π"
7
+ Math::PI * radius**2
8
+ end
9
+
10
+ def self.circumference(radius)
11
+ log "Called #{self}.#{__method__} with radius #{radius}"
12
+ log "The answer is #{radius * 2}π"
13
+ 2 * Math::PI * radius
14
+ end
15
+
16
+ # instance methods
17
+
18
+ def validate
19
+ log "Called #{self}.#{__method__}"
20
+ raise Invalid, "liza circle <formula> <radius>" if @args.size != 2
21
+ raise Invalid, "liza circle <formula> <radius>" if @args[0] != "area" && @args[0] != "circumference"
22
+
23
+ @formula = @args[0].to_sym
24
+ @radius = @args[1].to_f
25
+
26
+ log "@formula = #{@formula}"
27
+ log "@radius = #{@radius}"
28
+
29
+ raise Invalid, "radius must be greater than 0" if @radius <= 0
30
+ end
31
+
32
+ def perform
33
+ log "Called #{self}.#{__method__}"
34
+
35
+ @result = \
36
+ case @formula
37
+ when :area then self.class.area(@radius)
38
+ when :circumference then self.class.circumference(@radius)
39
+ end
40
+ log "RESULT: #{@result}"
41
+ log render "success.txt"
42
+ end
43
+
44
+ end
45
+
46
+ __END__
47
+
48
+ # help.txt.erb
49
+
50
+ NAME:
51
+
52
+ liza circle
53
+
54
+ DESCRIPTION:
55
+
56
+ Calculates a circle formula based on the radius.
57
+
58
+ USAGE:
59
+
60
+ liza circle <formula> <radius>
61
+
62
+ FORMULAS:
63
+
64
+ area - calculates the area of a circle
65
+ circumference - calculates the circumference of a circle
66
+
67
+ EXAMPLES:
68
+
69
+ liza circle area 5
70
+ liza circle circumference 5
@@ -0,0 +1,76 @@
1
+ class CircleCommandTest < NarrativeMethodCommandTest
2
+
3
+ test :subject_class do
4
+ assert subject_class == CircleCommand
5
+ end
6
+
7
+ test :settings do
8
+ assert subject_class.log_level == :normal
9
+ assert subject_class.log_color == :green
10
+ end
11
+
12
+ test :subject_class, :area do
13
+ assert subject_class.area(1) == 3.141592653589793
14
+ end
15
+
16
+ test :subject_class, :circumference do
17
+ assert subject_class.circumference(1) == 6.283185307179586
18
+ end
19
+
20
+ test :validate, :valid, :area do
21
+ subject = subject_class.new
22
+ subject.instance_variable_set :@args, ["area", "1"]
23
+ subject.validate
24
+ assert subject.instance_variable_get(:@radius) == 1
25
+ end
26
+
27
+ test :validate, :invalid, :area do
28
+ subject = subject_class.new
29
+ subject.instance_variable_set :@args, ["area", "0"]
30
+ begin
31
+ subject.validate
32
+ assert false
33
+ rescue CircleCommand::Invalid
34
+ assert true
35
+ else
36
+ assert false
37
+ end
38
+ end
39
+
40
+ test :validate, :valid, :circumference do
41
+ subject = subject_class.new
42
+ subject.instance_variable_set :@args, ["circumference", "1"]
43
+ subject.validate
44
+ assert subject.instance_variable_get(:@radius) == 1
45
+ end
46
+
47
+ test :validate, :invalid, :circumference do
48
+ subject = subject_class.new
49
+ subject.instance_variable_set :@args, ["circumference", "0"]
50
+ begin
51
+ subject.validate
52
+ assert false
53
+ rescue CircleCommand::Invalid
54
+ assert true
55
+ else
56
+ assert false
57
+ end
58
+ end
59
+
60
+ test :perform, :area do
61
+ subject = subject_class.new
62
+ subject.instance_variable_set :@args, ["area", "1"]
63
+ subject.validate
64
+ subject.perform
65
+ assert subject.instance_variable_get(:@result) == 3.141592653589793
66
+ end
67
+
68
+ test :perform, :circumference do
69
+ subject = subject_class.new
70
+ subject.instance_variable_set :@args, ["circumference", "1"]
71
+ subject.validate
72
+ subject.perform
73
+ assert subject.instance_variable_get(:@result) == 6.283185307179586
74
+ end
75
+
76
+ end
@@ -0,0 +1,60 @@
1
+ class NarrativeMethodCommand < Liza::Command
2
+ class Error < StandardError; end
3
+ class Invalid < Error; end
4
+
5
+ def self.call(args)
6
+ log "Called #{self}.#{__method__} with args #{args}"
7
+ new.call(args)
8
+ end
9
+
10
+ # instance methods
11
+
12
+ def call(args)
13
+ log "Called #{self}.#{__method__} with args #{args}"
14
+ return help if args.empty?
15
+
16
+ @args = args
17
+ validate
18
+ perform
19
+ rescue StandardError => error
20
+ @error = error
21
+ handle
22
+ ensure
23
+ @result
24
+ end
25
+
26
+ def validate
27
+ raise NotImplementedError
28
+ end
29
+
30
+ def perform
31
+ raise NotImplementedError
32
+ end
33
+
34
+ def handle
35
+ log "Called #{self}.#{__method__}"
36
+ log render "error.txt"
37
+ end
38
+
39
+ def help
40
+ log "Called #{self}.#{__method__}"
41
+ log render "help.txt"
42
+ end
43
+ end
44
+
45
+ __END__
46
+
47
+ # success.txt.erb
48
+
49
+ RESULT:
50
+
51
+ class <%= @result.class %>
52
+ value <%= @result %>
53
+
54
+ # error.txt.erb
55
+
56
+ ERROR:
57
+
58
+ class <%= @error.class %>
59
+ message <%= @error.message %>
60
+ backtrace <%= @error.backtrace.select { |s| @stop = true if s.include?("/exe/lizarb:"); !defined? @stop }.join "\n " %>
@@ -0,0 +1,36 @@
1
+ class NarrativeMethodCommandTest < Liza::CommandTest
2
+
3
+ test :subject_class do
4
+ assert subject_class == NarrativeMethodCommand
5
+ end
6
+
7
+ test :settings do
8
+ assert subject_class.log_level == :normal
9
+ assert subject_class.log_color == :green
10
+ end
11
+
12
+ test :validate, :not_implemented do
13
+ subject = subject_class.new
14
+ begin
15
+ subject.validate
16
+ assert false
17
+ rescue NotImplementedError
18
+ assert true
19
+ else
20
+ assert false
21
+ end
22
+ end
23
+
24
+ test :perform, :not_implemented do
25
+ subject = subject_class.new
26
+ begin
27
+ subject.perform
28
+ assert false
29
+ rescue NotImplementedError
30
+ assert true
31
+ else
32
+ assert false
33
+ end
34
+ end
35
+
36
+ end