rspeckled 0.0.51 → 0.0.52
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/rspeckled/plugins/authentication.rb +69 -97
- data/lib/rspeckled/plugins/dox.rb +58 -0
- data/lib/rspeckled/plugins.rb +1 -0
- data/lib/rspeckled/rails/railtie.rb +9 -0
- data/lib/rspeckled/tasks/documentation.rake +41 -0
- data/lib/rspeckled/version.rb +1 -1
- data/lib/rspeckled.rb +3 -0
- data.tar.gz.sig +0 -0
- metadata +5 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c7c4c3a8c27c061df89836be60d67bc39bc6a4649081abd77d20716468d4305
|
4
|
+
data.tar.gz: 6acb4108f10f6927ea5cd464940e934e7afc928ad80adabeb2c61a86dc9a2403
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea06ffceb8fd2440c658f9283c43014d6a431efb3665cb33d95168757b8fb06437c782f68e124fa6a6da3a2d71f403b9a945b1c99999762796f1cda0c3eb4c1f
|
7
|
+
data.tar.gz: 8a12e63b970c674a218a94202bcf09f98e40fce93a0cb441f7a2f60dc29ab26498a2cbd50f5aacd7bd0fef5d4cf4c993977d7efb7a0558abd97a25f2cf3c7c32
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -1,128 +1,100 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rubocop:disable Layout/IndentHash
|
3
4
|
RSpec.configure do |config|
|
4
5
|
config.around(:each, :mock_auth => lambda { |v| !!v }) do |example|
|
5
|
-
options = example.metadata[:mock_auth]
|
6
|
-
|
7
|
-
authentication_type = if options.is_a?(Hash) && options[:type]
|
8
|
-
options[:type]
|
6
|
+
options = if example.metadata[:mock_auth].is_a?(Hash)
|
7
|
+
example.metadata[:mock_auth]
|
9
8
|
else
|
10
|
-
|
9
|
+
{
|
10
|
+
:token => {
|
11
|
+
:roles => example.metadata[:mock_auth],
|
12
|
+
},
|
13
|
+
}
|
11
14
|
end
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
User
|
16
|
-
|
17
|
-
options[:class] || described_class
|
18
|
-
.name[/(.*?)::/, 1]
|
19
|
-
.concat('::User')
|
20
|
-
.constantize
|
21
|
-
else
|
22
|
-
options
|
23
|
-
end
|
16
|
+
options[:class] ||= described_class
|
17
|
+
.name[/\A([^:]+)::/, 1]
|
18
|
+
.concat('::User')
|
19
|
+
.constantize
|
24
20
|
|
25
|
-
|
21
|
+
class_name_underscored = options[:class]
|
26
22
|
.name[/(?:.*::)?(\w+)\z/, 1]
|
27
23
|
.gsub(/([a-z])([A-Z])/, '\1_\2')
|
28
24
|
.downcase
|
29
25
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
:
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
defaults = {
|
27
|
+
:type => :json_web_token,
|
28
|
+
:authentication_method => :"authenticate_#{class_name_underscored}!",
|
29
|
+
:class_instance_overrides => {},
|
30
|
+
:class_instance_traits => {},
|
31
|
+
:method => :"current_#{class_name_underscored}",
|
32
|
+
:strategy => :factory,
|
33
|
+
:successful? => true,
|
34
|
+
:token => {
|
35
|
+
:roles => 'standard',
|
36
|
+
},
|
37
|
+
}
|
38
|
+
|
39
|
+
options = defaults.deep_merge(options)
|
40
|
+
|
41
|
+
instance = case options[:strategy]
|
42
|
+
when :factory
|
43
|
+
FactoryBot.create(class_name_underscored.to_sym, *options[:class_instance_traits], options[:class_instance_overrides])
|
44
|
+
when :instance
|
45
|
+
options[:class].new(options[:class_instance_overrides])
|
46
46
|
end
|
47
47
|
|
48
|
-
|
49
|
-
klass.new(class_instance_overrides)
|
50
|
-
else
|
51
|
-
FactoryBot.create(underscored_class_name.to_sym, *class_instance_traits, class_instance_overrides)
|
52
|
-
end
|
48
|
+
authentication_result = options[:successful?] ? instance : nil
|
53
49
|
|
54
|
-
|
50
|
+
case options[:type]
|
51
|
+
when :standard
|
52
|
+
authentication_controller_class = (example.metadata[:type] == :controller) ? described_class : ApplicationController
|
53
|
+
authentication_controller_instance = authentication_controller_class.new
|
54
|
+
authentication_method = if authentication_controller_instance.respond_to?(options[:authentication_method], true)
|
55
55
|
options[:authentication_method]
|
56
|
-
|
57
|
-
:
|
58
|
-
end
|
59
|
-
|
60
|
-
authentication_controller_class = if example.metadata[:type] == :controller
|
61
|
-
described_class
|
62
|
-
else
|
63
|
-
ApplicationController
|
56
|
+
elsif authentication_controller_instance.respond_to?(:authenticate, true)
|
57
|
+
:authenticate
|
64
58
|
end
|
65
59
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
else
|
71
|
-
true
|
72
|
-
end
|
73
|
-
|
74
|
-
authentication_result = authentication_successful ? instance : nil
|
75
|
-
|
76
|
-
if authentication_type == :standard
|
77
|
-
authentication_method = if authentication_controller_instance.respond_to?(inferred_auth_method, true)
|
78
|
-
inferred_auth_method
|
79
|
-
elsif authentication_controller_instance.respond_to?(:authenticate, true)
|
80
|
-
:authenticate
|
81
|
-
end
|
82
|
-
|
83
|
-
authentication_controller_class.__send__(:define_method, authentication_method) { authentication_successful }
|
84
|
-
authentication_controller_class.__send__(:define_method, current_class_method) { authentication_result }
|
85
|
-
authentication_controller_class.__send__(:helper_method, current_class_method)
|
86
|
-
example.example_group_instance.class.let(current_class_method) { authentication_result }
|
60
|
+
authentication_controller_class.__send__(:define_method, authentication_method) { options[:successful?] }
|
61
|
+
authentication_controller_class.__send__(:define_method, options[:method]) { authentication_result }
|
62
|
+
authentication_controller_class.__send__(:helper_method, options[:method])
|
63
|
+
example.example_group_instance.class.let(options[:method]) { authentication_result }
|
87
64
|
|
88
65
|
example.run
|
89
66
|
|
90
|
-
authentication_controller_class.__send__(:remove_method,
|
91
|
-
|
92
|
-
@token_data =
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
]
|
113
|
-
end
|
114
|
-
|
115
|
-
example.example_group_instance.class.let(current_class_method) { authentication_result }
|
67
|
+
authentication_controller_class.__send__(:remove_method, options[:method])
|
68
|
+
when :json_web_token
|
69
|
+
@token_data = [
|
70
|
+
{
|
71
|
+
'aid' => options[:token][:audience_id] || instance['account_id'] || instance['id'],
|
72
|
+
'aud' => options[:token][:audience] || instance.class.name,
|
73
|
+
'exp' => options[:token][:expired_at] || 1.day.from_now.utc.to_i,
|
74
|
+
'iat' => options[:token][:issued_at] || Time.now.utc.to_i,
|
75
|
+
'iss' => options[:token][:issuer] || 'rspeckled',
|
76
|
+
'jti' => options[:token][:token_id] || SecureRandom.uuid,
|
77
|
+
'nbf' => options[:token][:not_before] || 1.day.ago.utc.to_i,
|
78
|
+
'rol' => options[:token][:roles] || 'standard',
|
79
|
+
'sid' => options[:token][:subject_id],
|
80
|
+
'sub' => options[:token][:subject],
|
81
|
+
},
|
82
|
+
{
|
83
|
+
'typ' => 'JWT',
|
84
|
+
'cty' => 'application/json-web-token',
|
85
|
+
},
|
86
|
+
]
|
87
|
+
|
88
|
+
example.example_group_instance.class.let(options[:method]) { authentication_result }
|
116
89
|
|
117
90
|
example.run
|
118
|
-
else
|
119
|
-
fail ArgumentError, 'You must specify a valid type for the :mock_auth metadata'
|
120
91
|
end
|
121
92
|
|
122
|
-
instance.delete unless options
|
93
|
+
instance.delete unless options[:strategy] == :instance
|
123
94
|
end
|
124
95
|
|
125
96
|
config.before(:each, :mock_auth => lambda { |v| !!v }) do |_example|
|
126
97
|
request.env['X_JSON_WEB_TOKEN'] = @token_data
|
127
98
|
end
|
128
99
|
end
|
100
|
+
# rubocop:enable Layout/IndentHash
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##############################################################################
|
4
|
+
# Dox Plugin
|
5
|
+
##############################################################################
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'dox'
|
9
|
+
require 'pathname'
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.after(:each, :dox) do |example|
|
13
|
+
example.metadata[:request] = request
|
14
|
+
example.metadata[:response] = response
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
api_docs_folder = Pathname.pwd.join('docs', 'api')
|
19
|
+
api_docs_header = api_docs_folder.join('header.md')
|
20
|
+
|
21
|
+
api_docs_folder.mkpath
|
22
|
+
|
23
|
+
api_docs_folder.glob('**/*.rb').each { |f| require f }
|
24
|
+
|
25
|
+
titleized_application_name = Rails
|
26
|
+
.application
|
27
|
+
.class
|
28
|
+
.name
|
29
|
+
.split('::')[0]
|
30
|
+
.titleize
|
31
|
+
|
32
|
+
http_settings_file = Pathname.pwd.join('config', 'settings', 'http.yml')
|
33
|
+
|
34
|
+
host = if http_settings_file.exist?
|
35
|
+
http_settings = YAML.load(http_settings_file.read) # rubocop:disable Security/YAMLLoad
|
36
|
+
|
37
|
+
http_settings['production']['http']['base_url']
|
38
|
+
else
|
39
|
+
'http://api.lvh.me:5000'
|
40
|
+
end
|
41
|
+
|
42
|
+
unless api_docs_header.exist?
|
43
|
+
api_docs_header.write(<<~HEREDOC, :mode => 'w')
|
44
|
+
FORMAT: 1A
|
45
|
+
HOST: #{host}
|
46
|
+
|
47
|
+
# #{titleized_application_name}
|
48
|
+
|
49
|
+
HEREDOC
|
50
|
+
end
|
51
|
+
|
52
|
+
Dox.configure do |config|
|
53
|
+
config.header_file_path = api_docs_header
|
54
|
+
config.desc_folder_path = api_docs_folder
|
55
|
+
# config.headers_whitelist = ['Accept', 'X-Auth-Token']
|
56
|
+
end
|
57
|
+
rescue LoadError
|
58
|
+
end
|
data/lib/rspeckled/plugins.rb
CHANGED
@@ -8,6 +8,7 @@ require 'rspeckled/plugins/carrier_wave'
|
|
8
8
|
require 'rspeckled/plugins/capybara'
|
9
9
|
require 'rspeckled/plugins/database_cleaner'
|
10
10
|
require 'rspeckled/plugins/devise'
|
11
|
+
require 'rspeckled/plugins/dox'
|
11
12
|
require 'rspeckled/plugins/elasticsearch'
|
12
13
|
require 'rspeckled/plugins/email'
|
13
14
|
require 'rspeckled/plugins/factory_bot'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##############################################################################
|
4
|
+
# Documentation
|
5
|
+
##############################################################################
|
6
|
+
|
7
|
+
namespace :documentation do
|
8
|
+
namespace :api do
|
9
|
+
desc 'Generate API documentation markdown'
|
10
|
+
task :blueprint do
|
11
|
+
require 'rspec/core/rake_task'
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:api_docs) do |t|
|
14
|
+
t.pattern = 'spec/controllers/**/v1/**/*_spec.rb'
|
15
|
+
t.rspec_opts = '--format="Dox::Formatter" --out="./docs/api/index.apib" --order="defined" --tag="dox"'
|
16
|
+
end
|
17
|
+
|
18
|
+
Rake::Task['api_docs'].invoke
|
19
|
+
end
|
20
|
+
|
21
|
+
task :json => :blueprint do
|
22
|
+
`apib2swagger --input='./docs/api/index.apib' --output='./docs/api/index.json'`
|
23
|
+
end
|
24
|
+
|
25
|
+
task :yaml => :blueprint do
|
26
|
+
`apib2swagger --yaml --input='./docs/api/index.apib' --output='./docs/api/index.yaml'`
|
27
|
+
end
|
28
|
+
|
29
|
+
task :html => :json do
|
30
|
+
`redoc-cli bundle --output='./docs/api/index.html' './docs/api/index.json'`
|
31
|
+
end
|
32
|
+
|
33
|
+
task :preview => :html do
|
34
|
+
`open './docs/api/index.html'`
|
35
|
+
end
|
36
|
+
|
37
|
+
task :publish => :blueprint do
|
38
|
+
`apiary publish --path='./docs/api/apispec.apib' --api-name='#{Rails.application.name}'`
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/rspeckled/version.rb
CHANGED
data/lib/rspeckled.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspeckled
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.52
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thegranddesign
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
Y2GAoHKstmfIVhc4XHOPpmTd2o/C29O9oaRgjrkfQEhF/KvJ/PhoV5hvokzsCyI5
|
32
32
|
iUeXPfvrGD/itYIBCgk+fnzyQQ4QtE5hTQaWQ3o2
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2018-05-
|
34
|
+
date: 2018-05-30 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/rspeckled/plugins/code_climate.rb
|
120
120
|
- lib/rspeckled/plugins/database_cleaner.rb
|
121
121
|
- lib/rspeckled/plugins/devise.rb
|
122
|
+
- lib/rspeckled/plugins/dox.rb
|
122
123
|
- lib/rspeckled/plugins/elasticsearch.rb
|
123
124
|
- lib/rspeckled/plugins/email.rb
|
124
125
|
- lib/rspeckled/plugins/factory_bot.rb
|
@@ -145,6 +146,7 @@ files:
|
|
145
146
|
- lib/rspeckled/plugins/vcr.rb
|
146
147
|
- lib/rspeckled/plugins/webmock.rb
|
147
148
|
- lib/rspeckled/plugins/wisper.rb
|
149
|
+
- lib/rspeckled/rails/railtie.rb
|
148
150
|
- lib/rspeckled/reporting.rb
|
149
151
|
- lib/rspeckled/reporting/example.rb
|
150
152
|
- lib/rspeckled/reporting/outputs/csv.rb
|
@@ -156,6 +158,7 @@ files:
|
|
156
158
|
- lib/rspeckled/spec_helpers/rails_engine.rb
|
157
159
|
- lib/rspeckled/spec_helpers/rspeckled.rb
|
158
160
|
- lib/rspeckled/support.rb
|
161
|
+
- lib/rspeckled/tasks/documentation.rake
|
159
162
|
- lib/rspeckled/vcr_matchers/uri_without_trailing_id.rb
|
160
163
|
- lib/rspeckled/version.rb
|
161
164
|
homepage: https://github.com/thekompanee/rspeckled
|
metadata.gz.sig
CHANGED
Binary file
|