ruby_raider 0.1.9 → 0.2.2

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/.reek.yml +3 -0
  3. data/.rubocop.yml +6 -0
  4. data/README.md +5 -6
  5. data/Rakefile +2 -0
  6. data/bin/raider +1 -0
  7. data/lib/generators/automation_generator.rb +45 -0
  8. data/lib/generators/common_generator.rb +31 -0
  9. data/lib/generators/cucumber_generator.rb +19 -0
  10. data/lib/generators/generator.rb +16 -0
  11. data/lib/generators/helper_generator.rb +48 -0
  12. data/lib/generators/menu_generator.rb +27 -14
  13. data/lib/generators/rspec_generator.rb +16 -0
  14. data/lib/generators/templates/automation/abstract_component.tt +7 -0
  15. data/lib/generators/templates/automation/abstract_page.tt +10 -0
  16. data/lib/generators/templates/automation/appium_settings.tt +8 -0
  17. data/lib/generators/templates/automation/component.tt +9 -0
  18. data/lib/generators/templates/automation/confirmation_page.tt +19 -0
  19. data/lib/generators/templates/automation/home_page.tt +20 -0
  20. data/lib/generators/templates/automation/login_page.tt +8 -0
  21. data/lib/generators/templates/automation/partials/appium_login.tt +28 -0
  22. data/lib/generators/templates/automation/partials/driver_selector.tt +9 -0
  23. data/lib/generators/templates/automation/partials/element.tt +5 -0
  24. data/lib/generators/templates/automation/partials/require_raider.tt +5 -0
  25. data/lib/generators/templates/automation/partials/selenium_login.tt +40 -0
  26. data/lib/generators/templates/automation/partials/url_methods.tt +13 -0
  27. data/lib/generators/templates/automation/partials/visit_method.tt +9 -0
  28. data/lib/generators/templates/automation/partials/watir_login.tt +41 -0
  29. data/lib/generators/templates/common/config.tt +1 -0
  30. data/lib/generators/templates/common/gemfile.tt +19 -0
  31. data/lib/generators/templates/common/partials/automation_gems.tt +10 -0
  32. data/lib/generators/templates/common/rakefile.tt +8 -0
  33. data/lib/generators/templates/common/read_me.tt +97 -0
  34. data/lib/generators/templates/cucumber/env.tt +8 -0
  35. data/lib/generators/templates/cucumber/feature.tt +6 -0
  36. data/lib/generators/templates/cucumber/partials/appium_env.tt +13 -0
  37. data/lib/generators/templates/cucumber/partials/mobile_steps.tt +17 -0
  38. data/lib/generators/templates/cucumber/partials/selenium_appium_env.tt +13 -0
  39. data/lib/generators/templates/cucumber/partials/watir_env.tt +13 -0
  40. data/lib/generators/templates/cucumber/partials/web_steps.tt +15 -0
  41. data/lib/generators/templates/cucumber/steps.tt +5 -0
  42. data/lib/generators/templates/helpers/allure_helper.tt +32 -0
  43. data/lib/generators/templates/helpers/browser_helper.tt +19 -0
  44. data/lib/generators/templates/helpers/driver_helper.tt +18 -0
  45. data/lib/generators/templates/helpers/partials/allure_imports.tt +5 -0
  46. data/lib/generators/templates/helpers/partials/allure_requirements.tt +6 -0
  47. data/lib/generators/templates/helpers/partials/driver_requirements.tt +14 -0
  48. data/lib/generators/templates/helpers/partials/new_driver.tt +11 -0
  49. data/lib/generators/templates/helpers/partials/quit_driver.tt +8 -0
  50. data/lib/generators/templates/helpers/partials/require_automation.tt +5 -0
  51. data/lib/generators/templates/helpers/partials/screenshot.tt +8 -0
  52. data/lib/generators/templates/helpers/pom_helper.tt +19 -0
  53. data/lib/generators/templates/helpers/raider_helper.tt +15 -0
  54. data/lib/generators/templates/helpers/selenium_helper.tt +36 -0
  55. data/lib/generators/templates/helpers/spec_helper.tt +37 -0
  56. data/lib/generators/templates/helpers/watir_helper.tt +16 -0
  57. data/lib/generators/templates/rspec/base_spec.tt +5 -0
  58. data/lib/generators/templates/rspec/spec.tt +37 -0
  59. data/lib/ruby_raider.rb +5 -4
  60. data/ruby_raider.gemspec +7 -1
  61. data/spec/automation_generator_spec.rb +192 -0
  62. data/spec/common_generator_spec.rb +141 -0
  63. data/spec/cucumber_generator_spec.rb +71 -0
  64. data/spec/helpers_generator_spec.rb +133 -0
  65. data/spec/rspec_generator_spec.rb +63 -0
  66. data/spec/spec_helper.rb +3 -3
  67. metadata +116 -43
  68. data/lib/generators/files/automation_file_generator.rb +0 -61
  69. data/lib/generators/files/common_file_generator.rb +0 -38
  70. data/lib/generators/files/cucumber_file_generator.rb +0 -33
  71. data/lib/generators/files/file_generator.rb +0 -11
  72. data/lib/generators/files/helpers_file_generator.rb +0 -70
  73. data/lib/generators/files/rspec_file_generator.rb +0 -29
  74. data/lib/generators/projects/cucumber_project_generator.rb +0 -34
  75. data/lib/generators/projects/project_generator.rb +0 -27
  76. data/lib/generators/projects/rspec_project_generator.rb +0 -26
  77. data/lib/generators/templates/automation/abstract_component_template.rb +0 -22
  78. data/lib/generators/templates/automation/abstract_page_template.rb +0 -82
  79. data/lib/generators/templates/automation/appium_settings_template.rb +0 -16
  80. data/lib/generators/templates/automation/component_template.rb +0 -16
  81. data/lib/generators/templates/automation/confirmation_page_template.rb +0 -26
  82. data/lib/generators/templates/automation/home_page_template.rb +0 -26
  83. data/lib/generators/templates/automation/login_page_template.rb +0 -113
  84. data/lib/generators/templates/common/config_template.rb +0 -9
  85. data/lib/generators/templates/common/gemfile_template.rb +0 -52
  86. data/lib/generators/templates/common/rake_file_template.rb +0 -16
  87. data/lib/generators/templates/common/read_me_template.rb +0 -104
  88. data/lib/generators/templates/cucumber/env_template.rb +0 -38
  89. data/lib/generators/templates/cucumber/example_feature_template.rb +0 -15
  90. data/lib/generators/templates/cucumber/example_steps_template.rb +0 -21
  91. data/lib/generators/templates/helpers/allure_helper_template.rb +0 -47
  92. data/lib/generators/templates/helpers/browser_helper_template.rb +0 -26
  93. data/lib/generators/templates/helpers/driver_helper_template.rb +0 -54
  94. data/lib/generators/templates/helpers/pom_helper_template.rb +0 -25
  95. data/lib/generators/templates/helpers/raider_helper_template.rb +0 -27
  96. data/lib/generators/templates/helpers/selenium_helper_template.rb +0 -42
  97. data/lib/generators/templates/helpers/spec_helper_template.rb +0 -74
  98. data/lib/generators/templates/helpers/watir_helper_template.rb +0 -24
  99. data/lib/generators/templates/rspec/base_spec_template.rb +0 -13
  100. data/lib/generators/templates/rspec/example_spec_template.rb +0 -56
  101. data/lib/generators/templates/template.rb +0 -14
  102. data/spec/automation_file_generator_spec.rb +0 -59
  103. data/spec/common_file_generator_spec.rb +0 -27
  104. data/spec/cucumber_file_generator_spec.rb +0 -26
  105. data/spec/cucumber_project_generator_spec.rb +0 -60
  106. data/spec/helpers_file_generator_spec.rb +0 -73
  107. data/spec/rspec_file_generator_spec.rb +0 -21
  108. data/spec/rspec_project_generator_spec.rb +0 -69
