power_api 0.1.0 → 0.2.0

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: 6469cf6940fa06287efc49c95cb631e7c84dd3ed49bf2e7c9ed4515793dadebf
4
- data.tar.gz: cba6bd5f2c2221eacc15b179824af06b84d9665606354e297b30f8ebc38e2633
3
+ metadata.gz: c6d232bd68c004bbe28ff8a0feff4106c2a3f2257c5d12ab6b4249655ec415c7
4
+ data.tar.gz: 70b0642b24c736dc1a2bad345c677e59e6072a9282b5f5fff609064cf8c7fe73
5
5
  SHA512:
6
- metadata.gz: 1772b41b7ec8c0848b185096a242e9b59d4f09dd90787512178dd683106f88ddc3b2b4a01baba81c1a19a44c7ba96f02a1014a74b0146c86109af342a9772d92
7
- data.tar.gz: aa7947e87ab257c368a94ae98722f9c77a181130411efa1b83e28e1d3714ed99140bb0e65c88e64616536e41050f56cbd24383ad044e6e726a33f3220cf43652
6
+ metadata.gz: 6e652618b0f9bc1150bdf0b479420888a806a2063bba8f75d63f2d75c0a5d90319350e033f6f6bd6162a1ff87a9d675ec6c0688346e0f405f1ce5d4bbd62ca46
7
+ data.tar.gz: 054f6630eb7bebacf19d835a19645c6f2ef9c5c2a5f4fb486d6ae6db8103c1e54e3cf252a08754c70b903ff5434c4ccfa5b6cc6b21dd9be88e0d25cfaf45c959
@@ -1,14 +1,15 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.1
4
+ - 2.5.0
5
5
  script:
6
- - RAILS_ENV=test bundle exec rake db:create db:migrate
7
- - bundle exec rspec spec
6
+ - RAILS_ENV=test bundle exec rake db:create db:migrate
7
+ - bundle exec rspec spec
8
+ before_install: gem install bundler -v 1.17.3
8
9
  deploy:
9
10
  provider: rubygems
10
11
  api_key:
11
- secure: your_secure_secret
12
+ secure: GaNPiRBIHwFsuZGh+3HGiW+tdpjRIh9j4hAeXy8qqIDyXuOknjbdjYFE40RJHuxfyc76Ajx0Wi6ybHYyD6BEQcG7iLZKHVbzr/EAQCQejCCO1TkuNS8loVXNh65EPcl1XbJPURBliG1fSCOSPHRnXMK7SxUX0flnewvgLo0ZDRNY5hkc/Pyt+MBElUnzgmikrolhOzUHCMyzo9BPlem0ToCCtJuruM5EQQhPRrbPuYkJlGty4cqcyyLtPQwe0sgARbiAbYIa+vxi0mvYxf0s2HZwpBqIa3BkgL6ozdOVBk2a0hgjEQbkeGSRCo+R4fgtb4QHB5OamTKO6HF5ceECNe76eR4P8GYp6LBNj3R/sUJb8Fmp/7xs9q5JYkJ6+RKJzpLWFOd7U0xAsC9D3r/PDJHAuzjbiAi/f9C0nD0UQgPtLXeytp85W71bRd7Dommk785kphporaM7xteUWYMK0Jmo02zRa8qdo+fqFJQQ7lFovSHQO+boIBI3MnOHhlz54XFnkPJkfM9NIrCq2zOlxtJgW4B1Zuw93z7zFUfPOEekMoqAXR/tCKpdV1e5XhikSCNSWv1EHPZaB+IsaOzWEPY8rcA/l47gWXoa9Mgv8rTzj489EzoXrqXv/8yb6TSBOezTypt6MNYqiABnRv43mo2CvtlG5ERQM3izWC6vo00=
12
13
  gem: power_api
13
14
  on:
14
15
  tags: true
@@ -2,6 +2,9 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ### v0.2.0
6
+
7
+ - Add `controller-actions` option to generator
5
8
  ### v0.1.0
6
9
 
7
10
  * Initial release.
data/Gemfile CHANGED
@@ -12,7 +12,3 @@ gemspec
12
12
 
13
13
  # To use a debugger
14
14
  # gem 'byebug', group: [:development, :test]
15
-
16
- group :development, :test do
17
- gem 'rswag-specs'
18
- end
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- power_api (0.1.0)
4
+ power_api (0.2.0)
5
5
  active_model_serializers (~> 0.10.0)
6
6
  api-pagination
7
7
  kaminari
@@ -67,7 +67,7 @@ GEM
67
67
  api-pagination (4.8.2)
68
68
  arel (9.0.0)
69
69
  ast (2.4.0)
70
- bcrypt (3.1.13)
70
+ bcrypt (3.1.16)
71
71
  builder (3.2.3)
72
72
  case_transform (0.2)
73
73
  activesupport
@@ -79,8 +79,8 @@ GEM
79
79
  term-ansicolor (~> 1.3)
80
80
  thor (~> 0.19.4)
81
81
  tins (~> 1.6)
82
- crass (1.0.4)
83
- devise (4.7.1)
82
+ crass (1.0.6)
83
+ devise (4.7.3)
84
84
  bcrypt (~> 3.0)
85
85
  orm_adapter (~> 0.1)
86
86
  railties (>= 4.1.0)
@@ -119,23 +119,23 @@ GEM
119
119
  json-schema (2.8.1)
120
120
  addressable (>= 2.4)
121
121
  jsonapi-renderer (0.2.2)
122
- kaminari (1.1.1)
122
+ kaminari (1.2.1)
123
123
  activesupport (>= 4.1.0)
124
- kaminari-actionview (= 1.1.1)
125
- kaminari-activerecord (= 1.1.1)
126
- kaminari-core (= 1.1.1)
127
- kaminari-actionview (1.1.1)
124
+ kaminari-actionview (= 1.2.1)
125
+ kaminari-activerecord (= 1.2.1)
126
+ kaminari-core (= 1.2.1)
127
+ kaminari-actionview (1.2.1)
128
128
  actionview
