fictium 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.github/pull_request_template.md +15 -0
  3. data/.gitignore +22 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +32 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +13 -0
  8. data/CHANGELOG.md +28 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +4 -0
  11. data/Gemfile.lock +216 -0
  12. data/LICENSE +201 -0
  13. data/LICENSE.txt +21 -0
  14. data/README.md +108 -0
  15. data/Rakefile +10 -0
  16. data/app/.keep +0 -0
  17. data/bin/console +14 -0
  18. data/bin/setup +8 -0
  19. data/fictium.gemspec +57 -0
  20. data/lib/fictium/configurations/configuration.rb +87 -0
  21. data/lib/fictium/configurations/info.rb +12 -0
  22. data/lib/fictium/engine.rb +6 -0
  23. data/lib/fictium/evaluators/parameter_evaluator.rb +57 -0
  24. data/lib/fictium/evaluators/schema_evaluator.rb +7 -0
  25. data/lib/fictium/exporters/open_api/schemas/3.0.0.json +1654 -0
  26. data/lib/fictium/exporters/open_api/v3_exporter/content_formatter.rb +20 -0
  27. data/lib/fictium/exporters/open_api/v3_exporter/example_formatter.rb +46 -0
  28. data/lib/fictium/exporters/open_api/v3_exporter/param_formatter.rb +45 -0
  29. data/lib/fictium/exporters/open_api/v3_exporter/path_formatter.rb +60 -0
  30. data/lib/fictium/exporters/open_api/v3_exporter/path_generator.rb +37 -0
  31. data/lib/fictium/exporters/open_api/v3_exporter.rb +79 -0
  32. data/lib/fictium/loader.rb +15 -0
  33. data/lib/fictium/poros/action.rb +43 -0
  34. data/lib/fictium/poros/document.rb +19 -0
  35. data/lib/fictium/poros/example.rb +15 -0
  36. data/lib/fictium/poros/model.rb +4 -0
  37. data/lib/fictium/poros/resource.rb +16 -0
  38. data/lib/fictium/railtie.rb +4 -0
  39. data/lib/fictium/rspec/actions.rb +40 -0
  40. data/lib/fictium/rspec/autocomplete/action.rb +52 -0
  41. data/lib/fictium/rspec/autocomplete/example.rb +45 -0
  42. data/lib/fictium/rspec/autocomplete/params.rb +79 -0
  43. data/lib/fictium/rspec/autocomplete/resource.rb +20 -0
  44. data/lib/fictium/rspec/examples.rb +48 -0
  45. data/lib/fictium/rspec/proxies/action.rb +11 -0
  46. data/lib/fictium/rspec/proxies/base.rb +25 -0
  47. data/lib/fictium/rspec/proxies/example.rb +15 -0
  48. data/lib/fictium/rspec/proxy_handler.rb +11 -0
  49. data/lib/fictium/rspec/resources.rb +41 -0
  50. data/lib/fictium/rspec.rb +39 -0
  51. data/lib/fictium/version.rb +5 -0
  52. data/lib/fictium.rb +29 -0
  53. data/tasks/.keep +0 -0
  54. data/tasks/travis/analyze.rb +12 -0
  55. metadata +321 -0
