praxis 0.22.pre.1 → 2.0.pre.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +5 -20
  3. data/CHANGELOG.md +328 -323
  4. data/lib/praxis.rb +13 -9
  5. data/lib/praxis/action_definition.rb +8 -10
  6. data/lib/praxis/action_definition/headers_dsl_compiler.rb +1 -1
  7. data/lib/praxis/api_definition.rb +27 -44
  8. data/lib/praxis/api_general_info.rb +2 -3
  9. data/lib/praxis/application.rb +15 -142
  10. data/lib/praxis/bootloader.rb +1 -2
  11. data/lib/praxis/bootloader_stages/environment.rb +13 -0
  12. data/lib/praxis/config.rb +1 -1
  13. data/lib/praxis/controller.rb +0 -2
  14. data/lib/praxis/dispatcher.rb +4 -6
  15. data/lib/praxis/docs/generator.rb +8 -18
  16. data/lib/praxis/docs/link_builder.rb +1 -1
  17. data/lib/praxis/error_handler.rb +5 -5
  18. data/lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb +1 -1
  19. data/lib/praxis/extensions/attribute_filtering/filtering_params.rb +1 -1
  20. data/lib/praxis/extensions/attribute_filtering/sequel_filter_query_builder.rb +125 -0
  21. data/lib/praxis/extensions/field_selection.rb +1 -12
  22. data/lib/praxis/extensions/field_selection/active_record_query_selector.rb +28 -34
  23. data/lib/praxis/extensions/field_selection/sequel_query_selector.rb +35 -39
  24. data/lib/praxis/extensions/rendering.rb +1 -1
  25. data/lib/praxis/file_group.rb +1 -1
  26. data/lib/praxis/handlers/xml.rb +1 -1
  27. data/lib/praxis/mapper/active_model_compat.rb +98 -0
  28. data/lib/praxis/mapper/resource.rb +242 -0
  29. data/lib/praxis/mapper/selector_generator.rb +154 -0
  30. data/lib/praxis/mapper/sequel_compat.rb +76 -0
  31. data/lib/praxis/media_type_identifier.rb +2 -1
  32. data/lib/praxis/middleware_app.rb +13 -15
  33. data/lib/praxis/multipart/part.rb +3 -5
  34. data/lib/praxis/notifications.rb +1 -1
  35. data/lib/praxis/plugins/mapper_plugin.rb +64 -0
  36. data/lib/praxis/request.rb +14 -7
  37. data/lib/praxis/request_stages/response.rb +2 -3
  38. data/lib/praxis/resource_definition.rb +15 -19
  39. data/lib/praxis/response.rb +6 -5
  40. data/lib/praxis/response_definition.rb +5 -7
  41. data/lib/praxis/response_template.rb +3 -4
  42. data/lib/praxis/responses/http.rb +36 -0
  43. data/lib/praxis/responses/internal_server_error.rb +12 -3
  44. data/lib/praxis/responses/multipart_ok.rb +11 -4
  45. data/lib/praxis/responses/validation_error.rb +10 -1
  46. data/lib/praxis/route.rb +1 -1
  47. data/lib/praxis/router.rb +3 -3
  48. data/lib/praxis/routing_config.rb +1 -1
  49. data/lib/praxis/tasks/api_docs.rb +2 -10
  50. data/lib/praxis/tasks/routes.rb +0 -1
  51. data/lib/praxis/trait.rb +1 -1
  52. data/lib/praxis/types/media_type_common.rb +2 -2
  53. data/lib/praxis/types/multipart.rb +1 -1
  54. data/lib/praxis/types/multipart_array.rb +2 -2
  55. data/lib/praxis/types/multipart_array/part_definition.rb +1 -1
  56. data/lib/praxis/version.rb +1 -1
  57. data/praxis.gemspec +11 -9
  58. data/spec/functional_spec.rb +0 -1
  59. data/spec/praxis/action_definition_spec.rb +16 -27
  60. data/spec/praxis/api_definition_spec.rb +8 -13
  61. data/spec/praxis/api_general_info_spec.rb +8 -3
  62. data/spec/praxis/application_spec.rb +8 -14
  63. data/spec/praxis/collection_spec.rb +3 -2
  64. data/spec/praxis/config_spec.rb +2 -2
  65. data/spec/praxis/extensions/field_selection/active_record_query_selector_spec.rb +106 -0
  66. data/spec/praxis/extensions/field_selection/sequel_query_selector_spec.rb +147 -0
  67. data/spec/praxis/extensions/field_selection/support/spec_resources_active_model.rb +130 -0
  68. data/spec/praxis/extensions/field_selection/support/spec_resources_sequel.rb +106 -0
  69. data/spec/praxis/handlers/xml_spec.rb +2 -2
  70. data/spec/praxis/mapper/resource_spec.rb +169 -0
  71. data/spec/praxis/mapper/selector_generator_spec.rb +325 -0
  72. data/spec/praxis/media_type_spec.rb +0 -10
  73. data/spec/praxis/middleware_app_spec.rb +16 -10
  74. data/spec/praxis/request_spec.rb +7 -17
  75. data/spec/praxis/request_stages/action_spec.rb +8 -1
  76. data/spec/praxis/request_stages/validate_spec.rb +1 -1
  77. data/spec/praxis/resource_definition_spec.rb +10 -12
  78. data/spec/praxis/response_definition_spec.rb +12 -26
  79. data/spec/praxis/response_spec.rb +6 -13
  80. data/spec/praxis/responses/internal_server_error_spec.rb +5 -2
  81. data/spec/praxis/router_spec.rb +5 -9
  82. data/spec/spec_app/app/controllers/instances.rb +1 -1
  83. data/spec/spec_app/config.ru +6 -1
  84. data/spec/spec_app/config/environment.rb +3 -21
  85. data/spec/spec_helper.rb +13 -17
  86. data/spec/support/be_deep_equal_matcher.rb +39 -0
  87. data/spec/support/spec_resources.rb +124 -0
  88. metadata +74 -53
  89. data/lib/praxis/extensions/attribute_filtering.rb +0 -28
  90. data/lib/praxis/extensions/attribute_filtering/query_builder.rb +0 -39
  91. data/lib/praxis/extensions/mapper_selectors.rb +0 -16
  92. data/lib/praxis/media_type_collection.rb +0 -127
  93. data/lib/praxis/plugins/praxis_mapper_plugin.rb +0 -246
  94. data/spec/praxis/media_type_collection_spec.rb +0 -157
  95. data/spec/praxis/plugins/praxis_mapper_plugin_spec.rb +0 -142
  96. data/spec/spec_app/app/models/person.rb +0 -3
