praxis 0.21 → 0.22.pre.1

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 (91) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +20 -12
  3. data/CHANGELOG.md +24 -0
  4. data/CONTRIBUTING.md +4 -4
  5. data/README.md +11 -9
  6. data/lib/api_browser/app/js/directives/attribute_table.js +2 -1
  7. data/lib/api_browser/app/js/directives/conditional_requirements.js +13 -0
  8. data/lib/api_browser/app/js/directives/type_placeholder.js +10 -1
  9. data/lib/api_browser/app/js/factories/normalize_attributes.js +4 -2
  10. data/lib/api_browser/app/js/factories/template_for.js +5 -2
  11. data/lib/api_browser/app/js/filters/has_requirement.js +14 -0
  12. data/lib/api_browser/app/js/filters/tag_requirement.js +13 -0
  13. data/lib/api_browser/app/sass/praxis.scss +11 -0
  14. data/lib/api_browser/app/views/action.html +2 -2
  15. data/lib/api_browser/app/views/directives/attribute_description/member_options.html +2 -2
  16. data/lib/api_browser/app/views/directives/attribute_table.html +1 -1
  17. data/lib/api_browser/app/views/type.html +1 -1
  18. data/lib/api_browser/app/views/type/details.html +2 -2
  19. data/lib/api_browser/app/views/types/embedded/array.html +2 -0
  20. data/lib/api_browser/app/views/types/embedded/default.html +3 -1
  21. data/lib/api_browser/app/views/types/embedded/requirements.html +6 -0
  22. data/lib/api_browser/app/views/types/embedded/single_req.html +9 -0
  23. data/lib/api_browser/app/views/types/embedded/struct.html +14 -2
  24. data/lib/api_browser/app/views/types/standalone/array.html +1 -1
  25. data/lib/api_browser/app/views/types/standalone/struct.html +2 -1
  26. data/lib/api_browser/package.json +1 -1
  27. data/lib/praxis.rb +8 -6
  28. data/lib/praxis/action_definition.rb +9 -7
  29. data/lib/praxis/api_definition.rb +44 -27
  30. data/lib/praxis/api_general_info.rb +3 -2
  31. data/lib/praxis/application.rb +139 -20
  32. data/lib/praxis/bootloader.rb +2 -4
  33. data/lib/praxis/bootloader_stages/environment.rb +0 -13
  34. data/lib/praxis/controller.rb +2 -0
  35. data/lib/praxis/dispatcher.rb +16 -10
  36. data/lib/praxis/docs/generator.rb +20 -9
  37. data/lib/praxis/docs/link_builder.rb +1 -1
  38. data/lib/praxis/error_handler.rb +5 -5
  39. data/lib/praxis/extensions/attribute_filtering.rb +28 -0
  40. data/lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb +180 -0
  41. data/lib/praxis/extensions/attribute_filtering/filtering_params.rb +273 -0
  42. data/lib/praxis/extensions/attribute_filtering/query_builder.rb +39 -0
  43. data/lib/praxis/extensions/field_selection.rb +3 -0
  44. data/lib/praxis/extensions/field_selection/active_record_query_selector.rb +57 -0
  45. data/lib/praxis/extensions/field_selection/sequel_query_selector.rb +65 -0
  46. data/lib/praxis/extensions/rails_compat.rb +2 -0
  47. data/lib/praxis/extensions/rails_compat/request_methods.rb +19 -0
  48. data/lib/praxis/extensions/rendering.rb +1 -1
  49. data/lib/praxis/file_group.rb +1 -1
  50. data/lib/praxis/middleware_app.rb +26 -6
  51. data/lib/praxis/multipart/parser.rb +14 -2
  52. data/lib/praxis/multipart/part.rb +5 -3
  53. data/lib/praxis/plugins/praxis_mapper_plugin.rb +2 -2
  54. data/lib/praxis/plugins/rails_plugin.rb +104 -0
  55. data/lib/praxis/request.rb +8 -9
  56. data/lib/praxis/request_stages/response.rb +3 -2
  57. data/lib/praxis/request_superclassing.rb +11 -0
  58. data/lib/praxis/resource_definition.rb +14 -10
  59. data/lib/praxis/response.rb +6 -7
  60. data/lib/praxis/response_definition.rb +7 -5
  61. data/lib/praxis/response_template.rb +4 -3
  62. data/lib/praxis/responses/http.rb +0 -36
  63. data/lib/praxis/responses/internal_server_error.rb +3 -12
  64. data/lib/praxis/responses/multipart_ok.rb +4 -11
  65. data/lib/praxis/responses/validation_error.rb +1 -10
  66. data/lib/praxis/router.rb +3 -3
  67. data/lib/praxis/tasks/api_docs.rb +10 -2
  68. data/lib/praxis/tasks/routes.rb +1 -0
  69. data/lib/praxis/version.rb +1 -1
  70. data/praxis.gemspec +4 -5
  71. data/spec/functional_spec.rb +4 -6
  72. data/spec/praxis/action_definition_spec.rb +26 -15
  73. data/spec/praxis/api_definition_spec.rb +13 -8
  74. data/spec/praxis/api_general_info_spec.rb +3 -8
  75. data/spec/praxis/application_spec.rb +13 -7
  76. data/spec/praxis/middleware_app_spec.rb +24 -10
  77. data/spec/praxis/request_spec.rb +17 -7
  78. data/spec/praxis/request_stages/validate_spec.rb +1 -1
  79. data/spec/praxis/resource_definition_spec.rb +12 -10
  80. data/spec/praxis/response_definition_spec.rb +22 -5
  81. data/spec/praxis/response_spec.rb +12 -5
  82. data/spec/praxis/responses/internal_server_error_spec.rb +4 -7
  83. data/spec/praxis/responses/validation_error_spec.rb +2 -2
  84. data/spec/praxis/router_spec.rb +8 -4
  85. data/spec/spec_app/config.ru +1 -6
  86. data/spec/spec_helper.rb +3 -3
  87. data/tasks/thor/templates/generator/empty_app/Gemfile +3 -3
  88. metadata +36 -32
  89. data/.ruby-version +0 -1
  90. data/lib/praxis/stats.rb +0 -113
  91. data/spec/praxis/stats_spec.rb +0 -9
