api-regulator 0.1.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/.gitignore +16 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +221 -0
- data/LICENSE.txt +21 -0
- data/README.md +154 -0
- data/Rakefile +6 -0
- data/api-regulator.gemspec +48 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/api-regulator.rb +35 -0
- data/lib/api_regulator/api.rb +82 -0
- data/lib/api_regulator/configuration.rb +18 -0
- data/lib/api_regulator/controller_mixin.rb +60 -0
- data/lib/api_regulator/dsl.rb +30 -0
- data/lib/api_regulator/formats.rb +11 -0
- data/lib/api_regulator/open_api_generator.rb +224 -0
- data/lib/api_regulator/param.rb +55 -0
- data/lib/api_regulator/shared_schema.rb +37 -0
- data/lib/api_regulator/validation_error.rb +11 -0
- data/lib/api_regulator/validator.rb +245 -0
- data/lib/api_regulator/version.rb +3 -0
- data/lib/api_regulator.rb +1 -0
- data/lib/tasks/api_regulator_tasks.rake +67 -0
- metadata +186 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
namespace :api_docs do
|
2
|
+
desc 'Generate OpenAPI schema'
|
3
|
+
task generate: :environment do
|
4
|
+
Rails.application.eager_load!
|
5
|
+
|
6
|
+
api_definitions = ApiRegulator.configuration.base_controller_klass.descendants.flat_map(&:api_definitions)
|
7
|
+
ApiRegulator::OpenApiGenerator.generate(api_definitions)
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Upload OpenAPI schema to ReadMe"
|
11
|
+
task :upload => :environment do
|
12
|
+
# ReadMe API key and version
|
13
|
+
readme_api_key = ENV['RDME_API_KEY'] || raise("RDME_API_KEY is not set")
|
14
|
+
|
15
|
+
# ReadMe API endpoint
|
16
|
+
readme_api_endpoint = "https://dash.readme.com/api/v1/api-specification"
|
17
|
+
|
18
|
+
# Read the OpenAPI schema file
|
19
|
+
unless File.exist?(ApiRegulator.configuration.docs_path)
|
20
|
+
raise "OpenAPI schema file not found at #{ApiRegulator.configuration.docs_path}"
|
21
|
+
end
|
22
|
+
openapi_content = File.read(ApiRegulator.configuration.docs_path)
|
23
|
+
|
24
|
+
# Upload to ReadMe
|
25
|
+
require 'net/http'
|
26
|
+
require 'uri'
|
27
|
+
require 'json'
|
28
|
+
|
29
|
+
if ApiRegulator.configuration.rdme_api_id
|
30
|
+
uri = URI.parse("#{readme_api_endpoint}/#{ApiRegulator.configuration.rdme_api_id}")
|
31
|
+
request = Net::HTTP::Put.new(uri)
|
32
|
+
else
|
33
|
+
uri = URI.parse(readme_api_endpoint)
|
34
|
+
request = Net::HTTP::Post.new(uri)
|
35
|
+
end
|
36
|
+
request["Authorization"] = "Basic #{Base64.strict_encode64(readme_api_key)}"
|
37
|
+
request["Content-Type"] = "application/json"
|
38
|
+
request.body = {
|
39
|
+
spec: JSON.parse(openapi_content)
|
40
|
+
}.to_json
|
41
|
+
|
42
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
43
|
+
http.request(request)
|
44
|
+
end
|
45
|
+
|
46
|
+
if response.code.to_i == 200
|
47
|
+
puts "OpenAPI schema successfully updated!"
|
48
|
+
elsif response.code.to_i == 201
|
49
|
+
puts "OpenAPI schema successfully created!"
|
50
|
+
puts "To use this for future publishing, add this to your ApiRegulator configs:"
|
51
|
+
puts ""
|
52
|
+
puts " config.rdme_api_id = \"#{JSON.parse(response.body)["_id"]}\""
|
53
|
+
puts ""
|
54
|
+
else
|
55
|
+
puts "Failed to upload OpenAPI schema to ReadMe!"
|
56
|
+
puts "Response Code: #{response.code}"
|
57
|
+
puts "Response Body:"
|
58
|
+
pp JSON.parse(response.body)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
desc 'Generate and upload OpenAPI schema'
|
63
|
+
task publish: :environment do
|
64
|
+
Rake::Task["api_docs:generate"].invoke
|
65
|
+
Rake::Task["api_docs:upload"].invoke
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: api-regulator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Geoff Massanek
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-12-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activemodel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.5'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '12.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '12.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rails
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '7.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '7.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '5.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '5.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: byebug
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 11.1.3
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 11.1.3
|
125
|
+
description: Define your Rails APIs with a clean, familiar DSL. Validate them with
|
126
|
+
ActiveModel-like validations. Generate OpenAPI documentation.
|
127
|
+
email:
|
128
|
+
- geoff@stellarfi.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".ruby-version"
|
136
|
+
- ".travis.yml"
|
137
|
+
- Gemfile
|
138
|
+
- Gemfile.lock
|
139
|
+
- LICENSE.txt
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- api-regulator.gemspec
|
143
|
+
- bin/console
|
144
|
+
- bin/setup
|
145
|
+
- lib/api-regulator.rb
|
146
|
+
- lib/api_regulator.rb
|
147
|
+
- lib/api_regulator/api.rb
|
148
|
+
- lib/api_regulator/configuration.rb
|
149
|
+
- lib/api_regulator/controller_mixin.rb
|
150
|
+
- lib/api_regulator/dsl.rb
|
151
|
+
- lib/api_regulator/formats.rb
|
152
|
+
- lib/api_regulator/open_api_generator.rb
|
153
|
+
- lib/api_regulator/param.rb
|
154
|
+
- lib/api_regulator/shared_schema.rb
|
155
|
+
- lib/api_regulator/validation_error.rb
|
156
|
+
- lib/api_regulator/validator.rb
|
157
|
+
- lib/api_regulator/version.rb
|
158
|
+
- lib/tasks/api_regulator_tasks.rake
|
159
|
+
homepage: https://github.com/Stellarcred/stellar-gears
|
160
|
+
licenses:
|
161
|
+
- MIT
|
162
|
+
metadata:
|
163
|
+
allowed_push_host: https://rubygems.org
|
164
|
+
homepage_uri: https://github.com/Stellarcred/stellar-gears
|
165
|
+
source_code_uri: https://github.com/Stellarcred/stellar-gears
|
166
|
+
changelog_uri: https://github.com/Stellarcred/stellar-gears
|
167
|
+
post_install_message:
|
168
|
+
rdoc_options: []
|
169
|
+
require_paths:
|
170
|
+
- lib
|
171
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ">="
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
requirements: []
|
182
|
+
rubygems_version: 3.5.22
|
183
|
+
signing_key:
|
184
|
+
specification_version: 4
|
185
|
+
summary: Define, document, and validate your Rails APIs
|
186
|
+
test_files: []
|