@@ -21,35 +21,17 @@ Praxis::Application.configure do |application|
21
21
  application.bootloader.use SimpleAuthenticationPlugin, config_file: 'config/authentication.yml'
22
22
  application.bootloader.use AuthorizationPlugin
23
23
 
24
-
25
- adapter_name = 'sqlite'
26
- db_name = ':memory:'
27
- connection_opts = if RUBY_PLATFORM !~ /java/
28
- { adapter: adapter_name , database: db_name }
29
- else
30
- require 'jdbc/sqlite3'
31
- { adapter: 'jdbc', uri: "jdbc:#{adapter_name}:#{db_name}" }
32
- end
33
-
34
- application.bootloader.use Praxis::Plugins::PraxisMapperPlugin, {
35
- config_data: {
36
- repositories: { default: connection_opts },
37
- log_stats: 'detailed'
38
- }
39
- }
40
-
41
24
  # enable "development-mode" options
42
25
  application.config.praxis.validate_responses = true
43
26
  application.config.praxis.validate_response_bodies = true
44
27
  application.config.praxis.show_exceptions = true
45
28
 
46
- # FIXME: until we have a better way to unit test such a feature...
47
29
  # Silly callback code pieces to test that the deferred callbacks work even for sub-stages
48
- application.bootloader.after :app, :models do
49
- PersonModel.identity(:other_id)
30
+ application.bootloader.after :app, :controllers do
31
+ $after_app_controllers = :worked
50
32
  end