@@ -1,7 +1,24 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Praxis::ResponseDefinition do
4
- subject(:response_definition) { Praxis::ResponseDefinition.new(name, &block) }
4
+ let(:praxis_app) do
5
+ app = Praxis::Application.new(skip_registration: true)
6
+ app.versioning_scheme = [:header, :params]
7
+ app.handler 'json' , Praxis::Handlers::JSON
8
+ app.handler 'x-www-form-urlencoded', Praxis::Handlers::WWWForm
9
+ app.handler 'xml', Praxis::Handlers::XML
10
+ app.api_definition.instance_eval do |api_def|
11
+ api_def.info do
12
+ base_path "/api"
13
+ produces 'json','xml'
14
+ end
15
+ end
16
+ app
17
+ end
18
+
19
+
20
+
21
+ subject(:response_definition) { Praxis::ResponseDefinition.new(name, praxis_app, &block) }
5
22
  let(:name) { 'response_name' }
6
23
 
7
24
  let(:block) do
@@ -482,7 +499,7 @@ describe Praxis::ResponseDefinition do
482
499
  context 'with invalid definitions' do
483
500
  it 'raises an error if status code is not part of the definition' do
484
501
  expect do
485
- Praxis::ResponseDefinition.new('response name') do
502
+ Praxis::ResponseDefinition.new('response name',praxis_app) do
486
503
  description "testing"
487
504
  end
488
505
  end.to raise_error(Praxis::Exceptions::InvalidConfiguration)
@@ -496,7 +513,7 @@ describe Praxis::ResponseDefinition do
496
513
  let(:parts) { nil }
497
514
 
498
515
  let(:response) do
499
- Praxis::ResponseDefinition.new(:custom) do
516
+ Praxis::ResponseDefinition.new(:custom, praxis_app) do
500
517
  status 300
501
518
  end
502
519
  end
@@ -524,8 +541,8 @@ describe Praxis::ResponseDefinition do
524
541
  its(['xml', :content_type]) { should eq('application/vnd.acme.instance+xml') }
525
542
 
526
543
  it 'properly encodes the example bodies' do
527
- json = Praxis::Application.instance.handlers['json'].parse(examples['json'][:body])
528
- xml = Praxis::Application.instance.handlers['xml'].parse(examples['xml'][:body])
544
+ json = praxis_app.handlers['json'].parse(examples['json'][:body])
545
+ xml = praxis_app.handlers['xml'].parse(examples['xml'][:body])
529
546
  expect(json).to eq xml
530
547
  end
531
548
 
