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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8e48185b7d2ceab5a233d5bf52f70740198c9475
4
+ data.tar.gz: cf01fa56c07c05530cbb63607422e2e5a08425a7
5
+ SHA512:
6
+ metadata.gz: 73a28bb54a0d9e728cb4d8417acb96194996e9204a75b66928a12493097330e3a80aa943440a9ab02b29e26e5be94ac91f3acdba0d55580b314f36cd19fd2b28
7
+ data.tar.gz: 45f48512ef76c40f646377185807bf727307654438bebec02003fd7ebe994dee8d42426f89a51aafcc15a6d88f9f8c3097db573b2d91bd8adaae69fb67184da6
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # JsonVoorhees
2
+
3
+ ## Introduction
4
+
5
+ I frequently take on projects that involve some kind of api and it was a nightmare
6
+ repeating all of the boilerplate code to get it the backend to a useable state.
7
+ I abstracted away all of the code that I typically use into a series of generators
8
+ namespaced under json_voorhees. Not only does it set your project up, it also
9
+ helps build the project if you follow the conventions.
10
+
11
+ ## Use
12
+
13
+ To install, put this in your main_app
14
+
15
+ ```bash
16
+ gem "json_voorhees"
17
+ ```
18
+
19
+ To setup your application use
20
+
21
+ ```bash
22
+ rails g json_voorhees:setup_app
23
+ ```
24
+ It will install commonly used gems, enforce a layout for your app and even
25
+ a user class if you want it.
26
+
27
+ My APIs all use a series of engines hooked into the main_app. The main_app is
28
+ the caretaker for things like specs and the admin page. It's also where the api_controller
29
+ and application_controller reside. Their counterparts in an engine all inherit from
30
+ one of these controllers. Since the engines need to be mounted into the route file,
31
+ engines can version themselves and it helps to increment the project little by litter.
32
+ This separation of concerns if done by logic can help break a project into smaller bitesized
33
+ pieces which can then if need be go under their own version control and managed by different
34
+ teams.
35
+
36
+ Go to the engines folder and create an engine like so.
37
+
38
+ ```bash
39
+ rails plugin new [engine name] --mountable
40
+ cd [engine name]
41
+ rails g json_voorhees:setup_engine [engine name]
42
+ ```
43
+ After scaffolding out your resource, generate the necessary api controller
44
+ and its serializer
45
+
46
+ ```bash
47
+ rails g json_voorhees:engine_create_controller [engine name] [resource name]
48
+ rails g json_voorhees:engine_create_serializer [engine name] [resource name]
49
+ ```
50
+
51
+ Authorizations are all handled in a gem called authorization.
52
+ Specs are also ran through RSpec and FactoryGirl, Go to the main_app and run
53
+
54
+ ```bash
55
+ rails g json_voorhees:app_make_authorizations [engine name] [resource name]
56
+ rails g json_voorhees:app_make_tests [engine name] [resource name]
57
+ ```
58
+
59
+ For every resource created, those 4 are ran in their respective locations.
60
+
61
+ ## Notes
62
+
63
+ Remember to put your engine inside the main_apps Gemfile after you create it.
64
+ Remember to mount the engine inside the main_apps routing file.
65
+ Your engines resource routes need to go inside the correct scoping.
66
+ After you create your model and create the api_controller, change the white listed
67
+ params in the controller to fit accordingly.
68
+ The attribute changes need to also be accurately represented in the factory girl factory
69
+ and also in the serializer and authorization gem.
70
+
71
+ ## To Do
72
+
73
+ 1. Create a couple scaffolding services
74
+ 2. Refactor everything
75
+ 3. Figure out a better way to test this thing
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'JsonVoorhees'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ module JsonVoorhees
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module JsonVoorhees
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>JsonVoorhees</title>
5
+ <%= stylesheet_link_tag "json_voorhees/application", media: "all" %>
6
+ <%= javascript_include_tag "json_voorhees/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ JsonVoorhees::Engine.routes.draw do
2
+ end
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Creates authorizations that a resources controller and serializer reference
3
+ to see if it has permission to answer the request or even send a attribute back.
4
+ Run this generator from the main_app
5
+
6
+ Example:
7
+ rails g json_voorhees:app_make_authorizations People User
8
+
9
+ This will create:
10
+ A file in gems/authorization.
@@ -0,0 +1,39 @@
1
+ module JsonVoorhees
2
+ class AppMakeAuthorizationsGenerator < 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 "auth_file.rb.erb", "gems/authorization/lib/authorization/#{module_name.underscore}/#{resource_singular}.rb"
9
+ require_authfile
10
+ end
11
+
12
+ private
13
+
14
+ def require_authfile
15
+ prepend_file 'gems/authorization/lib/authorization.rb', "require \'authorization/#{module_name.underscore}/#{resource_singular}\'\n"
16
+ end
17
+
18
+ def resource_singular
19
+ resource_name.underscore.singularize
20
+ end
21
+
22
+ def resource_plural
23
+ resource_name.underscore.pluralize
24
+ end
25
+
26
+ def resource_camel
27
+ resource_name.camelize.singularize
28
+ end
29
+
30
+ def module_camel
31
+ module_name.camelize
32
+ end
33
+
34
+ def module_snake
35
+ module_name.underscore.downcase
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,51 @@
1
+ module Authorization
2
+ module <%= module_camel %>
3
+ module <%= resource_camel %>
4
+
5
+ #Used in the controller
6
+
7
+ def self.index?(tokenUser)
8
+ return true
9
+ end
10
+
11
+ def self.show?(<%= resource_singular %>,tokenUser)
12
+ return true
13
+ end
14
+
15
+ def self.create?(tokenUser)
16
+ return true
17
+ end
18
+
19
+ def self.update?(<%= resource_singular %>,tokenUser)
20
+ return true
21
+ end
22
+
23
+ def self.destroy?(<%= resource_singular %>,tokenUser)
24
+ return true
25
+ end
26
+
27
+ #Used in the serializer
28
+
29
+ def self.include_id?(current_user,<%= resource_singular %>_object,options)
30
+ action = options[:url_options][:_recall][:action]
31
+ controller = options[:url_options][:_recall][:controller]
32
+ return true
33
+ end
34
+
35
+ def self.include_created_at?(current_user,<%= resource_singular %>_object,options)
36
+ action = options[:url_options][:_recall][:action]
37
+ controller = options[:url_options][:_recall][:controller]
38
+ return true
39
+ end
40
+
41
+ def self.include_updated_at?(current_user,<%= resource_singular %>_object,options)
42
+ action = options[:url_options][:_recall][:action]
43
+ controller = options[:url_options][:_recall][:controller]
44
+ return true
45
+ end
46
+
47
+ private
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Creates RSpec model, request, and routing specs along with a factory_girl factory.
3
+ Run this generator in the main_app
4
+
5
+ Example:
6
+ rails g json_voorhees:app_make_tests People User
7
+
8
+ This will create:
9
+ Some files in spec
@@ -0,0 +1,51 @@
1
+ module JsonVoorhees
2
+ class AppMakeTestsGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :module_name, :type => :string
5
+ argument :resource_name, :type => :string
6
+ argument :api_version, :type => :string, :default => "1"
7
+ class_option :model, :type => :boolean, :default => true, :description => "Create model stub tests"
8
+ class_option :request, :type => :boolean, :default => true, :description => "Create request stub tests"
9
+ class_option :routing, :type => :boolean, :default => true, :description => "Create routing stub tests"
10
+ class_option :arcadex, :type => :boolean, :default => true, :description => "Send requests with an arcadex header"
11
+
12
+ def sprint
13
+ if options.model?
14
+ template "model.rb.erb", "spec/engines/#{module_name.underscore}/api/v#{api_version}/models/#{resource_singular}_spec.rb"
15
+ end
16
+ if options.request?
17
+ if options.arcadex?
18
+ template "request.rb.erb", "spec/engines/#{module_name.underscore}/api/v#{api_version}/requests/#{resource_singular}_spec.rb"
19
+ else
20
+ end
21
+ end
22
+ if options.routing?
23
+ template "routing.rb.erb", "spec/engines/#{module_name.underscore}/api/v#{api_version}/routing/#{resource_singular}_spec.rb"
24
+ end
25
+ template "factory.rb.erb", "spec/factories/#{module_name.underscore}_#{resource_singular}_factory.rb"
26
+ end
27
+
28
+ private
29
+
30
+ def resource_singular
31
+ resource_name.underscore.singularize
32
+ end
33
+
34
+ def resource_plural
35
+ resource_name.underscore.pluralize
36
+ end
37
+
38
+ def resource_camel
39
+ resource_name.camelize.singularize
40
+ end
41
+
42
+ def module_camel
43
+ module_name.camelize
44
+ end
45
+
46
+ def module_snake
47
+ module_name.underscore.downcase
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,9 @@
1
+ FactoryGirl.define do
2
+ #sequence :email do |n|
3
+ # "name#{n}"
4
+ #end
5
+ factory :<%= module_snake %>_<%= resource_singular %>, class: ::<%= module_camel %>::<%= resource_camel %> do
6
+ #name
7
+ #attr "Default value"
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, '.username', :type => :model do
4
+ describe "Attributes" do
5
+ it "does not save when attribute is nil" do
6
+ #<%= resource_singular %> = FactoryGirl.build(:<%= module_snake %>_<%= resource_singular %>, :attribute => nil)
7
+ #expect(<%= resource_singular %>.save).to equal(false)
8
+ end
9
+ end
10
+ end
11
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :model do
12
+ describe "Dependencies" do
13
+ before(:example) do
14
+ @<%= resource_singular %> = FactoryGirl.create(:<%= module_snake %>_<%= resource_singular %>)
15
+ end
16
+ it "deletes ... when deleted" do
17
+
18
+ end
19
+ end
20
+ end
21
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :model do
22
+ describe "Callbacks" do
23
+ before(:example) do
24
+ @<%= resource_singular %> = FactoryGirl.create(:<%= module_snake %>_<%= resource_singular %>)
25
+ end
26
+ it "creates a ..." do
27
+ #expect(object.posts.nil?).to equal(false)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,102 @@
1
+ require "rails_helper"
2
+
3
+ #-#-#-#-#REST#-#-#-#-#
4
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :request do
5
+ describe "Rest Routes" do
6
+ before(:example) do
7
+ @user = FactoryGirl.create(:people_user)
8
+ token = @user.tokens[0].auth_token
9
+ @header = {"Auth-Token" => token, "Email" => @user.email}
10
+ end
11
+ # get /api/<%= api_version %>/<%= resource_plural %>
12
+ it "Gets all of the <%= resource_singular %>s" do
13
+ FactoryGirl.create_list(:<%= module_snake %>_<%= resource_singular %>, 10)
14
+ get 'api/<%= api_version %>/<%= resource_plural %>', nil, @header
15
+ expect(response.status).to eq(200) #ok
16
+ end
17
+ # get /api/<%= api_version %>/<%= resource_plural %>/1
18
+ it "Gets a <%= resource_singular %> by id" do
19
+ FactoryGirl.create(:<%= module_snake %>_<%= resource_singular %>)
20
+ get 'api/<%= api_version %>/<%= resource_plural %>/1', nil, @header
21
+ expect(response.status).to eq(200) #ok
22
+ end
23
+ # post /api/<%= api_version %>/<%= resource_plural %>
24
+ it "Creates <%= resource_singular %>" do
25
+ attrs = FactoryGirl.attributes_for(:<%= module_snake %>_<%= resource_singular %>)
26
+ #attrs[:column] = "LaunchU"
27
+ hash = {"<%= resource_singular %>" => attrs}
28
+ post 'api/<%= api_version %>/<%= resource_plural %>', hash, @header
29
+ expect(response.status).to eq(200) #ok
30
+ end
31
+ # patch/put /api/<%= api_version %>/<%= resource_plural %>/1
32
+ it "Updates <%= resource_singular %>" do
33
+ #Create the <%= resource_singular %> through the api
34
+ attrs = FactoryGirl.attributes_for(:<%= module_snake %>_<%= resource_singular %>)
35
+ #attrs[:column] = "LaunchU"
36
+ hash = {"<%= resource_singular %>" => attrs}
37
+ post 'api/<%= api_version %>/<%= resource_plural %>', hash, @header
38
+ #Now update the created <%= resource_singular %> by changing the <%= resource_singular %>name
39
+ #attrs[:column] = "BlastOff"
40
+ hash = {"<%= resource_singular %>" => attrs}
41
+ put "api/<%= api_version %>/<%= resource_plural %>/1", hash, @header
42
+ expect(response.status).to eq(200) #ok
43
+ end
44
+ # delete /api/<%= api_version %>/<%= resource_plural %>/1
45
+ it "Deletes <%= resource_singular %>" do
46
+ #Create the <%= resource_singular %> through the api
47
+ attrs = FactoryGirl.attributes_for(:<%= module_snake %>_<%= resource_singular %>)
48
+ #attrs[:column] = "LaunchU"
49
+ hash = {"<%= resource_singular %>" => attrs}
50
+ post 'api/<%= api_version %>/<%= resource_plural %>', hash, @header
51
+ expect(<%= module_camel %>::<%= resource_camel %>.count).to eq(1)
52
+ #Now delete the <%= resource_singular %> through the api
53
+ delete 'api/<%= api_version %>/<%= resource_plural %>/1', nil, @header
54
+ expect(json).to eq({})
55
+ expect(response.status).to eq(200) #ok
56
+ expect(<%= module_camel %>::<%= resource_camel %>.count).to eq(0)
57
+ end
58
+ end
59
+ end
60
+ #-#-#-#-#Collection Routes#-#-#-#-#
61
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :request do
62
+ describe "Collection Routes" do
63
+ before(:example) do
64
+ @user = FactoryGirl.create(:people_user)
65
+ token = @user.tokens[0].auth_token
66
+ @header = {"Auth-Token" => token, "Email" => @user.email}
67
+ end
68
+ # get /api/1/collection
69
+ it "checks response of a collection route" do
70
+
71
+ end
72
+ end
73
+ end
74
+ #-#-#-#-#Serialization#-#-#-#-#
75
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :request do
76
+ describe "Serialization" do
77
+ before(:example) do
78
+ @user = FactoryGirl.create(:people_user)
79
+ token = @user.tokens[0].auth_token
80
+ @header = {"Auth-Token" => token, "Email" => @user.email}
81
+ end
82
+ it "checks the index json sent back" do
83
+
84
+ end
85
+ end
86
+ end
87
+ #-#-#-#-#Errors#-#-#-#-#
88
+ RSpec.describe ::<%= module_camel %>::<%= resource_camel %>, :type => :request do
89
+ describe "Errors" do
90
+ before(:example) do
91
+ @user = FactoryGirl.create(:people_user)
92
+ token = @user.tokens[0].auth_token
93
+ @header = {"Auth-Token" => token, "Email" => @user.email}
94
+ end
95
+ # get /api/<%= api_version %>/<%= resource_plural %>/1
96
+ it "checks for a 404" do
97
+ FactoryGirl.create(:<%= module_snake %>_<%= resource_singular %>)
98
+ get 'api/<%= api_version %>/<%= resource_plural %>/20', nil, @header
99
+ expect(response.status).to eq(404) #ok
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,47 @@
1
+ require "rails_helper"
2
+
3
+ #The standard rest routes for the group controller
4
+ RSpec.describe "<%= module_camel.pluralize %> controller rest routing", :type => :routing do
5
+ routes { <%= module_camel %>::Engine.routes }
6
+
7
+ it "routes to index" do
8
+ expect(:get => "/api/<%= api_version %>/<%= resource_plural %>").to route_to(
9
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
10
+ :action => "index"
11
+ )
12
+ end
13
+ it "routes to show" do
14
+ expect(:get => "/api/<%= api_version %>/<%= resource_plural %>/1").to route_to(
15
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
16
+ :action => "show",
17
+ :id => "1"
18
+ )
19
+ end
20
+ it "routes to create" do
21
+ expect(:post => "/api/<%= api_version %>/<%= resource_plural %>/").to route_to(
22
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
23
+ :action => "create"
24
+ )
25
+ end
26
+ it "routes to update" do
27
+ expect(:put => "/api/<%= api_version %>/<%= resource_plural %>/1/").to route_to(
28
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
29
+ :action => "update",
30
+ :id => "1"
31
+ )
32
+ end
33
+ it "routes to update" do
34
+ expect(:patch => "/api/<%= api_version %>/<%= resource_plural %>/1/").to route_to(
35
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
36
+ :action => "update",
37
+ :id => "1"
38
+ )
39
+ end
40
+ it "routes to delete" do
41
+ expect(:delete => "/api/<%= api_version %>/<%= resource_plural %>/1/").to route_to(
42
+ :controller => "<%= module_snake %>/api/v<%= api_version %>/<%= resource_plural %>",
43
+ :action => "destroy",
44
+ :id => "1"
45
+ )
46
+ end
47
+ end
@@ -0,0 +1,12 @@
1
+ Description:
2
+ A namespaced and versioned json controller that inherits from the main_apps api_controller.
3
+ Note a model still needs to be created that matches this resource. I like to scaffold it.
4
+ Run this generator inside the engine.
5
+
6
+ Example:
7
+ rails g json_voorhees:engine_create_controller People User
8
+
9
+ This will create:
10
+ Some files in app/controllers
11
+
12
+
@@ -0,0 +1,40 @@
1
+ module JsonVoorhees
2
+ class EngineCreateControllerGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :module_name, :type => :string
5
+ argument :resource_name, :type => :string
6
+ argument :api_version, :type => :string, :default => "1"
7
+ class_option :authorization, :type => :boolean, :default => true, :description => "Include authorization in controller"
8
+
9
+ def sprint
10
+ if options.authorization?
11
+ template "controller_template.rb.erb", "app/controllers/#{module_name.underscore}/api/v#{api_version}/#{resource_plural}_controller.rb"
12
+ else
13
+ template "no_auth_controller_template.rb.erb", "app/controllers/#{module_name.underscore}/api/v#{api_version}/#{resource_plural}_controller.rb"
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def resource_singular
20
+ resource_name.underscore.singularize
21
+ end
22
+
23
+ def resource_plural
24
+ resource_name.underscore.pluralize
25
+ end
26
+
27
+ def resource_camel
28
+ resource_name.camelize.singularize
29
+ end
30
+
31
+ def module_camel
32
+ module_name.camelize
33
+ end
34
+
35
+ def module_snake
36
+ module_name.underscore.downcase
37
+ end
38
+
39
+ end
40
+ end