51
33
  application.bootloader.after :app do
52
- raise "After sub-stage hooks not working!" unless PersonModel.identities.include? :other_id
34
+ raise "After sub-stage hooks not working!" unless $after_app_controllers == :worked
53
35
  end
54
36
 
55
37
 
@@ -19,25 +19,32 @@ require 'rack/test'
19
19
  require 'rspec/its'
20
20
  require 'rspec/collection_matchers'
21
21
 
22
-
23
22
  Dir["#{File.dirname(__FILE__)}/../lib/praxis/plugins/*.rb"].each do |file|
24
23
  require file
25
24
  end
26
25
 
27
- APP = Praxis::Application.instance
26
+
28
27
  Dir["#{File.dirname(__FILE__)}/support/*.rb"].each do |file|
29
28
  require file
30
29
  end
31
30
 
31
+ def suppress_output
32
+ original_stdout, original_stderr = $stdout.clone, $stderr.clone
33
+ $stderr.reopen File.new('/dev/null', 'w')
34
+ $stdout.reopen File.new('/dev/null', 'w')
35
+ yield
36
+ ensure
37
+ $stdout.reopen original_stdout
38
+ $stderr.reopen original_stderr
39
+ end
40
+
32
41
  RSpec.configure do |config|
33
42
  config.include Rack::Test::Methods
34
43
 
35
44
  config.before(:suite) do
45
+ Praxis::Mapper::Resource.finalize!
36
46
  Praxis::Blueprint.caching_enabled = true
37
- APP.setup(root:'spec/spec_app')
38
-
39
- # create the table
40
- setup_database!
47
+ Praxis::Application.instance.setup(root:'spec/spec_app')
41
48
  end
42
49
 
43
50
  config.before(:each) do
@@ -49,17 +56,6 @@ RSpec.configure do |config|
49
56
  config.before(:all) do
50
57
  # disable logging below warn level
51
58
  Praxis::Application.instance.logger.level = 2 # warn
52
- Thread.current[:praxis_instance] = APP
53
59
  end
54
60
  end
55
61
 