@@ -49,7 +49,14 @@ describe Praxis::Response do
49
49
  end
50
50
 
51
51
  subject(:response) { Praxis::Responses::Ok.new(status: response_status, headers: response_headers) }
52
-
52
+ let(:application) do
53
+ double("PraxisApp", handlers: handlers, config: praxis_config)
54
+ end
55
+ let(:handlers) do
56
+ {'json' => Praxis::Handlers::JSON.new }
57
+ end
58
+ let(:praxis_config){ double(praxis: double("...") ) }
59
+
53
60
  describe '#validate' do
54
61
  before do
55
62
  allow(action).to receive(:responses).and_return({response_spec.name => response_spec })
@@ -86,7 +93,7 @@ describe Praxis::Response do
86
93
  before { response.body = response_body_entity }
87
94
 
88
95
  it 'leaves well enough alone' do
89
- response.encode!
96
+ response.encode!(handlers: handlers)
90
97
  expect(response.body).to eq(response_body_entity)
91
98
  end
92
99
  end
@@ -95,7 +102,7 @@ describe Praxis::Response do
95
102
  before { response.body = response_body_structured_data }
96
103
 
97
104
  it 'encodes using a suitable handler' do
98
- response.encode!
105
+ response.encode!(handlers: handlers)
99
106
  expect(JSON.load(response.body)).to eq(response_body_structured_data)
100
107
  end
101
108
  end
@@ -108,7 +115,7 @@ describe Praxis::Response do
108
115
  'Location' => '/api/resources/123' }
109
116
  }
110
117
  it 'still defaults to the default handler' do
111
- response.encode!
118
+ response.encode!(handlers: handlers)
112
119
  expect(JSON.load(response.body)).to eq(response_body_structured_data)
113
120
  end
114
121
  end
@@ -158,7 +165,7 @@ describe Praxis::Response do
158
165
  response.status = 500
159
166
  end
160
167
 
161
- let!(:finished_response) { response.finish }
168
+ let!(:finished_response) { response.finish(application: application) }
162
169
 
163
170
  it 'returns status, headers, body' do
164
171
  expect(finished_response).to eq([response.status, response.headers, response.body])
@@ -8,7 +8,7 @@ describe Praxis::Responses::InternalServerError do
8
8
  it 'always sets the json content type' do
9
9
  expect(response.name).to be(:internal_server_error)
10
10
  expect(response.status).to be(500)
11
- expect(response.body).to be_empty
11
+ expect(response.body).to be_nil
12
12
  expect(response.headers).to have_key('Content-Type')
13
13
  expect(response.headers['Content-Type']).to eq('application/json')
14
14
  expect(response.instance_variable_get(:@error)).to be(nil)
@@ -17,15 +17,12 @@ describe Praxis::Responses::InternalServerError do
17
17
 
18
18
 
19
19
  context '.format!' do
20
+ let(:app){ double("PraxisApp", config: double(praxis: config)) }
20
21
  let(:error) { double('error', message: 'error message', backtrace: [1, 2], cause: cause) }
21
22
 
22
23
  let(:show_exceptions) { true }
23
24
  let(:config) { double("config", show_exceptions: show_exceptions) }
24
25
 
25
- before do
26
- allow(Praxis::Application.instance.config).to receive(:praxis).and_return(config)
27
- end
28
-
29
26
  context 'with show_exceptions false' do
30
27
  end
31
28
 
@@ -52,8 +49,8 @@ describe Praxis::Responses::InternalServerError do
52
49
 
53
50
  subject(:response) { Praxis::Responses::InternalServerError.new(error: error) }
54
51
  before do
55
- expect(response.body).to be_empty
56
- response.format!
52
+ expect(response.body).to be_nil
53
+ response.format!(config: app.config)
57
54
  end
58
55
 
59
56
  end
@@ -9,7 +9,7 @@ describe Praxis::Responses::ValidationError do
9
9
  it 'always sets the json content type' do
10
10
  expect(response.name).to be(:validation_error)
11
11
  expect(response.status).to be(400)
12
- expect(response.body).to be_empty
12
+ expect(response.body).to be_nil
13
13
  expect(response.headers).to have_key('Content-Type')
14
14
  expect(response.headers['Content-Type']).to eq('application/json')
15
15
  expect(response.instance_variable_get(:@errors)).to be(nil)
@@ -24,7 +24,7 @@ describe Praxis::Responses::ValidationError do
24
24
  let(:exception){ nil }
