api_scaffold 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 322f5e4d40465bca51bdae9c6707795f740b050d7f2b3eff64fb7711484ab2d5
4
+ data.tar.gz: 2797937c81bd0b6b59377dbeee9c56f7183dcf93c50dc27180490f0c42d988ac
5
+ SHA512:
6
+ metadata.gz: 70d5f7938fe118db3fade54e808e6234579af6bba650cece5019571f3a98d502f9339308d8903ed358723650c5c333702721045639ecef0ef87b8978e34ebc68
7
+ data.tar.gz: fef80142a9060a3df04c2f58b56186f27598625d7344f90f4794bfdd04902e912b2b9889d02bff6353a344ec756be35cdbd7f59578ae6212c2bea217ddf52a5d
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.1
5
+ before_install: gem install bundler -v 1.16.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in api_scaffold.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ api_scaffold (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.11.3)
10
+ rake (10.5.0)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ api_scaffold!
17
+ bundler (~> 1.16)
18
+ minitest (~> 5.0)
19
+ rake (~> 10.0)
20
+
21
+ BUNDLED WITH
22
+ 1.16.2
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Stefan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # ApiScaffold
2
+
3
+ A useful Rails API generator for scaffolding. Compatible with :
4
+ - Fast JSON API/Active Model Serializers
5
+ - Rspec/TestUnit/Fixtures/FactoryBot
6
+ - Api Pagination
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'api_scaffold'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install api_scaffold
23
+
24
+ ## Usage
25
+
26
+ Execute this line in your terminal from your rails directory:
27
+
28
+ $ rails g api_scaffold Book title description:text
29
+
30
+ If you wish to specify the api version:
31
+
32
+ $ rails g api_scaffold Book title description:text --api-version=2
33
+
34
+
35
+ ## Contributing
36
+
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/stefatkins/api_scaffold.
38
+
39
+ ## License
40
+
41
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,37 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "api_scaffold/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "api_scaffold"
8
+ spec.version = ApiScaffold::VERSION
9
+ spec.authors = ["Stefan Atkinson"]
10
+ spec.email = ["stefan.atkinson69@gmail.com"]
11
+
12
+ spec.summary = "A gem for scaffolding rails api templates"
13
+ spec.homepage = "https://github.com/stefatkins/api_scaffold"
14
+ spec.license = "MIT"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ # if spec.respond_to?(:metadata)
19
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
+ # else
21
+ # raise "RubyGems 2.0 or newer is required to protect against " \
22
+ # "public gem pushes."
23
+ # end
24
+
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
28
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ spec.add_development_dependency "bundler", "~> 1.16"
35
+ spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_development_dependency "minitest", "~> 5.0"
37
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "api_scaffold"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,5 @@
1
+ require "api_scaffold/version"
2
+
3
+ module ApiScaffold
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,3 @@
1
+ module ApiScaffold
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,55 @@
1
+
2
+ require 'generators/api_scaffold/generator_helpers'
3
+
4
+ module ApiScaffold
5
+ module Generators
6
+ class ApiScaffoldGenerator < Rails::Generators::NamedBase
7
+ include Rails::Generators::ResourceHelpers
8
+ include ApiScaffold::Generators::GeneratorHelpers
9
+ namespace "api_scaffold"
10
+ argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
11
+ attr_accessor :attributes
12
+ class_option :orm
13
+ class_option :api_version, type: :string, default: 1, desc: "api version"
14
+ source_root File.expand_path('../templates', __FILE__)
15
+
16
+ def initialize(args, *options) #:nodoc:
17
+ super
18
+ end
19
+
20
+ hook_for :orm, in: :rails, required: true, as: :model do |model_generator|
21
+ invoke model_generator
22
+ end
23
+
24
+ def create_controller_files
25
+ if gem_available?('fast_jsonapi') || gem_available?('active_model_serializers')
26
+ template "controllers/serializer_controller.rb", File.join("app/controllers/", prefix, "#{controller_file_name}_controller.rb")
27
+ else
28
+ template "controllers/controller.rb", File.join("app/controllers/", prefix, "#{controller_file_name}_controller.rb")
29
+ end
30
+ end
31
+
32
+ def create_controller_test_files
33
+ if test_framework == :rspec
34
+ template "tests/rspec/controller_spec.rb", File.join("spec/controllers", prefix, "#{controller_file_name}_controller_spec.rb")
35
+ else
36
+ template "tests/test_unit/controller_spec.rb", File.join("test/controllers", prefix, "#{controller_file_name}_controller_test.rb")
37
+ end
38
+ end
39
+
40
+ def add_routes
41
+ route "
42
+ scope :api, defaults: { format: :json } do
43
+ namespace :#{prefix} do
44
+ resources :#{controller_name}, except: [:new, :edit]
45
+ end
46
+ end\n"
47
+ end
48
+
49
+ def create_serializer_files
50
+ invoke "serializer" if gem_available?('fast_jsonapi') || gem_available?('active_model_serializers')
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,57 @@
1
+ module ApiScaffold
2
+ module Generators
3
+ module GeneratorHelpers
4
+
5
+ def prefix
6
+ "v#{options[:api_version]}"
7
+ end
8
+
9
+ def prefixed_class_name
10
+ "#{prefix.capitalize}::#{class_name}"
11
+ end
12
+
13
+ def prefixed_controller_class_name
14
+ "#{prefix.capitalize}::#{controller_class_name}"
15
+ end
16
+
17
+ def prefixed_url(resource)
18
+ [prefix, resource, 'url'].join('_')
19
+ end
20
+
21
+ def gem_available?(gem_name)
22
+ Gem::Specification::find_all_by_name(gem_name).any?
23
+ end
24
+
25
+ def test_framework
26
+ Rails.application.config.generators.options[:rails][:test_framework]
27
+ end
28
+
29
+ def fixture_replacement
30
+ Rails.application.config.generators.options[:rails][:fixture_replacement]
31
+ end
32
+
33
+ def fixture_name
34
+ if mountable_engine?
35
+ (namespace_dirs + [table_name]).join("_")
36
+ else
37
+ table_name
38
+ end
39
+ end
40
+
41
+ def attributes_string
42
+ attributes_hash.map { |k, v| "#{k}: #{v}" }.join(", ")
43
+ end
44
+ def attributes_hash
45
+ return {} if attributes_names.empty?
46
+
47
+ attributes_names.map do |name|
48
+ if %w(password password_confirmation).include?(name) && attributes.any?(&:password_digest?)
49
+ ["#{name}", "'secret'"]
50
+ else
51
+ ["#{name}", "@#{singular_table_name}.#{name}"]
52
+ end
53
+ end.sort.to_h
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,54 @@
1
+ <% if namespaced? -%>
2
+ require_dependency "<%= namespaced_path %>/application_controller"
3
+
4
+ <% end -%>
5
+ <% module_namespacing do -%>
6
+ class <%= prefixed_controller_class_name %>Controller < ApplicationController
7
+ before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy]
8
+
9
+ def index
10
+ @<%= plural_table_name %> = <%= 'paginate ' if gem_available?('api-pagination') %><%= orm_class.all(class_name) %>
11
+ render json: <%= "@#{plural_table_name}" %>
12
+ end
13
+
14
+ def show
15
+ render json: <%= "@#{singular_table_name}" %>
16
+ end
17
+
18
+ def create
19
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
20
+
21
+ if @<%= orm_instance.save %>
22
+ render json: <%= "@#{singular_table_name}" %>, status: :created, location: [:<%= prefix %>, <%= "@#{singular_table_name}" %>]
23
+ else
24
+ render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity
25
+ end
26
+ end
27
+
28
+ def update
29
+ if @<%= orm_instance.update("#{singular_table_name}_params") %>
30
+ render json: <%= "@#{singular_table_name}" %>
31
+ else
32
+ render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @<%= orm_instance.destroy %>
38
+ end
39
+
40
+ private
41
+
42
+ def set_<%= singular_table_name %>
43
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
44
+ end
45
+
46
+ def <%= "#{singular_table_name}_params" %>
47
+ <%- if attributes_names.empty? -%>
48
+ params.fetch(:<%= singular_table_name %>, {})
49
+ <%- else -%>
50
+ params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
51
+ <%- end -%>
52
+ end
53
+ end
54
+ <% end -%>
@@ -0,0 +1,54 @@
1
+ <% if namespaced? -%>
2
+ require_dependency "<%= namespaced_path %>/application_controller"
3
+
4
+ <% end -%>
5
+ <% module_namespacing do -%>
6
+ class <%= prefixed_controller_class_name %>Controller < ApplicationController
7
+ before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy]
8
+
9
+ def index
10
+ @<%= plural_table_name %> = <%= 'paginate ' if gem_available?('api-pagination') %><%= orm_class.all(class_name) %>
11
+ render json: <%= class_name %>Serializer.new(<%= "@#{plural_table_name}" %>)
12
+ end
13
+
14
+ def show
15
+ render json: <%= class_name %>Serializer.new(<%= "@#{singular_table_name}" %>)
16
+ end
17
+
18
+ def create
19
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
20
+
21
+ if @<%= orm_instance.save %>
22
+ render json: <%= class_name %>Serializer.new(<%= "@#{singular_table_name}" %>), status: :created, location: [:<%= prefix %>, <%= "@#{singular_table_name}" %>]
23
+ else
24
+ render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity
25
+ end
26
+ end
27
+
28
+ def update
29
+ if @<%= orm_instance.update("#{singular_table_name}_params") %>
30
+ render json: <%= class_name %>Serializer.new(<%= "@#{singular_table_name}" %>)
31
+ else
32
+ render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @<%= orm_instance.destroy %>
38
+ end
39
+
40
+ private
41
+
42
+ def set_<%= singular_table_name %>
43
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
44
+ end
45
+
46
+ def <%= "#{singular_table_name}_params" %>
47
+ <%- if attributes_names.empty? -%>
48
+ params.fetch(:<%= singular_table_name %>, {})
49
+ <%- else -%>
50
+ params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
51
+ <%- end -%>
52
+ end
53
+ end
54
+ <% end -%>
@@ -0,0 +1,157 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+ #
21
+ # Also compared to earlier versions of this generator, there are no longer any
22
+ # expectations of assigns and templates rendered. These features have been
23
+ # removed from Rails core in Rails 5, but can be added back in via the
24
+ # `rails-controller-testing` gem.
25
+
26
+ <% module_namespacing do -%>
27
+ RSpec.describe <%= prefixed_controller_class_name %>Controller, type: :controller do
28
+ # This should return the minimal set of attributes required to create a valid
29
+ # <%= class_name %>. As you add validations to <%= class_name %>, be sure to
30
+ # adjust the attributes here as well.
31
+ let(:valid_attributes) {
32
+ skip("Add a hash of attributes valid for your model")
33
+ }
34
+ let(:invalid_attributes) {
35
+ skip("Add a hash of attributes invalid for your model")
36
+ }
37
+ # This should return the minimal set of values that should be in the session
38
+ # in order to pass any filters (e.g. authentication) defined in
39
+ # <%= controller_class_name %>Controller. Be sure to keep this updated too.
40
+ let(:valid_session) { {} }
41
+
42
+ <% unless options[:singleton] -%>
43
+ describe "GET #index" do
44
+ it "returns a success response" do
45
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
46
+ <% if RUBY_VERSION < '1.9.3' -%>
47
+ get :index, {}, valid_session
48
+ <% else -%>
49
+ get :index, params: {}, session: valid_session
50
+ <% end -%>
51
+ expect(response).to be_successful
52
+ end
53
+ end
54
+
55
+ <% end -%>
56
+ describe "GET #show" do
57
+ it "returns a success response" do
58
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
59
+ <% if RUBY_VERSION < '1.9.3' -%>
60
+ get :show, {:id => <%= file_name %>.to_param}, valid_session
61
+ <% else -%>
62
+ get :show, params: {id: <%= file_name %>.to_param}, session: valid_session
63
+ <% end -%>
64
+ expect(response).to be_successful
65
+ end
66
+ end
67
+
68
+ describe "POST #create" do
69
+ context "with valid params" do
70
+ it "creates a new <%= class_name %>" do
71
+ expect {
72
+ <% if RUBY_VERSION < '1.9.3' -%>
73
+ post :create, {:<%= file_name %> => valid_attributes}, valid_session
74
+ <% else -%>
75
+ post :create, params: {<%= file_name %>: valid_attributes}, session: valid_session
76
+ <% end -%>
77
+ }.to change(<%= class_name %>, :count).by(1)
78
+ end
79
+
80
+ it "renders a JSON response with the new <%= file_name %>" do
81
+ <% if RUBY_VERSION < '1.9.3' -%>
82
+ post :create, {:<%= file_name %> => valid_attributes}, valid_session
83
+ <% else %>
84
+ post :create, params: {<%= file_name %>: valid_attributes}, session: valid_session
85
+ <% end -%>
86
+ expect(response).to have_http_status(:created)
87
+ expect(response.content_type).to eq('application/json')
88
+ expect(response.location).to eq(<%= prefix %>_<%= file_name %>_url(<%= class_name %>.last))
89
+ end
90
+ end
91
+ context "with invalid params" do
92
+ it "renders a JSON response with errors for the new <%= file_name %>" do
93
+ <% if RUBY_VERSION < '1.9.3' -%>
94
+ post :create, {:<%= file_name %> => invalid_attributes}, valid_session
95
+ <% else %>
96
+ post :create, params: {<%= file_name %>: invalid_attributes}, session: valid_session
97
+ <% end -%>
98
+ expect(response).to have_http_status(:unprocessable_entity)
99
+ expect(response.content_type).to eq('application/json')
100
+ end
101
+ end
102
+ end
103
+ describe "PUT #update" do
104
+ context "with valid params" do
105
+ let(:new_attributes) {
106
+ skip("Add a hash of attributes valid for your model")
107
+ }
108
+
109
+ it "updates the requested <%= file_name %>" do
110
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
111
+ <% if RUBY_VERSION < '1.9.3' -%>
112
+ put :update, {:id => <%= file_name %>.to_param, :<%= file_name %> => new_attributes}, valid_session
113
+ <% else -%>
114
+ put :update, params: {id: <%= file_name %>.to_param, <%= file_name %>: new_attributes}, session: valid_session
115
+ <% end -%>
116
+ <%= file_name %>.reload
117
+ skip("Add assertions for updated state")
118
+ end
119
+ it "renders a JSON response with the <%= file_name %>" do
120
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
121
+ <% if RUBY_VERSION < '1.9.3' -%>
122
+ put :update, {:id => <%= file_name %>.to_param, :<%= file_name %> => valid_attributes}, valid_session
123
+ <% else %>
124
+ put :update, params: {id: <%= file_name %>.to_param, <%= file_name %>: valid_attributes}, session: valid_session
125
+ <% end -%>
126
+ expect(response).to have_http_status(:ok)
127
+ expect(response.content_type).to eq('application/json')
128
+ end
129
+ end
130
+ context "with invalid params" do
131
+ it "renders a JSON response with errors for the <%= file_name %>" do
132
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
133
+ <% if RUBY_VERSION < '1.9.3' -%>
134
+ put :update, {:id => <%= file_name %>.to_param, :<%= file_name %> => invalid_attributes}, valid_session
135
+ <% else %>
136
+ put :update, params: {id: <%= file_name %>.to_param, <%= file_name %>: invalid_attributes}, session: valid_session
137
+ <% end -%>
138
+ expect(response).to have_http_status(:unprocessable_entity)
139
+ expect(response.content_type).to eq('application/json')
140
+ end
141
+ end
142
+ end
143
+
144
+ describe "DELETE #destroy" do
145
+ it "destroys the requested <%= file_name %>" do
146
+ <%= file_name %> = <%= class_name %>.create! valid_attributes
147
+ expect {
148
+ <% if RUBY_VERSION < '1.9.3' -%>
149
+ delete :destroy, {:id => <%= file_name %>.to_param}, valid_session
150
+ <% else -%>
151
+ delete :destroy, params: {id: <%= file_name %>.to_param}, session: valid_session
152
+ <% end -%>
153
+ }.to change(<%= class_name %>, :count).by(-1)
154
+ end
155
+ end
156
+ end
157
+ <% end -%>
@@ -0,0 +1,44 @@
1
+ require 'test_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ class <%= prefixed_controller_class_name %>ControllerTest < ActionDispatch::IntegrationTest
5
+ <%- if mountable_engine? -%>
6
+ include Engine.routes.url_helpers
7
+
8
+ <%- end -%>
9
+ setup do
10
+ @<%= singular_table_name %> = <%= fixture_name %>(:one)
11
+ end
12
+
13
+ test "should get index" do
14
+ get <%= [prefix, index_helper].join('_') %>_url, as: :json
15
+ assert_response :success
16
+ end
17
+
18
+ test "should create <%= singular_table_name %>" do
19
+ assert_difference('<%= class_name %>.count') do
20
+ post <%= [prefix, index_helper].join('_') %>_url, params: { <%= "#{singular_table_name}: { #{attributes_string} }" %> }, as: :json
21
+ end
22
+
23
+ assert_response 201
24
+ end
25
+
26
+ test "should show <%= singular_table_name %>" do
27
+ get <%= [prefix, show_helper].join('_') %>, as: :json
28
+ assert_response :success
29
+ end
30
+
31
+ test "should update <%= singular_table_name %>" do
32
+ patch <%= [prefix, show_helper].join('_') %>, params: { <%= "#{singular_table_name}: { #{attributes_string} }" %> }, as: :json
33
+ assert_response 200
34
+ end
35
+
36
+ test "should destroy <%= singular_table_name %>" do
37
+ assert_difference('<%= class_name %>.count', -1) do
38
+ delete <%= [prefix, show_helper].join('_') %>, as: :json
39
+ end
40
+
41
+ assert_response 204
42
+ end
43
+ end
44
+ <% end -%>
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: api_scaffold
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Atkinson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description:
56
+ email:
57
+ - stefan.atkinson69@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - api_scaffold.gemspec
70
+ - bin/console
71
+ - bin/setup
72
+ - lib/api_scaffold.rb
73
+ - lib/api_scaffold/version.rb
74
+ - lib/generators/api_scaffold/api_scaffold_generator.rb
75
+ - lib/generators/api_scaffold/generator_helpers.rb
76
+ - lib/generators/api_scaffold/templates/controllers/controller.rb
77
+ - lib/generators/api_scaffold/templates/controllers/serializer_controller.rb
78
+ - lib/generators/api_scaffold/templates/tests/rspec/controller_spec.rb
79
+ - lib/generators/api_scaffold/templates/tests/test_unit/controller_spec.rb
80
+ homepage: https://github.com/stefatkins/api_scaffold
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.7.6
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: A gem for scaffolding rails api templates
104
+ test_files: []