56
- # create the test db schema
57
- def setup_database!
58
- mapper = Praxis::Application.instance.plugins[:praxis_mapper]
59
- Sequel.connect(mapper.config.repositories["default"]['connection_settings'].dump) do |db|
60
- db.create_table! :people do
61
- primary_key :id
62
- string :name
63
- end
64
- end
65
- end
@@ -0,0 +1,39 @@
1
+ # Copied verbatim from: https://github.com/amogil/rspec-deep-ignore-order-matcher
2
+
3
+ RSpec::Matchers.define :be_deep_equal do |expected|
4
+ match { |actual| match? actual, expected }
5
+
6
+ failure_message do |actual|
7
+ "expected that #{actual} would be deep equal with #{expected}"
8
+ end
9
+
10
+ failure_message_when_negated do |actual|
11
+ "expected that #{actual} would not be deep equal with #{expected}"
12
+ end
13
+
14
+ description do
15
+ "be deep equal with #{expected}"
16
+ end
17
+
18
+ def match?(actual, expected)
19
+ return arrays_match?(actual, expected) if expected.is_a?(Array) && actual.is_a?(Array)
20
+ return hashes_match?(actual, expected) if expected.is_a?(Hash) && actual.is_a?(Hash)
21
+ expected == actual
22
+ end
23
+
24
+ def arrays_match?(actual, expected)
25
+ exp = expected.clone
26
+ actual.each do |a|
27
+ index = exp.find_index { |e| match? a, e }
28
+ return false if index.nil?
29
+ exp.delete_at(index)
30
+ end
31
+ exp.empty?
32
+ end
33
+
34
+ def hashes_match?(actual, expected)
35
+ return false unless actual.keys.sort == expected.keys.sort
36
+ actual.each { |key, value| return false unless match? value, expected[key] }
37
+ true
38
+ end
39
+ end
@@ -0,0 +1,124 @@
1
+ require 'ostruct'
2
+
3
+ require 'praxis/mapper/active_model_compat'
4
+ class SimpleModel < OpenStruct
5
+ include Praxis::Mapper::ActiveModelCompat
6
+ def self._praxis_associations
7
+ {
8
+ parent: {
9
+ model: ParentModel,
10
+ primary_key: :id,
11
+ type: :many_to_one,
12
+ local_key_columns: [:parent_id],
13
+ remote_key_columns: [:id]
14
+ },
15
+ other_model: {
16
+ model: OtherModel,
17
+ primary_key: :id,
18
+ type: :many_to_one,
19
+ local_key_columns: [:other_model_id],
20
+ remote_key_columns: [:id]
21
+ }
22
+ }
23
+ end
24
+ end
25
+
26
+ class OtherModel < OpenStruct
27
+ include Praxis::Mapper::ActiveModelCompat
28
+ def self._praxis_associations
29
+ {
30
+ parent: {
31
+ model: ParentModel,
32
+ primary_key: :id,
33
+ type: :many_to_one,
34
+ local_key_columns: [:parent_id],
35
+ remote_key_columns: [:id]
36
+ },
37
+ simple_models: {
38
+ model: SimpleModel,
39
+ primary_key: :id,
40
+ type: :many_to_many,
41
+ local_key_columns: [:id],
42
+ remote_key_columns: [:id] # The through table is in the middle where the FKs are...
43
+ }
44
+ }
45
+ end
46
+ end
47
+
48
+ class ParentModel < OpenStruct
49
+ include Praxis::Mapper::ActiveModelCompat
50
+ def self._praxis_associations
51
+ {
52
+ simple_children: {
53
+ model: SimpleModel,
54
+ primary_key: :id,
55
+ type: :one_to_many,
56
+ local_key_columns: [:id],
57
+ remote_key_columns: [:parent_id]
58
+ }
59
+ }
60
+ end
61
+ end
62
+
63
+ class YamlArrayModel < OpenStruct
64
+ include Praxis::Mapper::ActiveModelCompat
65
+ def self._praxis_associations
66
+ {
67
+ parents: {
68
+ model: ParentModel,
69
+ primary_key: :id,
70
+ type: :one_to_many,
71
+ local_key_columns: [:id],
72
+ remote_key_columns: [:parent_id]
73
+ }
74
+ }
75
+ end
76
+ end
77
+
78
+ # A set of resource classes for use in specs
79
+ class BaseResource < Praxis::Mapper::Resource
80
+ def href
81
+ base_href = '' # "/api"
82
+ base_href + "/#{self.class.collection_name}/#{self.id}"
83
+ end
84
+
85
+ property :href, dependencies: [:id]
86
+ end
87
+
88
+ class OtherResource < BaseResource
89
+ model OtherModel
90
+
91
+ property :display_name, dependencies: [:name]
92
+ end
93
+
94
+ class ParentResource < BaseResource
95
+ model ParentModel
96
+ end
97
+
98
+ class SimpleResource < BaseResource
99
+ model SimpleModel
100
+
101
+ resource_delegate :other_model => [:other_attribute]
102
+
103
+ def other_resource
104
+ self.other_model
105
+ end
106
+
107
+ property :aliased_method, dependencies: [:column1, :other_model]
108
+ property :other_resource, dependencies: [:other_model]
109
+
110
+ property :parent, dependencies: [:parent, :added_column]
111
+
112
+ property :name, dependencies: [:simple_name]
113
+ property :direct_other_name, dependencies: [ 'other_model.name' ]
114
+ property :aliased_other_name, dependencies: [ 'other_model.display_name' ]
115
+
116
+ property :everything, dependencies: [:*]
117
+ property :everything_from_parent, dependencies: ['parent.*']
118
+ property :circular_dep, dependencies: [ :circular_dep, :column1 ]
119
+ property :no_deps, dependencies: []
120
+ end
121
+
122
+ class YamlArrayResource < BaseResource
123
+ model YamlArrayModel
124
+ end
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.22.pre.1
4
+ version: 2.0.pre.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-09-12 00:00:00.000000000 Z
12
+ date: 2020-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
@@ -31,20 +31,20 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: '1.1'
35
35
  - - "<="
