power_api 1.0.0 → 2.0.0

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +93 -90
  5. data/README.md +329 -75
  6. data/app/helpers/power_api/application_helper.rb +57 -0
  7. data/bin/clean_test_app +2 -0
  8. data/lib/generators/power_api/controller/controller_generator.rb +27 -15
  9. data/lib/generators/power_api/exposed_api_config/USAGE +5 -0
  10. data/lib/generators/power_api/exposed_api_config/exposed_api_config_generator.rb +58 -0
  11. data/lib/generators/power_api/install/install_generator.rb +2 -44
  12. data/lib/generators/power_api/internal_api_config/USAGE +5 -0
  13. data/lib/generators/power_api/internal_api_config/internal_api_config_generator.rb +31 -0
  14. data/lib/generators/power_api/version/version_generator.rb +2 -2
  15. data/lib/power_api/engine.rb +8 -1
  16. data/lib/power_api/errors.rb +2 -0
  17. data/lib/power_api/generator_helper/active_record_resource.rb +10 -6
  18. data/lib/power_api/generator_helper/ams_helper.rb +5 -11
  19. data/lib/power_api/generator_helper/api_helper.rb +61 -0
  20. data/lib/power_api/generator_helper/controller_helper.rb +45 -15
  21. data/lib/power_api/generator_helper/routes_helper.rb +22 -7
  22. data/lib/power_api/generator_helper/rspec_controller_helper.rb +306 -0
  23. data/lib/power_api/generator_helper/swagger_helper.rb +14 -24
  24. data/lib/power_api/generator_helpers.rb +2 -1
  25. data/lib/power_api/version.rb +1 -1
  26. data/spec/dummy/app/controllers/api/base_controller.rb +2 -0
  27. data/spec/dummy/app/controllers/api/internal/base_controller.rb +5 -0
  28. data/spec/dummy/app/controllers/api/internal/blogs_controller.rb +36 -0
  29. data/spec/dummy/app/serializers/api/internal/blog_serializer.rb +12 -0
  30. data/spec/dummy/config/initializers/active_model_serializers.rb +1 -0
  31. data/spec/dummy/config/initializers/api_pagination.rb +32 -0
  32. data/spec/dummy/config/routes.rb +2 -7
  33. data/spec/dummy/spec/helpers/power_api/application_helper_spec.rb +171 -0
  34. data/spec/dummy/spec/lib/power_api/generator_helper/ams_helper_spec.rb +50 -12
  35. data/spec/dummy/spec/lib/power_api/generator_helper/api_helper_spec.rb +115 -0
  36. data/spec/dummy/spec/lib/power_api/generator_helper/controller_helper_spec.rb +126 -34
  37. data/spec/dummy/spec/lib/power_api/generator_helper/routes_helper_spec.rb +29 -5
  38. data/spec/dummy/spec/lib/power_api/generator_helper/rspec_controller_helper_spec.rb +559 -0
  39. data/spec/dummy/spec/lib/power_api/generator_helper/swagger_helper_spec.rb +10 -20
  40. data/spec/dummy/spec/support/shared_examples/active_record_resource_atrributes.rb +22 -3
  41. metadata +27 -5
  42. data/lib/power_api/generator_helper/version_helper.rb +0 -16
  43. data/spec/dummy/spec/lib/power_api/generator_helper/version_helper_spec.rb +0 -55
