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.
Files changed (210) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +75 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/json_voorhees/application.js +13 -0
  6. data/app/assets/stylesheets/json_voorhees/application.css +15 -0
  7. data/app/controllers/json_voorhees/application_controller.rb +4 -0
  8. data/app/helpers/json_voorhees/application_helper.rb +4 -0
  9. data/app/views/layouts/json_voorhees/application.html.erb +14 -0
  10. data/config/routes.rb +2 -0
  11. data/lib/generators/json_voorhees/app_make_authorizations/USAGE +10 -0
  12. data/lib/generators/json_voorhees/app_make_authorizations/app_make_authorizations_generator.rb +39 -0
  13. data/lib/generators/json_voorhees/app_make_authorizations/templates/auth_file.rb.erb +51 -0
  14. data/lib/generators/json_voorhees/app_make_tests/USAGE +9 -0
  15. data/lib/generators/json_voorhees/app_make_tests/app_make_tests_generator.rb +51 -0
  16. data/lib/generators/json_voorhees/app_make_tests/templates/factory.rb.erb +9 -0
  17. data/lib/generators/json_voorhees/app_make_tests/templates/model.rb.erb +30 -0
  18. data/lib/generators/json_voorhees/app_make_tests/templates/request.rb.erb +102 -0
  19. data/lib/generators/json_voorhees/app_make_tests/templates/routing.rb.erb +47 -0
  20. data/lib/generators/json_voorhees/engine_create_controller/USAGE +12 -0
  21. data/lib/generators/json_voorhees/engine_create_controller/engine_create_controller_generator.rb +40 -0
  22. data/lib/generators/json_voorhees/engine_create_controller/templates/controller_template.rb.erb +98 -0
  23. data/lib/generators/json_voorhees/engine_create_controller/templates/no_auth_controller_template.rb.erb +61 -0
  24. data/lib/generators/json_voorhees/engine_create_serializer/USAGE +9 -0
  25. data/lib/generators/json_voorhees/engine_create_serializer/engine_create_serializer_generator.rb +34 -0
  26. data/lib/generators/json_voorhees/engine_create_serializer/templates/serializer.rb.erb +23 -0
  27. data/lib/generators/json_voorhees/setup_app/USAGE +9 -0
  28. data/lib/generators/json_voorhees/setup_app/setup_app_generator.rb +207 -0
  29. data/lib/generators/json_voorhees/setup_app/templates/api_controller_no_arcadex.rb +2 -0
  30. data/lib/generators/json_voorhees/setup_app/templates/api_controller_with_arcadex.rb +26 -0
  31. data/lib/generators/json_voorhees/setup_app/templates/app_index_controller.rb +4 -0
  32. data/lib/generators/json_voorhees/setup_app/templates/hidden_rspec.rb +3 -0
  33. data/lib/generators/json_voorhees/setup_app/templates/json_helpers.rb +7 -0
  34. data/lib/generators/json_voorhees/setup_app/templates/rspec_factory_girl.rb +16 -0
  35. data/lib/generators/json_voorhees/setup_app/templates/user/include_authorization.rb +3 -0
  36. data/lib/generators/json_voorhees/setup_app/templates/user/specs/factory_girl.rb +14 -0
  37. data/lib/generators/json_voorhees/setup_app/templates/user/specs/model_specs.rb +59 -0
  38. data/lib/generators/json_voorhees/setup_app/templates/user/specs/request_specs.rb +154 -0
  39. data/lib/generators/json_voorhees/setup_app/templates/user/specs/route_specs.rb +77 -0
  40. data/lib/generators/json_voorhees/setup_app/templates/user/user_authorizations.rb +82 -0
  41. data/lib/generators/json_voorhees/setup_app/templates/user/user_controller.rb +124 -0
  42. data/lib/generators/json_voorhees/setup_app/templates/user/user_model.rb +26 -0
  43. data/lib/generators/json_voorhees/setup_app/templates/user/user_routes.rb +24 -0
  44. data/lib/generators/json_voorhees/setup_app/templates/user/user_serializer.rb +39 -0
  45. data/lib/generators/json_voorhees/setup_app/templates/views/admin_no_user +6 -0
  46. data/lib/generators/json_voorhees/setup_app/templates/views/admin_with_user +9 -0
  47. data/lib/generators/json_voorhees/setup_app/templates/views/app +0 -0
  48. data/lib/generators/json_voorhees/setup_app/templates/views/app_index +9 -0
  49. data/lib/generators/json_voorhees/setup_app/templates/views/application +19 -0
  50. data/lib/generators/json_voorhees/setup_engine/USAGE +8 -0
  51. data/lib/generators/json_voorhees/setup_engine/setup_engine_generator.rb +81 -0
  52. data/lib/generators/json_voorhees/setup_engine/templates/api_controller.rb.erb +5 -0
  53. data/lib/generators/json_voorhees/setup_engine/templates/application_controller.rb.erb +4 -0
  54. data/lib/json_voorhees/engine.rb +5 -0
  55. data/lib/json_voorhees/version.rb +3 -0
  56. data/lib/json_voorhees.rb +4 -0
  57. data/lib/tasks/json_voorhees_tasks.rake +4 -0
  58. data/test/dummy/README.rdoc +28 -0
  59. data/test/dummy/Rakefile +6 -0
  60. data/test/dummy/app/assets/javascripts/application.js +13 -0
  61. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  62. data/test/dummy/app/controllers/application_controller.rb +5 -0
  63. data/test/dummy/app/helpers/application_helper.rb +2 -0
  64. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  65. data/test/dummy/bin/bundle +3 -0
  66. data/test/dummy/bin/rails +4 -0
  67. data/test/dummy/bin/rake +4 -0
  68. data/test/dummy/config/application.rb +23 -0
  69. data/test/dummy/config/boot.rb +5 -0
  70. data/test/dummy/config/database.yml +25 -0
  71. data/test/dummy/config/environment.rb +5 -0
  72. data/test/dummy/config/environments/development.rb +37 -0
  73. data/test/dummy/config/environments/production.rb +82 -0
  74. data/test/dummy/config/environments/test.rb +39 -0
  75. data/test/dummy/config/initializers/assets.rb +8 -0
  76. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  77. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  78. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  79. data/test/dummy/config/initializers/inflections.rb +16 -0
  80. data/test/dummy/config/initializers/mime_types.rb +4 -0
  81. data/test/dummy/config/initializers/session_store.rb +3 -0
  82. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  83. data/test/dummy/config/locales/en.yml +23 -0
  84. data/test/dummy/config/routes.rb +4 -0
  85. data/test/dummy/config/secrets.yml +22 -0
  86. data/test/dummy/config.ru +4 -0
  87. data/test/dummy/log/development.log +0 -0
  88. data/test/dummy/public/404.html +67 -0
  89. data/test/dummy/public/422.html +67 -0
  90. data/test/dummy/public/500.html +66 -0
  91. data/test/dummy/public/favicon.ico +0 -0
  92. data/test/integration/navigation_test.rb +10 -0
  93. data/test/json_voorhees_test.rb +7 -0
  94. data/test/lib/generators/json_voorhees/engine_serializer_generator_test.rb +16 -0
  95. data/test/test_app/Gemfile +42 -0
  96. data/test/test_app/Gemfile.lock +132 -0
  97. data/test/test_app/README.rdoc +28 -0
  98. data/test/test_app/Rakefile +6 -0
  99. data/test/test_app/app/assets/javascripts/application.js +16 -0
  100. data/test/test_app/app/assets/stylesheets/application.css +15 -0
  101. data/test/test_app/app/controllers/application_controller.rb +5 -0
  102. data/test/test_app/app/helpers/application_helper.rb +2 -0
  103. data/test/test_app/app/views/layouts/application.html.erb +14 -0
  104. data/test/test_app/bin/bundle +3 -0
  105. data/test/test_app/bin/rails +8 -0
  106. data/test/test_app/bin/rake +8 -0
  107. data/test/test_app/bin/spring +18 -0
  108. data/test/test_app/config/application.rb +23 -0
  109. data/test/test_app/config/boot.rb +4 -0
  110. data/test/test_app/config/database.yml +25 -0
  111. data/test/test_app/config/environment.rb +5 -0
  112. data/test/test_app/config/environments/development.rb +37 -0
  113. data/test/test_app/config/environments/production.rb +82 -0
  114. data/test/test_app/config/environments/test.rb +39 -0
  115. data/test/test_app/config/initializers/assets.rb +8 -0
  116. data/test/test_app/config/initializers/backtrace_silencers.rb +7 -0
  117. data/test/test_app/config/initializers/cookies_serializer.rb +3 -0
  118. data/test/test_app/config/initializers/filter_parameter_logging.rb +4 -0
  119. data/test/test_app/config/initializers/inflections.rb +16 -0
  120. data/test/test_app/config/initializers/mime_types.rb +4 -0
  121. data/test/test_app/config/initializers/session_store.rb +3 -0
  122. data/test/test_app/config/initializers/wrap_parameters.rb +14 -0
  123. data/test/test_app/config/locales/en.yml +23 -0
  124. data/test/test_app/config/routes.rb +56 -0
  125. data/test/test_app/config/secrets.yml +22 -0
  126. data/test/test_app/config.ru +4 -0
  127. data/test/test_app/db/development.sqlite3 +0 -0
  128. data/test/test_app/db/schema.rb +16 -0
  129. data/test/test_app/db/seeds.rb +7 -0
  130. data/test/test_app/log/development.log +1517 -0
  131. data/test/test_app/log/production.log +68 -0
  132. data/test/test_app/log/test.log +10482 -0
  133. data/test/test_app/public/404.html +67 -0
  134. data/test/test_app/public/422.html +67 -0
  135. data/test/test_app/public/500.html +66 -0
  136. data/test/test_app/public/favicon.ico +0 -0
  137. data/test/test_app/public/robots.txt +5 -0
  138. data/test/test_app/test/test_helper.rb +10 -0
  139. data/test/test_app/tmp/cache/assets/development/sprockets/055b16b21481c5603eab51f88bce614e +0 -0
  140. data/test/test_app/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  141. data/test/test_app/tmp/cache/assets/development/sprockets/2c8821d40541c62f65d0a77d6d737a59 +0 -0
  142. data/test/test_app/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  143. data/test/test_app/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  144. data/test/test_app/tmp/cache/assets/development/sprockets/381d73d62d2e34310ff5e02a60e2e6b5 +0 -0
  145. data/test/test_app/tmp/cache/assets/development/sprockets/6cfd8687a851913292b638daebcf0c3b +0 -0
  146. data/test/test_app/tmp/cache/assets/development/sprockets/72539eb249ff535aa9679adf93578a3a +0 -0
  147. data/test/test_app/tmp/cache/assets/development/sprockets/7288979cc8fd497d915d19732930197f +0 -0
  148. data/test/test_app/tmp/cache/assets/development/sprockets/af6f30b38676f9ac87b6c15260d702d6 +0 -0
  149. data/test/test_app/tmp/cache/assets/development/sprockets/c1e06c98ebb85a26421cf34d75787365 +0 -0
  150. data/test/test_app/tmp/cache/assets/development/sprockets/c636869dd0df678775f14b9e86cb147d +0 -0
  151. data/test/test_app/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  152. data/test/test_app/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  153. data/test/test_app/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  154. data/test/test_engine/Gemfile +17 -0
  155. data/test/test_engine/Gemfile.lock +128 -0
  156. data/test/test_engine/MIT-LICENSE +20 -0
  157. data/test/test_engine/README.md +1 -0
  158. data/test/test_engine/Rakefile +34 -0
  159. data/test/test_engine/app/assets/javascripts/test_engine/application.js +13 -0
  160. data/test/test_engine/app/assets/stylesheets/test_engine/application.css +15 -0
  161. data/test/test_engine/app/controllers/test_engine/api/v1/application_controller.rb +5 -0
  162. data/test/test_engine/app/controllers/test_engine/application_controller.rb +4 -0
  163. data/test/test_engine/app/helpers/test_engine/application_helper.rb +4 -0
  164. data/test/test_engine/app/views/layouts/test_engine/default/application.html.erb +14 -0
  165. data/test/test_engine/bin/rails +12 -0
  166. data/test/test_engine/config/routes.rb +23 -0
  167. data/test/test_engine/lib/tasks/test_engine_tasks.rake +4 -0
  168. data/test/test_engine/lib/test_engine/engine.rb +5 -0
  169. data/test/test_engine/lib/test_engine/version.rb +3 -0
  170. data/test/test_engine/lib/test_engine.rb +4 -0
  171. data/test/test_engine/test/dummy/README.rdoc +28 -0
  172. data/test/test_engine/test/dummy/Rakefile +6 -0
  173. data/test/test_engine/test/dummy/app/assets/javascripts/application.js +13 -0
  174. data/test/test_engine/test/dummy/app/assets/stylesheets/application.css +15 -0
  175. data/test/test_engine/test/dummy/app/controllers/application_controller.rb +5 -0
  176. data/test/test_engine/test/dummy/app/helpers/application_helper.rb +2 -0
  177. data/test/test_engine/test/dummy/app/views/layouts/application.html.erb +14 -0
  178. data/test/test_engine/test/dummy/bin/bundle +3 -0
  179. data/test/test_engine/test/dummy/bin/rails +4 -0
  180. data/test/test_engine/test/dummy/bin/rake +4 -0
  181. data/test/test_engine/test/dummy/config/application.rb +23 -0
  182. data/test/test_engine/test/dummy/config/boot.rb +5 -0
  183. data/test/test_engine/test/dummy/config/database.yml +25 -0
  184. data/test/test_engine/test/dummy/config/environment.rb +5 -0
  185. data/test/test_engine/test/dummy/config/environments/development.rb +37 -0
  186. data/test/test_engine/test/dummy/config/environments/production.rb +82 -0
  187. data/test/test_engine/test/dummy/config/environments/test.rb +39 -0
  188. data/test/test_engine/test/dummy/config/initializers/assets.rb +8 -0
  189. data/test/test_engine/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  190. data/test/test_engine/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  191. data/test/test_engine/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  192. data/test/test_engine/test/dummy/config/initializers/inflections.rb +16 -0
  193. data/test/test_engine/test/dummy/config/initializers/mime_types.rb +4 -0
  194. data/test/test_engine/test/dummy/config/initializers/session_store.rb +3 -0
  195. data/test/test_engine/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  196. data/test/test_engine/test/dummy/config/locales/en.yml +23 -0
  197. data/test/test_engine/test/dummy/config/routes.rb +4 -0
  198. data/test/test_engine/test/dummy/config/secrets.yml +22 -0
  199. data/test/test_engine/test/dummy/config.ru +4 -0
  200. data/test/test_engine/test/dummy/log/development.log +0 -0
  201. data/test/test_engine/test/dummy/public/404.html +67 -0
  202. data/test/test_engine/test/dummy/public/422.html +67 -0
  203. data/test/test_engine/test/dummy/public/500.html +66 -0
  204. data/test/test_engine/test/dummy/public/favicon.ico +0 -0
  205. data/test/test_engine/test/integration/navigation_test.rb +10 -0
  206. data/test/test_engine/test/test_engine_test.rb +7 -0
  207. data/test/test_engine/test/test_helper.rb +15 -0
  208. data/test/test_engine/test_engine.gemspec +31 -0
  209. data/test/test_helper.rb +15 -0
  210. metadata +434 -0
@@ -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
@@ -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,2 @@
1
+ class Api::V1::ApiController < ::ActionController::API
2
+ 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,4 @@
1
+ class AppIndexController < ActionController::Base
2
+ def app
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ --color
2
+ warnings = false
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ module Requests
2
+ module JsonHelpers
3
+ def json
4
+ @json ||= JSON.parse(response.body)
5
+ end
6
+ end
7
+ 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,3 @@
1
+ require 'authorization/people/user'
2
+ module Authorization
3
+ 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