swgr2rb 1.0.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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +69 -0
  4. data/assets/Gemfile +8 -0
  5. data/assets/README.md +94 -0
  6. data/assets/configs/conductor_sender_configs.yaml +4 -0
  7. data/assets/endpoint_object_models/config_loaders/base_config.rb +28 -0
  8. data/assets/endpoint_object_models/config_loaders/conductor_config_loader.rb +18 -0
  9. data/assets/endpoint_object_models/json_validator/json_data_validator.rb +44 -0
  10. data/assets/endpoint_object_models/json_validator/json_schema_validator.rb +52 -0
  11. data/assets/endpoint_object_models/json_validator/json_validator.rb +34 -0
  12. data/assets/endpoint_object_models/loader.rb +16 -0
  13. data/assets/endpoint_object_models/object_models/base_endpoint_object_model.rb +22 -0
  14. data/assets/endpoint_object_models/object_models/base_endpoint_object_model_constants.rb +2 -0
  15. data/assets/endpoint_object_models/object_models/base_endpoint_object_model_methods.rb +82 -0
  16. data/assets/endpoint_object_models/prototypes/json_schema_data_types.rb +3 -0
  17. data/assets/endpoint_object_models/prototypes/request.rb +31 -0
  18. data/assets/features/step_definitions/base_steps.rb +56 -0
  19. data/assets/features/support/env.rb +9 -0
  20. data/assets/features/support/instance_variables.rb +9 -0
  21. data/assets/features/support/world.rb +12 -0
  22. data/assets/request_sender/conductor_sender/conductor_sender.rb +53 -0
  23. data/assets/request_sender/conductor_sender/response.rb +105 -0
  24. data/assets/request_sender/loader.rb +16 -0
  25. data/bin/swgr2rb +8 -0
  26. data/lib/cli/cli_options_parser.rb +139 -0
  27. data/lib/endpoint_class_config_generator/endpoint_class_config.rb +25 -0
  28. data/lib/endpoint_class_config_generator/endpoint_class_config_generator.rb +91 -0
  29. data/lib/endpoint_class_config_generator/json_paths_parser_methods.rb +68 -0
  30. data/lib/endpoint_class_config_generator/json_schema_definitions_parser_methods.rb +59 -0
  31. data/lib/endpoint_class_generator/endpoint_class_generator.rb +168 -0
  32. data/lib/endpoint_class_generator/endpoint_classes_generator.rb +76 -0
  33. data/lib/endpoint_class_generator/ruby_file_generator.rb +52 -0
  34. data/lib/endpoint_class_generator/ruby_file_generator_constants.rb +106 -0
  35. data/lib/endpoint_class_generator/schema_module_generator.rb +49 -0
  36. data/lib/json_fetcher/swagger_json_fetcher.rb +45 -0
  37. data/lib/prototypes/json_schema_data_types.rb +11 -0
  38. data/lib/prototypes/swgr2rb_error.rb +13 -0
  39. data/lib/request_sender/conductor_sender.rb +28 -0
  40. data/lib/request_sender/request.rb +31 -0
  41. data/lib/request_sender/response.rb +115 -0
  42. data/lib/scaffold_generator/feature_file_generator.rb +62 -0
  43. data/lib/scaffold_generator/scaffold_generator.rb +51 -0
  44. data/lib/scaffold_generator/scaffold_generator_constants.rb +19 -0
  45. data/lib/swgr2rb.rb +53 -0
  46. metadata +206 -0
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'scaffold_generator_constants'
4
+
5
+ module Swgr2rb
6
+ # FeatureFileGenerator generates an example feature file that uses
7
+ # scaffold's base steps to make a request to one of the endpoints
8
+ # described by generated endpoint object models.
9
+ class FeatureFileGenerator
10
+ def initialize(params)
11
+ @params = params
12
+ @filename = generate_filename
13
+ end
14
+
15
+ def generate_feature_file
16
+ File.open(@filename, 'w') do |file|
17
+ file.write(generate_lines.join("\n\n"))
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def generate_filename
24
+ File.join(ScaffoldGeneratorConstants::HARNESS_DIR,
25
+ ScaffoldGeneratorConstants::FEATURES_DIR,
26
+ @params[:component],
27
+ ScaffoldGeneratorConstants::FEATURE_FILE_NAME)
28
+ end
29
+
30
+ def generate_lines
31
+ [generate_tags,
32
+ generate_feature_name,
33
+ generate_scenario_name,
34
+ generate_steps].flatten.compact
35
+ end
36
+
37
+ def generate_tags
38
+ ScaffoldGeneratorConstants::FF_TAGS.call(@params[:component])
39
+ end
40
+
41
+ def generate_feature_name
42
+ ScaffoldGeneratorConstants::FF_NAME
43
+ end
44
+
45
+ def generate_scenario_name
46
+ ScaffoldGeneratorConstants::FF_SCENARIO.call(example_endpoint)
47
+ end
48
+
49
+ def generate_steps
50
+ ScaffoldGeneratorConstants::FF_STEPS.call(example_endpoint)
51
+ end
52
+
53
+ def example_endpoint
54
+ all_endpoints = Dir.glob(File.join(@params[:target_dir],
55
+ @params[:component],
56
+ '*.rb'))
57
+ @example_endpoint ||= all_endpoints.min
58
+ .split('/').last.sub('.rb', '')
59
+ .split('_').map(&:capitalize).join(' ')
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require_relative 'feature_file_generator'
5
+ require_relative 'scaffold_generator_constants'
6
+ require_relative '../prototypes/swgr2rb_error'
7
+
8
+ module Swgr2rb
9
+ # ScaffoldGenerator generates a scaffold of a testing framework.
10
+ class ScaffoldGenerator
11
+ include ScaffoldGeneratorConstants
12
+
13
+ class << self
14
+ def generate_scaffold
15
+ create_harness_dir
16
+ copy_scaffold
17
+ end
18
+
19
+ def generate_example_feature_file(params)
20
+ create_features_component_dir(params)
21
+ FeatureFileGenerator.new(params).generate_feature_file
22
+ end
23
+
24
+ private
25
+
26
+ def create_harness_dir
27
+ if Dir.exist?(ScaffoldGeneratorConstants::HARNESS_DIR)
28
+ unless Dir.empty?(ScaffoldGeneratorConstants::HARNESS_DIR)
29
+ raise Swgr2rbError,
30
+ 'harness directory already exists and is not empty'
31
+ end
32
+ else
33
+ Dir.mkdir(ScaffoldGeneratorConstants::HARNESS_DIR)
34
+ end
35
+ end
36
+
37
+ def copy_scaffold
38
+ FileUtils.cp_r(File.join(File.dirname(__FILE__),
39
+ ScaffoldGeneratorConstants::PATH_TO_ASSETS,
40
+ '.'),
41
+ ScaffoldGeneratorConstants::HARNESS_DIR)
42
+ end
43
+
44
+ def create_features_component_dir(params)
45
+ FileUtils.mkdir_p(File.join(ScaffoldGeneratorConstants::HARNESS_DIR,
46
+ ScaffoldGeneratorConstants::FEATURES_DIR,
47
+ params[:component]))
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Swgr2rb
4
+ module ScaffoldGeneratorConstants
5
+ ENDPOINT_MODELS_DIR = 'endpoint_object_models/object_models'
6
+ FEATURE_FILE_NAME = 'ff001_example.feature'
7
+ FEATURES_DIR = 'features/component'
8
+ HARNESS_DIR = 'harness'
9
+ PATH_TO_ASSETS = '../../assets'
10
+
11
+ FF_TAGS = proc { |component| "@component_#{component}\n@ff001" }
12
+ FF_NAME = 'Feature: Example of JSON schema validation feature file'
13
+ FF_SCENARIO = proc { |endpoint| " @ff001_tc01\n Scenario: Send get request to #{endpoint} endpoint" }
14
+ FF_STEPS = proc do |endpoint|
15
+ " When I send \"get\" request to \"#{endpoint}\"\n"\
16
+ " Then the response schema for \"get\" request to \"#{endpoint}\" endpoint should be valid\n"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'cli/cli_options_parser'
4
+ require_relative 'endpoint_class_generator/endpoint_classes_generator'
5
+ require_relative 'scaffold_generator/scaffold_generator'
6
+ require_relative 'scaffold_generator/scaffold_generator_constants'
7
+
8
+ module Swgr2rb
9
+ # Main is being called from bin/swgr2rb.
10
+ class Main
11
+ def initialize(args)
12
+ @args = args
13
+ end
14
+
15
+ def execute
16
+ @url, @params = parse_cli_arguments
17
+ generate_scaffold if @params[:from_scratch]
18
+ generate_endpoint_object_models
19
+ generate_example_feature_file if @params[:from_scratch]
20
+ format_target_dir_with_rubocop
21
+ end
22
+
23
+ private
24
+
25
+ def parse_cli_arguments
26
+ CliOptionsParser.new.parse(@args)
27
+ end
28
+
29
+ def generate_scaffold
30
+ @params.merge!(target_dir: File.join(ScaffoldGeneratorConstants::HARNESS_DIR,
31
+ ScaffoldGeneratorConstants::ENDPOINT_MODELS_DIR),
32
+ update_only: false)
33
+ puts 'Generating scaffold of the testing framework...'
34
+ ScaffoldGenerator.generate_scaffold
35
+ end
36
+
37
+ def generate_endpoint_object_models
38
+ puts "Generating endpoint classes in #{@params[:target_dir]}..."
39
+ EndpointClassesGenerator.new(@url, @params).generate_endpoint_classes
40
+ end
41
+
42
+ def generate_example_feature_file
43
+ puts 'Generating example feature file...'
44
+ ScaffoldGenerator.generate_example_feature_file(@params)
45
+ end
46
+
47
+ def format_target_dir_with_rubocop
48
+ puts 'Formatting generated endpoint object models with rubocop...'
49
+ `rubocop -x #{File.join(@params[:target_dir], @params[:component])}`
50
+ puts 'Done!'
51
+ end
52
+ end
53
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: swgr2rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrii Horodnytskyi
8
+ - Margaryta Tyshkevych
9
+ - Tetiana Pavlenko
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2020-03-06 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '5.2'
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 5.2.3
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: '5.2'
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 5.2.3
35
+ - !ruby/object:Gem::Dependency
36
+ name: mime-types
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '3.3'
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 3.3.1
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - "~>"
50
+ - !ruby/object:Gem::Version
51
+ version: '3.3'
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 3.3.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: httparty
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.17'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.17.0
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '0.17'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.17.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.78'
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 0.78.0
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '0.78'
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.78.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '3.9'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '3.9'
109
+ - !ruby/object:Gem::Dependency
110
+ name: simplecov
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: 0.18.5
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: 0.18.5
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: 0.18.5
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: 0.18.5
129
+ description:
130
+ email:
131
+ executables:
132
+ - swgr2rb
133
+ extensions: []
134
+ extra_rdoc_files: []
135
+ files:
136
+ - LICENSE
137
+ - README.md
138
+ - assets/Gemfile
139
+ - assets/README.md
140
+ - assets/configs/conductor_sender_configs.yaml
141
+ - assets/endpoint_object_models/config_loaders/base_config.rb
142
+ - assets/endpoint_object_models/config_loaders/conductor_config_loader.rb
143
+ - assets/endpoint_object_models/json_validator/json_data_validator.rb
144
+ - assets/endpoint_object_models/json_validator/json_schema_validator.rb
145
+ - assets/endpoint_object_models/json_validator/json_validator.rb
146
+ - assets/endpoint_object_models/loader.rb
147
+ - assets/endpoint_object_models/object_models/base_endpoint_object_model.rb
148
+ - assets/endpoint_object_models/object_models/base_endpoint_object_model_constants.rb
149
+ - assets/endpoint_object_models/object_models/base_endpoint_object_model_methods.rb
150
+ - assets/endpoint_object_models/prototypes/json_schema_data_types.rb
151
+ - assets/endpoint_object_models/prototypes/request.rb
152
+ - assets/features/step_definitions/base_steps.rb
153
+ - assets/features/support/env.rb
154
+ - assets/features/support/instance_variables.rb
155
+ - assets/features/support/world.rb
156
+ - assets/request_sender/conductor_sender/conductor_sender.rb
157
+ - assets/request_sender/conductor_sender/response.rb
158
+ - assets/request_sender/loader.rb
159
+ - bin/swgr2rb
160
+ - lib/cli/cli_options_parser.rb
161
+ - lib/endpoint_class_config_generator/endpoint_class_config.rb
162
+ - lib/endpoint_class_config_generator/endpoint_class_config_generator.rb
163
+ - lib/endpoint_class_config_generator/json_paths_parser_methods.rb
164
+ - lib/endpoint_class_config_generator/json_schema_definitions_parser_methods.rb
165
+ - lib/endpoint_class_generator/endpoint_class_generator.rb
166
+ - lib/endpoint_class_generator/endpoint_classes_generator.rb
167
+ - lib/endpoint_class_generator/ruby_file_generator.rb
168
+ - lib/endpoint_class_generator/ruby_file_generator_constants.rb
169
+ - lib/endpoint_class_generator/schema_module_generator.rb
170
+ - lib/json_fetcher/swagger_json_fetcher.rb
171
+ - lib/prototypes/json_schema_data_types.rb
172
+ - lib/prototypes/swgr2rb_error.rb
173
+ - lib/request_sender/conductor_sender.rb
174
+ - lib/request_sender/request.rb
175
+ - lib/request_sender/response.rb
176
+ - lib/scaffold_generator/feature_file_generator.rb
177
+ - lib/scaffold_generator/scaffold_generator.rb
178
+ - lib/scaffold_generator/scaffold_generator_constants.rb
179
+ - lib/swgr2rb.rb
180
+ homepage: https://github.com/Andry75/swgr2rb
181
+ licenses:
182
+ - MIT
183
+ metadata:
184
+ homepage_uri: https://github.com/Andry75/swgr2rb
185
+ source_code_uri: https://github.com/Andry75/swgr2rb
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 2.7.0
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ requirements: []
201
+ rubygems_version: 3.1.2
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: A gem that generates Ruby classes for JSON schema validation of API endpoints
205
+ based on their Swagger documentation.
206
+ test_files: []