grape_resource 0.1.3 → 0.1.5
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +12 -1
- data/lib/generators/grape_resource/generator_helpers.rb +105 -0
- data/lib/generators/grape_resource/install_generator.rb +5 -0
- data/lib/generators/grape_resource/namespace_generator.rb +67 -0
- data/lib/generators/grape_resource/rest_generator.rb +66 -0
- data/lib/generators/templates/entities.rb.erb +6 -0
- data/lib/generators/templates/initializer.rb +8 -1
- data/lib/generators/templates/namespace/namespace_endpoint.rb.erb +91 -0
- data/lib/generators/templates/rest/rest_endpoint.rb.erb +69 -0
- data/lib/generators/templates/routes.rb.erb +14 -0
- data/lib/generators/templates/specs.rb.erb +3 -0
- data/lib/grape_resource.rb +3 -0
- data/lib/grape_resource/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18a0f9753a02d378d8f4f1cd7ccddb48952958b56a7bfef8526b2bc8e528d337
|
4
|
+
data.tar.gz: a2e8531e0149e10b7864fa5aad490f10c8f399df7c13d3bf313eac6a4d7b8d85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9a52aa191ddab0b319284b0028c8f381015ec2dfed5d8c4d36070972451422882897e32eab10e9b1bbe8a6c5092148070467b29a252b077afbba3e864302738
|
7
|
+
data.tar.gz: 126ba5569261901342908c42066b86b89d8358fa0fb81b3e1159f20ce4baca8de3a6ac475fb315cf18a6b32ca281f926bc79e514b588c49b4dc1ddca1bc55986
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -40,6 +40,9 @@ Modify GrapeResource configuration inside `config/initializers/grape_resource.rb
|
|
40
40
|
|
41
41
|
1. `config.directory` will be your endpoint directory. Default to : `controllers/API/v1/`
|
42
42
|
2. `config.class_name_prefix` will be your class name prefix for your endpoint. Default to : `API::V1`
|
43
|
+
3. `config.entry_point_routes` will be your entry point for your routes. Default to : `# Routes entry point`
|
44
|
+
4. `config.success_formatter` will be your success formatter. Default to : `formatter :json, ::API::SuccessFormatter`
|
45
|
+
5. `config.error_formatter` will be your error formatter. Default to : `error_formatter :json, ::API::ErrorFormatter`
|
43
46
|
|
44
47
|
### Generator
|
45
48
|
|
@@ -47,6 +50,10 @@ To generate REST API :
|
|
47
50
|
|
48
51
|
$ rails g grape_resource:rest class_name
|
49
52
|
|
53
|
+
Example :
|
54
|
+
|
55
|
+
$ rails g grape_resource:rest article
|
56
|
+
|
50
57
|
This will give you :
|
51
58
|
|
52
59
|
1. GET /
|
@@ -57,7 +64,11 @@ This will give you :
|
|
57
64
|
|
58
65
|
To generate namespaced API :
|
59
66
|
|
60
|
-
$ rails g grape_resource:namespace namespace api_endpoint1 api_endpoint2:method
|
67
|
+
$ rails g grape_resource:namespace namespace api_endpoint1 api_endpoint2:method
|
68
|
+
|
69
|
+
Example :
|
70
|
+
|
71
|
+
$ rails g grape_resource:namespace article popular like:post similar:get:member trending:get:collection
|
61
72
|
|
62
73
|
While method is one of :
|
63
74
|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module GrapeResource
|
2
|
+
module GeneratorHelpers
|
3
|
+
attr_accessor :attributes
|
4
|
+
|
5
|
+
private
|
6
|
+
def check_endpoint_or_method(args)
|
7
|
+
@default_endpoint, custom, custom2 = [], [], []
|
8
|
+
args.each do |arg|
|
9
|
+
case arg.split(":").length
|
10
|
+
when 1
|
11
|
+
@default_endpoint << arg
|
12
|
+
when 2
|
13
|
+
custom << arg.split(":")
|
14
|
+
else
|
15
|
+
if arg.split(":")[1] == "get"
|
16
|
+
custom2 << arg.split(":")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
@default_endpoint
|
21
|
+
@custom_endpoint, @custom_endpoint2 = custom.to_h, custom2
|
22
|
+
collection_or_member
|
23
|
+
get_endpoint_and_method_name
|
24
|
+
end
|
25
|
+
|
26
|
+
def collection_or_member
|
27
|
+
collection, member = [], []
|
28
|
+
@custom_endpoint2.each do |c2|
|
29
|
+
collection << c2.take(2) if c2.last == "collection"
|
30
|
+
member << c2.take(2) if c2.last == "member"
|
31
|
+
end
|
32
|
+
@collection, @member = collection.to_h, member.to_h
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_endpoint_and_method_name
|
36
|
+
@put, @post, @delete = {}, {}, {}
|
37
|
+
@custom_endpoint.each do |k, v|
|
38
|
+
@put[k] = v if v == "put"
|
39
|
+
@post[k] = v if v == "post"
|
40
|
+
@delete[k] = v if v == "delete"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def generator_type class_name
|
45
|
+
@name_of_class = class_name == "rest" ? name.camelize.pluralize : name.camelize.singularize
|
46
|
+
@name_of_class
|
47
|
+
end
|
48
|
+
|
49
|
+
# Routes
|
50
|
+
def routes_exist?
|
51
|
+
@routes_file = Rails.root.join("app/#{GrapeResource.directory}#{name.underscore.pluralize}/routes.rb")
|
52
|
+
File.exist? @routes_file
|
53
|
+
end
|
54
|
+
|
55
|
+
def mount_code_exist?
|
56
|
+
string = " mount #{GrapeResource.class_name_prefix}::#{name.camelize.pluralize}::Resources::#{@name_of_class}\n"
|
57
|
+
File.read(@routes_file).each_line do |line|
|
58
|
+
return true if line == string
|
59
|
+
end
|
60
|
+
return false
|
61
|
+
end
|
62
|
+
|
63
|
+
# Main
|
64
|
+
def mounted_routes_exist?
|
65
|
+
@main_file = Rails.root.join("app/#{GrapeResource.directory}main.rb")
|
66
|
+
string = " mount API::V1::#{name.camelize.pluralize}::Routes\n"
|
67
|
+
File.read(@main_file).each_line do |line|
|
68
|
+
return true if line == string
|
69
|
+
end
|
70
|
+
return false
|
71
|
+
end
|
72
|
+
|
73
|
+
# Specs
|
74
|
+
def rspec_exist?
|
75
|
+
rspec_file = Rails.root.join("app/#{GrapeResource.directory}#{name.underscore.pluralize}/spec/#{@name_of_class.underscore}_spec.rb")
|
76
|
+
File.exist? rspec_file
|
77
|
+
end
|
78
|
+
|
79
|
+
# Entities
|
80
|
+
def entities_exist?
|
81
|
+
entity_file = Rails.root.join("app/#{GrapeResource.directory}#{name.underscore.pluralize}/entities/#{name.underscore.singularize}.rb")
|
82
|
+
File.exist? entity_file
|
83
|
+
end
|
84
|
+
|
85
|
+
def model_columns_for_attributes
|
86
|
+
name.classify.constantize.columns.reject do |column|
|
87
|
+
column.name.to_s =~ /^(id|created_at|updated_at)$/
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def editable_attributes
|
92
|
+
attributes ||= model_columns_for_attributes.map do |column|
|
93
|
+
Rails::Generators::GeneratedAttribute.new(column.name.to_s, column.type.to_s)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def attributes_for_params
|
98
|
+
@entities = {}
|
99
|
+
editable_attributes.map do |col|
|
100
|
+
@entities[col.name] = col.type.downcase == "text" || "uuid" ? "String" : col.type.capitalize
|
101
|
+
end
|
102
|
+
@entities
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -5,5 +5,10 @@ module GrapeResource
|
|
5
5
|
def copy_initializer
|
6
6
|
template "initializer.rb", "config/initializers/grape_resource.rb"
|
7
7
|
end
|
8
|
+
|
9
|
+
def insert_entry_point
|
10
|
+
insert_into_file "app/#{GrapeResource.directory}/main.rb", "\n\n #{GrapeResource.entry_point_routes} -- DONT REMOVE THIS LINE", after: " mount API::V1::Info::Routes"
|
11
|
+
end
|
12
|
+
|
8
13
|
end
|
9
14
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "generators/grape_resource/generator_helpers.rb"
|
2
|
+
|
3
|
+
module GrapeResource
|
4
|
+
class NamespaceGenerator < Rails::Generators::NamedBase
|
5
|
+
source_root File.expand_path("../../templates", __FILE__)
|
6
|
+
include GrapeResource::GeneratorHelpers
|
7
|
+
|
8
|
+
def generate
|
9
|
+
unless Object.const_defined?(name.classify)
|
10
|
+
say
|
11
|
+
say
|
12
|
+
say "You need to generate model", :red
|
13
|
+
say
|
14
|
+
say "Example :"
|
15
|
+
say " rails g model #{name.classify} attr1 attr2", :green
|
16
|
+
say
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
generator_type "namespace"
|
21
|
+
insert_resources
|
22
|
+
insert_into_main unless mounted_routes_exist?
|
23
|
+
insert_namespace_entities unless entities_exist?
|
24
|
+
template_rspec unless rspec_exist?
|
25
|
+
routes_exist? ? insert_namespace_routes : template_namespace_routes
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def insert_resources
|
30
|
+
check_endpoint_or_method args
|
31
|
+
attributes_for_params
|
32
|
+
|
33
|
+
template "namespace/namespace_endpoint.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/resources/#{name.underscore.singularize}.rb"
|
34
|
+
|
35
|
+
inside "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/resources/" do
|
36
|
+
gsub_file("#{name.underscore.singularize}.rb", /.*?remove.*\r?\n/, "")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def insert_into_main
|
41
|
+
insert_into_file "app/#{GrapeResource.directory}/main.rb", " mount API::V1::#{name.camelize.pluralize}::Routes\n", before: " #{GrapeResource.entry_point_routes} -- DONT REMOVE THIS LINE"
|
42
|
+
end
|
43
|
+
|
44
|
+
def insert_namespace_entities
|
45
|
+
attributes_for_params
|
46
|
+
|
47
|
+
template "entities.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/entities/#{name.underscore.singularize}.rb"
|
48
|
+
|
49
|
+
inside "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/entities/" do
|
50
|
+
gsub_file("#{name.underscore.singularize}.rb", /.*?remove.*\r?\n/, "")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def template_rspec
|
55
|
+
template "specs.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/spec/#{name.underscore.singularize}_spec.rb"
|
56
|
+
end
|
57
|
+
|
58
|
+
def insert_namespace_routes
|
59
|
+
insert_into_file "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/routes.rb", " mount #{GrapeResource.class_name_prefix}::#{name.camelize.pluralize}::Resources::#{name.camelize.singularize}\n", before: " #{GrapeResource.entry_point_routes} -- DONT REMOVE THIS LINE\n" unless mount_code_exist?
|
60
|
+
end
|
61
|
+
|
62
|
+
def template_namespace_routes
|
63
|
+
template "routes.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/routes.rb"
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "generators/grape_resource/generator_helpers.rb"
|
2
|
+
|
3
|
+
module GrapeResource
|
4
|
+
class RestGenerator < Rails::Generators::NamedBase
|
5
|
+
source_root File.expand_path("../../templates", __FILE__)
|
6
|
+
include GrapeResource::GeneratorHelpers
|
7
|
+
|
8
|
+
def run_me
|
9
|
+
unless Object.const_defined?(name.classify)
|
10
|
+
say
|
11
|
+
say
|
12
|
+
say "You need to generate model", :red
|
13
|
+
say
|
14
|
+
say "Example :"
|
15
|
+
say " rails g model #{name.classify} attr1 attr2", :green
|
16
|
+
say
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
generator_type "rest"
|
21
|
+
create_rest_endpoint
|
22
|
+
insert_into_main unless mounted_routes_exist?
|
23
|
+
insert_rest_entities unless entities_exist?
|
24
|
+
template_rspec unless rspec_exist?
|
25
|
+
routes_exist? ? insert_rest_routes : template_rest_routes
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def create_rest_endpoint
|
30
|
+
attributes_for_params
|
31
|
+
|
32
|
+
template "rest/rest_endpoint.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/resources/#{name.underscore.pluralize}.rb"
|
33
|
+
|
34
|
+
inside "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/resources/" do
|
35
|
+
gsub_file("#{name.underscore.pluralize}.rb", /.*?remove.*\r?\n/, "")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def insert_into_main
|
40
|
+
insert_into_file "app/#{GrapeResource.directory}/main.rb", " mount API::V1::#{name.camelize.pluralize}::Routes\n", before: " #{GrapeResource.entry_point_routes} -- DONT REMOVE THIS LINE"
|
41
|
+
end
|
42
|
+
|
43
|
+
def insert_rest_entities
|
44
|
+
attributes_for_params
|
45
|
+
|
46
|
+
template "entities.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/entities/#{name.underscore.singularize}.rb"
|
47
|
+
|
48
|
+
inside "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/entities/" do
|
49
|
+
gsub_file("#{name.underscore.singularize}.rb", /.*?remove.*\r?\n/, "")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def template_rspec
|
54
|
+
template "specs.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/spec/#{name.underscore.pluralize}_spec.rb"
|
55
|
+
end
|
56
|
+
|
57
|
+
def insert_rest_routes
|
58
|
+
insert_into_file "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/routes.rb", " mount #{GrapeResource.class_name_prefix}::#{name.camelize.pluralize}::Resources::#{name.camelize.pluralize}\n", before: " #{GrapeResource.entry_point_routes} -- DONT REMOVE THIS LINE\n" unless mount_code_exist?
|
59
|
+
end
|
60
|
+
|
61
|
+
def template_rest_routes
|
62
|
+
template "routes.rb.erb", "app/#{GrapeResource.directory}/#{name.underscore.pluralize}/routes.rb"
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -4,4 +4,11 @@ GrapeResource.setup do |config|
|
|
4
4
|
|
5
5
|
# Class name prefix
|
6
6
|
config.class_name_prefix = "API::V1"
|
7
|
-
|
7
|
+
|
8
|
+
# Entry point routes
|
9
|
+
config.entry_point_routes = "# Routes entry point"
|
10
|
+
|
11
|
+
# Formatter
|
12
|
+
config.success_formatter = "formatter :json, ::API::SuccessFormatter"
|
13
|
+
config.error_formatter = "error_formatter :json, ::API::ErrorFormatter"
|
14
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Resources::<%= name.camelize.singularize %> < <%= GrapeResource.class_name_prefix %>::ApiResource
|
2
|
+
helpers <%= GrapeResource.class_name_prefix %>::Helpers
|
3
|
+
|
4
|
+
resource "<%= name.underscore.singularize %>" do
|
5
|
+
|
6
|
+
<% if @default_endpoint.present? %>remove
|
7
|
+
<% @default_endpoint.each do |endpoint_name| %>remove
|
8
|
+
# Default Collection method
|
9
|
+
desc "Get <%= endpoint_name.underscore %>"
|
10
|
+
paginate per_page: Pagy::VARS[:items], max_per_page: Pagy::VARS[:max_per_page]
|
11
|
+
get "/<%= endpoint_name %>" do
|
12
|
+
results = <%= name.camelize.singularize %>.all
|
13
|
+
resources = paginate(results)
|
14
|
+
present_metas resources
|
15
|
+
present :<%= name.camelize.singularize %>, resources, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
16
|
+
end
|
17
|
+
|
18
|
+
<% end %>remove
|
19
|
+
<% end %>remove
|
20
|
+
<% if @collection.any? %>remove
|
21
|
+
<% @collection.each do |k, v| %>remove
|
22
|
+
# Collection method
|
23
|
+
desc "Get <%= k.underscore %>"
|
24
|
+
paginate per_page: Pagy::VARS[:items], max_per_page: Pagy::VARS[:max_per_page]
|
25
|
+
get "/<%= k.downcase %>" do
|
26
|
+
results = <%= name.camelize.singularize %>.<%= k.downcase %>
|
27
|
+
resources = paginate(results)
|
28
|
+
present_metas resources
|
29
|
+
present :<%= name.camelize.singularize %>, resources, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
30
|
+
end
|
31
|
+
|
32
|
+
<% end %>remove
|
33
|
+
<% end %>remove
|
34
|
+
<% if @member.any? %>remove
|
35
|
+
<% @member.each do |k, v| %>remove
|
36
|
+
# Member method
|
37
|
+
desc "Get <%= k.underscore %>"
|
38
|
+
params do
|
39
|
+
requires :id, type: String
|
40
|
+
end
|
41
|
+
get "/:id/<%= k.downcase %>" do
|
42
|
+
results = <%= name.camelize.singularize %>.find(params.id)
|
43
|
+
present :<%= name.camelize.singularize %>, results, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
44
|
+
end
|
45
|
+
|
46
|
+
<% end %>remove
|
47
|
+
<% end %>remove
|
48
|
+
<% if @post.present? %>remove
|
49
|
+
<% @post.each do |k, v| %>remove
|
50
|
+
desc "Create"
|
51
|
+
params do
|
52
|
+
# requires :your_params, type: [eg: String, Integer, Array]
|
53
|
+
end
|
54
|
+
post "/<%= k.downcase %>" do
|
55
|
+
# present :<%= name.capitalize.singularize %>, results, with: <%= GrapeResource.class_name_prefix %>::<%= name.capitalize.singularize %>::Entities::<%= name.capitalize.singularize %>
|
56
|
+
end
|
57
|
+
|
58
|
+
<% end %>remove
|
59
|
+
<% end %>remove
|
60
|
+
<% if @put.present? %>remove
|
61
|
+
<% @put.each do |k, v| %>remove
|
62
|
+
desc "Update"
|
63
|
+
params do
|
64
|
+
requires :id, type: String
|
65
|
+
# requires :your_params, type: [eg: String, Integer, Array]
|
66
|
+
end
|
67
|
+
put "/:id/<%= k.downcase %>" do
|
68
|
+
error!("Can't find id #{params.id}", 422) unless <%= name.capitalize.singularize %>.all.pluck(:id).include?(params.id)
|
69
|
+
# present :<%= name.capitalize.singularize %>, results, with: <%= GrapeResource.class_name_prefix %>::<%= name.capitalize.singularize %>::Entities::<%= name.capitalize.singularize %>
|
70
|
+
end
|
71
|
+
|
72
|
+
<% end %>remove
|
73
|
+
<% end %>remove
|
74
|
+
<% if @delete.present? %>remove
|
75
|
+
<% @delete.each do |k, v| %>remove
|
76
|
+
desc "Delete"
|
77
|
+
params do
|
78
|
+
requires :id, type: String
|
79
|
+
end
|
80
|
+
delete "/:id/<%= k.downcase %>" do
|
81
|
+
error!("Can't find id #{params.id}", 422) unless <%= name.camelize.singularize %>.all.pluck(:id).include?(params.id)
|
82
|
+
q = <%= name.camelize.singularize %>.find params.id
|
83
|
+
q.destroy!
|
84
|
+
success = "success deleted data with id #{params.id}"
|
85
|
+
present :status, success
|
86
|
+
end
|
87
|
+
<% end %>remove
|
88
|
+
<% end %>remove
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
class <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Resources::<%= name.camelize.pluralize %> < <%= GrapeResource.class_name_prefix %>::ApiResource
|
2
|
+
helpers <%= GrapeResource.class_name_prefix %>::Helpers
|
3
|
+
|
4
|
+
resource "<%= name.underscore.pluralize %>" do
|
5
|
+
|
6
|
+
desc "Get all <%= name.underscore.pluralize %>"
|
7
|
+
paginate per_page: Pagy::VARS[:items], max_per_page: Pagy::VARS[:max_per_page]
|
8
|
+
get "/" do
|
9
|
+
results = <%= name.camelize.singularize %>.all
|
10
|
+
resources = paginate(results)
|
11
|
+
present_metas resources
|
12
|
+
present :<%= name.underscore %>, resources, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Get <%= name.underscore.singularize %> by id"
|
16
|
+
params do
|
17
|
+
requires :id, type: String
|
18
|
+
end
|
19
|
+
get "/:id" do
|
20
|
+
results = <%= name.camelize.singularize %>.find(params.id)
|
21
|
+
present :<%= name.underscore %>, results, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Create"
|
25
|
+
params do
|
26
|
+
<% @entities.each do |k, v| %>remove
|
27
|
+
optional :<%= k %>, type: <%= v %>
|
28
|
+
<% end %>remove
|
29
|
+
end
|
30
|
+
post "/" do
|
31
|
+
p = <%= name.camelize.singularize %>.new <%= name.underscore.singularize %>_params
|
32
|
+
results = p.save!
|
33
|
+
present :status, results
|
34
|
+
present :<%= name.underscore %>, p, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Update"
|
38
|
+
params do
|
39
|
+
requires :id, type: String
|
40
|
+
<% @entities.each do |k, v| %>remove
|
41
|
+
optional :<%= k %>, type: <%= v %>
|
42
|
+
<% end %>remove
|
43
|
+
end
|
44
|
+
put "/" do
|
45
|
+
p = <%= name.camelize.singularize %>.find(params.id)
|
46
|
+
p.update <%= name.underscore.singularize %>_params
|
47
|
+
present :<%= name.underscore %>, p, with: <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %>
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "Delete"
|
51
|
+
params do
|
52
|
+
requires :id, type: String
|
53
|
+
end
|
54
|
+
delete "/" do
|
55
|
+
q = <%= name.camelize.singularize %>.find params.id
|
56
|
+
q.destroy!
|
57
|
+
success = "Success deleted data with id #{params.id}"
|
58
|
+
present :status, success
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
helpers do
|
64
|
+
def <%= name.underscore.singularize %>_params
|
65
|
+
ActionController::Parameters.new(params).permit(<%= @entities.keys.map { |a| a.to_sym } %>)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module API
|
2
|
+
module V1
|
3
|
+
module <%= name.camelize.pluralize %>
|
4
|
+
class Routes < Grape::API
|
5
|
+
# Format response
|
6
|
+
<%= GrapeResource.success_formatter %>
|
7
|
+
<%= GrapeResource.error_formatter %>
|
8
|
+
|
9
|
+
mount <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Resources::<%= @name_of_class %>
|
10
|
+
<%= GrapeResource.entry_point_routes %> -- DONT REMOVE THIS LINE
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/grape_resource.rb
CHANGED
@@ -8,4 +8,7 @@ module GrapeResource
|
|
8
8
|
|
9
9
|
define_setting :directory, "controllers/API/v1/"
|
10
10
|
define_setting :class_name_prefix, "API::V1"
|
11
|
+
define_setting :entry_point_routes, "# Routes entry point"
|
12
|
+
define_setting :success_formatter, "formatter :json, ::API::SuccessFormatter"
|
13
|
+
define_setting :error_formatter, "error_formatter :json, ::API::ErrorFormatter"
|
11
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yunan Helmy
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-07-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -88,8 +88,16 @@ files:
|
|
88
88
|
- bin/console
|
89
89
|
- bin/setup
|
90
90
|
- grape_resource.gemspec
|
91
|
+
- lib/generators/grape_resource/generator_helpers.rb
|
91
92
|
- lib/generators/grape_resource/install_generator.rb
|
93
|
+
- lib/generators/grape_resource/namespace_generator.rb
|
94
|
+
- lib/generators/grape_resource/rest_generator.rb
|
95
|
+
- lib/generators/templates/entities.rb.erb
|
92
96
|
- lib/generators/templates/initializer.rb
|
97
|
+
- lib/generators/templates/namespace/namespace_endpoint.rb.erb
|
98
|
+
- lib/generators/templates/rest/rest_endpoint.rb.erb
|
99
|
+
- lib/generators/templates/routes.rb.erb
|
100
|
+
- lib/generators/templates/specs.rb.erb
|
93
101
|
- lib/grape_resource.rb
|
94
102
|
- lib/grape_resource/configuration.rb
|
95
103
|
- lib/grape_resource/version.rb
|