rest-api-generator 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04727c112f46dd53f0ab7b45c0e83c13ddd3ae2df45fed5b3aa89cf7fac6efa4
4
- data.tar.gz: 8de60fa55662ef20a6390af3da742c5873e3a2499598790afe759e0afae00352
3
+ metadata.gz: f7576268dec99ae0feafe5da3a552dae8d0609ccd244f5e62a99007e2f54090b
4
+ data.tar.gz: 0f8a227490885ada7b83f1373c854857889e710b1d24285a81b45490308419a6
5
5
  SHA512:
6
- metadata.gz: 585ad32f866f1e0374dd6051c91ee898a382ed67b1995c511536e3548ed25cc0731725980570ef814d9782d73803b94fd78183af5eee137ed8a054cfb3ab2850
7
- data.tar.gz: 68aedf154d0f0b0472cc082d5cbf8ec47e2276070a60963aa8ab58cbb827221fcde13c709e4d7dcd3341ac6a7787a9373fd7564d904b0595aabd165f009ac41e
6
+ metadata.gz: 19bbdd850d24d6168fda588274287ad8645b255165487261dd6413420ab395fdc150675d97ed57ac6e2d395f2bf7cc5d48632f3b43bfe2a11f06964aae71b1d7
7
+ data.tar.gz: 4653ea0a74f2377c9052eba66bb16230096598f5f3e5d52f42ff5ad5141b763b4054359c7bf360083d7e08b517249bf44b17a9a6e64765f51861961075068c65
data/Gemfile.lock CHANGED
@@ -1,7 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rest-api-generator (0.1.4)
4
+ rest-api-generator (0.1.7)
5
+ anyway_config (>= 2.0.0)
6
+ pagy
5
7
  rails (>= 5.0)
6
8
 
7
9
  GEM
@@ -78,7 +80,7 @@ GEM
78
80
  activesupport (>= 3.0)
79
81
  railties (>= 3.0)
80
82
  rspec-rails (>= 2.2)
81
- anyway_config (2.3.1)
83
+ anyway_config (2.4.0)
82
84
  ruby-next-core (>= 0.14.0)
83
85
  ast (2.4.2)
84
86
  builder (3.2.4)
@@ -93,7 +95,7 @@ GEM
93
95
  date (3.3.3)
94
96
  diff-lcs (1.5.0)
95
97
  erubi (1.12.0)
96
- globalid (1.0.0)
98
+ globalid (1.1.0)
97
99
  activesupport (>= 5.0)
98
100
  i18n (1.12.0)
99
101
  concurrent-ruby (~> 1.0)
@@ -103,7 +105,7 @@ GEM
103
105
  loofah (2.19.1)
104
106
  crass (~> 1.0.2)
105
107
  nokogiri (>= 1.5.9)
106
- mail (2.8.0)
108
+ mail (2.8.1)
107
109
  mini_mime (>= 0.1.1)
108
110
  net-imap
109
111
  net-pop
@@ -111,6 +113,7 @@ GEM
111
113
  marcel (1.0.2)
112
114
  method_source (1.0.0)
113
115
  mini_mime (1.1.2)
116
+ mini_portile2 (2.8.1)
114
117
  minitest (5.16.3)
115
118
  net-imap (0.3.4)
116
119
  date
@@ -121,9 +124,13 @@ GEM
121
124
  timeout
122
125
  net-smtp (0.3.3)
123
126
  net-protocol
124
- nio4r (2.5.8)
127
+ nio4r (2.5.9)
128
+ nokogiri (1.13.10)
129
+ mini_portile2 (~> 2.8.0)
130
+ racc (~> 1.4)
125
131
  nokogiri (1.13.10-x86_64-linux)
126
132
  racc (~> 1.4)
133
+ pagy (6.0.3)
127
134
  parallel (1.22.1)
128
135
  parser (3.1.3.0)
129
136
  ast (~> 2.4.1)
@@ -222,6 +229,8 @@ GEM
222
229
  rubocop (~> 1.35)
223
230
  ruby-next-core (0.15.3)
224
231
  ruby-progressbar (1.11.0)