25
25
  subject(:response) { Praxis::Responses::ValidationError.new(summary: summary, errors: errors, exception: exception) }
26
26
  before do
27
- expect(response.body).to be_empty
27
+ expect(response.body).to be_nil
28
28
  end
29
29
  context 'when errors' do
30
30
  it 'it fills the errors key' do
@@ -1,6 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Praxis::Router do
4
+ let(:application) do
5
+ app = Praxis::Application.new(skip_registration: true)
6
+ app.versioning_scheme = [:header, :params]
7
+ app
8
+ end
4
9
  describe Praxis::Router::VersionMatcher do
5
10
  let(:resource_definition){ double("resource_definition", version_options: { using: [:header, :params] }) }
6
11
  let(:action){ double("action", resource_definition: resource_definition ) }
@@ -17,7 +22,7 @@ describe Praxis::Router do
17
22
 
18
23
  context '.call' do
19
24
  let(:env){ {"HTTP_X_API_VERSION" => request_version } }
20
- let(:request) {Praxis::Request.new(env)}
25
+ let(:request) {Praxis::Request.new(env,application: application)}
21
26
 
22
27
  context 'with matching versions' do
23
28
  let(:request_version) { "1.0" }
@@ -67,7 +72,6 @@ describe Praxis::Router do
67
72
  end
68
73
  end
69
74
 
70
- let(:application) { instance_double('Praxis::Application')}
71
75
  subject(:router) {Praxis::Router.new(application)}
72
76
 
73
77
  context "attributes" do
@@ -104,7 +108,7 @@ describe Praxis::Router do
104
108
  let(:request_verb) { 'POST' }
105
109
  let(:request_path_info) { '/' }
106
110
  let(:request_version){ nil }
107
- let(:request) {Praxis::Request.new(env)}
111
+ let(:request) {Praxis::Request.new(env, application: application)}
108
112
  let(:router_response){ 1 }
109
113
  let(:router_response_for_post){ "POST result" }
110
114
  let(:router_response_for_wildcard){ "* result" }
@@ -185,7 +189,7 @@ describe Praxis::Router do
185
189
  end
186
190
 
187
191
  context 'with X-Cascade disabled' do
188
- let(:config) { Praxis::Application.instance.config.praxis }
192
+ let(:config) { application.config.praxis }
189
193
  before do
190
194
  expect(config).to receive(:x_cascade).and_return(false)
191
195
  end
@@ -9,9 +9,4 @@ $:.unshift File.expand_path('lib', __dir__)
9
9
 
10
10
  require 'praxis'
11
11
 
12
-
13
- application = Praxis::Application.instance
14
-
15
- application.setup
16
-
17
- run application
12
+ run Praxis::Application.new.setup
data/spec/spec_helper.rb CHANGED
@@ -20,22 +20,21 @@ require 'rspec/its'
20
20
  require 'rspec/collection_matchers'
21
21
 
22
22
 
23
-
24
23
  Dir["#{File.dirname(__FILE__)}/../lib/praxis/plugins/*.rb"].each do |file|
25
24
  require file
26
25
  end
27
26
 
27
+ APP = Praxis::Application.instance
28
28
  Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
29
29
  require file
30
30
  end
31
31
 
32
-
33
32
  RSpec.configure do |config|
34
33
  config.include Rack::Test::Methods
35
34
 
36
35
  config.before(:suite) do
37
36
  Praxis::Blueprint.caching_enabled = true
38
- Praxis::Application.instance.setup(root:'spec/spec_app')
37
+ APP.setup(root:'spec/spec_app')
39
38
 
40
39
  # create the table
41
40
  setup_database!
@@ -50,6 +49,7 @@ RSpec.configure do |config|
50
49
  config.before(:all) do
51
50
  # disable logging below warn level
52
51
  Praxis::Application.instance.logger.level = 2 # warn
52
+ Thread.current[:praxis_instance] = APP
53
53
  end
54
54
  end
55
55
 
@@ -1,8 +1,8 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'praxis', github: 'rightscale/praxis'
4
- gem 'attributor', github: 'rightscale/attributor'
5
- gem 'praxis-blueprints', github: 'rightscale/praxis-blueprints'
3
+ gem 'praxis', github: 'praxis/praxis'
4
+ gem 'attributor', github: 'praxis/attributor'
5
+ gem 'praxis-blueprints', github: 'praxis/praxis-blueprints'
6
6
 