@@ -0,0 +1,48 @@
1
+ module Fictium
2
+ module RSpec
3
+ module Examples
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ metadata[:fictium_example] = metadata[:fictium_action].add_example
8
+ metadata[:fictium_example].summary = metadata[:description]
9
+
10
+ context 'with documentation' do
11
+ let(:metadata) { self.class.metadata }
12
+
13
+ it 'documents the example' do
14
+ expect(metadata[:fictium_example]).to be_present
15
+ Fictium::RSpec::Autocomplete::Example.process_http_response(
16
+ metadata[:fictium_example],
17
+ response
18
+ )
19
+ end
20
+ end
21
+ end
22
+
23
+ class_methods do
24
+ def default_example
25
+ metadata[:fictium_example].default = true
26
+ metadata[:fictium_schema] = Fictium::SchemaEvaluator.new
27
+ end
28
+
29
+ def request_schema(obj)
30
+ metadata[:fictium_example].request ||= {}
31
+ metadata[:fictium_example].request[:schema] =
32
+ metadata[:fictium_schema].format(obj)
33
+ end
34
+
35
+ def response_schema(obj)
36
+ metadata[:fictium_example].response ||= {}
37
+ metadata[:fictium_example].response[:schema] =
38
+ metadata[:fictium_schema].format(obj)
39
+ end
40
+
41
+ def require_request_body!
42
+ metadata[:fictium_example].request ||= {}
43
+ metadata[:fictium_example].request[:required] = true
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,11 @@
1
+ module Fictium
2
+ module RSpec
3
+ module Proxies
4
+ class Action < Base
5
+ def additional_arguments
6
+ { fictium_action: true }
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module Fictium
2
+ module RSpec
3
+ module Proxies
4
+ class Base
5
+ attr_reader :context, :args, :first_arg, :kwargs
6
+ def initialize(context, *args, **kwargs)
7
+ @context = context
8
+ @first_arg = args.shift
9
+ @args = args
10
+ @kwargs = kwargs
11
+ end
12
+
13
+ def evaluate(block, extra_args, extra_kwargs)
14
+ list_arguments = first_arg + args + extra_args
15
+ key_arguments = extra_kwargs.merge(kwargs).merge(additional_arguments)
16
+ context.send(evaluate_method_name, *list_arguments, **key_arguments, &block)
17
+ end
18
+
19
+ def evaluate_method_name
20
+ :describe
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module Fictium
2
+ module RSpec
3
+ module Proxies
4
+ class Example < Base
5
+ def additional_arguments
6
+ { fictium_example: true }
7
+ end
8
+
9
+ def evaluate_method_name
10
+ :context
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Fictium
2
+ module RSpec
3
+ module ProxyHandler
4
+ def describe(subject, *args, **kwargs, &block)
5
+ return subject.evaluate(block, args, kwargs) if subject.is_a?(Proxies::Base)
6
+
7
+ super
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ module Fictium
2
+ module RSpec
3
+ module Resources
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ metadata[:fictium_resource] = Fictium::RSpec.document.create_resource
8
+ Fictium::RSpec::Autocomplete::Resource.name_attributes(
9
+ metadata[:fictium_resource],
10
+ metadata[:described_class].name
11
+ )
12
+ end
13
+
14
+ class_methods do
15
+ def action(*args, **kwargs)
16
+ Fictium::RSpec::Proxies::Action.new(self, args, kwargs)
17
+ end
18
+
19
+ def base_path(path)
20
+ metadata[:fictium_resource].base_path = path
21
+ end
22
+
23
+ def resource_name(name)
24
+ metadata[:fictium_resource].name = name
25
+ end
26
+
27
+ def resource_summary(summary)
28
+ metadata[:fictium_resource].summary = summary
29
+ end
30
+
31
+ def resource_description(description)
32
+ metadata[:fictium_resource].description = description
33
+ end
34
+
35
+ def resource_tags(*tags)
36
+ metadata[:fictium_resource].tags += tags
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ require 'fictium'
2
+ require 'rspec'
3
+ require 'verbs'
4
+
5
+ require_relative 'rspec/proxy_handler'
6
+
7
+ require_relative 'rspec/autocomplete/action'
8
+ require_relative 'rspec/autocomplete/example'
9
+ require_relative 'rspec/autocomplete/resource'
10
+ require_relative 'rspec/autocomplete/params'
11
+
12
+ require_relative 'rspec/resources'
13
+ require_relative 'rspec/actions'
14
+ require_relative 'rspec/examples'
15
+
16
+ require_relative 'rspec/proxies/base'
17
+ require_relative 'rspec/proxies/action'
18
+ require_relative 'rspec/proxies/example'
19
+
20
+ module Fictium
21
+ module RSpec
22
+ class << self
23
+ def document
24
+ @document ||= Fictium::Document.new
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ RSpec.configure do |config|
31
+ config.extend Fictium::RSpec::ProxyHandler
32
+ config.include Fictium::RSpec::Resources, type: :controller
33
+ config.include Fictium::RSpec::Actions, fictium_action: true
34
+ config.include Fictium::RSpec::Examples, fictium_example: true
35
+
36
+ config.after(:suite) do
37
+ Fictium::RSpec.document.export
38
+ end
39
+ end
@@ -0,0 +1,5 @@
1
+ module Fictium
2
+ VERSION = '0.1.0'.freeze
3
+ RAILS_MIN_VERSION = '>= 5.3'.freeze
4
+ RAILS_MAX_VERSION = '< 6.2'.freeze
5
+ end
data/lib/fictium.rb ADDED
@@ -0,0 +1,29 @@
1
+ # Use core extensions on this gem
2
+ require 'active_support'
3
+
4
+ # JSON Schema validators
5
+ require 'json-schema'
6
+
7
+ # Core functionalities
8
+ require_relative 'fictium/version'
9
+
10
+ # Load all objects
11
+ require 'fictium/loader'
12
+
13
+ # Load Rails specific parts
14
+ if defined?(Rails)
15
+ require 'fictium/railtie'
16
+ require 'fictium/engine'
17
+ end
18
+
19
+ module Fictium
20
+ class << self
21
+ def configuration
22
+ @configuration ||= Fictium::Configuration.new
23
+ end
24
+
25
+ def configure
26
+ yield configuration
27
+ end
28
+ end
29
+ end
data/tasks/.keep ADDED
File without changes
@@ -0,0 +1,12 @@
1
+ namespace :travis do
2
+ desc 'Analizes code quality, for TravisCI'
3
+ task analyze: %i[spec travis:rubocop travis:brakeman]
4
+
5
+ task :rubocop do
6
+ Bundler.clean_exec('rubocop')
7
+ end
8
+
9
+ task :brakeman do
10
+ Bundler.clean_exec('brakeman bundle exec brakeman --no-pager --exit-on-error')
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,321 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fictium
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ramiro Rojo
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-11-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: '5.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6.2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '5.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: json-schema
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.8'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.8'
47
+ - !ruby/object:Gem::Dependency
48
+ name: verbs
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 2.1.4
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 2.1.4
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '2.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '2.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: byebug
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: brakeman
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: faker
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 2.6.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 2.6.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: rails
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '5.3'
124
+ - - "<"
125
+ - !ruby/object:Gem::Version
126
+ version: '6.2'
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '5.3'
134
+ - - "<"
135
+ - !ruby/object:Gem::Version
136
+ version: '6.2'
137
+ - !ruby/object:Gem::Dependency
138
+ name: rake
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: 12.3.3
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: 12.3.3
151
+ - !ruby/object:Gem::Dependency
152
+ name: rspec
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '3.9'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - "~>"
163
+ - !ruby/object:Gem::Version
164
+ version: '3.9'
165
+ - !ruby/object:Gem::Dependency
166
+ name: rspec-rails
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '3.9'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - "~>"
177
+ - !ruby/object:Gem::Version
178
+ version: '3.9'
179
+ - !ruby/object:Gem::Dependency
180
+ name: rubocop
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - '='
184
+ - !ruby/object:Gem::Version
185
+ version: '0.75'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - '='
191
+ - !ruby/object:Gem::Version
192
+ version: '0.75'
193
+ - !ruby/object:Gem::Dependency
194
+ name: rubocop-rails
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - '='
198
+ - !ruby/object:Gem::Version
199
+ version: 2.3.2
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - '='
205
+ - !ruby/object:Gem::Version
206
+ version: 2.3.2
207
+ - !ruby/object:Gem::Dependency
208
+ name: rubocop-rspec
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - '='
212
+ - !ruby/object:Gem::Version
213
+ version: 1.36.0
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - '='
219
+ - !ruby/object:Gem::Version
220
+ version: 1.36.0
221
+ - !ruby/object:Gem::Dependency
222
+ name: simplecov
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - "~>"
226
+ - !ruby/object:Gem::Version
227
+ version: 0.17.0
228
+ type: :development
229
+ prerelease: false
230
+ version_requirements: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - "~>"
233
+ - !ruby/object:Gem::Version
234
+ version: 0.17.0
235
+ description:
236
+ email:
237
+ - ramiro.rojo@wolox.com.ar
238
+ executables: []
239
+ extensions: []
240
+ extra_rdoc_files: []
241
+ files:
242
+ - ".github/pull_request_template.md"
243
+ - ".gitignore"
244
+ - ".rspec"
245
+ - ".rubocop.yml"
246
+ - ".ruby-version"
247
+ - ".travis.yml"
248
+ - CHANGELOG.md
249
+ - CODE_OF_CONDUCT.md
250
+ - Gemfile
251
+ - Gemfile.lock
252
+ - LICENSE
253
+ - LICENSE.txt
254
+ - README.md
255
+ - Rakefile
256
+ - app/.keep
257
+ - bin/console
258
+ - bin/setup
259
+ - fictium.gemspec
260
+ - lib/fictium.rb
261
+ - lib/fictium/configurations/configuration.rb
262
+ - lib/fictium/configurations/info.rb
263
+ - lib/fictium/engine.rb
264
+ - lib/fictium/evaluators/parameter_evaluator.rb
265
+ - lib/fictium/evaluators/schema_evaluator.rb
266
+ - lib/fictium/exporters/open_api/schemas/3.0.0.json
267
+ - lib/fictium/exporters/open_api/v3_exporter.rb
268
+ - lib/fictium/exporters/open_api/v3_exporter/content_formatter.rb
269
+ - lib/fictium/exporters/open_api/v3_exporter/example_formatter.rb
270
+ - lib/fictium/exporters/open_api/v3_exporter/param_formatter.rb
271
+ - lib/fictium/exporters/open_api/v3_exporter/path_formatter.rb
272
+ - lib/fictium/exporters/open_api/v3_exporter/path_generator.rb
273
+ - lib/fictium/loader.rb
274
+ - lib/fictium/poros/action.rb
275
+ - lib/fictium/poros/document.rb
276
+ - lib/fictium/poros/example.rb
277
+ - lib/fictium/poros/model.rb
278
+ - lib/fictium/poros/resource.rb
279
+ - lib/fictium/railtie.rb
280
+ - lib/fictium/rspec.rb
281
+ - lib/fictium/rspec/actions.rb
282
+ - lib/fictium/rspec/autocomplete/action.rb
283
+ - lib/fictium/rspec/autocomplete/example.rb
284
+ - lib/fictium/rspec/autocomplete/params.rb
285
+ - lib/fictium/rspec/autocomplete/resource.rb
286
+ - lib/fictium/rspec/examples.rb
287
+ - lib/fictium/rspec/proxies/action.rb
288
+ - lib/fictium/rspec/proxies/base.rb
289
+ - lib/fictium/rspec/proxies/example.rb
290
+ - lib/fictium/rspec/proxy_handler.rb
291
+ - lib/fictium/rspec/resources.rb
292
+ - lib/fictium/version.rb
293
+ - tasks/.keep
294
+ - tasks/travis/analyze.rb
295
+ homepage: https://github.com/Wolox/fictium
296
+ licenses:
297
+ - MIT
298
+ metadata:
299
+ homepage_uri: https://github.com/Wolox/fictium
300
+ source_code_uri: https://github.com/Wolox/fictium
301
+ changelog_uri: https://github.com/Wolox/fictium/CHANGELOG.md
302
+ post_install_message:
303
+ rdoc_options: []
304
+ require_paths:
305
+ - lib
306
+ required_ruby_version: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ version: 2.6.0
311
+ required_rubygems_version: !ruby/object:Gem::Requirement
312
+ requirements:
313
+ - - ">="
314
+ - !ruby/object:Gem::Version
315
+ version: '0'
316
+ requirements: []
317
+ rubygems_version: 3.0.3
318
+ signing_key:
319
+ specification_version: 4
320
+ summary: A gem to generate documentation out of tests.
321
+ test_files: []