@@ -0,0 +1,171 @@
1
+ require "spec_helper"
2
+
3
+ describe PowerApi::ApplicationHelper do
4
+ describe "#serialize_resource" do
5
+ let(:resource) do
6
+ build(
7
+ :blog,
8
+ id: 1,
9
+ title: "T",
10
+ portfolio_id: 2,
11
+ body: "B",
12
+ created_at: "2022-01-28T20:30:00.000Z",
13
+ updated_at: "2022-01-28T20:40:00.000Z"
14
+ )
15
+ end
16
+
17
+ let(:options) { {} }
18
+
19
+ def data
20
+ helper.serialize_resource(resource, options)
21
+ end
22
+
23
+ let(:expected_serialized_data) do
24
+ <<~DATA.strip
25
+ {\"id\":1,\"title\":\"T\",\"body\":\"B\",\"createdAt\":\"2022-01-28T20:30:00.000Z\",\"updatedAt\":\"2022-01-28T20:40:00.000Z\",\"portfolioId\":2}
26
+ DATA
27
+ end
28
+
29
+ it { expect(data).to eq(expected_serialized_data) }
30
+
31
+ context "with fields option" do
32
+ let(:options) do
33
+ {
34
+ fields: [:id, :body]
35
+ }
36
+ end
37
+
38
+ let(:expected_serialized_data) do
39
+ <<~DATA.strip
40
+ {\"id\":1,\"body\":\"B\"}
41
+ DATA
42
+ end
43
+
44
+ it { expect(data).to eq(expected_serialized_data) }
45
+ end
46
+
47
+ context "with key_transform option" do
48
+ let(:options) do
49
+ {
50
+ key_transform: :unaltered
51
+ }
52
+ end
53
+
54
+ let(:expected_serialized_data) do
55
+ <<~DATA.strip
56
+ {\"id\":1,\"title\":\"T\",\"body\":\"B\",\"created_at\":\"2022-01-28T20:30:00.000Z\",\"updated_at\":\"2022-01-28T20:40:00.000Z\",\"portfolio_id\":2}
57
+ DATA
58
+ end
59
+
60
+ it { expect(data).to eq(expected_serialized_data) }
61
+ end
62
+
63
+ context "with include_root option" do
64
+ let(:options) do
65
+ {
66
+ include_root: true
67
+ }
68
+ end
69
+
70
+ let(:expected_serialized_data) do
71
+ <<~DATA.strip
72
+ {"blog":{"id":1,"title":"T","body":"B","createdAt":"2022-01-28T20:30:00.000Z","updatedAt":"2022-01-28T20:40:00.000Z","portfolioId":2}}
73
+ DATA
74
+ end
75
+
76
+ it { expect(data).to eq(expected_serialized_data) }
77
+ end
78
+
79
+ context "with collection resource" do
80
+ let(:options) do
81
+ {
82
+ include_root: false,
83
+ fields: [:body]
84
+ }
85
+ end
86
+
87
+ let(:resource) do
88
+ create_list(:blog, 2)
89
+ end
90
+
91
+ let(:expected_serialized_data) do
92
+ <<~DATA.strip
93
+ [{\"body\":\"MyText\"},{\"body\":\"MyText\"}]
94
+ DATA
95
+ end
96
+
97
+ it { expect(data).to eq(expected_serialized_data) }
98
+ end
99
+
100
+ context "with invalid resource" do
101
+ let(:resource) do
102
+ { invalid: "resource" }
103
+ end
104
+
105
+ it { expect { data }.to raise_error(PowerApi::InvalidSerializableResource, /Invalid Hash/) }
106
+ end
107
+
108
+ context "with hash output_format" do
109
+ let(:options) do
110
+ {
111
+ output_format: :hash
112
+ }
113
+ end
114
+
115
+ let(:expected_serialized_data) do
116
+ {
117
+ body: "B",
118
+ created_at: "2022-01-28 20:30:00.000000000 +0000",
119
+ id: 1,
120
+ portfolio_id: 2,
121
+ title: "T",
122
+ updated_at: "2022-01-28 20:40:00.000000000 +0000"
123
+ }
124
+ end
125
+
126
+ it { expect(data).to eq(expected_serialized_data) }
127
+
128
+ context "with key_transform option" do
129
+ before { options[:key_transform] = :camel_lower }
130
+
131
+ it { expect(data).to eq(expected_serialized_data) }
132
+ end
133
+ end
134
+
135
+ context "with invalid output option" do
136
+ let(:options) do
137
+ { output_format: "invalid" }
138
+ end
139
+
140
+ it { expect { data }.to raise_error(PowerApi::InvalidSerializerOutputFormat, /:json, :hash/) }
141
+ end
142
+
143
+ context "with meta option" do
144
+ let(:options) do
145
+ {
146
+ meta: { hola: "platanus" }
147
+ }
148
+ end
149
+
150
+ let(:expected_serialized_data) do
151
+ <<~DATA.strip
152
+ {\"id\":1,\"title\":\"T\",\"body\":\"B\",\"createdAt\":\"2022-01-28T20:30:00.000Z\",\"updatedAt\":\"2022-01-28T20:40:00.000Z\",\"portfolioId\":2}
153
+ DATA
154
+ end
155
+
156
+ it { expect(data).to eq(expected_serialized_data) }
157
+
158
+ context "with include_root option" do
159
+ before { options[:include_root] = true }
160
+
161
+ let(:expected_serialized_data) do
162
+ <<~DATA.strip
163
+ {\"blog\":{\"id\":1,\"title\":\"T\",\"body\":\"B\",\"createdAt\":\"2022-01-28T20:30:00.000Z\",\"updatedAt\":\"2022-01-28T20:40:00.000Z\",\"portfolioId\":2},\"meta\":{\"hola\":\"platanus\"}}
164
+ DATA
165
+ end
166
+
167
+ it { expect(data).to eq(expected_serialized_data) }
168
+ end
169
+ end
170
+ end
171
+ end
@@ -11,7 +11,7 @@ RSpec.describe PowerApi::GeneratorHelper::AmsHelper, type: :generator do
11
11
 
12
12
  describe "#ams_serializers_path" do
13
13
  let(:expected_path) do
14
- "app/serializers/api/v1/.gitkeep"
14
+ "app/serializers/api/exposed/v1/.gitkeep"
15
15
  end
16
16
 
17
17
  def perform
@@ -24,7 +24,17 @@ RSpec.describe PowerApi::GeneratorHelper::AmsHelper, type: :generator do
24
24
  let(:version_number) { "2" }
25
25
 
26
26
  let(:expected_path) do
27
- "app/serializers/api/v2/.gitkeep"
27
+ "app/serializers/api/exposed/v2/.gitkeep"
28
+ end
29
+
30
+ it { expect(perform).to eq(expected_path) }
31
+ end
32
+
33
+ context "with no version" do
34
+ let(:version_number) { "" }
35
+
36
+ let(:expected_path) do
37
+ "app/serializers/api/internal/.gitkeep"
28
38
  end
29
39
 
30
40
  it { expect(perform).to eq(expected_path) }
@@ -32,25 +42,29 @@ RSpec.describe PowerApi::GeneratorHelper::AmsHelper, type: :generator do
32
42
  end
33
43
 
34
44
  describe "#ams_serializer_path" do
35
- let(:expected_path) { "app/serializers/api/v1/blog_serializer.rb" }
45
+ let(:expected_path) { "app/serializers/api/exposed/v1/blog_serializer.rb" }
36
46
 
37
47
  def perform
38
48
  generators_helper.ams_serializer_path
39
49
  end
40
50
 
41
51
  it { expect(perform).to eq(expected_path) }
52
+
53
+ context "with no version" do
54
+ let(:version_number) { nil }
55
+
56
+ let(:expected_path) do
57
+ "app/serializers/api/internal/blog_serializer.rb"
58
+ end
59
+
60
+ it { expect(perform).to eq(expected_path) }
61
+ end
42
62
  end
43
63
 
44
64
  describe "ams_initializer_tpl" do
45
65
  let(:template) do
46
66
  <<~INITIALIZER
47
- class ActiveModelSerializers::Adapter::JsonApi
48
- def self.default_key_transform
49
- :unaltered
50
- end
51
- end
52
-
53
- ActiveModelSerializers.config.adapter = :json_api
67
+ ActiveModelSerializers.config.adapter = :json
54
68
  INITIALIZER
55
69
  end
56
70
 
@@ -64,11 +78,12 @@ RSpec.describe PowerApi::GeneratorHelper::AmsHelper, type: :generator do
64
78
  describe "ams_serializer_tpl" do
65
79
  let(:template) do
66
80
  <<~SERIALIZER
67
- class Api::V1::BlogSerializer < ActiveModel::Serializer
81
+ class Api::Exposed::V1::BlogSerializer < ActiveModel::Serializer
68
82
  type :blog
69
83
 
70
84
  attributes(
71
- :title,
85
+ :id,
86
+ :title,
72
87
  :body,
73
88
  :created_at,
74
89
  :updated_at,
@@ -83,5 +98,28 @@ RSpec.describe PowerApi::GeneratorHelper::AmsHelper, type: :generator do
83
98
  end
84
99
 
85
100
  it { expect(perform).to eq(template) }
101
+
102
+ context "with no version" do
103
+ let(:version_number) { nil }
104
+
105
+ let(:template) do
106
+ <<~SERIALIZER
107
+ class Api::Internal::BlogSerializer < ActiveModel::Serializer
108
+ type :blog
109
+
110
+ attributes(
111
+ :id,
112
+ :title,
113
+ :body,
114
+ :created_at,
115
+ :updated_at,
116
+ :portfolio_id
117
+ )
118
+ end
119
+ SERIALIZER
120
+ end
121
+
122
+ it { expect(perform).to eq(template) }
123
+ end
86
124
  end
87
125
  end
@@ -0,0 +1,115 @@
1
+ RSpec.describe PowerApi::GeneratorHelper::ApiHelper, type: :generator do
2
+ describe "#version_number" do
3
+ def perform
4
+ generators_helper.version_number
5
+ end
6
+
7
+ it { expect(perform).to eq(1) }
8
+ end
9
+
10
+ describe "version_number=" do
11
+ context "with invalid version number" do
12
+ let(:version_number) { "A" }
13
+
14
+ it { expect { generators_helper }.to raise_error("invalid version number") }
15
+ end
16
+
17
+ context "with zero version number" do
18
+ let(:version_number) { 0 }
19
+
20
+ it { expect { generators_helper }.to raise_error("invalid version number") }
21
+ end
22
+
23
+ context "with nil version number" do
24
+ let(:version_number) { nil }
25
+
26
+ it { expect { generators_helper }.not_to raise_error }
27
+ end
28
+
29
+ context "with nil blank number" do
30
+ let(:version_number) { "" }
31
+
32
+ it { expect { generators_helper }.not_to raise_error }
33
+ end
34
+
35
+ context "with negative version number" do
36
+ let(:version_number) { -1 }
37
+
38
+ it { expect { generators_helper }.to raise_error("invalid version number") }
39
+ end
40
+ end
41
+
42
+ describe "#first_version?" do
43
+ def perform
44
+ generators_helper.first_version?
45
+ end
46
+
47
+ it { expect(perform).to eq(true) }
48
+
49
+ context "when version in not first version" do
50
+ let(:version_number) { "2" }
51
+
52
+ it { expect(perform).to eq(false) }
53
+ end
54
+ end
55
+
56
+ describe "#versioned_api?" do
57
+ def perform
58
+ generators_helper.versioned_api?
59
+ end
60
+
61
+ it { expect(perform).to eq(true) }
62
+
63
+ context "when version in not first version" do
64
+ let(:version_number) { "2" }
65
+
66
+ it { expect(perform).to eq(true) }
67
+ end
68
+
69
+ context "when nil version" do
70
+ let(:version_number) { nil }
71
+
72
+ it { expect(perform).to eq(false) }
73
+ end
74
+ end
75
+
76
+ describe "#api_file_path" do
77
+ def perform
78
+ generators_helper.api_file_path
79
+ end
80
+
81
+ it { expect(perform).to eq("api/exposed/v1") }
82
+
83
+ context "when version in not first version" do
84
+ let(:version_number) { "2" }
85
+
86
+ it { expect(perform).to eq("api/exposed/v2") }
87
+ end
88
+
89
+ context "when nil version" do
90
+ let(:version_number) { nil }
91
+
92
+ it { expect(perform).to eq("api/internal") }
93
+ end
94
+ end
95
+
96
+ describe "#api_class" do
97
+ def perform
98
+ generators_helper.api_class
99
+ end
100
+
101
+ it { expect(perform).to eq("Api::Exposed::V1") }
102
+
103
+ context "when version in not first version" do
104
+ let(:version_number) { "2" }
105
+
106
+ it { expect(perform).to eq("Api::Exposed::V2") }
107
+ end
108
+
109
+ context "when nil version" do
110
+ let(:version_number) { nil }
111
+
112
+ it { expect(perform).to eq("Api::Internal") }
113
+ end
114
+ end
115
+ end
@@ -1,46 +1,68 @@
1
- RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
2
- describe "#api_base_controller_path" do
1
+ describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
2
+ describe "#api_main_base_controller_path" do
3
3
  let(:expected_path) { "app/controllers/api/base_controller.rb" }
4
4
 
5
5
  def perform
6
- generators_helper.api_base_controller_path
6
+ generators_helper.api_main_base_controller_path
7
7
  end
8
8
 
9
9
  it { expect(perform).to eq(expected_path) }
10
10
  end
11
11
 
12
- describe "#resource_controller_path" do
13
- let(:expected_path) { "app/controllers/api/v1/blogs_controller.rb" }
12
+ describe "#exposed_base_controller_path" do
13
+ let(:expected_path) { "app/controllers/api/exposed/base_controller.rb" }
14
14
 
15
15
  def perform
16
- generators_helper.resource_controller_path
16
+ generators_helper.exposed_base_controller_path
17
17
  end
18
18
 
19
19
  it { expect(perform).to eq(expected_path) }
20
20
  end
21
21
 
22
- describe "api_base_controller_tpl" do
23
- let(:template) do
24
- <<~CONTROLLER
25
- class Api::BaseController < PowerApi::BaseController
26
- end
27
- CONTROLLER
22
+ describe "#internal_base_controller_path" do
23
+ let(:expected_path) { "app/controllers/api/internal/base_controller.rb" }
24
+
25
+ def perform
26
+ generators_helper.internal_base_controller_path
28
27
  end
29
28
 
29
+ it { expect(perform).to eq(expected_path) }
30
+ end
31
+
32
+ describe "#version_base_controller_path" do
33
+ let(:expected_path) { "app/controllers/api/exposed/v1/base_controller.rb" }
34
+
30
35
  def perform
31
- generators_helper.api_base_controller_tpl
36
+ generators_helper.version_base_controller_path
32
37
  end
33
38
 
34
- it { expect(perform).to eq(template) }
39
+ it { expect(perform).to eq(expected_path) }
40
+ end
41
+
42
+ describe "#resource_controller_path" do
43
+ let(:expected_path) { "app/controllers/api/exposed/v1/blogs_controller.rb" }
44
+
45
+ def perform
46
+ generators_helper.resource_controller_path
47
+ end
48
+
49
+ it { expect(perform).to eq(expected_path) }
50
+
51
+ context "without version" do
52
+ let(:version_number) { "" }
53
+ let(:expected_path) { "app/controllers/api/internal/blogs_controller.rb" }
54
+
55
+ it { expect(perform).to eq(expected_path) }
56
+ end
35
57
  end
36
58
 
37
- describe "#base_controller_path" do
59
+ describe "#version_base_controller_path" do
38
60
  let(:expected_path) do
39
- "app/controllers/api/v1/base_controller.rb"
61
+ "app/controllers/api/exposed/v1/base_controller.rb"
40
62
  end
41
63
 
42
64
  def perform
43
- generators_helper.base_controller_path
65
+ generators_helper.version_base_controller_path
44
66
  end
45
67
 
46
68
  it { expect(perform).to eq(expected_path) }
@@ -49,17 +71,66 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
49
71
  let(:version_number) { "2" }
50
72
 
51
73
  let(:expected_path) do
52
- "app/controllers/api/v2/base_controller.rb"
74
+ "app/controllers/api/exposed/v2/base_controller.rb"
53
75
  end
54
76
 
55
77
  it { expect(perform).to eq(expected_path) }
56
78
  end
57
79
  end
58
80
 
81
+ describe "api_main_base_controller_tpl" do
82
+ let(:template) do
83
+ <<~CONTROLLER
84
+ class Api::BaseController < PowerApi::BaseController
85
+ end
86
+ CONTROLLER
87
+ end
88
+
89
+ def perform
90
+ generators_helper.api_main_base_controller_tpl
91
+ end
92
+
93
+ it { expect(perform).to eq(template) }
94
+ end
95
+
96
+ describe "exposed_base_controller_tpl" do
97
+ let(:template) do
98
+ <<~CONTROLLER
99
+ class Api::Exposed::BaseController < Api::BaseController
100
+ skip_before_action :verify_authenticity_token
101
+ end
102
+ CONTROLLER
103
+ end
104
+
105
+ def perform
106
+ generators_helper.exposed_base_controller_tpl
107
+ end
108
+
109
+ it { expect(perform).to eq(template) }
110
+ end
111
+
112
+ describe "internal_base_controller_tpl" do
113
+ let(:template) do
114
+ <<~CONTROLLER
115
+ class Api::Internal::BaseController < Api::BaseController
116
+ before_action do
117
+ self.namespace_for_serializer = ::Api::Internal
118
+ end
119
+ end
120
+ CONTROLLER
121
+ end
122
+
123
+ def perform
124
+ generators_helper.internal_base_controller_tpl
125
+ end
126
+
127
+ it { expect(perform).to eq(template) }
128
+ end
129
+
59
130
  describe "resource_controller_tpl" do
60
131
  let(:template) do
61
132
  <<~CONTROLLER
62
- class Api::V1::BlogsController < Api::V1::BaseController
133
+ class Api::Exposed::V1::BlogsController < Api::Exposed::V1::BaseController
63
134
  def index
64
135
  respond_with Blog.all
65
136
  end
@@ -70,7 +141,8 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
70
141
  respond_with Blog.create!(blog_params)
71
142
  end
72
143
  def update
73
- respond_with blog.update!(blog_params)
144
+ blog.update!(blog_params)
145
+ respond_with blog
74
146
  end
75
147
  def destroy
76
148
  respond_with blog.destroy!
@@ -96,6 +168,13 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
96
168
 
97
169
  it { expect(perform).to eq(template) }
98
170
 
171
+ context "without version" do
172
+ let(:version_number) { nil }
173
+ let(:expected) { "class Api::Internal::BlogsController < Api::Internal::BaseController" }
174
+
175
+ it { expect(perform).to include(expected) }
176
+ end
177
+
99
178
  context "with specific attributes" do
100
179
  let(:resource_attributes) do
101
180
  [
@@ -207,7 +286,7 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
207
286
  let(:authenticated_resource) { "user" }
208
287
  let(:template) do
209
288
  <<~CONTROLLER
210
- class Api::V1::BlogsController < Api::V1::BaseController
289
+ class Api::Exposed::V1::BlogsController < Api::Exposed::V1::BaseController
211
290
  acts_as_token_authentication_handler_for User, fallback: :exception
212
291
 
213
292
  def index
@@ -220,7 +299,8 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
220
299
  respond_with Blog.create!(blog_params)
221
300
  end
222
301
  def update
223
- respond_with blog.update!(blog_params)
302
+ blog.update!(blog_params)
303
+ respond_with blog
224
304
  end
225
305
  def destroy
226
306
  respond_with blog.destroy!
@@ -241,6 +321,15 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
241
321
  end
242
322
 
243
323
  it { expect(perform).to eq(template) }
324
+
325
+ context "without version" do
326
+ let(:version_number) { nil }
327
+ let(:expected) do
328
+ "before_action :authenticate_user!"
329
+ end
330
+
331
+ it { expect(perform).to include(expected) }
332
+ end
244
333
  end
245
334
 
246
335
  context "with owned_by_authenticated_resource and authenticated_resource" do
@@ -249,7 +338,7 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
249
338
 
250
339
  let(:template) do
251
340
  <<~CONTROLLER
252
- class Api::V1::BlogsController < Api::V1::BaseController
341
+ class Api::Exposed::V1::BlogsController < Api::Exposed::V1::BaseController
253
342
  acts_as_token_authentication_handler_for User, fallback: :exception
254
343
 
255
344
  def index
@@ -262,7 +351,8 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
262
351
  respond_with blogs.create!(blog_params)
263
352
  end
264
353
  def update
265
- respond_with blog.update!(blog_params)
354
+ blog.update!(blog_params)
355
+ respond_with blog
266
356
  end
267
357
  def destroy
268
358
  respond_with blog.destroy!
@@ -299,7 +389,7 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
299
389
  let(:parent_resource_name) { "portfolio" }
300
390
  let(:template) do
301
391
  <<~CONTROLLER
302
- class Api::V1::BlogsController < Api::V1::BaseController
392
+ class Api::Exposed::V1::BlogsController < Api::Exposed::V1::BaseController
303
393
  def index
304
394
  respond_with blogs
305
395
  end
@@ -310,7 +400,8 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
310
400
  respond_with blogs.create!(blog_params)
311
401
  end
312
402
  def update
313
- respond_with blog.update!(blog_params)
403
+ blog.update!(blog_params)
404
+ respond_with blog
314
405
  end
315
406
  def destroy
316
407
  respond_with blog.destroy!
@@ -345,7 +436,7 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
345
436
  let(:owned_by_authenticated_resource) { true }
346
437
  let(:template) do
347
438
  <<~CONTROLLER
348
- class Api::V1::BlogsController < Api::V1::BaseController
439
+ class Api::Exposed::V1::BlogsController < Api::Exposed::V1::BaseController
349
440
  acts_as_token_authentication_handler_for User, fallback: :exception
350
441
 
351
442
  def index
@@ -358,7 +449,8 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
358
449
  respond_with blogs.create!(blog_params)
359
450
  end
360
451
  def update
361
- respond_with blog.update!(blog_params)
452
+ blog.update!(blog_params)
453
+ respond_with blog
362
454
  end
363
455
  def destroy
364
456
  respond_with blog.destroy!
@@ -388,19 +480,19 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
388
480
  end
389
481
  end
390
482
 
391
- describe "#base_controller_tpl" do
483
+ describe "#version_base_controller_tpl" do
392
484
  let(:expected_tpl) do
393
485
  <<~CONTROLLER
394
- class Api::V1::BaseController < Api::BaseController
486
+ class Api::Exposed::V1::BaseController < Api::Exposed::BaseController
395
487
  before_action do
396
- self.namespace_for_serializer = ::Api::V1
488
+ self.namespace_for_serializer = ::Api::Exposed::V1
397
489
  end
398
490
  end
399
491
  CONTROLLER
400
492
  end
401
493
 
402
494
  def perform
403
- generators_helper.base_controller_tpl
495
+ generators_helper.version_base_controller_tpl
404
496
  end
405
497
 
406
498
  it { expect(perform).to eq(expected_tpl) }
@@ -410,9 +502,9 @@ RSpec.describe PowerApi::GeneratorHelper::ControllerHelper, type: :generator do
410
502
 
411
503
  let(:expected_tpl) do
412
504
  <<~CONTROLLER
413
- class Api::V2::BaseController < Api::BaseController
505
+ class Api::Exposed::V2::BaseController < Api::Exposed::BaseController
414
506
  before_action do
415
- self.namespace_for_serializer = ::Api::V2
507
+ self.namespace_for_serializer = ::Api::Exposed::V2
416
508
  end
417
509
  end
418
510
  CONTROLLER