129
- kaminari-core (= 1.1.1)
130
- kaminari-activerecord (1.1.1)
129
+ kaminari-core (= 1.2.1)
130
+ kaminari-activerecord (1.2.1)
131
131
  activerecord
132
- kaminari-core (= 1.1.1)
133
- kaminari-core (1.1.1)
132
+ kaminari-core (= 1.2.1)
133
+ kaminari-core (1.2.1)
134
134
  listen (3.1.5)
135
135
  rb-fsevent (~> 0.9, >= 0.9.4)
136
136
  rb-inotify (~> 0.9, >= 0.9.7)
137
137
  ruby_dep (~> 1.2)
138
- loofah (2.2.3)
138
+ loofah (2.4.0)
139
139
  crass (~> 1.0.2)
140
140
  nokogiri (>= 1.5.9)
141
141
  lumberjack (1.0.13)
@@ -144,13 +144,13 @@ GEM
144
144
  marcel (0.3.3)
145
145
  mimemagic (~> 0.3.2)
146
146
  method_source (0.9.2)
147
- mimemagic (0.3.3)
147
+ mimemagic (0.3.5)
148
148
  mini_mime (1.0.2)
149
149
  mini_portile2 (2.4.0)
150
150
  minitest (5.11.3)
151
151
  nenv (0.3.0)
152
- nio4r (2.5.2)
153
- nokogiri (1.10.1)
152
+ nio4r (2.5.4)
153
+ nokogiri (1.10.9)
154
154
  mini_portile2 (~> 2.4.0)
155
155
  notiffany (0.1.1)
156
156
  nenv (~> 0.1)
@@ -159,8 +159,8 @@ GEM
159
159
  parallel (1.19.1)
160
160
  parser (2.7.0.2)
161
161
  ast (~> 2.4.0)
162
- polyamorous (2.3.0)
163
- activerecord (>= 5.0)
162
+ polyamorous (2.3.2)
163
+ activerecord (>= 5.2.1)
164
164
  powerpack (0.1.2)
165
165
  pry (0.12.2)
166
166
  coderay (~> 1.1.0)
@@ -169,7 +169,7 @@ GEM
169
169
  pry (>= 0.10.4)
170
170
  psych (3.1.0)
171
171
  public_suffix (4.0.1)
172
- rack (2.0.6)
172
+ rack (2.2.2)
173
173
  rack-test (1.1.0)
174
174
  rack (>= 1.0, < 3)
175
175
  rails (5.2.2.1)
@@ -197,17 +197,16 @@ GEM
197
197
  rake (>= 0.8.7)
198
198
  thor (>= 0.19.0, < 2.0)
199
199
  rainbow (3.0.0)
200
- rake (12.3.2)
201
- ransack (2.3.0)
202
- actionpack (>= 5.0)
203
- activerecord (>= 5.0)
204
- activesupport (>= 5.0)
200
+ rake (13.0.1)
201
+ ransack (2.3.2)
202
+ activerecord (>= 5.2.1)
203
+ activesupport (>= 5.2.1)
205
204
  i18n
206
- polyamorous (= 2.3.0)
205
+ polyamorous (= 2.3.2)
207
206
  rb-fsevent (0.10.3)
208
207
  rb-inotify (0.10.0)
209
208
  ffi (~> 1.0)
210
- responders (3.0.0)
209
+ responders (3.0.1)
211
210
  actionpack (>= 5.0)
212
211
  railties (>= 5.0)
213
212
  rspec (3.8.0)
@@ -263,10 +262,10 @@ GEM
263
262
  json (>= 1.8, < 3)
264
263
  simplecov-html (~> 0.10.0)
265
264
  simplecov-html (0.10.2)
266
- sprockets (4.0.0)
265
+ sprockets (4.0.2)
267
266
  concurrent-ruby (~> 1.0)
268
267
  rack (> 1, < 3)
269
- sprockets-rails (3.2.1)
268
+ sprockets-rails (3.2.2)
270
269
  actionpack (>= 4.0)
271
270
  activesupport (>= 4.0)
272
271
  sprockets (>= 3.0.0)
@@ -283,12 +282,12 @@ GEM
283
282
  activesupport (>= 3)
284
283
  railties (>= 3)
285
284
  yard (~> 0.9.11)
286
- warden (1.2.8)
287
- rack (>= 2.0.6)
288
- websocket-driver (0.7.1)
285
+ warden (1.2.9)
286
+ rack (>= 2.0.9)
287
+ websocket-driver (0.7.3)
289
288
  websocket-extensions (>= 0.1.0)
290
- websocket-extensions (0.1.4)
291
- yard (0.9.20)
289
+ websocket-extensions (0.1.5)
290
+ yard (0.9.25)
292
291
 
293
292
  PLATFORMS