7
7
  gem 'rainbows', require: false
8
8
  gem 'rake'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: praxis
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.21'
4
+ version: 0.22.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,36 +9,42 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-08-19 00:00:00.000000000 Z
12
+ date: 2019-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: mustermann
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
+ - - "<="
36
+ - !ruby/object:Gem::Version
37
+ version: '1'
35
38
  type: :runtime
36
39
  prerelease: false
37
40
  version_requirements: !ruby/object:Gem::Requirement
38
41
  requirements:
39
- - - "~>"
42
+ - - ">="
40
43
  - !ruby/object:Gem::Version
41
44
  version: '0'
45
+ - - "<="
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
42
48
  - !ruby/object:Gem::Dependency
43
49
  name: activesupport
44
50
  requirement: !ruby/object:Gem::Requirement
@@ -137,34 +143,20 @@ dependencies:
137
143
  - - "~>"
138
144
  - !ruby/object:Gem::Version
139
145
  version: '1.4'
140
- - !ruby/object:Gem::Dependency
141
- name: harness
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - "~>"
145
- - !ruby/object:Gem::Version
146
- version: '2'
147
- type: :runtime
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - "~>"
152
- - !ruby/object:Gem::Version
153
- version: '2'
154
146
  - !ruby/object:Gem::Dependency
155
147
  name: bundler
156
148
  requirement: !ruby/object:Gem::Requirement
157
149
  requirements:
158
- - - "~>"
150
+ - - ">="
159
151
  - !ruby/object:Gem::Version
160
- version: '1.6'
152
+ version: '0'
161
153
  type: :development
162
154
  prerelease: false
163
155
  version_requirements: !ruby/object:Gem::Requirement
164
156
  requirements:
165
- - - "~>"
157
+ - - ">="
166
158
  - !ruby/object:Gem::Version
167
- version: '1.6'
159
+ version: '0'
168
160
  - !ruby/object:Gem::Dependency
169
161
  name: rake
170
162
  requirement: !ruby/object:Gem::Requirement
@@ -414,7 +406,6 @@ extra_rdoc_files: []
414
406
  files:
415
407
  - ".gitignore"
416
408
  - ".rspec"
417
- - ".ruby-version"
418
409
  - ".simplecov"
419
410
  - ".travis.yml"
420
411
  - CHANGELOG.md
@@ -439,6 +430,7 @@ files:
439
430
  - lib/api_browser/app/js/controllers/type.js
440
431
  - lib/api_browser/app/js/directives/attribute_description.js
441
432
  - lib/api_browser/app/js/directives/attribute_table.js
433
+ - lib/api_browser/app/js/directives/conditional_requirements.js
442
434
  - lib/api_browser/app/js/directives/fixed_if_fits.js
443
435
  - lib/api_browser/app/js/directives/highlight.js
444
436
  - lib/api_browser/app/js/directives/menu_item.js
@@ -456,10 +448,12 @@ files:
456
448
  - lib/api_browser/app/js/factories/template_for.js
457
449
  - lib/api_browser/app/js/filters/attribute_name.js
458
450
  - lib/api_browser/app/js/filters/friendly_json.js
451
+ - lib/api_browser/app/js/filters/has_requirement.js
459
452
  - lib/api_browser/app/js/filters/header_info.js
460
453
  - lib/api_browser/app/js/filters/is_empty.js
461
454
  - lib/api_browser/app/js/filters/markdown.js
462
455
  - lib/api_browser/app/js/filters/resource_name.js
456
+ - lib/api_browser/app/js/filters/tag_requirement.js
463
457
  - lib/api_browser/app/sass/modules/_body.scss
464
458
  - lib/api_browser/app/sass/modules/_cloke.scss
465
459
  - lib/api_browser/app/sass/modules/_header.scss
@@ -489,9 +483,12 @@ files:
489
483
  - lib/api_browser/app/views/trait.html
490
484
  - lib/api_browser/app/views/type.html
491
485
  - lib/api_browser/app/views/type/details.html
486
+ - lib/api_browser/app/views/types/embedded/array.html
492
487
  - lib/api_browser/app/views/types/embedded/default.html
493
488
  - lib/api_browser/app/views/types/embedded/field-selector.html
494
489
  - lib/api_browser/app/views/types/embedded/links.html
