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
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,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,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.
|
data/lib/generators/json_voorhees/app_make_authorizations/app_make_authorizations_generator.rb
ADDED
@@ -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,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,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
|
+
|
data/lib/generators/json_voorhees/engine_create_controller/engine_create_controller_generator.rb
ADDED
@@ -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
|