grape_resource 0.1.3 → 0.1.5

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: 5785fa70d230cc60d30b9697296ccd0cb5a1a0ee43258345c3ba5eef5a5e9878
4
- data.tar.gz: 14adaeb5c8107575411ac066e1e983f4ba1db57804268c671a9ae26a042f61f9
3
+ metadata.gz: 18a0f9753a02d378d8f4f1cd7ccddb48952958b56a7bfef8526b2bc8e528d337
4
+ data.tar.gz: a2e8531e0149e10b7864fa5aad490f10c8f399df7c13d3bf313eac6a4d7b8d85
5
5
  SHA512:
6
- metadata.gz: 655a039abb684839b9ad128d75c153e3a8116141456a6aa1ae39146c40f650dd8f41eb5bb19f1c3833c0731d332661530b4c2207bf001534b7cbca785b485de1
7
- data.tar.gz: caa522101776ec36d70f574c84bd7318320605c59cde01cb951bb8da39bf6997c4357c3afb022bd0a147fc7f9fbb935b02ec80e7d95ab0b29e8613a9d98a0965
6
+ metadata.gz: f9a52aa191ddab0b319284b0028c8f381015ec2dfed5d8c4d36070972451422882897e32eab10e9b1bbe8a6c5092148070467b29a252b077afbba3e864302738
7
+ data.tar.gz: 126ba5569261901342908c42066b86b89d8358fa0fb81b3e1159f20ce4baca8de3a6ac475fb315cf18a6b32ca281f926bc79e514b588c49b4dc1ddca1bc55986
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape_resource (0.1.0)
4
+ grape_resource (0.1.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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
@@ -0,0 +1,6 @@
1
+ class <%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Entities::<%= name.camelize.singularize %> < Grape::Entity
2
+ expose :id
3
+ remove<% @entities.each do |k, v| %>
4
+ expose :<%= k %>
5
+ remove<% end %>
6
+ 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
- end
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
@@ -0,0 +1,3 @@
1
+ RSpec.describe "<%= GrapeResource.class_name_prefix %>::<%= name.camelize.pluralize %>::Resource::<%= @name_of_class %>", type: :request do
2
+ pending "add some examples to (or delete) #{__FILE__}"
3
+ end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module GrapeResource
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.5"
3
3
  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.3
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-06-28 00:00:00.000000000 Z
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