36
36
  - !ruby/object:Gem::Version
37
- version: '1'
37
+ version: '2'
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  requirements:
42
42
  - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: '0'
44
+ version: '1.1'
45
45
  - - "<="
46
46
  - !ruby/object:Gem::Version
47
- version: '1'
47
+ version: '2'
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: activesupport
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -73,62 +73,48 @@ dependencies:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- - !ruby/object:Gem::Dependency
77
- name: praxis-mapper
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '4.3'
83
- type: :runtime
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '4.3'
90
76
  - !ruby/object:Gem::Dependency
91
77
  name: praxis-blueprints
92
78
  requirement: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - "~>"
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
- version: '3.3'
82
+ version: '3.4'
97
83
  type: :runtime
98
84
  prerelease: false
99
85
  version_requirements: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - "~>"
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
- version: '3.3'
89
+ version: '3.4'
104
90
  - !ruby/object:Gem::Dependency
105
91
  name: attributor
106
92
  requirement: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - "~>"
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
- version: '5.1'
96
+ version: '5.4'
111
97
  type: :runtime
112
98
  prerelease: false
113
99
  version_requirements: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - "~>"
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
- version: '5.1'
103
+ version: '5.4'
118
104
  - !ruby/object:Gem::Dependency
119
105
  name: thor
120
106
  requirement: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - "~>"
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
- version: '0.18'
110
+ version: '0'
125
111
  type: :runtime
126
112
  prerelease: false
127
113
  version_requirements: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - "~>"
115
+ - - ">="
130
116
  - !ruby/object:Gem::Version
131
- version: '0.18'
117
+ version: '0'
132
118
  - !ruby/object:Gem::Dependency
133
119
  name: terminal-table
134
120
  requirement: !ruby/object:Gem::Requirement
@@ -189,42 +175,42 @@ dependencies:
189
175
  name: pry
190
176
  requirement: !ruby/object:Gem::Requirement
191
177
  requirements:
192
- - - "~>"
178
+ - - ">="
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
195
181
  type: :development
196
182
  prerelease: false
197
183
  version_requirements: !ruby/object:Gem::Requirement
198
184
  requirements:
199
- - - "~>"
185
+ - - ">="
200
186
  - !ruby/object:Gem::Version
201
187
  version: '0'
202
188
  - !ruby/object:Gem::Dependency
203
189
  name: pry-byebug
204
190
  requirement: !ruby/object:Gem::Requirement
205
191
  requirements:
206
- - - "~>"
192
+ - - ">="
207
193
  - !ruby/object:Gem::Version
208
- version: '1'
194
+ version: '0'
209
195
  type: :development
210
196
  prerelease: false
211
197
  version_requirements: !ruby/object:Gem::Requirement
212
198
  requirements:
213
- - - "~>"
199
+ - - ">="
214
200
  - !ruby/object:Gem::Version
215
- version: '1'
201
+ version: '0'
216
202
  - !ruby/object:Gem::Dependency
217
203
  name: pry-stack_explorer
218
204
  requirement: !ruby/object:Gem::Requirement
219
205
  requirements:
220
- - - "~>"
206
+ - - ">="
221
207
  - !ruby/object:Gem::Version
222
208
  version: '0'
223
209
  type: :development
224
210
  prerelease: false
225
211
  version_requirements: !ruby/object:Gem::Requirement
226
212
  requirements:
227
- - - "~>"
213
+ - - ">="
228
214
  - !ruby/object:Gem::Version