232
+ sqlite3 (1.5.4)
233
+ mini_portile2 (~> 2.8.0)
225
234
  sqlite3 (1.5.4-x86_64-linux)
226
235
  switchcop (0.1.2)
227
236
  rubocop (~> 1.40.0)
@@ -230,7 +239,7 @@ GEM
230
239
  rubocop-rspec (~> 2.16.0)
231
240
  rubocop-shopify (~> 2.10.1)
232
241
  thor (1.2.1)
233
- timeout (0.3.1)
242
+ timeout (0.3.2)
234
243
  tzinfo (2.0.5)
235
244
  concurrent-ruby (~> 1.0)
236
245
  unicode-display_width (2.3.0)
@@ -245,7 +254,6 @@ PLATFORMS
245
254
 
246
255
  DEPENDENCIES
247
256
  ammeter (~> 1.1.5)
248
- anyway_config (>= 2.0.0)
249
257
  database_cleaner
250
258
  rake (~> 13.0)
251
259
  rest-api-generator!
data/README.md CHANGED
@@ -24,6 +24,8 @@ Following [Switch Dreams's](https://www.switchdreams.com.br/]) coding practices,
24
24
  - :memo: [Automated documentation](#specsdocs)
25
25
  - [Resource ordering](#ordering)
26
26
  - [Resource filter](#filtering)
27
+ - [Resource pagination](#pagination)
28
+ - [Configurable](#configuration)
27
29
 
28
30
  ## Next Features
29
31
 
@@ -243,19 +245,11 @@ This spec options work as generators too, so you can call them individually:
243
245
  rails g rest_api_generator:spec:rswag Car name:string color:string
244
246
  ```
245
247
 
246
- ##### Custom paths
248
+ #### Configuration for specs
247
249
 
248
250
  By default, the plain rspec and rswag specs are going to be generated in the _spec/requests_ and _spec/docs_
249
- directories, respectively. You can override this configuration with an initializer inside your project:
251
+ directories, respectively. You can override using the (config options)[#configuration]]. :
250
252
 
251
- ```rb
252
- # config/initializers/rest_api_generator.rb
253
-
254
- RestApiGenerator.configure do |config|
255
- config.test_path = "custom_test_dir/requests"
256
- config.docs_path = "custom_docs_dir/rswag"
257
- end
258
- ```
259
253
 
260
254
  ### Resource Features
261
255
 
@@ -301,6 +295,49 @@ And It's done, you can filter your index end-point:
301
295
 
302
296
  - `GET /cars?color=blue or GET /cars?color=red&name=Ferrari`
303
297
 
298
+ ### Pagination
299
+
300
+ For pagination, you need to create pagy initialializer file (pagy.rb) in the config directory of your project. Follow [pagy's example](https://ddnexus.github.io/pagy/quick-start/) for more information.
301
+
302
+ Next, you should add some lines on top of the previously created pagy file:
303
+
304
+ ```ruby
305
+ # config/initializers/pagy.rb
306
+ require "pagy"
307
+ require "pagy/extras/headers"
308
+ ```
309
+
310
+ At last, change the pagination variable on RestApiGenerator initializer to true;
311
+
312
+ ```rb
313
+ # config/initializers/rest_api_generator.rb
314
+ config.pagination = true # default: false
315
+ ```
316
+
317
+ Note, if the parent controller is changed, it is necessary to include Pagy::Backend in the new parent.
318
+
319
+ ```rb
320
+ # new_parent_controller.rb
321
+ class NewParentController < ActionController::Base
322
+ include Pagy::Backend
323
+ end
324
+ ```
325
+
326
+ ## Configuration
327
+
328
+ You can override this gem configuration using the initializer or any other method from [anyway_config](https://github.com/palkan/anyway_config):
329
+
330
+ ```rb
331
+ # config/initializers/rest_api_generator.rb
332
+
333
+ RestApiGenerator.configure do |config|
334
+ config.test_path = "custom_test_dir/requests" # default: spec/requests
335
+ config.docs_path = "custom_docs_dir/rswag" # default: spec/docs
336
+ config.parent_class = "ApplicationController" # default: RestApiGenerator::ResourceController
337
+ config.pagination = true # default: false
338
+ end
339
+ ```
340
+
304
341
  ## Development
305
342
 
306
343
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
@@ -4,5 +4,6 @@ require "action_controller"
4
4
 
5
5
  module RestApiGenerator
6
6
  class ApplicationController < ActionController::Base
7
+ include Pagy::Backend
7
8
  end
8
9
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RestApiGenerator
4
- class ChildResourceController < RestApiGenerator.parent_controller.constantize
4
+ class ChildResourceController < RestApiGenerator.configuration.parent_controller.constantize
5
5
  include Orderable
6
6
 
7
7
  before_action :set_parent_resource
@@ -11,6 +11,10 @@ module RestApiGenerator
11
11
  @resources = resources
12
12
  @resources = @resources.filter_resource(params_for_filter) if resource_class.include?(Filterable)
13
13
  @resources = @resources.order(ordering_params(params[:sort])) if params[:sort]
14
+ if pagination
15
+ @pagy, @resources = pagy(@resources)
16
+ pagy_headers_merge(@pagy)
17
+ end
14
18
  render json: @resources, status: :ok
15
19
  end
16
20
 
@@ -93,5 +97,9 @@ module RestApiGenerator
93
97
  def record_id
94
98
  params.permit(:id)[:id]
95
99
  end
100
+
101
+ def pagination
102
+ RestApiGenerator.configuration.pagination
103
+ end
96
104
  end
97
105
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RestApiGenerator
4
- class ResourceController < RestApiGenerator.parent_controller.constantize
4
+ class ResourceController < RestApiGenerator.configuration.parent_controller.constantize
5
5
  include Orderable
6
6
 
7
7
  before_action :set_resource, only: [:show, :update, :destroy]
@@ -10,6 +10,10 @@ module RestApiGenerator
10
10
  @resources = resource_class.all
11
11
  @resources = @resources.filter_resource(params_for_filter) if resource_class.include?(Filterable)
12
12
  @resources = @resources.order(ordering_params(params[:sort])) if params[:sort]
13
+ if pagination
14
+ @pagy, @resources = pagy(@resources)
15
+ pagy_headers_merge(@pagy)
16
+ end
13
17
  render json: @resources, status: :ok
14
18
  end
15
19
 
@@ -69,5 +73,9 @@ module RestApiGenerator
69
73
  def record_id
70
74
  params.permit(:id)[:id]
71
75
  end
76
+
77
+ def pagination
78
+ RestApiGenerator.configuration.pagination
79
+ end
72
80
  end
73
81
  end
@@ -2,10 +2,15 @@
2
2
 
3
3
  require "anyway_config"
4
4
 
5
+ Anyway::Settings.default_config_path = ->(_name) { Rails.root ? Rails.root.join("config/rest_api_generator.yml") : "" }
6
+
5
7
  module RestApiGenerator
6
8
  class Config < Anyway::Config
7
9
  config_name :rest_api_generator
8
10
 
9
- attr_config test_path: "spec/requests", docs_path: "spec/docs"
11
+ attr_config test_path: "spec/requests",
12
+ docs_path: "spec/docs",
13
+ parent_controller: "RestApiGenerator::ApplicationController",
14
+ pagination: false
10
15
  end
11
16
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RestApiGenerator
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RestApiGenerator
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.7"
5
5
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "rails"
4
4
  require_relative "rest_api_generator/version"
5
- require_relative "rest_api_generator/application_controller"
6
5
  require_relative "rest_api_generator/error_handler"
7
6
  require_relative "rest_api_generator/config"
8
7
  require_relative "rest_api_generator/custom_error"
@@ -13,20 +12,13 @@ require_relative "rest_api_generator/orderable"
13
12
  module RestApiGenerator
14
13
  class Error < StandardError; end
15
14
 
16
- class << self
17
- def configuration
18
- @configuration ||= Config.new
19
- end
20
-
21
- def configure
22
- yield(configuration)
23
- end
15
+ def self.configuration
16
+ @config ||= Config.new
24
17
  end
25
18
 
26
- def self.parent_controller
27
- "RestApiGenerator::ApplicationController"
19
+ def self.configure
20
+ yield(configuration) if block_given?
28
21
  end
29
22
  end
30
23
 
31
- require_relative "rest_api_generator/resource_controller"
32
- require_relative "rest_api_generator/child_resource_controller"
24
+ require "rest_api_generator/rails" if defined?(Rails)
@@ -22,8 +22,13 @@ Gem::Specification.new do |spec|
22
22
  spec.metadata["source_code_uri"] = "https://github.com/SwitchDreams/rest-api-generator"
23
23
  spec.metadata["changelog_uri"] = "https://github.com/SwitchDreams/rest-api-generator"
24
24
 
25
- spec.files = Dir["{bin,sig,lib,public}/**/*", "MIT-LICENSE", "Rakefile", "README.md", "rest-api-generator.gemspec",
26
- "Gemfile", "Gemfile.lock"]
25
+ spec.files = Dir["{bin,sig,lib,public,app}/**/*",
26
+ "MIT-LICENSE",
27
+ "Rakefile",
28
+ "README.md",
29
+ "rest-api-generator.gemspec",
30
+ "Gemfile",
31
+ "Gemfile.lock"]
27
32
  spec.bindir = "exe"
28
33
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
34
  spec.require_paths = ["lib"]
@@ -32,10 +37,11 @@ Gem::Specification.new do |spec|
32
37
  # guide at: https://bundler.io/guides/creating_gem.html
33
38
  spec.metadata["rubygems_mfa_required"] = "true"
34
39
 
40
+ spec.add_dependency "anyway_config", ">= 2.0.0"
41
+ spec.add_dependency "pagy"
35
42
  spec.add_dependency "rails", ">= 5.0"
36
43
 
37
44
  spec.add_development_dependency "ammeter", "~> 1.1.5"
38
- spec.add_development_dependency "anyway_config", ">= 2.0.0"
39
45
  spec.add_development_dependency "database_cleaner"
40
46
  spec.add_development_dependency "rspec-rails", "~> 6.0.0"
41
47
  spec.add_development_dependency "rswag"
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-api-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - PedroAugustoRamalhoDuarte
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-27 00:00:00.000000000 Z
11
+ date: 2023-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: anyway_config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.0'
19
+ version: 2.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.0'
26
+ version: 2.0.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: ammeter
28
+ name: pagy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.5
34
- type: :development
33
+ version: '0'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.5
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: anyway_config
42
+ name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 2.0.0
48
- type: :development
47
+ version: '5.0'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 2.0.0
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ammeter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.1.5
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.1.5
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: database_cleaner
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +134,9 @@ files:
120
134
  - Gemfile.lock
121
135
  - README.md
122
136
  - Rakefile
137
+ - app/controllers/rest_api_generator/application_controller.rb
138
+ - app/controllers/rest_api_generator/child_resource_controller.rb
139
+ - app/controllers/rest_api_generator/resource_controller.rb
123
140
  - bin/console
124
141
  - bin/setup
125
142
  - lib/generators/rest_api_generator/USAGE
@@ -137,15 +154,13 @@ files:
137
154
  - lib/generators/rest_api_generator/templates/rest_api_controller.rb.tt
138
155
  - lib/rest-api-generator.rb
139
156
  - lib/rest_api_generator.rb
140
- - lib/rest_api_generator/application_controller.rb
141
- - lib/rest_api_generator/child_resource_controller.rb
142
157
  - lib/rest_api_generator/config.rb
143
158
  - lib/rest_api_generator/custom_error.rb
144
159
  - lib/rest_api_generator/error_handler.rb
145
160
  - lib/rest_api_generator/filterable.rb
146
161
  - lib/rest_api_generator/helpers/render.rb
147
162
  - lib/rest_api_generator/orderable.rb
148
- - lib/rest_api_generator/resource_controller.rb
163
+ - lib/rest_api_generator/rails.rb
149
164
  - lib/rest_api_generator/version.rb
150
165
  - rest-api-generator.gemspec
151
166
  - sig/rest_api_generator.rbs