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.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +69 -0
- data/assets/Gemfile +8 -0
- data/assets/README.md +94 -0
- data/assets/configs/conductor_sender_configs.yaml +4 -0
- data/assets/endpoint_object_models/config_loaders/base_config.rb +28 -0
- data/assets/endpoint_object_models/config_loaders/conductor_config_loader.rb +18 -0
- data/assets/endpoint_object_models/json_validator/json_data_validator.rb +44 -0
- data/assets/endpoint_object_models/json_validator/json_schema_validator.rb +52 -0
- data/assets/endpoint_object_models/json_validator/json_validator.rb +34 -0
- data/assets/endpoint_object_models/loader.rb +16 -0
- data/assets/endpoint_object_models/object_models/base_endpoint_object_model.rb +22 -0
- data/assets/endpoint_object_models/object_models/base_endpoint_object_model_constants.rb +2 -0
- data/assets/endpoint_object_models/object_models/base_endpoint_object_model_methods.rb +82 -0
- data/assets/endpoint_object_models/prototypes/json_schema_data_types.rb +3 -0
- data/assets/endpoint_object_models/prototypes/request.rb +31 -0
- data/assets/features/step_definitions/base_steps.rb +56 -0
- data/assets/features/support/env.rb +9 -0
- data/assets/features/support/instance_variables.rb +9 -0
- data/assets/features/support/world.rb +12 -0
- data/assets/request_sender/conductor_sender/conductor_sender.rb +53 -0
- data/assets/request_sender/conductor_sender/response.rb +105 -0
- data/assets/request_sender/loader.rb +16 -0
- data/bin/swgr2rb +8 -0
- data/lib/cli/cli_options_parser.rb +139 -0
- data/lib/endpoint_class_config_generator/endpoint_class_config.rb +25 -0
- data/lib/endpoint_class_config_generator/endpoint_class_config_generator.rb +91 -0
- data/lib/endpoint_class_config_generator/json_paths_parser_methods.rb +68 -0
- data/lib/endpoint_class_config_generator/json_schema_definitions_parser_methods.rb +59 -0
- data/lib/endpoint_class_generator/endpoint_class_generator.rb +168 -0
- data/lib/endpoint_class_generator/endpoint_classes_generator.rb +76 -0
- data/lib/endpoint_class_generator/ruby_file_generator.rb +52 -0
- data/lib/endpoint_class_generator/ruby_file_generator_constants.rb +106 -0
- data/lib/endpoint_class_generator/schema_module_generator.rb +49 -0
- data/lib/json_fetcher/swagger_json_fetcher.rb +45 -0
- data/lib/prototypes/json_schema_data_types.rb +11 -0
- data/lib/prototypes/swgr2rb_error.rb +13 -0
- data/lib/request_sender/conductor_sender.rb +28 -0
- data/lib/request_sender/request.rb +31 -0
- data/lib/request_sender/response.rb +115 -0
- data/lib/scaffold_generator/feature_file_generator.rb +62 -0
- data/lib/scaffold_generator/scaffold_generator.rb +51 -0
- data/lib/scaffold_generator/scaffold_generator_constants.rb +19 -0
- data/lib/swgr2rb.rb +53 -0
- 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
|
data/lib/swgr2rb.rb
ADDED
@@ -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: []
|