json_voorhees 0.5.5 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -43
- data/lib/generators/json_voorhees/app_make_tests/templates/no_auth_request.rb.erb +2 -0
- data/lib/generators/json_voorhees/app_make_tests/templates/request.rb.erb +2 -0
- data/lib/generators/json_voorhees/app_make_user/templates/user/user_controller.rb +4 -4
- data/lib/generators/json_voorhees/create_engine/USAGE +8 -0
- data/lib/generators/json_voorhees/create_engine/create_engine_generator.rb +45 -0
- data/lib/generators/json_voorhees/massive_scaffold/massive_scaffold_generator.rb +7 -0
- data/lib/generators/json_voorhees/setup_app/templates/api_controller_with_arcadex.rb +11 -0
- data/lib/json_voorhees/version.rb +1 -1
- data/test/lib/generators/json_voorhees/create_engine_generator_test.rb +16 -0
- data/test/test_script.txt +18 -0
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2c926864334abb5b22eb0fc430e9055a048dffc
|
4
|
+
data.tar.gz: 3813492073e69ea5b0b3db2c032c58dda4c42a18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 579cf7928420d787ecd5a9faaa7eaabb9b51b7e87b41bec0edb153ded265d96eebf4703dc5ba8912db88edcc09383559d0005228d76509b574e1f1b792bfbfc6
|
7
|
+
data.tar.gz: dcfb1a56bd048626ef630a5bee36013924d7442b753fcfc3acf0aef983d76e93992cfa149ca7669d5b3a81270bf014a158b57e4a85efe407a9b362f77dfa0fdd
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# JsonVoorhees 0.
|
1
|
+
# JsonVoorhees 1.0.0
|
2
2
|
|
3
3
|
## Introduction
|
4
4
|
|
@@ -14,7 +14,7 @@ To install, put this in your main_app and run bundle install.
|
|
14
14
|
|
15
15
|
```bash
|
16
16
|
gem "json_voorhees"
|
17
|
-
```
|
17
|
+
```
|
18
18
|
To setup your application use the command below. It takes options that allow you
|
19
19
|
to do things like skip active_admin, skip a generic admin page, skip arcadex, and even
|
20
20
|
skip a user class. The default runs with active_admin, a user class and arcadex.
|
@@ -22,22 +22,17 @@ skip a user class. The default runs with active_admin, a user class and arcadex.
|
|
22
22
|
```bash
|
23
23
|
rails g json_voorhees:setup_app
|
24
24
|
```
|
25
|
-
Go to the engines folder and create an engine like so.
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
cd [engine name]
|
30
|
-
```
|
31
|
-
Add the gem to your gemspec and execute the following command
|
26
|
+
Now when you want to create an engine run the below command from the main app.
|
27
|
+
It takes care of mounting the engine, setting up the controllers, routes and gemspecs.
|
32
28
|
|
33
29
|
```bash
|
34
|
-
|
35
|
-
rails g json_voorhees:setup_engine [engine name]
|
30
|
+
rails g json_voorhees:create_engine [engine name]
|
36
31
|
```
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
32
|
+
|
33
|
+
Now we can create resources, run the below command from the main_app. Specs will be created
|
34
|
+
and the routes for that resource are setup.
|
35
|
+
|
41
36
|
```bash
|
42
37
|
rails g json_voorhees:massive_scaffold [engine name] [resource name] [api_version] [scaffold parameters]
|
43
38
|
|
@@ -45,27 +40,17 @@ example
|
|
45
40
|
|
46
41
|
rails g json_voorhees:massive_scaffold chat message 1 user_id:integer message:text
|
47
42
|
```
|
48
|
-
Make sure the resource is in the correct scoping in the Engines routing file. Then
|
49
|
-
copy over the engines migrations and migrate the main app. Check if everything is fine by
|
50
|
-
running rspec from the main app.
|
51
43
|
|
52
44
|
## Project Flow
|
53
45
|
|
54
46
|
1. Create main app
|
55
|
-
2. (in
|
56
|
-
3.
|
57
|
-
4.
|
58
|
-
5. (in
|
59
|
-
6.
|
60
|
-
7. (in app) rails g json_voorhees:massive_scaffod [engine name] [resource name] [api_version] [field:type field:type]
|
61
|
-
8. Fix the engines route file
|
62
|
-
9. Copy migrations to main app and run db migrations in main app
|
63
|
-
10. (in app) Run rspec to check for errors
|
64
|
-
|
65
|
-
Steps 1 through 2 are only done once. You need to run massive_scaffold for each
|
66
|
-
resource.
|
47
|
+
2. (in main_app root) rails g json_voorhees:setup_app
|
48
|
+
3. (in main_app root) rails g json_voorhees:create_engine [engine name]
|
49
|
+
4. (in main_app root) rails g json_voorhees:massive_scaffold [engine name] [resource name] [api_version] [field:type field:type]
|
50
|
+
5. (in main_app root) Copy migrations to main app and run db migrations in main app like so. "rake railties:install:migrations && rake db:migrate RAILS_ENV=development"
|
51
|
+
6. (in main_app root) Run "rspec" to check for errors
|
67
52
|
|
68
|
-
I usually set the app up, and then design the database. I make a list of all the models I need, then separate them into engines. Then I run 20 or so massive scaffolds using "&&". The result is a functioning backend that only needs the model relationships wired together. The default tests get you pretty far.
|
53
|
+
I usually set the app up, and then design the database. I make a list of all the models I need, then separate them into engines. Then I run 20 or so massive scaffolds using "&&". The result is a modular functioning backend that only needs the model relationships wired together. The default tests get you pretty far.
|
69
54
|
|
70
55
|
## Individual Generator Use
|
71
56
|
|
@@ -85,6 +70,7 @@ the gem and the options. They each have a multitude of arguments and options.
|
|
85
70
|
10. rails g json_voorhees:massive_scaffold
|
86
71
|
11. rails g json_voorhees:setup_app
|
87
72
|
12. rails g json_voorhees:setup_engine
|
73
|
+
13. rails g json_voorhees:create_engine
|
88
74
|
|
89
75
|
## Versioning
|
90
76
|
|
@@ -95,9 +81,7 @@ else resides in engines for good modularity.
|
|
95
81
|
|
96
82
|
## Recent Additions
|
97
83
|
|
98
|
-
|
99
|
-
the authenticate_user filter and call set_hash before the method. Now current_user
|
100
|
-
will return the current user or nil and the application will not render a 401.
|
84
|
+
Create the create_engine generator and made hooking the engine up to the main_app painless.
|
101
85
|
|
102
86
|
## Reminder
|
103
87
|
|
@@ -113,13 +97,12 @@ If active admin is used (it is by default) the admin section username is admin a
|
|
113
97
|
|
114
98
|
## To Do
|
115
99
|
|
116
|
-
1.
|
117
|
-
2.
|
118
|
-
3.
|
119
|
-
4.
|
120
|
-
5.
|
121
|
-
6.
|
122
|
-
7.
|
123
|
-
8.
|
124
|
-
9.
|
125
|
-
10. Fix the breadcrumbs link in ActiveAdmin.
|
100
|
+
1. Maybe give an option to include pagination?
|
101
|
+
2. Option for websockets and paperclip?
|
102
|
+
3. Make the non defaults easier to user
|
103
|
+
4. Use Devise as the default user and admin user? This will make it easier for users to reset their password as this is already setup.
|
104
|
+
5. Git clone arcadex, type_validator and defcon to make it easier for users to customize?
|
105
|
+
6. Move the people engine into it's own gem?
|
106
|
+
7. Create a whenever task to destroy expired tokens.
|
107
|
+
8. Fix the breadcrumbs link in ActiveAdmin.
|
108
|
+
9. Add a mailgun and support for forgotten passwords
|
@@ -10,6 +10,8 @@ RSpec.describe ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>
|
|
10
10
|
FactoryGirl.create_list(:<%= module_snake %>_<%= resource_singular %>_<%= api_version %>, 10)
|
11
11
|
get 'api/<%= api_version %>/<%= resource_plural %>'
|
12
12
|
expect(response.status).to eq(200) #ok
|
13
|
+
expect(::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.count).to eq(10)
|
14
|
+
expect(json["<%= resource_plural %>"].length).to eq(10)
|
13
15
|
end
|
14
16
|
end
|
15
17
|
end
|
@@ -13,6 +13,8 @@ RSpec.describe ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>
|
|
13
13
|
FactoryGirl.create_list(:<%= module_snake %>_<%= resource_singular %>_<%= api_version %>, 10)
|
14
14
|
get 'api/<%= api_version %>/<%= resource_plural %>', nil, @header
|
15
15
|
expect(response.status).to eq(200) #ok
|
16
|
+
expect(::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.count).to eq(10)
|
17
|
+
expect(json["<%= resource_plural %>"].length).to eq(10)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -65,7 +65,7 @@ module People
|
|
65
65
|
|
66
66
|
# POST /api/1/users/authenticate
|
67
67
|
def authenticate
|
68
|
-
if
|
68
|
+
if user_authenticate_password
|
69
69
|
return
|
70
70
|
end
|
71
71
|
render json: {}
|
@@ -84,7 +84,7 @@ module People
|
|
84
84
|
|
85
85
|
# PATCH/PUT /api/1/users/1
|
86
86
|
def update
|
87
|
-
if
|
87
|
+
if user_authenticate_password
|
88
88
|
return
|
89
89
|
end
|
90
90
|
if @user.update(user_params)
|
@@ -97,8 +97,8 @@ module People
|
|
97
97
|
private
|
98
98
|
# Use callbacks to share common setup or constraints between actions.
|
99
99
|
|
100
|
-
def
|
101
|
-
if
|
100
|
+
def user_authenticate_password
|
101
|
+
if authenticate_password
|
102
102
|
render :json => {errors: "Email and/or Password is incorrect"}, status: :unauthorized
|
103
103
|
return true
|
104
104
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module JsonVoorhees
|
2
|
+
class CreateEngineGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
argument :module_name, :type => :string
|
5
|
+
|
6
|
+
def sprint
|
7
|
+
inside "" do
|
8
|
+
run "rails plugin new engines/#{module_snake} --mountable"
|
9
|
+
end
|
10
|
+
inside "engines/#{module_snake}" do
|
11
|
+
add_dependency
|
12
|
+
run "rails g json_voorhees:setup_engine #{module_snake}"
|
13
|
+
end
|
14
|
+
inside "config" do
|
15
|
+
mount
|
16
|
+
end
|
17
|
+
inside "" do
|
18
|
+
gem "#{module_snake}", :path => "engines/#{module_snake}"
|
19
|
+
run "bundle install"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def mount
|
26
|
+
gsub_file "routes.rb", "root to: \"app_index#app\"\n", "root to: \"app_index#app\"\n mount #{module_camel}::Engine, at: '/'\n"
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_dependency
|
30
|
+
inject_into_file "#{module_snake}.gemspec", after: "s.add_development_dependency \"sqlite3\"\n" do <<-'RUBY'
|
31
|
+
s.add_development_dependency "json_voorhees"
|
32
|
+
RUBY
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def module_camel
|
37
|
+
module_name.camelize
|
38
|
+
end
|
39
|
+
|
40
|
+
def module_snake
|
41
|
+
module_name.underscore.downcase
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -27,6 +27,7 @@ module JsonVoorhees
|
|
27
27
|
else
|
28
28
|
run "rails g json_voorhees:engine_scaffold #{module_name} #{resource_name} #{api_version} #{attributes.join(" ")} --skip-arcadex"
|
29
29
|
end
|
30
|
+
correct_routes
|
30
31
|
end
|
31
32
|
if options.arcadex?
|
32
33
|
run "rails g json_voorhees:app_scaffold #{module_name} #{resource_name} #{api_version} #{attributes.join(" ")}"
|
@@ -37,10 +38,16 @@ module JsonVoorhees
|
|
37
38
|
#run "rails generate active_admin:resource #{module_name.underscore.downcase}::#{resource_name.singularize.underscore.downcase}"
|
38
39
|
make_custom_active_admin
|
39
40
|
end
|
41
|
+
|
40
42
|
end
|
41
43
|
|
42
44
|
private
|
43
45
|
|
46
|
+
def correct_routes
|
47
|
+
gsub_file 'config/routes.rb', "resources :#{resource_plural}", "#resources :#{resource_plural}"
|
48
|
+
gsub_file 'config/routes.rb', "scope '1' do\n", "scope '1' do\nresources :#{resource_plural}, controller: \'api/v1/#{resource_plural}\'\n"
|
49
|
+
end
|
50
|
+
|
44
51
|
def make_custom_active_admin
|
45
52
|
template "active_admin_register.rb.erb", "app/admin/#{module_name.underscore}_#{resource_singular}.rb"
|
46
53
|
end
|
@@ -17,6 +17,17 @@ class Api::V1::ApiController < ::ActionController::API
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def authenticate_password
|
21
|
+
if current_user.nil?
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
if !current_user.authenticate(params[:user][:password])
|
25
|
+
return true
|
26
|
+
else
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
20
31
|
def set_hash
|
21
32
|
#["current_user","current_token"] Make this true to check for email also
|
22
33
|
@instance_hash = ::Arcadex::Authentication.full_authentication(params,request,false)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'generators/create_engine/create_engine_generator'
|
3
|
+
|
4
|
+
module JsonVoorhees
|
5
|
+
class CreateEngineGeneratorTest < Rails::Generators::TestCase
|
6
|
+
tests CreateEngineGenerator
|
7
|
+
destination Rails.root.join('tmp/generators')
|
8
|
+
setup :prepare_destination
|
9
|
+
|
10
|
+
# test "generator runs without errors" do
|
11
|
+
# assert_nothing_raised do
|
12
|
+
# run_generator ["arguments"]
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Go to the test directory and run this script. Make sure rspec tests are green.
|
2
|
+
|
3
|
+
cp fresh_copy/test_app . &&
|
4
|
+
cd test_app &&
|
5
|
+
rails g json_voorhees:setup_app &&
|
6
|
+
rails g json_voorhees:create_engine ocean &&
|
7
|
+
rails g json_voorhees:massive_scaffold ocean atlantic 1 cold:boolean hot:boolean &&
|
8
|
+
rake railties:install:migrations &&
|
9
|
+
rake db:migrate RAILS_ENV=development &&
|
10
|
+
rake db:migrate RAILS_ENV=test &&
|
11
|
+
rake db:migrate RAILS_ENV=production &&
|
12
|
+
rspec
|
13
|
+
|
14
|
+
Remember to delete the copied test_app before commiting!
|
15
|
+
From the test/test_app directory
|
16
|
+
|
17
|
+
cd .. &&
|
18
|
+
rm -rf test_app
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_voorhees
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cleophus Robinson
|
@@ -91,6 +91,8 @@ files:
|
|
91
91
|
- lib/generators/json_voorhees/app_make_user/templates/user/user_serializer.rb
|
92
92
|
- lib/generators/json_voorhees/app_scaffold/USAGE
|
93
93
|
- lib/generators/json_voorhees/app_scaffold/app_scaffold_generator.rb
|
94
|
+
- lib/generators/json_voorhees/create_engine/USAGE
|
95
|
+
- lib/generators/json_voorhees/create_engine/create_engine_generator.rb
|
94
96
|
- lib/generators/json_voorhees/engine_create_controller/USAGE
|
95
97
|
- lib/generators/json_voorhees/engine_create_controller/engine_create_controller_generator.rb
|
96
98
|
- lib/generators/json_voorhees/engine_create_controller/templates/controller_template.rb.erb
|
@@ -200,12 +202,14 @@ files:
|
|
200
202
|
- test/lib/generators/json_voorhees/app_make_admin_generator_test.rb
|
201
203
|
- test/lib/generators/json_voorhees/app_make_user_generator_test.rb
|
202
204
|
- test/lib/generators/json_voorhees/app_scaffold_generator_test.rb
|
205
|
+
- test/lib/generators/json_voorhees/create_engine_generator_test.rb
|
203
206
|
- test/lib/generators/json_voorhees/engine_create_model_generator_test.rb
|
204
207
|
- test/lib/generators/json_voorhees/engine_make_model_generator_test.rb
|
205
208
|
- test/lib/generators/json_voorhees/engine_scaffold_generator_test.rb
|
206
209
|
- test/lib/generators/json_voorhees/engine_serializer_generator_test.rb
|
207
210
|
- test/lib/generators/json_voorhees/massive_scaffold_generator_test.rb
|
208
211
|
- test/test_helper.rb
|
212
|
+
- test/test_script.txt
|
209
213
|
homepage: https://github.com/cleor41/json_voorhees
|
210
214
|
licenses:
|
211
215
|
- MIT
|
@@ -238,6 +242,7 @@ test_files:
|
|
238
242
|
- test/lib/generators/json_voorhees/app_scaffold_generator_test.rb
|
239
243
|
- test/lib/generators/json_voorhees/engine_scaffold_generator_test.rb
|
240
244
|
- test/lib/generators/json_voorhees/massive_scaffold_generator_test.rb
|
245
|
+
- test/lib/generators/json_voorhees/create_engine_generator_test.rb
|
241
246
|
- test/lib/generators/json_voorhees/app_make_admin_generator_test.rb
|
242
247
|
- test/lib/generators/json_voorhees/engine_serializer_generator_test.rb
|
243
248
|
- test/json_voorhees_test.rb
|
@@ -276,6 +281,7 @@ test_files:
|
|
276
281
|
- test/dummy/app/assets/stylesheets/application.css
|
277
282
|
- test/dummy/log/development.log
|
278
283
|
- test/test_helper.rb
|
284
|
+
- test/test_script.txt
|
279
285
|
- test/fresh_copy/test_app/Gemfile.lock
|
280
286
|
- test/fresh_copy/test_app/bin/rake
|
281
287
|
- test/fresh_copy/test_app/bin/rails
|