294
293
  ruby
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Power API
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/power_api.svg)](https://badge.fury.io/rb/power_api)
4
+ [![Build Status](https://travis-ci.org/platanus/power_api.svg?branch=master)](https://travis-ci.org/platanus/power_api)
5
+ [![Coverage Status](https://coveralls.io/repos/github/platanus/power_api/badge.svg?branch=master)](https://coveralls.io/github/platanus/power_api?branch=master)
6
+
3
7
  It's a Rails engine that gathers a set of gems and configurations designed to build incredible REST APIs.
4
8
 
5
9
  These gems are:
@@ -26,6 +30,7 @@ These gems are:
26
30
  - [Controller Generation](#controller-generation)
27
31
  - [Command Options](#command-options-1)
28
32
  - [--attributes](#--attributes)
33
+ - [--controller-actions](#--controller-actions)
29
34
  - [--version-number](#--version-number)
30
35
  - [--use-paginator](#--use-paginator)
31
36
  - [--allow-filters](#--allow-filters)
@@ -508,6 +513,36 @@ class Api::V1::BlogSerializer < ActiveModel::Serializer
508
513
  end
509
514
  ```
510
515
 
516
+ ##### `--controller-actions`
517
+
518
+ Use this option if you want to choose which actions will be included in the controller.
519
+
520
+ ```bash
521
+ rails g power_api:controller blog --controller-actions=show destroy
522
+ ```
523
+
524
+ When you do this, you will see that only relevant code is generated in controller, tests and routes.
525
+
526
+ For example, the controller would only include the `show` and `destroy` actions and wouldn't include the `blog_params` method:
527
+
528
+ ```ruby
529
+ class Api::V1::BlogSerializer < Api::V1::BaseController
530
+ def show
531
+ respond_with blog
532
+ end
533
+
534
+ def destroy
535
+ respond_with blog.destroy!
536
+ end
537
+
538
+ private
539
+
540
+ def blog
541
+ @blog ||= Blog.find_by!(id: params[:id])
542
+ end
543
+ end
544
+ ```
545
+
511
546
  ##### `--version-number`
512
547
 
513
548
  Use this option if you want to decide which version the new controller will belong to.
@@ -1,6 +1,10 @@
1
1
  class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
2
2
  source_root File.expand_path('templates', __dir__)
3
3
 
4
+ def self.valid_actions
5
+ PowerApi::GeneratorHelpers::PERMITTED_ACTIONS
6
+ end
7
+
4
8
  class_option(
5
9
  :attributes,
6
10
  type: 'array',
@@ -9,6 +13,13 @@ class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
9
13
  desc: 'attributes to show in serializer'
10
14
  )
11
15
 
16
+ class_option(
17
+ :controller_actions,
18
+ type: 'array',
19
+ default: [],
20
+ desc: "actions to include in controller. Valid values: #{valid_actions.join(', ')}"
21
+ )
22
+
12
23
  class_option(
13
24
  :version_number,
14
25
  type: 'numeric',
@@ -63,10 +74,12 @@ class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
63
74
 
64
75
  def add_routes
65
76
  if helper.parent_resource?
66
- add_normal_route(actions: ["show", "update", "destroy"])
67
- add_nested_route
77
+ if helper.resource_actions?
78
+ add_normal_route(actions: helper.controller_actions & ["show", "update", "destroy"])
79
+ end
80
+ add_nested_route if helper.collection_actions?
68
81
  else
69
- add_normal_route
82
+ add_normal_route(actions: helper.controller_actions)
70
83
  end
71
84
 
72
85
  helper.format_ruby_file(helper.routes_path)
@@ -107,7 +120,9 @@ class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
107
120
 
108
121
  def add_nested_route
109
122
  line_to_replace = helper.parent_resource_routes_line_regex
110
- nested_resource_line = helper.resource_route_tpl(actions: ['index', 'create'])
123
+ nested_resource_line = helper.resource_route_tpl(
124
+ actions: helper.controller_actions & ['index', 'create']
125
+ )
111
126
  add_nested_parent_route unless helper.parent_route_exist?
112
127
 
113
128
  if helper.parent_route_already_have_children?
@@ -119,9 +134,10 @@ class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
119
134
  end
120
135
  end
121
136
 
122
- def add_normal_route(actions: [])
137
+ def add_normal_route(actions:)
138
+ actions_for_only_option = actions.sort == self.class.valid_actions.sort ? [] : actions
123
139
  add_route(helper.api_version_routes_line_regex) do |match|
124
- "#{match}\n#{helper.resource_route_tpl(actions: actions)}"
140
+ "#{match}\n#{helper.resource_route_tpl(actions: actions_for_only_option)}"
125
141
  end
126
142
  end
127
143
 
@@ -145,6 +161,7 @@ class PowerApi::ControllerGenerator < Rails::Generators::NamedBase
145
161
  parent_resource: options[:parent_resource],
146
162
  owned_by_authenticated_resource: options[:owned_by_authenticated_resource],
147
163
  resource_attributes: options[:attributes],
164
+ controller_actions: options[:controller_actions],
148
165
  use_paginator: options[:use_paginator],
149
166
  allow_filters: options[:allow_filters]
150
167
  )
@@ -11,6 +11,7 @@ module PowerApi
11
11
 
12
12
  initializer "initialize" do
13
13
  require_relative "./errors"
14
+ require_relative "./generator_helper/controller_actions_helper"
14
15
  require_relative "./generator_helper/active_record_resource"
15
16
  require_relative "./generator_helper/version_helper"
16
17
  require_relative "./generator_helper/resource_helper"
@@ -0,0 +1,27 @@
1
+ module PowerApi::GeneratorHelper::ControllerActionsHelper
2
+ extend ActiveSupport::Concern
3
+
4
+ PERMITTED_ACTIONS = ['index', 'create', 'show', 'update', 'destroy']
5
+
6
+ attr_reader :controller_actions
7
+
8
+ def controller_actions=(actions)
9
+ @controller_actions = actions.blank? ? PERMITTED_ACTIONS : actions & PERMITTED_ACTIONS
10
+ end
11
+
12
+ PERMITTED_ACTIONS.each do |action|
13
+ define_method("#{action}?") { controller_actions.include?(action) }
14
+ end
15
+
16
+ def resource_actions?
17
+ show? || update? || destroy?
18
+ end
19
+
20
+ def collection_actions?
21
+ index? || create?
22
+ end
23
+
24
+ def update_or_create?
25
+ update? || create?
26
+ end
27
+ end
@@ -8,6 +8,7 @@ module PowerApi::GeneratorHelper::ControllerHelper
8
8
  include PowerApi::GeneratorHelper::PaginationHelper
9
9
  include PowerApi::GeneratorHelper::SimpleTokenAuthHelper
10
10
  include PowerApi::GeneratorHelper::TemplateBuilderHelper
11
+ include PowerApi::GeneratorHelper::ControllerActionsHelper
11
12
 
12
13
  attr_accessor :allow_filters
13
14
  end
@@ -73,18 +74,26 @@ fallback: :exception\n"
73
74
  end
74
75
 
75
76
  def ctrl_tpl_index
77
+ return unless index?
78
+
76
79
  concat_tpl_method("index", "respond_with #{ctrl_tpl_index_resources}")
77
80
  end
78
81
 
79
82
  def ctrl_tpl_show
83
+ return unless show?
84
+
80
85
  concat_tpl_method("show", "respond_with #{resource.snake_case}")
81
86
  end
82
87
 
83
88
  def ctrl_tpl_create
89
+ return unless create?
90
+
84
91
  concat_tpl_method("create", "respond_with #{ctrl_tpl_create_resource}")
85
92
  end
86
93
 
87
94
  def ctrl_tpl_update
95
+ return unless update?
96
+
88
97
  concat_tpl_method(
89
98
  "update",
90
99
  "respond_with #{resource.snake_case}.update!(#{resource.snake_case}_params)"
@@ -92,14 +101,20 @@ fallback: :exception\n"
92
101
  end
93
102
 
94
103
  def ctrl_tpl_destroy
104
+ return unless destroy?
105
+
95
106
  concat_tpl_method("destroy", "respond_with #{resource.snake_case}.destroy!")
96
107
  end
97
108
 
98
109
  def ctrl_tpl_resource
110
+ return unless resource_actions?
111
+
99
112
  concat_tpl_method(resource.snake_case, "@#{resource.snake_case} ||= #{ctrl_tpl_find_resource}")
100
113
  end
101
114
 
102
115
  def ctrl_tpl_permitted_params
116
+ return unless update_or_create?
117
+
103
118
  concat_tpl_method(
104
119
  "#{resource.snake_case}_params",
105
120
  "params.require(:#{resource.snake_case}).permit(",
@@ -9,6 +9,7 @@ module PowerApi::GeneratorHelper::SwaggerHelper
9
9
  include PowerApi::GeneratorHelper::ResourceHelper
10
10
  include PowerApi::GeneratorHelper::SimpleTokenAuthHelper
11
11
  include PowerApi::GeneratorHelper::TemplateBuilderHelper
12
+ include PowerApi::GeneratorHelper::ControllerActionsHelper
12
13
  end
13
14
 
14
15
  def swagger_helper_path
@@ -201,6 +202,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
201
202
  end
202
203
 
203
204
  def spec_tpl_collection_path_statements
205
+ return unless collection_actions?
206
+
204
207
  concat_tpl_statements(
205
208
  "path '/#{spec_tpl_collection_path}' do",
206
209
  spec_tpl_parent_resource_parameter,
@@ -218,6 +221,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
218
221
  end
219
222
 
220
223
  def spec_tpl_resource_path_statements
224
+ return unless resource_actions?
225
+
221
226
  concat_tpl_statements(
222
227
  "path '/#{resource.plural}/{id}' do",
223
228
  spec_tpl_authenticated_resource_params,
@@ -251,6 +256,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
251
256
  end
252
257
 
253
258
  def spec_tpl_index
259
+ return unless index?
260
+
254
261
  concat_tpl_statements(
255
262
  "get 'Retrieves #{resource.plural_titleized}' do",
256
263
  "description 'Retrieves all the #{resource.plural}'",
@@ -286,6 +293,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
286
293
  end
287
294
 
288
295
  def spec_tpl_create
296
+ return unless create?
297
+
289
298
  concat_tpl_statements(
290
299
  "post 'Creates #{resource.titleized}' do",
291
300
  "description 'Creates #{resource.titleized}'",
@@ -320,6 +329,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
320
329
  end
321
330
 
322
331
  def spec_tpl_show
332
+ return unless show?
333
+
323
334
  concat_tpl_statements(
324
335
  "get 'Retrieves #{resource.titleized}' do",
325
336
  "produces 'application/json'\n",
@@ -337,6 +348,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
337
348
  end
338
349
 
339
350
  def spec_tpl_update
351
+ return unless update?
352
+
340
353
  concat_tpl_statements(
341
354
  "put 'Updates #{resource.titleized}' do",
342
355
  "description 'Updates #{resource.titleized}'",
@@ -356,6 +369,8 @@ swagger_doc: 'v#{version_number}/swagger.json' do"
356
369
  end
357
370
 
358
371
  def spec_tpl_destroy
372
+ return unless destroy?
373
+
359
374
  concat_tpl_statements(
360
375
  "delete 'Deletes #{resource.titleized}' do",
361
376
  "produces 'application/json'",
@@ -1,5 +1,6 @@
1
1
  module PowerApi
2
2
  class GeneratorHelpers
3
+ include GeneratorHelper::ControllerActionsHelper
3
4
  include GeneratorHelper::ResourceHelper
4
5
  include GeneratorHelper::VersionHelper
5
6
  include GeneratorHelper::SwaggerHelper
@@ -1,3 +1,3 @@
1
1
  module PowerApi
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,177 @@
1
+ RSpec.describe PowerApi::GeneratorHelper::ControllerActionsHelper, type: :generator do
2
+ describe '#controller_actions=' do
3
+ context 'when arg is nil' do
4
+ before { generators_helper.controller_actions = nil }
5
+
6
+ it do
7
+ expect(generators_helper.controller_actions).to(
8
+ match_array(generators_helper.class::PERMITTED_ACTIONS)
9
+ )
10
+ end
11
+ end
12
+
13
+ context 'when arg is empty array' do
14
+ before { generators_helper.controller_actions = [] }
15
+
16
+ it do
17
+ expect(generators_helper.controller_actions).to(
18
+ match_array(generators_helper.class::PERMITTED_ACTIONS)
19
+ )
20
+ end
21
+ end
22
+
23
+ context 'when including not permitted actions' do
24
+ before { generators_helper.controller_actions = ['index', 'clone'] }
25
+
26
+ it 'ignores them' do
27
+ expect(generators_helper.controller_actions).to match_array(['index'])
28
+ end
29
+ end
30
+
31
+ context 'when including only permitted actions' do
32
+ let(:actions) { ['index', 'show'] }
33
+
34
+ before { generators_helper.controller_actions = actions }
35
+
36
+ it 'includes them all' do
37
+ expect(generators_helper.controller_actions).to match_array(actions)
38
+ end
39
+ end
40
+ end
41
+
42
+ describe 'index?' do
43
+ context 'when including index action' do
44
+ before { generators_helper.controller_actions = ['index'] }
45
+
46
+ it { expect(generators_helper.index?).to be(true) }
47
+ end
48
+
49
+ context 'when not including index action' do
50
+ before { generators_helper.controller_actions = ['show'] }
51
+
52
+ it { expect(generators_helper.index?).to be(false) }
53
+ end
54
+ end
55
+
56
+ describe 'show?' do
57
+ context 'when including show action' do
58
+ before { generators_helper.controller_actions = ['show'] }
59
+
60
+ it { expect(generators_helper.show?).to be(true) }
61
+ end
62
+
63
+ context 'when not including show action' do
64
+ before { generators_helper.controller_actions = ['index'] }
65
+
66
+ it { expect(generators_helper.show?).to be(false) }
67
+ end
68
+ end
69
+
70
+ describe 'update?' do
71
+ context 'when including update action' do
72
+ before { generators_helper.controller_actions = ['update'] }
73
+
74
+ it { expect(generators_helper.update?).to be(true) }
75
+ end
76
+
77
+ context 'when not including update action' do
78
+ before { generators_helper.controller_actions = ['show'] }
79
+
80
+ it { expect(generators_helper.update?).to be(false) }
81
+ end
82
+ end
83
+
84
+ describe 'create?' do
85
+ context 'when including create action' do
86
+ before { generators_helper.controller_actions = ['create'] }
87
+
88
+ it { expect(generators_helper.create?).to be(true) }
89
+ end
90
+
91
+ context 'when not including create action' do
92
+ before { generators_helper.controller_actions = ['show'] }
93
+
94
+ it { expect(generators_helper.create?).to be(false) }
95
+ end
96
+ end
97
+
98
+ describe 'destroy?' do
99
+ context 'when including destroy action' do
100
+ before { generators_helper.controller_actions = ['destroy'] }
101
+
102
+ it { expect(generators_helper.destroy?).to be(true) }
103
+ end
104
+
105
+ context 'when not including destroy action' do
106
+ before { generators_helper.controller_actions = ['show'] }
107
+
108
+ it { expect(generators_helper.destroy?).to be(false) }
109
+ end
110
+ end
111
+
112
+ describe 'resource_actions?' do
113
+ context 'when including show action' do
114
+ before { generators_helper.controller_actions = ['show'] }
115
+
116
+ it { expect(generators_helper.resource_actions?).to be(true) }
117
+ end
118
+
119
+ context 'when including update action' do
120
+ before { generators_helper.controller_actions = ['update'] }
121
+
122
+ it { expect(generators_helper.resource_actions?).to be(true) }
123
+ end
124
+
125
+ context 'when including destroy action' do
126
+ before { generators_helper.controller_actions = ['destroy'] }
127
+
128
+ it { expect(generators_helper.resource_actions?).to be(true) }
129
+ end
130
+
131
+ context 'when not including show, update or destroy actions' do
132
+ before { generators_helper.controller_actions = ['index', 'create'] }
133
+
134
+ it { expect(generators_helper.resource_actions?).to be(false) }
135
+ end
136
+ end
137
+
138
+ describe 'collection_actions?' do
139
+ context 'when including index action' do
140
+ before { generators_helper.controller_actions = ['index'] }
141
+
142
+ it { expect(generators_helper.collection_actions?).to be(true) }
143
+ end
144
+
145
+ context 'when including create action' do
146
+ before { generators_helper.controller_actions = ['create'] }
147
+
148
+ it { expect(generators_helper.collection_actions?).to be(true) }
149
+ end
150
+
151
+ context 'when not including index or create actions' do
152
+ before { generators_helper.controller_actions = ['show', 'update', 'destroy'] }
153
+
154
+ it { expect(generators_helper.collection_actions?).to be(false) }
155
+ end
156
+ end
157
+
158
+ describe 'update_or_create?' do
159
+ context 'when including update action' do
160
+ before { generators_helper.controller_actions = ['update'] }
161
+
162
+ it { expect(generators_helper.update_or_create?).to be(true) }
163
+ end
164
+
165
+ context 'when including create action' do
166
+ before { generators_helper.controller_actions = ['create'] }
167
+
168
+ it { expect(generators_helper.update_or_create?).to be(true) }
169
+ end
170
+
171
+ context 'when not including update or create actions' do
172
+ before { generators_helper.controller_actions = ['show', 'index', 'destroy'] }
173
+
174
+ it { expect(generators_helper.update_or_create?).to be(false) }
175
+ end
176
+ end
177
+ end
@@ -112,6 +112,69 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
112
112
  it { expect(perform).to include(expected) }
113
113
  end
114
114
 
115
+ context 'with specific actions' do
116
+ let(:controller_actions) do
117
+ [
118
+ "show",
119
+ "update",
120
+ "index"
121
+ ]
122
+ end
123
+
124
+ it { expect(perform).to include("def show\n") }
125
+ it { expect(perform).to include("def update\n") }
126
+ it { expect(perform).to include("def index\n") }
127
+ it { expect(perform).not_to include("def destroy\n") }
128
+ it { expect(perform).not_to include("def create\n") }
129
+ end
130
+
131
+ context 'with only collection actions' do
132
+ let(:controller_actions) do
133
+ [
134
+ "index",
135
+ "create"
136
+ ]
137
+ end
138
+
139
+ it { expect(perform).not_to include("def blog\n") }
140
+ end
141
+
142
+ context 'with some reource actions' do
143
+ let(:controller_actions) do
144
+ [
145
+ "index",
146
+ "create",
147
+ "show"
148
+ ]
149
+ end
150
+
151
+ it { expect(perform).to include("def blog\n") }
152
+ end
153
+
154
+ context 'with update action' do
155
+ let(:controller_actions) { ["update"] }
156
+
157
+ it { expect(perform).to include("def blog_params\n") }
158
+ end
159
+
160
+ context 'with create action' do
161
+ let(:controller_actions) { ["create"] }
162
+
163
+ it { expect(perform).to include("def blog_params\n") }
164
+ end
165
+
166
+ context 'without update or create actions' do
167
+ let(:controller_actions) do
168
+ [
169
+ "index",
170
+ "destroy",
171
+ "show"
172
+ ]
173
+ end
174
+
175
+ it { expect(perform).not_to include("def blog_params\n") }
176
+ end
177
+
115
178
  context "with true use_paginator option" do
116
179
  let(:use_paginator) { true }
117
180
  let(:expected) do
@@ -421,6 +421,35 @@ RSpec.describe PowerApi::GeneratorHelper::SwaggerHelper, type: :generator do
421
421
  it { expect(perform).to include("let(:portfolio) { create(:portfolio) }") }
422
422
  it { expect(perform).to include("(:existent_blog) { create(:blog, portfolio: portfolio) }") }
423
423
  end
424
+
425
+ context 'with only some resource actions (show and update)' do
426
+ let(:controller_actions) do
427
+ [
428
+ "show",
429
+ "update"
430
+ ]
431
+ end
432
+
433
+ it { expect(perform).to include("path '/blogs/{id}' do\n") }
434
+ it { expect(perform).to include("get 'Retrieves Blog' do\n") }
435
+ it { expect(perform).to include("put 'Updates Blog' do\n") }
436
+ it { expect(perform).not_to include("delete 'Deletes Blog' do\n") }
437
+ it { expect(perform).not_to include("path '/blogs' do\n") }
438
+ it { expect(perform).not_to include("get 'Retrieves Blogs' do\n") }
439
+ it { expect(perform).not_to include("post 'Creates Blog' do\n") }
440
+ end
441
+
442
+ context 'with only some collection actions (index)' do
443
+ let(:controller_actions) { ["index"] }
444
+
445
+ it { expect(perform).not_to include("path '/blogs/{id}' do\n") }
446
+ it { expect(perform).not_to include("get 'Retrieves Blog' do\n") }
447
+ it { expect(perform).not_to include("put 'Updates Blog' do\n") }
448
+ it { expect(perform).not_to include("delete 'Deletes Blog' do\n") }
449
+ it { expect(perform).to include("path '/blogs' do\n") }
450
+ it { expect(perform).to include("get 'Retrieves Blogs' do\n") }
451
+ it { expect(perform).not_to include("post 'Creates Blog' do\n") }
452
+ end
424
453
  end
425
454
 
426
455
  describe "#rswag_ui_swagger_endpoint" do
@@ -10,6 +10,7 @@ module TestGeneratorHelpers
10
10
  let(:parent_resource_name) { nil }
11
11
  let(:owned_by_authenticated_resource) { false }
12
12
  let(:resource_attributes) { nil }
13
+ let(:controller_actions) { [] }
13
14
  let(:use_paginator) { false }
14
15
  let(:allow_filters) { false }
15
16
 
@@ -18,6 +19,7 @@ module TestGeneratorHelpers
18
19
  version_number: version_number,
19
20
  resource: resource_name,
20
21
  resource_attributes: resource_attributes,
22
+ controller_actions: controller_actions,
21
23
  parent_resource: parent_resource_name,
22
24
  use_paginator: use_paginator,
23
25
  authenticated_resource: authenticated_resource,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Platanus
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-03-06 00:00:00.000000000 Z
12
+ date: 2021-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -342,6 +342,7 @@ files:
342
342
  - lib/power_api/errors.rb
343
343
  - lib/power_api/generator_helper/active_record_resource.rb
344
344
  - lib/power_api/generator_helper/ams_helper.rb
345
+ - lib/power_api/generator_helper/controller_actions_helper.rb
345
346
  - lib/power_api/generator_helper/controller_helper.rb
346
347
  - lib/power_api/generator_helper/pagination_helper.rb
347
348
  - lib/power_api/generator_helper/resource_helper.rb
@@ -405,40 +406,11 @@ files:
405
406
  - spec/dummy/config/routes.rb
406
407
  - spec/dummy/config/secrets.yml
407
408
  - spec/dummy/config/spring.rb
408
- - spec/dummy/coverage/assets/0.10.2/application.css
409
- - spec/dummy/coverage/assets/0.10.2/application.js
410
- - spec/dummy/coverage/assets/0.10.2/colorbox/border.png
411
- - spec/dummy/coverage/assets/0.10.2/colorbox/controls.png
412
- - spec/dummy/coverage/assets/0.10.2/colorbox/loading.gif
413
- - spec/dummy/coverage/assets/0.10.2/colorbox/loading_background.png
414
- - spec/dummy/coverage/assets/0.10.2/favicon_green.png
415
- - spec/dummy/coverage/assets/0.10.2/favicon_red.png
416
- - spec/dummy/coverage/assets/0.10.2/favicon_yellow.png
417
- - spec/dummy/coverage/assets/0.10.2/loading.gif
418
- - spec/dummy/coverage/assets/0.10.2/magnify.png
419
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
420
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
421
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
422
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
423
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png
424
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
425
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
426
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
427
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png
428
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png
429
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png
430
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png
431
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png
432
- - spec/dummy/coverage/index.html
433
- - spec/dummy/db/development.sqlite3
434
409
  - spec/dummy/db/migrate/20190322205209_create_blogs.rb
435
410
  - spec/dummy/db/migrate/20200215225917_create_users.rb
436
411
  - spec/dummy/db/migrate/20200227150449_create_portfolios.rb
437
412
  - spec/dummy/db/migrate/20200227150548_add_portfolio_id_blogs.rb
438
413
  - spec/dummy/db/schema.rb
439
- - spec/dummy/db/test.sqlite3
440
- - spec/dummy/log/development.log
441
- - spec/dummy/log/test.log
442
414
  - spec/dummy/package.json
443
415
  - spec/dummy/public/404.html
444
416
  - spec/dummy/public/422.html
@@ -452,6 +424,7 @@ files:
452
424
  - spec/dummy/spec/factories/portfolios.rb
453
425
  - spec/dummy/spec/factories/users.rb
454
426
  - spec/dummy/spec/lib/power_api/generator_helper/ams_helper_spec.rb
427
+ - spec/dummy/spec/lib/power_api/generator_helper/controller_actions_helper_spec.rb
455
428
  - spec/dummy/spec/lib/power_api/generator_helper/controller_helper_spec.rb
456
429
  - spec/dummy/spec/lib/power_api/generator_helper/pagination_helper_spec.rb
457
430
  - spec/dummy/spec/lib/power_api/generator_helper/resource_helper_spec.rb
@@ -484,119 +457,90 @@ required_rubygems_version: !ruby/object:Gem::Requirement
484
457
  - !ruby/object:Gem::Version
485
458
  version: '0'
486
459
  requirements: []
487
- rubyforge_project:
488
- rubygems_version: 2.7.6.2
460
+ rubygems_version: 3.0.8
489
461
  signing_key:
490
462
  specification_version: 4
491
463
  summary: Set of other gems and configurations designed to build incredible APIs
492
464
  test_files:
493
465
  - spec/spec_helper.rb
494
466
  - spec/dummy/app/mailers/application_mailer.rb
495
- - spec/dummy/app/models/portfolio.rb
467
+ - spec/dummy/app/channels/application_cable/connection.rb
468
+ - spec/dummy/app/channels/application_cable/channel.rb
469
+ - spec/dummy/app/views/layouts/application.html.erb
470
+ - spec/dummy/app/views/layouts/mailer.text.erb
471
+ - spec/dummy/app/views/layouts/mailer.html.erb
472
+ - spec/dummy/app/jobs/application_job.rb
496
473
  - spec/dummy/app/models/blog.rb
497
474
  - spec/dummy/app/models/application_record.rb
498
475
  - spec/dummy/app/models/user.rb
499
- - spec/dummy/app/jobs/application_job.rb
476
+ - spec/dummy/app/models/portfolio.rb
477
+ - spec/dummy/app/helpers/application_helper.rb
478
+ - spec/dummy/app/assets/javascripts/application.js
479
+ - spec/dummy/app/assets/javascripts/cable.js
480
+ - spec/dummy/app/assets/stylesheets/application.css
481
+ - spec/dummy/app/assets/config/manifest.js
500
482
  - spec/dummy/app/controllers/application_controller.rb
501
- - spec/dummy/app/controllers/concerns/api/error_spec.rb
502
483
  - spec/dummy/app/controllers/concerns/api/deprecated_spec.rb
503
484
  - spec/dummy/app/controllers/concerns/api/filtered_spec.rb
485
+ - spec/dummy/app/controllers/concerns/api/error_spec.rb
504
486
  - spec/dummy/app/controllers/concerns/api/versioned_spec.rb
505
- - spec/dummy/app/views/layouts/application.html.erb
506
- - spec/dummy/app/views/layouts/mailer.html.erb
507
- - spec/dummy/app/views/layouts/mailer.text.erb
508
- - spec/dummy/app/assets/config/manifest.js
509
- - spec/dummy/app/assets/javascripts/cable.js
510
- - spec/dummy/app/assets/javascripts/application.js
511
- - spec/dummy/app/assets/stylesheets/application.css
512
- - spec/dummy/app/helpers/application_helper.rb
513
- - spec/dummy/app/channels/application_cable/connection.rb
514
- - spec/dummy/app/channels/application_cable/channel.rb
487
+ - spec/dummy/Rakefile
488
+ - spec/dummy/bin/yarn
515
489
  - spec/dummy/bin/update
516
490
  - spec/dummy/bin/rake
517
- - spec/dummy/bin/setup
518
491
  - spec/dummy/bin/bundle
519
- - spec/dummy/bin/yarn
520
492
  - spec/dummy/bin/rails
521
- - spec/dummy/config/secrets.yml
522
- - spec/dummy/config/routes.rb
523
- - spec/dummy/config/locales/en.yml
524
- - spec/dummy/config/cable.yml
525
- - spec/dummy/config/environments/production.rb
526
- - spec/dummy/config/environments/development.rb
527
- - spec/dummy/config/environments/test.rb
528
- - spec/dummy/config/spring.rb
529
- - spec/dummy/config/environment.rb
530
- - spec/dummy/config/application.rb
531
- - spec/dummy/config/puma.rb
532
- - spec/dummy/config/database.yml
533
- - spec/dummy/config/boot.rb
534
- - spec/dummy/config/initializers/application_controller_renderer.rb
535
- - spec/dummy/config/initializers/backtrace_silencers.rb
536
- - spec/dummy/config/initializers/mime_types.rb
537
- - spec/dummy/config/initializers/filter_parameter_logging.rb
538
- - spec/dummy/config/initializers/wrap_parameters.rb
539
- - spec/dummy/config/initializers/assets.rb
540
- - spec/dummy/config/initializers/cookies_serializer.rb
541
- - spec/dummy/config/initializers/inflections.rb
542
- - spec/dummy/config.ru
543
- - spec/dummy/spec/support/test_helpers.rb
544
- - spec/dummy/spec/support/test_generator_helpers.rb
545
- - spec/dummy/spec/support/shared_examples/active_record_resource_atrributes.rb
546
- - spec/dummy/spec/support/shared_examples/active_record_resource.rb
547
- - spec/dummy/spec/factories/blogs.rb
548
- - spec/dummy/spec/factories/portfolios.rb
549
- - spec/dummy/spec/factories/users.rb
550
- - spec/dummy/spec/lib/power_api/generator_helper/swagger_helper_spec.rb
493
+ - spec/dummy/bin/setup
494
+ - spec/dummy/spec/lib/power_api/generator_helper/controller_actions_helper_spec.rb
551
495
  - spec/dummy/spec/lib/power_api/generator_helper/simple_token_auth_helper_spec.rb
496
+ - spec/dummy/spec/lib/power_api/generator_helper/pagination_helper_spec.rb
497
+ - spec/dummy/spec/lib/power_api/generator_helper/swagger_helper_spec.rb
552
498
  - spec/dummy/spec/lib/power_api/generator_helper/resource_helper_spec.rb
553
499
  - spec/dummy/spec/lib/power_api/generator_helper/controller_helper_spec.rb
554
500
  - spec/dummy/spec/lib/power_api/generator_helper/version_helper_spec.rb
555
501
  - spec/dummy/spec/lib/power_api/generator_helper/ams_helper_spec.rb
556
- - spec/dummy/spec/lib/power_api/generator_helper/pagination_helper_spec.rb
557
502
  - spec/dummy/spec/lib/power_api/generator_helper/routes_helper_spec.rb
558
- - spec/dummy/spec/assets/video.mp4
503
+ - spec/dummy/spec/support/test_helpers.rb
504
+ - spec/dummy/spec/support/shared_examples/active_record_resource.rb
505
+ - spec/dummy/spec/support/shared_examples/active_record_resource_atrributes.rb
506
+ - spec/dummy/spec/support/test_generator_helpers.rb
559
507
  - spec/dummy/spec/assets/image.png
560
- - spec/dummy/Rakefile
561
- - spec/dummy/public/favicon.ico
562
- - spec/dummy/public/422.html
563
- - spec/dummy/public/apple-touch-icon.png
564
- - spec/dummy/public/500.html
508
+ - spec/dummy/spec/assets/video.mp4
509
+ - spec/dummy/spec/factories/users.rb
510
+ - spec/dummy/spec/factories/blogs.rb
511
+ - spec/dummy/spec/factories/portfolios.rb
565
512
  - spec/dummy/public/404.html
513
+ - spec/dummy/public/500.html
566
514
  - spec/dummy/public/apple-touch-icon-precomposed.png
567
- - spec/dummy/package.json
568
- - spec/dummy/db/schema.rb
569
- - spec/dummy/db/test.sqlite3
570
- - spec/dummy/db/migrate/20200227150548_add_portfolio_id_blogs.rb
571
- - spec/dummy/db/migrate/20190322205209_create_blogs.rb
572
- - spec/dummy/db/migrate/20200215225917_create_users.rb
515
+ - spec/dummy/public/422.html
516
+ - spec/dummy/public/apple-touch-icon.png
517
+ - spec/dummy/public/favicon.ico
518
+ - spec/dummy/config.ru
573
519
  - spec/dummy/db/migrate/20200227150449_create_portfolios.rb
574
- - spec/dummy/db/development.sqlite3
575
- - spec/dummy/log/test.log
576
- - spec/dummy/log/development.log
577
- - spec/dummy/coverage/index.html
578
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png
579
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png
580
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png
581
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png
582
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
583
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
584
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
585
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
586
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png
587
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
588
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
589
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png
590
- - spec/dummy/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
591
- - spec/dummy/coverage/assets/0.10.2/application.css
592
- - spec/dummy/coverage/assets/0.10.2/loading.gif
593
- - spec/dummy/coverage/assets/0.10.2/colorbox/border.png
594
- - spec/dummy/coverage/assets/0.10.2/colorbox/loading.gif
595
- - spec/dummy/coverage/assets/0.10.2/colorbox/controls.png
596
- - spec/dummy/coverage/assets/0.10.2/colorbox/loading_background.png
597
- - spec/dummy/coverage/assets/0.10.2/favicon_red.png
598
- - spec/dummy/coverage/assets/0.10.2/favicon_green.png
599
- - spec/dummy/coverage/assets/0.10.2/favicon_yellow.png
600
- - spec/dummy/coverage/assets/0.10.2/magnify.png
601
- - spec/dummy/coverage/assets/0.10.2/application.js
520
+ - spec/dummy/db/migrate/20200215225917_create_users.rb
521
+ - spec/dummy/db/migrate/20190322205209_create_blogs.rb
522
+ - spec/dummy/db/migrate/20200227150548_add_portfolio_id_blogs.rb
523
+ - spec/dummy/db/schema.rb
524
+ - spec/dummy/config/routes.rb
525
+ - spec/dummy/config/environment.rb
526
+ - spec/dummy/config/spring.rb
527
+ - spec/dummy/config/cable.yml
528
+ - spec/dummy/config/secrets.yml
529
+ - spec/dummy/config/application.rb
530
+ - spec/dummy/config/boot.rb
531
+ - spec/dummy/config/environments/test.rb
532
+ - spec/dummy/config/environments/development.rb
533
+ - spec/dummy/config/environments/production.rb
534
+ - spec/dummy/config/locales/en.yml
535
+ - spec/dummy/config/puma.rb
536
+ - spec/dummy/config/initializers/wrap_parameters.rb
537
+ - spec/dummy/config/initializers/mime_types.rb
538
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
539
+ - spec/dummy/config/initializers/assets.rb
540
+ - spec/dummy/config/initializers/application_controller_renderer.rb
541
+ - spec/dummy/config/initializers/inflections.rb
542
+ - spec/dummy/config/initializers/cookies_serializer.rb
543
+ - spec/dummy/config/initializers/backtrace_silencers.rb
544
+ - spec/dummy/config/database.yml
545
+ - spec/dummy/package.json
602
546
  - spec/rails_helper.rb