json_voorhees 0.0.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +75 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/json_voorhees/application.js +13 -0
- data/app/assets/stylesheets/json_voorhees/application.css +15 -0
- data/app/controllers/json_voorhees/application_controller.rb +4 -0
- data/app/helpers/json_voorhees/application_helper.rb +4 -0
- data/app/views/layouts/json_voorhees/application.html.erb +14 -0
- data/config/routes.rb +2 -0
- data/lib/generators/json_voorhees/app_make_authorizations/USAGE +10 -0
- data/lib/generators/json_voorhees/app_make_authorizations/app_make_authorizations_generator.rb +39 -0
- data/lib/generators/json_voorhees/app_make_authorizations/templates/auth_file.rb.erb +51 -0
- data/lib/generators/json_voorhees/app_make_tests/USAGE +9 -0
- data/lib/generators/json_voorhees/app_make_tests/app_make_tests_generator.rb +51 -0
- data/lib/generators/json_voorhees/app_make_tests/templates/factory.rb.erb +9 -0
- data/lib/generators/json_voorhees/app_make_tests/templates/model.rb.erb +30 -0
- data/lib/generators/json_voorhees/app_make_tests/templates/request.rb.erb +102 -0
- data/lib/generators/json_voorhees/app_make_tests/templates/routing.rb.erb +47 -0
- data/lib/generators/json_voorhees/engine_create_controller/USAGE +12 -0
- data/lib/generators/json_voorhees/engine_create_controller/engine_create_controller_generator.rb +40 -0
- data/lib/generators/json_voorhees/engine_create_controller/templates/controller_template.rb.erb +98 -0
- data/lib/generators/json_voorhees/engine_create_controller/templates/no_auth_controller_template.rb.erb +61 -0
- data/lib/generators/json_voorhees/engine_create_serializer/USAGE +9 -0
- data/lib/generators/json_voorhees/engine_create_serializer/engine_create_serializer_generator.rb +34 -0
- data/lib/generators/json_voorhees/engine_create_serializer/templates/serializer.rb.erb +23 -0
- data/lib/generators/json_voorhees/setup_app/USAGE +9 -0
- data/lib/generators/json_voorhees/setup_app/setup_app_generator.rb +207 -0
- data/lib/generators/json_voorhees/setup_app/templates/api_controller_no_arcadex.rb +2 -0
- data/lib/generators/json_voorhees/setup_app/templates/api_controller_with_arcadex.rb +26 -0
- data/lib/generators/json_voorhees/setup_app/templates/app_index_controller.rb +4 -0
- data/lib/generators/json_voorhees/setup_app/templates/hidden_rspec.rb +3 -0
- data/lib/generators/json_voorhees/setup_app/templates/json_helpers.rb +7 -0
- data/lib/generators/json_voorhees/setup_app/templates/rspec_factory_girl.rb +16 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/include_authorization.rb +3 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/specs/factory_girl.rb +14 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/specs/model_specs.rb +59 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/specs/request_specs.rb +154 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/specs/route_specs.rb +77 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/user_authorizations.rb +82 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/user_controller.rb +124 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/user_model.rb +26 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/user_routes.rb +24 -0
- data/lib/generators/json_voorhees/setup_app/templates/user/user_serializer.rb +39 -0
- data/lib/generators/json_voorhees/setup_app/templates/views/admin_no_user +6 -0
- data/lib/generators/json_voorhees/setup_app/templates/views/admin_with_user +9 -0
- data/lib/generators/json_voorhees/setup_app/templates/views/app +0 -0
- data/lib/generators/json_voorhees/setup_app/templates/views/app_index +9 -0
- data/lib/generators/json_voorhees/setup_app/templates/views/application +19 -0
- data/lib/generators/json_voorhees/setup_engine/USAGE +8 -0
- data/lib/generators/json_voorhees/setup_engine/setup_engine_generator.rb +81 -0
- data/lib/generators/json_voorhees/setup_engine/templates/api_controller.rb.erb +5 -0
- data/lib/generators/json_voorhees/setup_engine/templates/application_controller.rb.erb +4 -0
- data/lib/json_voorhees/engine.rb +5 -0
- data/lib/json_voorhees/version.rb +3 -0
- data/lib/json_voorhees.rb +4 -0
- data/lib/tasks/json_voorhees_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +82 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/log/development.log +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/json_voorhees_test.rb +7 -0
- data/test/lib/generators/json_voorhees/engine_serializer_generator_test.rb +16 -0
- data/test/test_app/Gemfile +42 -0
- data/test/test_app/Gemfile.lock +132 -0
- data/test/test_app/README.rdoc +28 -0
- data/test/test_app/Rakefile +6 -0
- data/test/test_app/app/assets/javascripts/application.js +16 -0
- data/test/test_app/app/assets/stylesheets/application.css +15 -0
- data/test/test_app/app/controllers/application_controller.rb +5 -0
- data/test/test_app/app/helpers/application_helper.rb +2 -0
- data/test/test_app/app/views/layouts/application.html.erb +14 -0
- data/test/test_app/bin/bundle +3 -0
- data/test/test_app/bin/rails +8 -0
- data/test/test_app/bin/rake +8 -0
- data/test/test_app/bin/spring +18 -0
- data/test/test_app/config/application.rb +23 -0
- data/test/test_app/config/boot.rb +4 -0
- data/test/test_app/config/database.yml +25 -0
- data/test/test_app/config/environment.rb +5 -0
- data/test/test_app/config/environments/development.rb +37 -0
- data/test/test_app/config/environments/production.rb +82 -0
- data/test/test_app/config/environments/test.rb +39 -0
- data/test/test_app/config/initializers/assets.rb +8 -0
- data/test/test_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/test_app/config/initializers/cookies_serializer.rb +3 -0
- data/test/test_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/test_app/config/initializers/inflections.rb +16 -0
- data/test/test_app/config/initializers/mime_types.rb +4 -0
- data/test/test_app/config/initializers/session_store.rb +3 -0
- data/test/test_app/config/initializers/wrap_parameters.rb +14 -0
- data/test/test_app/config/locales/en.yml +23 -0
- data/test/test_app/config/routes.rb +56 -0
- data/test/test_app/config/secrets.yml +22 -0
- data/test/test_app/config.ru +4 -0
- data/test/test_app/db/development.sqlite3 +0 -0
- data/test/test_app/db/schema.rb +16 -0
- data/test/test_app/db/seeds.rb +7 -0
- data/test/test_app/log/development.log +1517 -0
- data/test/test_app/log/production.log +68 -0
- data/test/test_app/log/test.log +10482 -0
- data/test/test_app/public/404.html +67 -0
- data/test/test_app/public/422.html +67 -0
- data/test/test_app/public/500.html +66 -0
- data/test/test_app/public/favicon.ico +0 -0
- data/test/test_app/public/robots.txt +5 -0
- data/test/test_app/test/test_helper.rb +10 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/055b16b21481c5603eab51f88bce614e +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/2c8821d40541c62f65d0a77d6d737a59 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/381d73d62d2e34310ff5e02a60e2e6b5 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/6cfd8687a851913292b638daebcf0c3b +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/72539eb249ff535aa9679adf93578a3a +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/7288979cc8fd497d915d19732930197f +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/af6f30b38676f9ac87b6c15260d702d6 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/c1e06c98ebb85a26421cf34d75787365 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/c636869dd0df678775f14b9e86cb147d +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/test_app/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/test_engine/Gemfile +17 -0
- data/test/test_engine/Gemfile.lock +128 -0
- data/test/test_engine/MIT-LICENSE +20 -0
- data/test/test_engine/README.md +1 -0
- data/test/test_engine/Rakefile +34 -0
- data/test/test_engine/app/assets/javascripts/test_engine/application.js +13 -0
- data/test/test_engine/app/assets/stylesheets/test_engine/application.css +15 -0
- data/test/test_engine/app/controllers/test_engine/api/v1/application_controller.rb +5 -0
- data/test/test_engine/app/controllers/test_engine/application_controller.rb +4 -0
- data/test/test_engine/app/helpers/test_engine/application_helper.rb +4 -0
- data/test/test_engine/app/views/layouts/test_engine/default/application.html.erb +14 -0
- data/test/test_engine/bin/rails +12 -0
- data/test/test_engine/config/routes.rb +23 -0
- data/test/test_engine/lib/tasks/test_engine_tasks.rake +4 -0
- data/test/test_engine/lib/test_engine/engine.rb +5 -0
- data/test/test_engine/lib/test_engine/version.rb +3 -0
- data/test/test_engine/lib/test_engine.rb +4 -0
- data/test/test_engine/test/dummy/README.rdoc +28 -0
- data/test/test_engine/test/dummy/Rakefile +6 -0
- data/test/test_engine/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/test_engine/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/test_engine/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/test_engine/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/test_engine/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/test_engine/test/dummy/bin/bundle +3 -0
- data/test/test_engine/test/dummy/bin/rails +4 -0
- data/test/test_engine/test/dummy/bin/rake +4 -0
- data/test/test_engine/test/dummy/config/application.rb +23 -0
- data/test/test_engine/test/dummy/config/boot.rb +5 -0
- data/test/test_engine/test/dummy/config/database.yml +25 -0
- data/test/test_engine/test/dummy/config/environment.rb +5 -0
- data/test/test_engine/test/dummy/config/environments/development.rb +37 -0
- data/test/test_engine/test/dummy/config/environments/production.rb +82 -0
- data/test/test_engine/test/dummy/config/environments/test.rb +39 -0
- data/test/test_engine/test/dummy/config/initializers/assets.rb +8 -0
- data/test/test_engine/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/test_engine/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/test_engine/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/test_engine/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/test_engine/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/test_engine/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/test_engine/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/test_engine/test/dummy/config/locales/en.yml +23 -0
- data/test/test_engine/test/dummy/config/routes.rb +4 -0
- data/test/test_engine/test/dummy/config/secrets.yml +22 -0
- data/test/test_engine/test/dummy/config.ru +4 -0
- data/test/test_engine/test/dummy/log/development.log +0 -0
- data/test/test_engine/test/dummy/public/404.html +67 -0
- data/test/test_engine/test/dummy/public/422.html +67 -0
- data/test/test_engine/test/dummy/public/500.html +66 -0
- data/test/test_engine/test/dummy/public/favicon.ico +0 -0
- data/test/test_engine/test/integration/navigation_test.rb +10 -0
- data/test/test_engine/test/test_engine_test.rb +7 -0
- data/test/test_engine/test/test_helper.rb +15 -0
- data/test/test_engine/test_engine.gemspec +31 -0
- data/test/test_helper.rb +15 -0
- metadata +434 -0
data/lib/generators/json_voorhees/engine_create_controller/templates/controller_template.rb.erb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require_dependency "<%= module_snake %>/api/v<%= api_version %>/application_controller"
|
2
|
+
require 'authorization'
|
3
|
+
|
4
|
+
module <%= module_camel %>
|
5
|
+
class Api::V1::<%= resource_camel.pluralize %>Controller < Api::V1::ApplicationController
|
6
|
+
before_action :set_<%= resource_singular %>, only: [:show, :update, :destroy]
|
7
|
+
before_action :index_authorize, only: [:index]
|
8
|
+
before_action :show_authorize, only: [:show]
|
9
|
+
before_action :create_authorize, only: [:create]
|
10
|
+
before_action :update_authorize, only: [:update]
|
11
|
+
before_action :destroy_authorize, only: [:destroy]
|
12
|
+
|
13
|
+
# GET /api/1/<%= resource_plural %>
|
14
|
+
def index
|
15
|
+
@<%= resource_plural %> = ::<%= module_camel %>::<%= resource_camel %>.all
|
16
|
+
render json: @<%= resource_plural %>
|
17
|
+
end
|
18
|
+
|
19
|
+
# GET /api/1/<%= resource_plural %>/1
|
20
|
+
def show
|
21
|
+
render json: @<%= resource_singular %>
|
22
|
+
end
|
23
|
+
|
24
|
+
# POST /api/1/<%= resource_plural %>
|
25
|
+
def create
|
26
|
+
@<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.new(<%= resource_singular %>_params)
|
27
|
+
if @<%= resource_singular %>.save
|
28
|
+
render json: @<%= resource_singular %>
|
29
|
+
else
|
30
|
+
render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# PATCH/PUT /api/1/<%= resource_plural %>/1
|
35
|
+
def update
|
36
|
+
if @<%= resource_singular %>.update(<%= resource_singular %>_params)
|
37
|
+
render json: @<%= resource_singular %>
|
38
|
+
else
|
39
|
+
render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# DELETE /api/1/<%= resource_plural %>/1
|
44
|
+
def destroy
|
45
|
+
@<%= resource_singular %>.destroy
|
46
|
+
render json: {}
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Use callbacks to share common setup or constraints between actions.
|
52
|
+
|
53
|
+
def set_<%= resource_singular %>
|
54
|
+
@<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.find_by_id(params[:id])
|
55
|
+
if @<%= resource_singular %>.nil?
|
56
|
+
render :json => {errors: "<%= resource_camel %> was not found"}, status: :not_found
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Only allow a trusted parameter "white list" through.
|
61
|
+
|
62
|
+
def <%= resource_singular %>_params
|
63
|
+
params.require(:<%= resource_singular %>).permit(:params_here)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Authorizations below here
|
67
|
+
|
68
|
+
def index_authorize
|
69
|
+
if !::Authorization::<%= module_camel %>::<%= resource_camel %>.index?(current_user)
|
70
|
+
render :json => {errors: "User is not authorized for this action"}, status: :forbidden
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def show_authorize
|
75
|
+
if !::Authorization::<%= module_camel %>::<%= resource_camel %>.show?(@<%= resource_singular %>,current_user)
|
76
|
+
render :json => {errors: "User is not authorized for this action"}, status: :forbidden
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def create_authorize
|
81
|
+
if !::Authorization::<%= module_camel %>::<%= resource_camel %>.create?(current_user)
|
82
|
+
render :json => {errors: "User is not authorized for this action"}, status: :forbidden
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def update_authorize
|
87
|
+
if !::Authorization::<%= module_camel %>::<%= resource_camel %>.update?(@<%= resource_singular %>,current_user)
|
88
|
+
render :json => {errors: "User is not authorized for this action"}, status: :forbidden
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def destroy_authorize
|
93
|
+
if !::Authorization::<%= module_camel %>::<%= resource_camel %>.destroy?(@<%= resource_singular %>,current_user)
|
94
|
+
render :json => {errors: "User is not authorized for this action"}, status: :forbidden
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require_dependency "<%= module_snake %>/api/v<%= api_version %>/application_controller"
|
2
|
+
require 'authorization'
|
3
|
+
|
4
|
+
module <%= module_camel %>
|
5
|
+
class Api::V1::<%= resource_camel.pluralize %>Controller < Api::V1::ApplicationController
|
6
|
+
before_action :set_<%= resource_singular %>, only: [:show, :update, :destroy]
|
7
|
+
|
8
|
+
# GET /api/1/<%= resource_plural %>
|
9
|
+
def index
|
10
|
+
@<%= resource_plural %> = ::<%= module_camel %>::<%= resource_camel %>.all
|
11
|
+
render json: @<%= resource_plural %>
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /api/1/<%= resource_plural %>/1
|
15
|
+
def show
|
16
|
+
render json: @<%= resource_singular %>
|
17
|
+
end
|
18
|
+
|
19
|
+
# POST /api/1/<%= resource_plural %>
|
20
|
+
def create
|
21
|
+
@<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.new(<%= resource_singular %>_params)
|
22
|
+
if @<%= resource_singular %>.save
|
23
|
+
render json: @<%= resource_singular %>
|
24
|
+
else
|
25
|
+
render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# PATCH/PUT /api/1/<%= resource_plural %>/1
|
30
|
+
def update
|
31
|
+
if @<%= resource_singular %>.update(<%= resource_singular %>_params)
|
32
|
+
render json: @<%= resource_singular %>
|
33
|
+
else
|
34
|
+
render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# DELETE /api/1/<%= resource_plural %>/1
|
39
|
+
def destroy
|
40
|
+
@<%= resource_singular %>.destroy
|
41
|
+
render json: {}
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# Use callbacks to share common setup or constraints between actions.
|
47
|
+
|
48
|
+
def set_<%= resource_singular %>
|
49
|
+
@<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.find_by_id(params[:id])
|
50
|
+
if @<%= resource_singular %>.nil?
|
51
|
+
render :json => {errors: "<%= resource_camel %> was not found"}, status: :not_found
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Only allow a trusted parameter "white list" through.
|
56
|
+
|
57
|
+
def <%= resource_singular %>_params
|
58
|
+
params.require(:<%= resource_singular %>).permit(:params_here)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Description:
|
2
|
+
Create the boilerplate serialization code that hooks into the authorization gem.
|
3
|
+
It needs to match a resource. Run this generator inside an engine.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
rails g json_voorhees:engine_create_serializer People User
|
7
|
+
|
8
|
+
This will create:
|
9
|
+
A file in app/serializers
|
data/lib/generators/json_voorhees/engine_create_serializer/engine_create_serializer_generator.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module JsonVoorhees
|
2
|
+
class EngineCreateSerializerGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
argument :module_name, :type => :string
|
5
|
+
argument :resource_name, :type => :string
|
6
|
+
|
7
|
+
def sprint
|
8
|
+
template "serializer.rb.erb", "app/serializers/#{module_name.underscore}/#{resource_singular}_serializer.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def resource_singular
|
14
|
+
resource_name.underscore.singularize
|
15
|
+
end
|
16
|
+
|
17
|
+
def resource_plural
|
18
|
+
resource_name.underscore.pluralize
|
19
|
+
end
|
20
|
+
|
21
|
+
def resource_camel
|
22
|
+
resource_name.camelize.singularize
|
23
|
+
end
|
24
|
+
|
25
|
+
def module_camel
|
26
|
+
module_name.camelize
|
27
|
+
end
|
28
|
+
|
29
|
+
def module_snake
|
30
|
+
module_name.underscore.downcase
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'authorization'
|
2
|
+
|
3
|
+
module <%= module_camel %>
|
4
|
+
class <%= resource_camel %>Serializer < ActiveModel::Serializer
|
5
|
+
embed :ids, include: true
|
6
|
+
|
7
|
+
attributes :id
|
8
|
+
attributes :created_at
|
9
|
+
attributes :updated_at
|
10
|
+
#has_one :bulletin
|
11
|
+
#has_many :posts
|
12
|
+
|
13
|
+
def include_id?
|
14
|
+
return ::Authorization::<%= module_camel %>::<%= resource_camel %>.include_id?(current_user,object,@options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def include_associations!
|
18
|
+
#include! :bulletin if ::Authorization::<%= module_camel %>::<%= resource_camel %>.include_bulletin?(current_user,object,@options)
|
19
|
+
#include! :posts if ::Authorization::<%= module_camel %>::<%= resource_camel %>.include_posts?(current_user,object,@options)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Description:
|
2
|
+
Run this after your main_app is created. It will set the layout of your application
|
3
|
+
as well as add and setup commonly used gems. It will even add a user class.
|
4
|
+
|
5
|
+
Example:
|
6
|
+
rails g json_voorhees:setup_app
|
7
|
+
|
8
|
+
This will create:
|
9
|
+
A lot of boilerplate code
|
@@ -0,0 +1,207 @@
|
|
1
|
+
module JsonVoorhees
|
2
|
+
class SetupAppGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
#argument :user_class, :type => :string
|
5
|
+
class_option :arcadex, :type => :boolean, :default => true, :description => "Include arcadex gem and authentication in api_controller"
|
6
|
+
class_option :user, :type => :boolean, :default => true, :description => "Create an engine for the user class"
|
7
|
+
class_option :test, :type => :boolean, :default => false, :description => "Set true if running tests to skip things like bundle update and git"
|
8
|
+
|
9
|
+
def sprint
|
10
|
+
create_file_structure
|
11
|
+
dev_test_gems
|
12
|
+
other_gems
|
13
|
+
run_bundle
|
14
|
+
rspec
|
15
|
+
api_controller
|
16
|
+
people
|
17
|
+
routes
|
18
|
+
make_controllers
|
19
|
+
make_admin
|
20
|
+
#seed db?
|
21
|
+
#fancier admin?
|
22
|
+
run_git
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def make_admin
|
28
|
+
include_middleware
|
29
|
+
if options.user?
|
30
|
+
#copy admin page with user engine
|
31
|
+
copy_file "views/admin_with_user", "app/views/main/admin.html.erb"
|
32
|
+
else
|
33
|
+
#copy admin page without user engine
|
34
|
+
copy_file "views/admin_no_user", "app/views/main/admin.html.erb"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def include_middleware
|
39
|
+
inject_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do <<-'RUBY'
|
40
|
+
|
41
|
+
#So Rails-Api doesn't remove all of the middleware
|
42
|
+
config.api_only = false
|
43
|
+
|
44
|
+
RUBY
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def routes
|
49
|
+
route "root to: \"app_index#app\""
|
50
|
+
route "get \'admin\' => \'main#admin\', as: \"admin\" #admin_path"
|
51
|
+
end
|
52
|
+
|
53
|
+
def make_controllers
|
54
|
+
generate "controller", "app_index app"
|
55
|
+
run "rm -f app/controllers/app_index_controller.rb"
|
56
|
+
copy_file "app_index_controller.rb", "app/controllers/app_index_controller.rb"
|
57
|
+
generate "controller", "main admin"
|
58
|
+
run "rm -f spec/controllers/main_controller_spec.rb"
|
59
|
+
#Copy the views over
|
60
|
+
copy_file "views/app", "app/views/app_index/app.html.erb"
|
61
|
+
copy_file "views/app_index", "app/views/layouts/app_index.html.erb"
|
62
|
+
run "rm -f app/views/layouts/application.html.erb"
|
63
|
+
copy_file "views/application", "app/views/layouts/application.html.erb"
|
64
|
+
inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery with: :exception\n" do <<-'RUBY'
|
65
|
+
|
66
|
+
#This needs to be put inside a config file. but this is good for now
|
67
|
+
#This only requires the password for the admin section of the website
|
68
|
+
http_basic_authenticate_with name: "admin", password: "password"
|
69
|
+
|
70
|
+
RUBY
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def run_db_migrations
|
75
|
+
run "rake db:migrate RAILS_ENV=development"
|
76
|
+
run "rake db:migrate RAILS_ENV=test"
|
77
|
+
run "rake db:migrate RAILS_ENV=production"
|
78
|
+
end
|
79
|
+
|
80
|
+
def run_git
|
81
|
+
if !options.test?
|
82
|
+
git :init
|
83
|
+
git add: "."
|
84
|
+
git commit: "-m Initial commit"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def people
|
89
|
+
if options.user?
|
90
|
+
run "rails plugin new engines/people --mountable"
|
91
|
+
inside('engines/people') do
|
92
|
+
#This needs to run the generator for setting up engines
|
93
|
+
run "rails g json_voorhees:setup_engine people"
|
94
|
+
#Now it needs to create the user class
|
95
|
+
run "rails g scaffold user username:string email:string password_digest:string"
|
96
|
+
run_db_migrations
|
97
|
+
#Add this to the routes and gemfile
|
98
|
+
end
|
99
|
+
#Need to add the engine to the main_apps gemfile
|
100
|
+
route "mount People::Engine, at: \'/\'"
|
101
|
+
if options.arcadex?
|
102
|
+
copy_user_files_over
|
103
|
+
route "mount Arcadex::Engine, at: \'/\'"
|
104
|
+
end
|
105
|
+
insert_people_engine
|
106
|
+
run_bundle
|
107
|
+
run "rake railties:install:migrations"
|
108
|
+
run_db_migrations
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def insert_people_engine
|
113
|
+
inject_into_file 'Gemfile', after: "source \'https://rubygems.org\'\n" do <<-'RUBY'
|
114
|
+
|
115
|
+
gem 'people', :path => "engines/people"
|
116
|
+
|
117
|
+
RUBY
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def copy_user_files_over
|
122
|
+
copy_file "user/user_authorizations.rb", "gems/authorization/lib/authorization/people/user.rb"
|
123
|
+
run "rm -f gems/authorization/lib/authorization.rb"
|
124
|
+
copy_file "user/include_authorization.rb", "gems/authorization/lib/authorization.rb"
|
125
|
+
copy_file "user/user_controller.rb", "engines/people/app/controllers/people/api/v1/users_controller.rb"
|
126
|
+
run "rm -f engines/people/app/models/people/user.rb"
|
127
|
+
copy_file "user/user_model.rb", "engines/people/app/models/people/user.rb"
|
128
|
+
run "rm -f engines/people/config/routes.rb"
|
129
|
+
copy_file "user/user_routes.rb", "engines/people/config/routes.rb"
|
130
|
+
copy_file "user/user_serializer.rb", "engines/people/app/serializers/people/user_serializer.rb"
|
131
|
+
copy_file "user/specs/factory_girl.rb", "spec/factories/people_user_factory.rb"
|
132
|
+
copy_file "user/specs/model_specs.rb", "spec/engines/people/api/v1/models/user_spec.rb"
|
133
|
+
copy_file "user/specs/request_specs.rb", "spec/engines/people/api/v1/requests/user_spec.rb"
|
134
|
+
copy_file "user/specs/route_specs.rb", "spec/engines/people/api/v1/routing/user_spec.rb"
|
135
|
+
end
|
136
|
+
|
137
|
+
def api_controller
|
138
|
+
if options.arcadex?
|
139
|
+
copy_file "api_controller_with_arcadex.rb", "app/controllers/api/v1/api_controller.rb"
|
140
|
+
else
|
141
|
+
copy_file "api_controller_no_arcadex.rb", "app/controllers/api/v1/api_controller.rb"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def rspec
|
146
|
+
generate "rspec:install"
|
147
|
+
run "rm -f .rspec"
|
148
|
+
copy_file "hidden_rspec.rb", ".rspec"
|
149
|
+
copy_file "rspec_factory_girl.rb", "spec/support/factory_girl.rb"
|
150
|
+
inject_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do <<-'RUBY'
|
151
|
+
|
152
|
+
config.include ::Requests::JsonHelpers, :type => :request
|
153
|
+
config.include ::Requests::JsonHelpers, :type => :controller
|
154
|
+
|
155
|
+
RUBY
|
156
|
+
end
|
157
|
+
copy_file "json_helpers.rb", "spec/support/request_helpers.rb"
|
158
|
+
end
|
159
|
+
|
160
|
+
def run_bundle
|
161
|
+
if !options.test?
|
162
|
+
run "bundle update"
|
163
|
+
run "bundle install"
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def other_gems
|
168
|
+
gem 'authorization', :path => "gems/authorization"
|
169
|
+
# This ties in nicely with Ember, 0.8.0 is the stable version
|
170
|
+
gem "active_model_serializers", "~> 0.8.0"
|
171
|
+
# This is the api of choice now
|
172
|
+
gem "rails-api"
|
173
|
+
gem 'kaminari'
|
174
|
+
gem 'bcrypt', '~> 3.1.7'
|
175
|
+
gem 'type_cartographer'
|
176
|
+
gem 'devise', "~> 3.2.4"
|
177
|
+
if options.arcadex?
|
178
|
+
gem 'arcadex', '~> 1.0.4'
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def dev_test_gems
|
183
|
+
gem_group :development, :test do
|
184
|
+
#gem 'sqlite3', '~> 1.3.9' # dev & test database
|
185
|
+
gem 'figaro', '~> 0.7.0' # env variables
|
186
|
+
gem 'annotate', ">=2.6.0"
|
187
|
+
gem "better_errors", '~> 1.1.0'
|
188
|
+
gem "binding_of_caller", "~> 0.7.1" # needed by better_errors or variable inspection
|
189
|
+
gem 'rspec-rails', '~> 3.0.0'
|
190
|
+
gem 'byebug', '~> 3.2.0'
|
191
|
+
gem "factory_girl_rails", "~> 4.0"
|
192
|
+
gem "database_cleaner", '~> 1.3.0'
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def create_file_structure
|
197
|
+
run "rm -rf test"
|
198
|
+
run "rm -f README.rdoc"
|
199
|
+
run "echo '# Describe your application here' > README.md"
|
200
|
+
run "mkdir engines && touch engines/.gitkeep"
|
201
|
+
run "mkdir gems && touch gems/.gitkeep"
|
202
|
+
run "mkdir notes && touch notes/.gitkeep"
|
203
|
+
run "rails plugin new gems/authorization"
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Api::V1::ApiController < ::ActionController::API
|
2
|
+
|
3
|
+
before_action :authenticate_user
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def authenticate_user
|
8
|
+
#["current_user","current_token"] Make this true to check for email also
|
9
|
+
@instance_hash = ::Arcadex.full_authentication(params,request,false)
|
10
|
+
if @instance_hash.nil?
|
11
|
+
render :json => {errors: "User is not logged in, register or log in"} , status: :unauthorized
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_user
|
16
|
+
if !@instance_hash.nil?
|
17
|
+
@instance_hash["current_user"]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def current_token
|
22
|
+
if !@instance_hash.nil?
|
23
|
+
@instance_hash["current_token"]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
#additional factory_girl configuration
|
3
|
+
|
4
|
+
# Factory girl methods don't need to be prefaced with FactoryGirl
|
5
|
+
config.include FactoryGirl::Syntax::Methods
|
6
|
+
|
7
|
+
# Best each test suite is run, make sure the factories are valid
|
8
|
+
config.before(:suite) do
|
9
|
+
begin
|
10
|
+
DatabaseCleaner.start
|
11
|
+
FactoryGirl.lint
|
12
|
+
ensure
|
13
|
+
DatabaseCleaner.clean
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
sequence :username do |n|
|
3
|
+
"username#{n}"
|
4
|
+
end
|
5
|
+
sequence :email do |n|
|
6
|
+
"username#{n}@LaunchU.com"
|
7
|
+
end
|
8
|
+
factory :people_user, class: ::People::User do
|
9
|
+
username
|
10
|
+
email
|
11
|
+
password "password123"
|
12
|
+
password_confirmation "password123"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require "rails_helper"
|
2
|
+
|
3
|
+
RSpec.describe ::People::User, '.username', :type => :model do
|
4
|
+
it "does not save when nil" do
|
5
|
+
user = FactoryGirl.build(:people_user, :username => nil)
|
6
|
+
expect(user.save).to equal(false)
|
7
|
+
end
|
8
|
+
it "does not save with invalid characters" do
|
9
|
+
#user = FactoryGirl.build(:people_user, :username => "!@#$%)")
|
10
|
+
#expect(user.save).to equal(false)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
RSpec.describe ::People::User, '.email', :type => :model do
|
14
|
+
it "does not save when nil" do
|
15
|
+
user = FactoryGirl.build(:people_user, :email => nil)
|
16
|
+
expect(user.save).to equal(false)
|
17
|
+
end
|
18
|
+
it "does not save with invalid characters" do
|
19
|
+
#user = FactoryGirl.build(:people_user, :email => "!@#$%)")
|
20
|
+
#expect(user.save).to equal(false)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
RSpec.describe ::People::User, '.password_digest', :type => :model do
|
24
|
+
it "does not save when nil" do
|
25
|
+
user = FactoryGirl.build(:people_user, :password => nil, :password_confirmation => nil)
|
26
|
+
expect(user.save).to equal(false)
|
27
|
+
end
|
28
|
+
it "does not save when not a match" do
|
29
|
+
user = FactoryGirl.build(:people_user, :password => "firstAttempt", :password_confirmation => "secondAttempt")
|
30
|
+
expect(user.save).to equal(false)
|
31
|
+
end
|
32
|
+
it "saves with a matching password and password_confirmation" do
|
33
|
+
user = FactoryGirl.build(:people_user, :password => "good_password", :password_confirmation => "good_password")
|
34
|
+
expect(user.save).to equal(true)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
RSpec.describe ::People::User, :type => :model do
|
38
|
+
describe "dependencies" do
|
39
|
+
before(:example) do
|
40
|
+
@user = FactoryGirl.create(:people_user)
|
41
|
+
end
|
42
|
+
it "deletes ... when deleted" do
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
RSpec.describe ::People::User, :type => :model do
|
48
|
+
describe "callbacks" do
|
49
|
+
before(:example) do
|
50
|
+
@user = FactoryGirl.create(:people_user)
|
51
|
+
end
|
52
|
+
it "creates an authentication token" do
|
53
|
+
expect(@user.tokens.any?).to equal(true)
|
54
|
+
end
|
55
|
+
it "does not create an empty auth token" do
|
56
|
+
expect(@user.tokens[0].auth_token.nil?).to equal(false)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|