229
215
  version: '0'
230
216
  - !ruby/object:Gem::Dependency
@@ -371,16 +357,16 @@ dependencies:
371
357
  name: yard
372
358
  requirement: !ruby/object:Gem::Requirement
373
359
  requirements:
374
- - - "~>"
360
+ - - ">="
375
361
  - !ruby/object:Gem::Version
376
- version: '0'
362
+ version: 0.9.20
377
363
  type: :development
378
364
  prerelease: false
379
365
  version_requirements: !ruby/object:Gem::Requirement
380
366
  requirements:
381
- - - "~>"
367
+ - - ">="
382
368
  - !ruby/object:Gem::Version
383
- version: '0'
369
+ version: 0.9.20
384
370
  - !ruby/object:Gem::Dependency
385
371
  name: coveralls
386
372
  requirement: !ruby/object:Gem::Requirement
@@ -395,6 +381,34 @@ dependencies:
395
381
  - - ">="
396
382
  - !ruby/object:Gem::Version
397
383
  version: '0'
384
+ - !ruby/object:Gem::Dependency
385
+ name: sequel
386
+ requirement: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - "~>"
389
+ - !ruby/object:Gem::Version
390
+ version: '5'
391
+ type: :development
392
+ prerelease: false
393
+ version_requirements: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - "~>"
396
+ - !ruby/object:Gem::Version
397
+ version: '5'
398
+ - !ruby/object:Gem::Dependency
399
+ name: activerecord
400
+ requirement: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - ">"
403
+ - !ruby/object:Gem::Version
404
+ version: '4'
405
+ type: :development
406
+ prerelease: false
407
+ version_requirements: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - ">"
410
+ - !ruby/object:Gem::Version
411
+ version: '4'
398
412
  description:
399
413
  email:
400
414
  - blanquer@gmail.com
@@ -536,16 +550,14 @@ files:
536
550
  - lib/praxis/exceptions/invalid_trait.rb
537
551
  - lib/praxis/exceptions/stage_not_found.rb
538
552
  - lib/praxis/exceptions/validation.rb
539
- - lib/praxis/extensions/attribute_filtering.rb
540
553
  - lib/praxis/extensions/attribute_filtering/active_record_filter_query_builder.rb
541
554
  - lib/praxis/extensions/attribute_filtering/filtering_params.rb
542
- - lib/praxis/extensions/attribute_filtering/query_builder.rb
555
+ - lib/praxis/extensions/attribute_filtering/sequel_filter_query_builder.rb
543
556
  - lib/praxis/extensions/field_expansion.rb
544
557
  - lib/praxis/extensions/field_selection.rb
545
558
  - lib/praxis/extensions/field_selection/active_record_query_selector.rb
546
559
  - lib/praxis/extensions/field_selection/field_selector.rb
547
560
  - lib/praxis/extensions/field_selection/sequel_query_selector.rb
548
- - lib/praxis/extensions/mapper_selectors.rb
549
561
  - lib/praxis/extensions/rails_compat.rb
550
562
  - lib/praxis/extensions/rails_compat/request_methods.rb
551
563
  - lib/praxis/extensions/rendering.rb
@@ -555,8 +567,11 @@ files:
555
567
  - lib/praxis/handlers/www_form.rb
556
568
  - lib/praxis/handlers/xml.rb
557
569
  - lib/praxis/links.rb
570
+ - lib/praxis/mapper/active_model_compat.rb
571
+ - lib/praxis/mapper/resource.rb
572
+ - lib/praxis/mapper/selector_generator.rb
573
+ - lib/praxis/mapper/sequel_compat.rb
558
574
  - lib/praxis/media_type.rb
559
- - lib/praxis/media_type_collection.rb
560
575
  - lib/praxis/media_type_identifier.rb
561
576
  - lib/praxis/middleware_app.rb
562
577
  - lib/praxis/multipart/parser.rb
