fictium 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.
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: []