490
+ - lib/api_browser/app/views/types/embedded/requirements.html
491
+ - lib/api_browser/app/views/types/embedded/single_req.html
495
492
  - lib/api_browser/app/views/types/embedded/struct.html
496
493
  - lib/api_browser/app/views/types/label/link.html
497
494
  - lib/api_browser/app/views/types/label/primitive.html
@@ -539,10 +536,18 @@ files:
539
536
  - lib/praxis/exceptions/invalid_trait.rb
540
537
  - lib/praxis/exceptions/stage_not_found.rb
541
538
  - lib/praxis/exceptions/validation.rb
539
+ - lib/praxis/extensions/attribute_filtering.rb
540
+ - lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb
541
+ - lib/praxis/extensions/attribute_filtering/filtering_params.rb
542
+ - lib/praxis/extensions/attribute_filtering/query_builder.rb
542
543
  - lib/praxis/extensions/field_expansion.rb
543
544
  - lib/praxis/extensions/field_selection.rb
545
+ - lib/praxis/extensions/field_selection/active_record_query_selector.rb
544
546
  - lib/praxis/extensions/field_selection/field_selector.rb
547
+ - lib/praxis/extensions/field_selection/sequel_query_selector.rb
545
548
  - lib/praxis/extensions/mapper_selectors.rb
549
+ - lib/praxis/extensions/rails_compat.rb
550
+ - lib/praxis/extensions/rails_compat/request_methods.rb
546
551
  - lib/praxis/extensions/rendering.rb
547
552
  - lib/praxis/file_group.rb
548
553
  - lib/praxis/handlers/json.rb
@@ -560,6 +565,7 @@ files:
560
565
  - lib/praxis/plugin.rb
561
566
  - lib/praxis/plugin_concern.rb
562
567
  - lib/praxis/plugins/praxis_mapper_plugin.rb
568
+ - lib/praxis/plugins/rails_plugin.rb
563
569
  - lib/praxis/request.rb
564
570
  - lib/praxis/request_stages/action.rb
565
571
  - lib/praxis/request_stages/load_request.rb
@@ -568,6 +574,7 @@ files:
568
574
  - lib/praxis/request_stages/validate.rb
569
575
  - lib/praxis/request_stages/validate_params_and_headers.rb
570
576
  - lib/praxis/request_stages/validate_payload.rb
577
+ - lib/praxis/request_superclassing.rb
571
578
  - lib/praxis/resource_definition.rb
572
579
  - lib/praxis/response.rb
573
580
  - lib/praxis/response_definition.rb
@@ -583,7 +590,6 @@ files:
583
590
  - lib/praxis/routing_config.rb
584
591
  - lib/praxis/simple_media_type.rb
585
592
  - lib/praxis/stage.rb
586
- - lib/praxis/stats.rb
587
593
  - lib/praxis/tasks.rb
588
594
  - lib/praxis/tasks/api_docs.rb
589
595
  - lib/praxis/tasks/console.rb
@@ -644,7 +650,6 @@ files:
644
650
  - spec/praxis/router_spec.rb
645
651
  - spec/praxis/routing_config_spec.rb
646
652
  - spec/praxis/stage_spec.rb
647
- - spec/praxis/stats_spec.rb
648
653
  - spec/praxis/trait_spec.rb
649
654
  - spec/praxis/types/fuzzy_hash_spec.rb
650
655
  - spec/praxis/types/multipart_array/part_definition_spec.rb
@@ -711,7 +716,7 @@ files:
711
716
  - tasks/thor/templates/generator/empty_app/docs/app.js
712
717
  - tasks/thor/templates/generator/empty_app/docs/styles.scss
713
718
  - tasks/thor/templates/generator/empty_app/spec/spec_helper.rb
714
- homepage: https://github.com/rightscale/praxis
719
+ homepage: https://github.com/praxis/praxis
715
720
  licenses:
716
721
  - MIT
717
722
  metadata: {}
@@ -726,12 +731,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
726
731
  version: '2.1'
727
732
  required_rubygems_version: !ruby/object:Gem::Requirement
728
733
  requirements:
729
- - - ">="
734
+ - - ">"
730
735
  - !ruby/object:Gem::Version
731
- version: '0'
736
+ version: 1.3.1
732
737
  requirements: []
733
- rubyforge_project:
734
- rubygems_version: 2.5.1
738
+ rubygems_version: 3.0.3
735
739
  signing_key:
736
740
  specification_version: 4
737
741
  summary: Building APIs the way you want it.