@@ -564,7 +579,7 @@ files:
564
579
  - lib/praxis/notifications.rb
565
580
  - lib/praxis/plugin.rb
566
581
  - lib/praxis/plugin_concern.rb
567
- - lib/praxis/plugins/praxis_mapper_plugin.rb
582
+ - lib/praxis/plugins/mapper_plugin.rb
568
583
  - lib/praxis/plugins/rails_plugin.rb
569
584
  - lib/praxis/request.rb
570
585
  - lib/praxis/request_stages/action.rb
@@ -623,20 +638,24 @@ files:
623
638
  - spec/praxis/controller_spec.rb
624
639
  - spec/praxis/dispatcher_spec.rb
625
640
  - spec/praxis/extensions/field_expansion_spec.rb
641
+ - spec/praxis/extensions/field_selection/active_record_query_selector_spec.rb
626
642
  - spec/praxis/extensions/field_selection/field_selector_spec.rb
643
+ - spec/praxis/extensions/field_selection/sequel_query_selector_spec.rb
644
+ - spec/praxis/extensions/field_selection/support/spec_resources_active_model.rb
645
+ - spec/praxis/extensions/field_selection/support/spec_resources_sequel.rb
627
646
  - spec/praxis/extensions/rendering_spec.rb
628
647
  - spec/praxis/file_group_spec.rb
629
648
  - spec/praxis/handlers/json_spec.rb
630
649
  - spec/praxis/handlers/xml_spec.rb
631
650
  - spec/praxis/links_spec.rb
632
- - spec/praxis/media_type_collection_spec.rb
651
+ - spec/praxis/mapper/resource_spec.rb
652
+ - spec/praxis/mapper/selector_generator_spec.rb
633
653
  - spec/praxis/media_type_identifier_spec.rb
634
654
  - spec/praxis/media_type_spec.rb
635
655
  - spec/praxis/middleware_app_spec.rb
636
656
  - spec/praxis/multipart/parser_spec.rb
637
657
  - spec/praxis/notifications_spec.rb
638
658
  - spec/praxis/plugin_concern_spec.rb
639
- - spec/praxis/plugins/praxis_mapper_plugin_spec.rb
640
659
  - spec/praxis/request_spec.rb
641
660
  - spec/praxis/request_stages/action_spec.rb
642
661
  - spec/praxis/request_stages/request_stage_spec.rb
@@ -661,7 +680,6 @@ files:
661
680
  - spec/spec_app/app/controllers/base_class.rb
662
681
  - spec/spec_app/app/controllers/instances.rb
663
682
  - spec/spec_app/app/controllers/volumes.rb
664
- - spec/spec_app/app/models/person.rb
665
683
  - spec/spec_app/app/responses/bulk_response.rb
666
684
  - spec/spec_app/app/responses/multipart.rb
667
685
  - spec/spec_app/app/responses/other_response.rb
@@ -683,10 +701,12 @@ files:
683
701
  - spec/spec_app/design/resources/volume_snapshots.rb
684
702
  - spec/spec_app/design/resources/volumes.rb
685
703
  - spec/spec_helper.rb
704
+ - spec/support/be_deep_equal_matcher.rb
686
705
  - spec/support/spec_authorization_plugin.rb
687
706
  - spec/support/spec_complex_authentication_plugin.rb
688
707
  - spec/support/spec_media_types.rb
689
708
  - spec/support/spec_resource_definitions.rb
709
+ - spec/support/spec_resources.rb
690
710
  - spec/support/spec_simple_authentication_plugin.rb
691
711
  - tasks/loader.thor
692
712
  - tasks/thor/app.rb
@@ -735,7 +755,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
735
755
  - !ruby/object:Gem::Version
736
756
  version: 1.3.1
737
757
  requirements: []
738
- rubygems_version: 3.0.3
758
+ rubyforge_project:
759
+ rubygems_version: 2.6.14
739
760
  signing_key:
740
761
  specification_version: 4
741
762
  summary: Building APIs the way you want it.