@@ -1,74 +0,0 @@
1
- require_relative '../template'
2
-
3
- class SpecHelperTemplate < Template
4
- def require_driver
5
- "require_relative '#{@automation == 'watir' ? 'browser_helper' : 'driver_helper'}'"
6
- end
7
-
8
- def select_helper
9
- @automation == 'watir' ? 'BrowserHelper.new_browser' : 'DriverHelper.new_driver'
10
- end
11
-
12
- def before_configuration
13
- driver_setup = if %w[selenium watir].include?(@automation)
14
- select_helper
15
- else
16
- <<-EOF.chomp
17
- #{select_helper}
18
- DriverHelper.driver.start_driver
19
- EOF
20
- end
21
-
22
- <<-EOF.chomp
23
-
24
- config.before(:each) do
25
- #{driver_setup}
26
- end
27
- EOF
28
- end
29
-
30
- def quit_driver
31
- case @automation
32
- when 'selenium'
33
- 'DriverHelper.driver.quit'
34
- when 'watir'
35
- 'BrowserHelper.browser.quit'
36
- else
37
- 'DriverHelper.driver.quit_driver'
38
- end
39
- end
40
-
41
- def save_screenshot
42
- driver = @automation == 'watir' ? 'browser' : 'driver'
43
- "#{driver}.save_screenshot(\"allure-results/screenshots/\#{example_name}.png\") if status == :failed"
44
- end
45
-
46
- def body
47
- <<~EOF
48
- require 'active_support/all'
49
- require 'rspec'
50
- require_relative 'allure_helper'
51
- #{require_driver}
52
-
53
- module Raider
54
- module SpecHelper
55
-
56
- AllureHelper.configure
57
-
58
- RSpec.configure do |config|
59
- config.formatter = AllureHelper.formatter
60
- #{before_configuration}
61
-
62
- config.after(:each) do
63
- example_name = self.class.descendant_filtered_examples.first.description
64
- status = self.class.descendant_filtered_examples.first.execution_result.status
65
- #{save_screenshot}
66
- AllureHelper.add_screenshot example_name if status == :failed
67
- #{quit_driver}
68
- end
69
- end
70
- end
71
- end
72
- EOF
73
- end
74
- end
@@ -1,24 +0,0 @@
1
- require_relative '../template'
2
-
3
- class WatirHelperTemplate < Template
4
- def body
5
- <<~EOF
6
- require 'watir'
7
-
8
- module Raider
9
- module WatirHelper
10
- refine Watir::Element do
11
- def click_when_present
12
- wait_until_present
13
- self.click
14
- end
15
-
16
- def wait_until_present
17
- self.wait_until(&:present?)
18
- end
19
- end
20
- end
21
- end
22
- EOF
23
- end
24
- end
@@ -1,13 +0,0 @@
1
- require_relative '../template'
2
-
3
- class BaseSpecTemplate < Template
4
- def body
5
- <<~EOF
6
- require_relative '../helpers/raider'
7
-
8
- class BaseSpec
9
- include Raider::SpecHelper
10
- end
11
- EOF
12
- end
13
- end
@@ -1,56 +0,0 @@
1
- require_relative '../template'
2
-
3
- class ExampleSpecTemplate < Template
4
- def examples
5
- if %w[selenium watir].include? @automation
6
- <<-EOF.chomp
7
- describe 'Login' do
8
- before(:each) do
9
- LoginPage.visit
10
- end
11
-
12
- it 'can login with valid credentials' do
13
- LoginPage.login('aguspe', '12341234')
14
- expect(LoginPage.header.customer_name).to eq 'Welcome back Agustin'
15
- end
16
-
17
- it 'cannot login with wrong credentials' do
18
- LoginPage.login('aguspe', 'wrongPassword')
19
- expect(LoginPage.header.customer_name).to be_empty
20
- end
21
- end
22
- EOF
23
- else
24
- <<-EOF.chomp
25
- describe 'Login' do
26
- it 'Login with valid credentials' do
27
- HomePage.go_to_login
28
- LoginPage.login('alice', 'mypassword')
29
- expect(ConfirmationPage.login_message).to eq 'You are logged in as alice'
30
- end
31
- end
32
- EOF
33
- end
34
- end
35
-
36
- def requirements
37
- unless %w[selenium watir].include? @automation
38
- <<~EOF.chomp
39
- require_relative '../page_objects/pages/confirmation_page'
40
- require_relative '../page_objects/pages/home_page'
41
- EOF
42
- end
43
- end
44
-
45
- def body
46
- <<~EOF
47
- #{requirements}
48
- require_relative 'base_spec'
49
- require_relative '../page_objects/pages/login_page'
50
-
51
- class LoginSpec < BaseSpec
52
- #{examples}
53
- end
54
- EOF
55
- end
56
- end
@@ -1,14 +0,0 @@
1
- require 'erb'
2
-
3
- class Template
4
- def initialize(args = {})
5
- @automation = args[:automation]
6
- @name = args[:name]
7
- @framework = args[:framework]
8
- end
9
-
10
- def parsed_body
11
- parsed_body = ERB.new body
12
- parsed_body.result(binding)
13
- end
14
- end
@@ -1,59 +0,0 @@
1
- require_relative '../lib/generators/files/automation_file_generator'
2
- require_relative 'spec_helper'
3
-
4
- describe RubyRaider::AutomationFileGenerator do
5
- context 'On a web project' do
6
- before(:all) do
7
- @name = 'Rspec-watir-1'
8
- RubyRaider::RspecProjectGenerator.generate_rspec_project('watir', @name)
9
- end
10
-
11
- it 'creates a login page file' do
12
- expect(File.exist?("#{@name}/page_objects/pages/login_page.rb")).to be_truthy
13
- end
14
-
15
- it 'creates an abstract page file' do
16
- expect(File.exist?("#{@name}/page_objects/abstract/abstract_page.rb")).to be_truthy
17
- end
18
-
19
- it 'creates an abstract component file' do
20
- expect(File.exist?("#{@name}/page_objects/abstract/abstract_component.rb")).to be_truthy
21
- end
22
-
23
- it 'creates a component file' do
24
- expect(File.exist?("#{@name}/page_objects/components/header_component.rb")).to be_truthy
25
- end
26
-
27
- it 'creates a gemfile file' do
28
- expect(File.exist?("#{@name}/Gemfile")).to be_truthy
29
- end
30
-
31
- after(:all) do
32
- FileUtils.rm_rf(@name)
33
- end
34
-
35
- context 'On a mobile project' do
36
- before(:all) do
37
- @name = 'Rspec-appium-ios'
38
- RubyRaider::RspecProjectGenerator.generate_rspec_project('appium_ios', @name)
39
- end
40
-
41
- it 'creates a login page file' do
42
- expect(File.exist?("#{@name}/page_objects/pages/home_page.rb")).to be_truthy
43
- end
44
-
45
- it 'creates a login page file' do
46
- expect(File.exist?("#{@name}/page_objects/pages/confirmation_page.rb")).to be_truthy
47
- end
48
-
49
- it 'creates a login page file' do
50
- expect(File.exist?("#{@name}/appium.txt")).to be_truthy
51
- end
52
-
53
- after(:all) do
54
- FileUtils.rm_rf(@name)
55
- end
56
- end
57
- end
58
- end
59
-
@@ -1,27 +0,0 @@
1
- require_relative '../lib/generators/files/common_file_generator'
2
- require_relative 'spec_helper'
3
-
4
- describe RubyRaider::CommonFileGenerator do
5
- before(:all) do
6
- @name = 'Cucumber-watir-1'
7
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
8
- end
9
-
10
- it 'creates a config file' do
11
- expect(File.exist?("#{@name}/config/config.yml")).to be_truthy
12
- end
13
-
14
- it 'creates a rake file' do
15
- expect(File.exist?("#{@name}/Rakefile")).to be_truthy
16
- end
17
-
18
- it 'creates a readMe file' do
19
- expect(File.exist?("#{@name}/Readme.md")).to be_truthy
20
- end
21
-
22
- after(:all) do
23
- FileUtils.rm_rf(@name)
24
- end
25
- end
26
-
27
-
@@ -1,26 +0,0 @@
1
- require_relative '../lib/generators/files/rspec_file_generator'
2
- require_relative 'spec_helper'
3
-
4
- describe RubyRaider::RspecFileGenerator do
5
- before(:all) do
6
- @name = 'Cucumber-watir-2'
7
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
8
- end
9
-
10
- it 'creates a feature file' do
11
- expect(File.exist?("#{@name}/features/login.feature")).to be_truthy
12
- end
13
-
14
- it 'creates a step definitions file' do
15
- expect(File.exist?("#{@name}/features/step_definitions/login_steps.rb")).to be_truthy
16
- end
17
-
18
- it 'creates an env file' do
19
- expect(File.exist?("#{@name}/features/support/env.rb")).to be_truthy
20
- end
21
-
22
- after(:all) do
23
- FileUtils.rm_rf(@name)
24
- end
25
- end
26
-
@@ -1,60 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- describe RubyRaider::CucumberProjectGenerator do
4
- before(:all) do
5
- @name = 'Cucumber'
6
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project('selenium', @name)
7
- end
8
-
9
- it 'creates a project folder' do
10
- expect(Dir.exist?(@name)).to be_truthy
11
- end
12
-
13
- it 'creates a features folder' do
14
- expect(Dir.exist?("#{@name}/features")).to be_truthy
15
- end
16
-
17
- it 'creates a config folder' do
18
- expect(Dir.exist?("#{@name}/config")).to be_truthy
19
- end
20
-
21
- it 'creates a page_objects object folder' do
22
- expect(Dir.exist?("#{@name}/page_objects")).to be_truthy
23
- end
24
-
25
- it 'creates an allure results folder' do
26
- expect(Dir.exist?("#{@name}/allure-results")).to be_truthy
27
- end
28
-
29
- it 'creates a step definitions folder' do
30
- expect(Dir.exist?("#{@name}/features/step_definitions")).to be_truthy
31
- end
32
-
33
- it 'creates a support folder' do
34
- expect(Dir.exist?("#{@name}/features/support")).to be_truthy
35
- end
36
-
37
- it 'creates a helpers folder' do
38
- expect(Dir.exist?("#{@name}/features/support/helpers")).to be_truthy
39
- end
40
-
41
- it 'creates an abstract folder' do
42
- expect(Dir.exist?("#{@name}/page_objects/abstract")).to be_truthy
43
- end
44
-
45
- it 'creates a pages folder' do
46
- expect(Dir.exist?("#{@name}/page_objects/pages")).to be_truthy
47
- end
48
-
49
- it 'creates a components folder' do
50
- expect(Dir.exist?("#{@name}/page_objects/components")).to be_truthy
51
- end
52
-
53
- it 'creates a screenshot folder' do
54
- expect(Dir.exist?("#{@name}/allure-results/screenshots")).to be_truthy
55
- end
56
-
57
- after(:all) do
58
- FileUtils.rm_rf(@name)
59
- end
60
- end
@@ -1,73 +0,0 @@
1
- require_relative '../lib/generators/files/helpers_file_generator'
2
- require_relative 'spec_helper'
3
-
4
- describe RubyRaider::HelpersFileGenerator do
5
- context 'When the users selects rspec' do
6
- before(:all) do
7
- @name = 'Rspec-watir-2'
8
- RubyRaider::RspecProjectGenerator.generate_rspec_project('selenium', @name)
9
- end
10
-
11
- it 'creates a raider file' do
12
- expect(File.exist?("#{@name}/helpers/raider.rb")).to be_truthy
13
- end
14
-
15
- it 'creates an allure helper file' do
16
- expect(File.exist?("#{@name}/helpers/allure_helper.rb")).to be_truthy
17
- end
18
-
19
- it 'creates a driver helper file', :watir do
20
- expect(File.exist?("#{@name}/helpers/driver_helper.rb")).to be_truthy
21
- end
22
-
23
- it 'creates a pom helper file' do
24
- expect(File.exist?("#{@name}/helpers/pom_helper.rb")).to be_truthy
25
- end
26
-
27
- it 'creates a spec helper file' do
28
- expect(File.exist?("#{@name}/helpers/spec_helper.rb")).to be_truthy
29
- end
30
-
31
- it 'creates a watir helper file' do
32
- expect(File.exist?("#{@name}/helpers/allure_helper.rb")).to be_truthy
33
- end
34
-
35
- after(:all) do
36
- FileUtils.rm_rf(@name)
37
- end
38
- end
39
-
40
- context 'when the user selects cucumber' do
41
- before(:all) do
42
- @name = 'Cucumber-watir-3'
43
- RubyRaider::CucumberProjectGenerator.generate_cucumber_project('watir', @name)
44
- end
45
-
46
- it 'creates a raider file' do
47
- expect(File.exist?("#{@name}/features/support/helpers/raider.rb")).to be_truthy
48
- end
49
-
50
- it 'creates an allure helper file' do
51
- expect(File.exist?("#{@name}/features/support/helpers/allure_helper.rb")).to be_truthy
52
- end
53
-
54
- it 'creates a browser helper file', :watir do
55
- expect(File.exist?("#{@name}/features/support/helpers/browser_helper.rb")).to be_truthy
56
- end
57
-
58
- it 'creates a pom helper file' do
59
- expect(File.exist?("#{@name}/features/support/helpers/pom_helper.rb")).to be_truthy
60
- end
61
-
62
- it 'creates a watir helper file' do
63
- expect(File.exist?("#{@name}/features/support/helpers/allure_helper.rb")).to be_truthy
64
- end
65
-
66
- after(:all) do
67
- FileUtils.rm_rf(@name)
68
- end
69
- end
70
- end
71
-
72
-
73
-
@@ -1,21 +0,0 @@
1
- require_relative '../lib/generators/files/rspec_file_generator'
2
- require_relative 'spec_helper'
3
-
4
- describe RubyRaider::RspecFileGenerator do
5
- before(:all) do
6
- @name = 'Rspec-watir-3'
7
- RubyRaider::RspecProjectGenerator.generate_rspec_project('watir', @name)
8
- end
9
-
10
- it 'creates a spec file' do
11
- expect(File.exist?("#{@name}/spec/login_page_spec.rb")).to be_truthy
12
- end
13
-
14
- it 'creates the base spec file' do
15
- expect(File.exist?("#{@name}/spec/base_spec.rb")).to be_truthy
16
- end
17
-
18
- after(:all) do
19
- FileUtils.rm_rf(@name)
20
- end
21
- end
@@ -1,69 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- describe RubyRaider::RspecProjectGenerator do
4
- context 'On a web project' do
5
- before(:all) do
6
- @name = 'Rspec'
7
- RubyRaider::RspecProjectGenerator.generate_rspec_project('selenium', @name)
8
- end
9
-
10
- it 'creates a project folder' do
11
- expect(Dir.exist?(@name)).to be_truthy
12
- end
13
-
14
- it 'creates a spec folder' do
15
- expect(Dir.exist?("#{@name}/spec")).to be_truthy
16
- end
17
-
18
- it 'creates a page objects folder' do
19
- expect(Dir.exist?("#{@name}/page_objects")).to be_truthy
20
- end
21
-
22
- it 'creates an abstract page object folder' do
23
- expect(Dir.exist?("#{@name}/page_objects/abstract")).to be_truthy
24
- end
25
-
26
- it 'creates a pages folder' do
27
- expect(Dir.exist?("#{@name}/page_objects/pages")).to be_truthy
28
- end
29
-
30
- it 'creates a components folder' do
31
- expect(Dir.exist?("#{@name}/page_objects/components")).to be_truthy
32
- end
33
-
34
- it 'creates a helper folder' do
35
- expect(Dir.exist?("#{@name}/helpers")).to be_truthy
36
- end
37
-
38
- it 'creates a data folder' do
39
- expect(Dir.exist?("#{@name}/data")).to be_truthy
40
- end
41
-
42
- it 'creates a config folder' do
43
- expect(Dir.exist?("#{@name}/config")).to be_truthy
44
- end
45
-
46
- after(:all) do
47
- FileUtils.rm_rf(@name)
48
- end
49
- end
50
-
51
- context 'On a mobile project' do
52
- before(:all) do
53
- @name = 'appium-ios-1'
54
- RubyRaider::RspecProjectGenerator.generate_rspec_project('appium_ios', @name)
55
- end
56
-
57
- it "doesn't creates a config folder" do
58
- expect(Dir.exist?("#{@name}/config")).to be_falsey
59
- end
60
-
61
- it "doesn't creates a components folder" do
62
- expect(Dir.exist?("#{@name}/page_objects/components")).to be_falsey
63
- end
64
-
65
- after(:all) do
66
- FileUtils.rm_rf(@name)
67
- end
68
- end
69
- end