hoc_utils 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -4
- data/lib/generators/hoc_utils/api_scaffold/api_scaffold_generator.rb +35 -2
- data/lib/generators/hoc_utils/api_scaffold/templates/api_controller.rb.tt +1 -2
- data/lib/generators/hoc_utils/api_scaffold/templates/nested_api_controller.rb.tt +54 -0
- data/lib/generators/hoc_utils/api_scaffold/templates/spec.rb.tt +13 -6
- data/lib/hoc_utils/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eab9dc88e9cf7cca2f292f4bd2a885ef9ba884bb
|
4
|
+
data.tar.gz: 9233f7c085dee9d939ba096eec056711e75eca1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbc551bfd8e4a9bf8169d832c17fcbdd9d8c765f0820f1faa9899fd7a9bee4fe8ceafa5ce07e2c3b574d395d359fc51899cc3ed3e643236a65a969edd813b9a4
|
7
|
+
data.tar.gz: 1beacf1d5b84ba667dd4bda929cfffdb0813550a4aac663975983d1b2f1d20e70b18db3bddf03c0053aad6d91325fcb8b91cafdcdf0bf8a316f83dfbbfa32a05
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# HocUtils
|
2
|
-
|
3
2
|
This is a collection of utilities for a HoC API application
|
3
|
+
|
4
4
|
## Installation
|
5
5
|
|
6
6
|
Add this line to your application's Gemfile:
|
@@ -17,10 +17,11 @@ Or install it yourself as:
|
|
17
17
|
|
18
18
|
$ gem install hoc_utils
|
19
19
|
|
20
|
+
## TODO
|
21
|
+
* Routes for nested resources
|
22
|
+
* Generate client code
|
23
|
+
* DSL for specifying models and layout of admin pages
|
20
24
|
|
21
|
-
## Contributing
|
22
|
-
|
23
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/hoc_utils.
|
24
25
|
|
25
26
|
## License
|
26
27
|
|
@@ -15,9 +15,24 @@ module HocUtils
|
|
15
15
|
class_option :admin, type: :boolean, default: true, desc: "Generate administration interface"
|
16
16
|
class_option :routes, type: :boolean, default: true, desc: "Generate routes"
|
17
17
|
class_option :api_version, type: :string, default: "v1", desc: "Version of namespace"
|
18
|
-
|
18
|
+
class_option :nested_to, type: :string, default: nil, desc: "Should be nested in"
|
19
19
|
source_root File.expand_path('templates', __dir__)
|
20
20
|
|
21
|
+
def is_nested?
|
22
|
+
!options.nested_to.nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
def singular_parent_name
|
26
|
+
options.nested_to.try(:downcase)
|
27
|
+
end
|
28
|
+
|
29
|
+
def plural_parent_name
|
30
|
+
options.nested_to.try(:pluralize)
|
31
|
+
end
|
32
|
+
|
33
|
+
def parent_class_name
|
34
|
+
singular_parent_name.try(:classify)
|
35
|
+
end
|
21
36
|
|
22
37
|
def api_version
|
23
38
|
options.api_version.downcase
|
@@ -44,12 +59,21 @@ ACTS
|
|
44
59
|
# Scaffolds the api controller
|
45
60
|
def generate_api_controller
|
46
61
|
say "Generates app/controllers/api/#{api_version}/#{plural_table_name}_controller.rb", :bold
|
47
|
-
|
62
|
+
if is_nested?
|
63
|
+
template "nested_api_controller.rb.tt", "app/controllers/api/#{api_version}/#{plural_table_name}_controller.rb"
|
64
|
+
else
|
65
|
+
template "api_controller.rb.tt", "app/controllers/api/#{api_version}/#{plural_table_name}_controller.rb"
|
66
|
+
end
|
48
67
|
end
|
49
68
|
|
50
69
|
# Generates routes in config/routes.rb. Will namespace resources to api/[api_version].
|
51
70
|
def generate_routes
|
52
71
|
return unless options.routes?
|
72
|
+
|
73
|
+
if is_nested?
|
74
|
+
say "Sorry you have to generate the route manually. because I don't know how to do it when the resource is nested!", :yellow, :bold
|
75
|
+
return
|
76
|
+
end
|
53
77
|
say "Generates routes. You may want to merge api/#{api_version} namespaces in config/routes.rb", :bold
|
54
78
|
generate "resource_route api/#{api_version.downcase}/#{plural_table_name}"
|
55
79
|
end
|
@@ -80,6 +104,14 @@ ACTS
|
|
80
104
|
updated_at: { type: "string"},
|
81
105
|
}
|
82
106
|
},
|
107
|
+
# AUTO GENERATED STUB TODO: update with correct fields
|
108
|
+
#{plural_table_name}: {
|
109
|
+
type: 'object',
|
110
|
+
properties: {
|
111
|
+
meta: { "$ref": "#/definitions/meta" },
|
112
|
+
#{plural_table_name}: { type: 'array', items: { "$ref": "#/definitions/#{singular_table_name}" },},
|
113
|
+
}
|
114
|
+
},
|
83
115
|
}
|
84
116
|
end
|
85
117
|
end
|
@@ -108,6 +140,7 @@ ACTS
|
|
108
140
|
say("* Run 'rails rswag:specs:swaggerize' to update swagger.", :green)
|
109
141
|
say("* Make sure any referenced models are updated with eg. has_many :#{plural_table_name}", :green)
|
110
142
|
say("* Customize the table and form definition in 'app/admin/#{plural_table_name}_admin.rb'", :green)
|
143
|
+
say("* Setup nested route") if is_nested?
|
111
144
|
say("* #beAwesome", :green)
|
112
145
|
end
|
113
146
|
|
@@ -4,8 +4,7 @@ class Api::<%= api_version.upcase %>::<%= plural_table_name.camelize %>Controlle
|
|
4
4
|
|
5
5
|
# GET /api/<%= api_version %><%= route_url %>
|
6
6
|
def index
|
7
|
-
|
8
|
-
render_result({ <%= plural_table_name %>: @<%= plural_table_name %>.as_api_response(:basic) })
|
7
|
+
render_collection(<%= class_name %>.all, :<%= plural_table_name %>)
|
9
8
|
end
|
10
9
|
|
11
10
|
# GET /api/<%= api_version %><%= route_url %>/1
|
@@ -0,0 +1,54 @@
|
|
1
|
+
class Api::<%= api_version.upcase %>::<%= plural_table_name.camelize %>Controller < Api::<%= api_version.upcase %>::ApiController
|
2
|
+
before_action :set_<%= singular_parent_name %>
|
3
|
+
before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy]
|
4
|
+
|
5
|
+
# GET /api/<%= api_version %><%= route_url %>
|
6
|
+
def index
|
7
|
+
render_collection(@<%= singular_parent_name %>.<%= plural_table_name %>.all, :<%= plural_table_name %>)
|
8
|
+
end
|
9
|
+
|
10
|
+
# GET /api/<%= api_version %><%= route_url %>/1
|
11
|
+
def show
|
12
|
+
render_result(@<%= singular_table_name %>.as_api_response(:basic))
|
13
|
+
end
|
14
|
+
|
15
|
+
# POST /api/<%= api_version %><%= route_url %>
|
16
|
+
def create
|
17
|
+
@<%= "#{singular_table_name} = #{singular_parent_name}.#{plural_table_name}.new(#{singular_table_name}_params)" %>
|
18
|
+
|
19
|
+
if @<%= singular_table_name %>
|
20
|
+
render_result(@<%= singular_table_name %>.as_api_response(:basic), :created)
|
21
|
+
else
|
22
|
+
render_error(@<%= singular_table_name %>.errors.full_messages.first, :unprocessable_entity)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# PATCH/PUT /api/<%= api_version %><%= route_url %>/1
|
27
|
+
def update
|
28
|
+
if @<%= singular_table_name %>.update(<%= singular_table_name %>_params)
|
29
|
+
render_result(@<%= singular_table_name %>.as_api_response(:basic))
|
30
|
+
else
|
31
|
+
render_error(@<%= singular_table_name %>.errors.full_messages.first, :unprocessable_entity)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# DELETE /api/<%= api_version %><%= route_url %>/1
|
36
|
+
def destroy
|
37
|
+
@<%= singular_table_name %>.destroy
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Use callbacks to share common setup or constraints between actions.
|
43
|
+
def set_<%= singular_parent_name %>
|
44
|
+
@<%= singular_parent_name %> = <%= parent_class_name %>.find(params[:id])
|
45
|
+
end
|
46
|
+
def set_<%= singular_table_name %>
|
47
|
+
@<%= singular_table_name %> = @<%= singular_parent_name %>.<%= plural_table_name %>.find(params[:id])
|
48
|
+
end
|
49
|
+
|
50
|
+
# Only allow a trusted parameter "white list" through.
|
51
|
+
def <%= "#{singular_table_name}_params" %>
|
52
|
+
params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
|
53
|
+
end
|
54
|
+
end
|
@@ -1,13 +1,16 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
1
|
require 'swagger_helper'
|
3
2
|
describe 'House of Code API' do
|
4
|
-
path '/api/<%= "#{api_version}
|
3
|
+
path '/api/<%= "#{api_version}/"%><%= "#{plural_parent_name}/:#{singular_parent_name}_id/" if is_nested?%><%= plural_table_name %>' do
|
5
4
|
get 'Get <%= plural_table_name %>' do
|
6
5
|
tags '<%= plural_table_name.camelize %>'
|
7
6
|
description 'Gets <%= plural_table_name %>'
|
8
7
|
produces 'application/json'
|
9
8
|
consumes 'application/json'
|
9
|
+
|
10
|
+
parameter name: :all, in: :query, type: :boolean
|
11
|
+
parameter name: :page, in: :query, type: :integer
|
10
12
|
parameter name: :Authorization, in: :header, required: true, type: :string
|
13
|
+
<%= "parameter name: :#{singular_parent_name}_id, in: :path, required:true, type: integer" if is_nested? %>
|
11
14
|
response '200', '<%= plural_table_name.camelize %>' do
|
12
15
|
schema '$ref' => '#/definitions/<%= plural_table_name %>'
|
13
16
|
run_test!
|
@@ -23,6 +26,7 @@ describe 'House of Code API' do
|
|
23
26
|
description 'Creates <%= singular_table_name %> with given input'
|
24
27
|
produces 'application/json'
|
25
28
|
consumes 'application/json'
|
29
|
+
<%= "parameter name: :#{singular_parent_name}_id, in: :path, required:true, type: integer" if is_nested? %>
|
26
30
|
parameter name: :<%= singular_table_name %>, in: :body, schema: {
|
27
31
|
'$ref' => '#/definitions/<%= singular_table_name %>_input'
|
28
32
|
}
|
@@ -37,14 +41,14 @@ describe 'House of Code API' do
|
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
40
|
-
|
41
|
-
path '/api/<%= "#{api_version}/#{plural_table_name}" %>/{id}' do
|
44
|
+
path '/api/<%= "#{api_version}/"%><%= "#{plural_parent_name}/:#{singular_parent_name}_id/" if is_nested?%><%= plural_table_name %>/{id}' do
|
42
45
|
get 'Get <%= singular_table_name %>' do
|
43
46
|
tags '<%= plural_table_name.camelize %>'
|
44
47
|
description 'Gets <%= singular_table_name %> with :id'
|
45
48
|
produces 'application/json'
|
46
49
|
consumes 'application/json'
|
47
|
-
parameter name:
|
50
|
+
<%= "parameter name: :#{singular_parent_name}_id, in: :path, required:true, type: integer" if is_nested? %>
|
51
|
+
parameter name: :id, in: :path, type: :integer, required: true
|
48
52
|
parameter name: :Authorization, in: :header, required: true, type: :string
|
49
53
|
response '200', '<%= singular_table_name.camelize %>' do
|
50
54
|
schema '$ref' => '#/definitions/<%= singular_table_name %>'
|
@@ -61,7 +65,8 @@ describe 'House of Code API' do
|
|
61
65
|
description 'Updates <%= singular_table_name %> with :id'
|
62
66
|
produces 'application/json'
|
63
67
|
consumes 'application/json'
|
64
|
-
parameter name:
|
68
|
+
<%= "parameter name: :#{singular_parent_name}_id, in: :path, required:true, type: integer" if is_nested? %>
|
69
|
+
parameter name: :id, in: :path, type: :integer, required: true
|
65
70
|
parameter name: :Authorization, in: :header, required: true, type: :string
|
66
71
|
response '200', '<%= singular_table_name.camelize %>' do
|
67
72
|
schema '$ref' => '#/definitions/<%= singular_table_name %>_input'
|
@@ -78,7 +83,9 @@ describe 'House of Code API' do
|
|
78
83
|
description 'Deletes <%= singular_table_name %> with :id'
|
79
84
|
produces 'application/json'
|
80
85
|
consumes 'application/json'
|
86
|
+
<%= "parameter name: :#{singular_parent_name}_id, in: :path, required:true, type: integer" if is_nested? %>
|
81
87
|
parameter name: :Authorization, in: :header, required: true, type: :string
|
88
|
+
parameter name: :id, in: :path, type: :integer, required: true
|
82
89
|
response '200', '<%= singular_table_name.camelize %> deleted' do
|
83
90
|
run_test!
|
84
91
|
end
|
data/lib/hoc_utils/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoc_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gert Lavsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-rails
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/generators/hoc_utils/api_scaffold/USAGE
|
85
85
|
- lib/generators/hoc_utils/api_scaffold/api_scaffold_generator.rb
|
86
86
|
- lib/generators/hoc_utils/api_scaffold/templates/api_controller.rb.tt
|
87
|
+
- lib/generators/hoc_utils/api_scaffold/templates/nested_api_controller.rb.tt
|
87
88
|
- lib/generators/hoc_utils/api_scaffold/templates/spec.rb.tt
|
88
89
|
- lib/hoc_utils.rb
|
89
90
|
- lib/hoc_utils/version.rb
|