json_voorhees 0.3.9 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8daf1dd808cd2380474ca030214738f5f374d955
4
- data.tar.gz: 7825f326e02cc3e3de7991468573dfbe320047fc
3
+ metadata.gz: f85f4f709a200d564ef318e66a78ba4a472fa5d9
4
+ data.tar.gz: 54eb225d14d43ebd4a1645337f1a886fdd8d256e
5
5
  SHA512:
6
- metadata.gz: 67f249015ad3a6069d3911cd9b0e3cc3b1969bf29d4ba2dc83aa817f847ac9ecc836da80879fd16046950450b0743989b7984a011508e2a8de84f0110a8bde3d
7
- data.tar.gz: 0c9d17b1cdf174308ac7d1ac9e23d518e1734fc6652e22229a1fcf7d10da66ff11ac1a951c55d6b660ee3766dd1969adf051ffbecb5410eda9ff4aca61f44ec2
6
+ metadata.gz: c1ff8bc5c94a283e6a35b8bbb77f8a6a94fc5bdf2b27baddb185005fb1b096a333f9335fb618f12d97be146c17481b9e9861ec8cf87e9f5a359be3f91b03caf4
7
+ data.tar.gz: 6aeeabf8ba46aa58186a5024f8f27cb550d7aad2b88a7650988b434a6fe453bf5d9f29c5b3436db17829718d2f0e6dfc23ac3e264d88b6019405098cbd205336
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # JsonVoorhees 0.3.5
1
+ # JsonVoorhees 0.4.0
2
2
 
3
3
  ## Introduction
4
4
 
@@ -40,6 +40,10 @@ top of rails scaffold and in the process creates the api counterpart. You have
40
40
  the option of skipping the normal rails scaffold.
41
41
  ```bash
42
42
  rails g json_voorhees:massive_scaffold [engine name] [resource name] [api_version] [scaffold parameters]
43
+
44
+ example
45
+
46
+ rails g json_voorhees:massive_scaffold chat message 1 user_id:integer message:text
43
47
  ```
44
48
  Make sure the resource is in the correct scoping in the Engines routing file. Then
45
49
  copy over the engines migrations and migrate the main app. Check if everything is fine by
@@ -80,9 +84,27 @@ the gem and the options. They each have a multitude of arguments and options.
80
84
  11. rails g json_voorhees:setup_app
81
85
  12. rails g json_voorhees:setup_engine
82
86
 
87
+ ## Versioning
88
+
89
+ This generator is strongly tied in with versioning. As so every
90
+ model, controller, serializer, test and factory created with this tool are
91
+ versioned. The main app hosts the application controllers and test suite. Everything
92
+ else resides in engines for good modularity.
93
+
83
94
  ## To Do
84
95
 
85
96
  1. Figure out a better way to test this thing
86
97
  2. Use option for namespaced engine or no engine
87
98
  3. Maybe give an option to include pagination?
88
- 4. Option for websockets and paperclip?
99
+ 4. Option for websockets and paperclip?
100
+ 5. Make the non defaults easier to user
101
+
102
+ ## Reminder
103
+
104
+ For more granular control over tokens and the admin user,
105
+ clone the github repos into the engines folder and point your
106
+ gem file to that. Edit what you want.
107
+
108
+ To setup admin restrictions, use the attributes for the admin
109
+ class and put before_filters before all of the CRUD actions.
110
+ Make sure the current_user has the correct permissions.
@@ -8,6 +8,7 @@ module JsonVoorhees
8
8
  def sprint
9
9
  if options.active_admin?
10
10
  make_active_admin
11
+ make_dashboard
11
12
  else
12
13
  make_admin
13
14
  end
@@ -15,19 +16,30 @@ module JsonVoorhees
15
16
 
16
17
  private
17
18
 
19
+ def make_dashboard
20
+ run "rm -f app/admin/dashboard.rb"
21
+ copy_file "dashboard.rb.erb", "app/admin/dashboard.rb"
22
+ end
23
+
18
24
  def make_active_admin
19
25
  run "rails g active_admin:install --skip-users"
26
+ template "defcon_admin_register.rb.erb", "app/admin/defcon_admin_user.rb"
20
27
  inject_into_file 'app/controllers/application_controller.rb', after: "protect_from_forgery with: :exception\n" do <<-'RUBY'
21
28
 
22
- #This needs to be put inside a config file. but this is good for now
23
- #This only requires the password for the admin section of the website
24
29
  protected
25
30
 
26
- def authenticate
27
- authenticate_or_request_with_http_basic do |username, password|
28
- username == "admin" && password == "password"
31
+ def authenticate_admin_user!
32
+ if ::Defcon.authenticate_admin_user!(session)
33
+ return true
34
+ else
35
+ redirect_to defcon.defcon_login_path, alert: "Login!"
36
+ return false
37
+ end
38
+ end
39
+
40
+ def current_admin_user
41
+ return ::Defcon.current_admin_user(session)
29
42
  end
30
- end
31
43
 
32
44
  RUBY
33
45
  end
@@ -47,10 +59,12 @@ module JsonVoorhees
47
59
  inject_into_file 'config/initializers/active_admin.rb', after: "ActiveAdmin.setup do |config|\n" do <<-'RUBY'
48
60
 
49
61
  # http auth for admin area
50
- config.before_filter :authenticate
51
- config.authentication_method = false
52
- config.current_user_method = false
62
+ config.authentication_method = :authenticate_admin_user!
63
+ config.current_user_method = :current_admin_user
64
+ config.logout_link_path = "/sessions/destroy"
65
+ config.logout_link_method = :post
53
66
  config.allow_comments = false
67
+ config.site_title_link = "/"
54
68
 
55
69
  RUBY
56
70
  end
@@ -0,0 +1,69 @@
1
+ ActiveAdmin.register_page "Dashboard" do
2
+
3
+ menu priority: 1, label: proc{ I18n.t("active_admin.dashboard") }
4
+
5
+ content title: proc{ I18n.t("active_admin.dashboard") } do
6
+
7
+ columns do
8
+
9
+ column do
10
+ panel "Recent Signups" do
11
+ table_for ::People::User.order("created_at desc").limit(30) do
12
+ column :username do |user|
13
+ link_to user.username, admin_people_user_path(user)
14
+ end
15
+ column :email
16
+ column :created_at
17
+ end
18
+ strong { link_to "View All Users", admin_people_users_path }
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
26
+
27
+ =begin
28
+ columns do
29
+ column do
30
+ panel "Recent Signups" do
31
+ ul do
32
+ ::People::User.recent(30).map do |user|
33
+ li link_to(user.username, resource_path(user))
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ =end
40
+
41
+ =begin
42
+
43
+ div class: "blank_slate_container", id: "dashboard_default_message" do
44
+ span class: "blank_slate" do
45
+ span I18n.t("active_admin.dashboard_welcome.welcome")
46
+ small I18n.t("active_admin.dashboard_welcome.call_to_action")
47
+ end
48
+ end
49
+ =end
50
+ # Here is an example of a simple dashboard with columns and panels.
51
+ #
52
+ # columns do
53
+ # column do
54
+ # panel "Recent Posts" do
55
+ # ul do
56
+ # Post.recent(5).map do |post|
57
+ # li link_to(post.title, admin_post_path(post))
58
+ # end
59
+ # end
60
+ # end
61
+ # end
62
+
63
+ # column do
64
+ # panel "Info" do
65
+ # para "Welcome to ActiveAdmin."
66
+ # end
67
+ # end
68
+ # end
69
+ # content
@@ -0,0 +1,98 @@
1
+ ActiveAdmin.register Defcon::AdminUser do
2
+
3
+ config.per_page = 30
4
+
5
+ form do |f|
6
+ f.semantic_errors # shows errors on :base
7
+ #f.inputs # builds an input field for every attribute
8
+ f.inputs do
9
+ f.input :id
10
+ f.input :username
11
+ f.input :password
12
+ f.input :password_confirmation
13
+ f.input :email
14
+ f.input :read_only
15
+ f.input :attempts
16
+ f.input :max_attempts
17
+ f.input :master
18
+ f.input :updated_at
19
+ f.input :created_at
20
+ end
21
+ f.actions # adds the 'Submit' and 'Cancel' buttons
22
+ end
23
+
24
+ controller do
25
+ def create
26
+ @admin_user = ::Defcon::AdminUser.new(admin_user_params)
27
+ if @admin_user.save
28
+ flash[:notice] = "Created Successfully!"
29
+ redirect_to resource_path @admin_user
30
+ else
31
+ flash[:notice] = "#{@admin_user.errors.full_messages}"
32
+ redirect_to new_resource_path @admin_user
33
+ #super
34
+ #render :new
35
+ end
36
+ end
37
+
38
+ def update
39
+ @admin_user = ::Defcon::AdminUser.find(params[:id])
40
+ if @admin_user.update(admin_user_params)
41
+ flash[:notice] = "Updated Successfully!"
42
+ redirect_to resource_path @admin_user
43
+ else
44
+ flash.now[:notice] = "#{@admin_user.errors.full_messages}"
45
+ render :edit
46
+ #super
47
+ end
48
+ end
49
+
50
+ def destroy
51
+ =begin
52
+ @admin_user = ::Defcon::AdminUser.find(params[:id])
53
+ @admin_user.destroy
54
+ flash.now[:notice] = "Deleted Successfully!"
55
+ render :index
56
+ =end
57
+ flash.now[:notice] = "Deleting an Admin is serious business, update your policy first"
58
+ render :index
59
+ end
60
+
61
+ private
62
+
63
+ def admin_user_params
64
+ params.require(:admin_user).permit(:username,:email,:password,:password_confirmation,:read_only,:attempts,:max_attempts,:master)
65
+ end
66
+ end
67
+
68
+ index do
69
+ column :id
70
+ column :username
71
+ column :email
72
+ column :password_digest
73
+ column :read_only
74
+ column :attempts
75
+ column :max_attempts
76
+ column :master
77
+ column :updated_at
78
+ column :created_at
79
+ actions
80
+ end
81
+
82
+ show do
83
+ attributes_table do
84
+ row :id
85
+ row :username
86
+ row :email
87
+ row :password_digest
88
+ row :read_only
89
+ row :attempts
90
+ row :max_attempts
91
+ row :master
92
+ row :updated_at
93
+ row :created_at
94
+ end
95
+ end
96
+
97
+
98
+ end
@@ -7,12 +7,17 @@ module JsonVoorhees
7
7
  def sprint
8
8
  people
9
9
  if options.active_admin?
10
- run "rails g active_admin:resource people::user"
10
+ #run "rails g active_admin:resource people::user"
11
+ custom_active_admin
11
12
  end
12
13
  end
13
14
 
14
15
  private
15
16
 
17
+ def custom_active_admin
18
+ template "active_admin_register.rb.erb", "app/admin/people_user.rb"
19
+ end
20
+
16
21
  def people
17
22
  run "rails plugin new engines/people --mountable"
18
23
  inside('engines/people') do
@@ -20,8 +25,9 @@ module JsonVoorhees
20
25
  run "rails g json_voorhees:setup_engine people"
21
26
  add_generator
22
27
  #Now it needs to create the user class
23
- run "rails g scaffold user username:string:uniq email:string:uniq password_digest:string"
28
+ run "rails g scaffold user username:string:uniq email:string:uniq password_digest:string"
24
29
  #Add this to the routes and gemfile
30
+ add_ordering
25
31
  end
26
32
  #Need to add the engine to the main_apps gemfile
27
33
  route "mount People::Engine, at: \'/\'"
@@ -32,6 +38,18 @@ module JsonVoorhees
32
38
  insert_people_engine
33
39
  end
34
40
 
41
+ def add_ordering
42
+ #app/models/people/user.rb
43
+ inject_into_file "app/models/people/user.rb", after: "class User < ActiveRecord::Base\n" do <<-'RUBY'
44
+
45
+ def self.recent(num)
46
+ ::People::User.order("created_at DESC").limit(num)
47
+ end
48
+
49
+ RUBY
50
+ end
51
+ end
52
+
35
53
  def add_generator
36
54
  inject_into_file "people.gemspec", after: "s.test_files = Dir[\"test/**/*\"]\n" do <<-'RUBY'
37
55
 
@@ -0,0 +1,82 @@
1
+ ActiveAdmin.register People::User do
2
+
3
+ config.per_page = 30
4
+
5
+ form do |f|
6
+ f.semantic_errors # shows errors on :base
7
+ #f.inputs # builds an input field for every attribute
8
+ f.inputs do
9
+ f.input :id
10
+ f.input :username
11
+ f.input :email
12
+ f.input :password
13
+ f.input :password_confirmation
14
+ f.input :updated_at
15
+ f.input :created_at
16
+ end
17
+ f.actions # adds the 'Submit' and 'Cancel' buttons
18
+ end
19
+
20
+ controller do
21
+ def create
22
+ @user = ::People::V1::User.new(user_params)
23
+ if @user.save
24
+ flash[:notice] = "Created Successfully!"
25
+ redirect_to resource_path @user
26
+ else
27
+ flash[:notice] = "#{@user.errors.full_messages}"
28
+ redirect_to new_resource_path @user
29
+ #super
30
+ #render :new
31
+ end
32
+ end
33
+
34
+ def update
35
+ @user = ::People::V1::User.find(params[:id])
36
+ if @user.update(user_params)
37
+ flash[:notice] = "Updated Successfully!"
38
+ redirect_to resource_path @user
39
+ else
40
+ flash.now[:notice] = "#{@user.errors.full_messages}"
41
+ render :edit
42
+ #super
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ @user = ::People::V1::User.find(params[:id])
48
+ @token.destroy
49
+ flash.now[:notice] = "Deleted Successfully!"
50
+ render :index
51
+ end
52
+
53
+ private
54
+
55
+ def user_params
56
+ params.require(:user).permit(:username,:email,:password,:password_confirmation)
57
+ end
58
+ end
59
+
60
+ index do
61
+ column :id
62
+ column :username
63
+ column :email
64
+ column :password_digest
65
+ column :updated_at
66
+ column :created_at
67
+ actions
68
+ end
69
+
70
+ show do
71
+ attributes_table do
72
+ row :id
73
+ row :username
74
+ row :email
75
+ row :password_digest
76
+ row :updated_at
77
+ row :created_at
78
+ end
79
+ end
80
+
81
+
82
+ end
@@ -28,7 +28,7 @@ module People
28
28
  render :json => {user: userHash,token: tokenHash}
29
29
  else
30
30
  #Return an error if not saved
31
- render :json => {errors: user.errors}, status: :unprocessable_entity
31
+ render :json => {errors: user.errors.full_messages}, status: :unprocessable_entity
32
32
  end
33
33
  end
34
34
 
@@ -73,7 +73,7 @@ module People
73
73
  if @user.update(user_params)
74
74
  render json: @user
75
75
  else
76
- render :json => {errors: @user.errors}, status: :unprocessable_entity
76
+ render :json => {errors: @user.errors.full_messages}, status: :unprocessable_entity
77
77
  end
78
78
  end
79
79
 
@@ -11,9 +11,9 @@ module People
11
11
 
12
12
  after_create :setup_user
13
13
 
14
- validates :username, presence: true
14
+ validates :username, presence: true, :uniqueness => { :case_sensitive => false }
15
15
  #validates_format_of :username, :with => /\A[A-Za-z0-9\d]+\Z/i
16
- validates :email, presence: true
16
+ validates :email, presence: true, :uniqueness => { :case_sensitive => false }
17
17
  #Might need a regex for emails, or just rather confirm them
18
18
 
19
19
  <% if options.arcadex? %>
@@ -27,7 +27,7 @@ module <%= module_camel %>
27
27
  if @<%= resource_singular %>.save
28
28
  render json: @<%= resource_singular %>
29
29
  else
30
- render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
30
+ render :json => {errors: @<%= resource_singular %>.errors.full_messages}, status: :unprocessable_entity
31
31
  end
32
32
  end
33
33
 
@@ -36,7 +36,7 @@ module <%= module_camel %>
36
36
  if @<%= resource_singular %>.update(<%= resource_singular %>_params)
37
37
  render json: @<%= resource_singular %>
38
38
  else
39
- render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
39
+ render :json => {errors: @<%= resource_singular %>.errors.full_messages}, status: :unprocessable_entity
40
40
  end
41
41
  end
42
42
 
@@ -7,7 +7,7 @@ module <%= module_camel %>
7
7
 
8
8
  # GET /api/<%= api_version %>/<%= resource_plural %>
9
9
  def index
10
- @<%= resource_plural %> = ::<%= module_camel %>::<%= resource_camel %>.all
10
+ @<%= resource_plural %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.all
11
11
  render json: @<%= resource_plural %>
12
12
  end
13
13
 
@@ -18,11 +18,11 @@ module <%= module_camel %>
18
18
 
19
19
  # POST /api/<%= api_version %>/<%= resource_plural %>
20
20
  def create
21
- @<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.new(<%= resource_singular %>_params)
21
+ @<%= resource_singular %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.new(<%= resource_singular %>_params)
22
22
  if @<%= resource_singular %>.save
23
23
  render json: @<%= resource_singular %>
24
24
  else
25
- render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
25
+ render :json => {errors: @<%= resource_singular %>.errors.full_messages}, status: :unprocessable_entity
26
26
  end
27
27
  end
28
28
 
@@ -31,7 +31,7 @@ module <%= module_camel %>
31
31
  if @<%= resource_singular %>.update(<%= resource_singular %>_params)
32
32
  render json: @<%= resource_singular %>
33
33
  else
34
- render :json => {errors: @<%= resource_singular %>.errors}, status: :unprocessable_entity
34
+ render :json => {errors: @<%= resource_singular %>.errors.full_messages}, status: :unprocessable_entity
35
35
  end
36
36
  end
37
37
 
@@ -46,7 +46,7 @@ module <%= module_camel %>
46
46
  # Use callbacks to share common setup or constraints between actions.
47
47
 
48
48
  def set_<%= resource_singular %>
49
- @<%= resource_singular %> = ::<%= module_camel %>::<%= resource_camel %>.find_by_id(params[:id])
49
+ @<%= resource_singular %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.find_by_id(params[:id])
50
50
  if @<%= resource_singular %>.nil?
51
51
  render :json => {errors: "<%= resource_camel %> was not found"}, status: :not_found
52
52
  end
@@ -34,11 +34,46 @@ module JsonVoorhees
34
34
  run "rails g json_voorhees:app_scaffold #{module_name} #{resource_name} #{api_version} #{attributes.join(" ")} --skip-arcadex"
35
35
  end
36
36
  if options.active_admin?
37
- run "rails generate active_admin:resource #{module_name.underscore.downcase}::#{resource_name.singularize.underscore.downcase}"
37
+ #run "rails generate active_admin:resource #{module_name.underscore.downcase}::#{resource_name.singularize.underscore.downcase}"
38
+ make_custom_active_admin
38
39
  end
39
40
  end
40
41
 
41
42
  private
42
43
 
44
+ def make_custom_active_admin
45
+ template "active_admin_register.rb.erb", "app/admin/#{module_name.underscore}_#{resource_singular}.rb"
46
+ end
47
+
48
+ def params_list
49
+ params = []
50
+ attributes.each do |pair|
51
+ elem = pair.split(/:/)[0]
52
+ field = ":#{elem}"
53
+ params << field
54
+ end
55
+ return params.join(",")
56
+ end
57
+
58
+ def resource_singular
59
+ resource_name.underscore.singularize
60
+ end
61
+
62
+ def resource_plural
63
+ resource_name.underscore.pluralize
64
+ end
65
+
66
+ def resource_camel
67
+ resource_name.camelize.singularize
68
+ end
69
+
70
+ def module_camel
71
+ module_name.camelize
72
+ end
73
+
74
+ def module_snake
75
+ module_name.underscore.downcase
76
+ end
77
+
43
78
  end
44
79
  end
@@ -0,0 +1,96 @@
1
+ ActiveAdmin.register <%= module_camel %>::<%= resource_camel %> do
2
+
3
+ config.per_page = 30
4
+
5
+ form do |f|
6
+ f.semantic_errors # shows errors on :base
7
+ #f.inputs # builds an input field for every attribute
8
+ f.inputs do
9
+ f.input :id
10
+ <% attributes.each do |pair| %><% field = pair.split(":")[0] %>
11
+ f.input :<%= field %>
12
+ <% end %>
13
+ f.input :updated_at
14
+ f.input :created_at
15
+ end
16
+ f.actions # adds the 'Submit' and 'Cancel' buttons
17
+ end
18
+
19
+ controller do
20
+ def create
21
+ @<%= resource_singular %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.new(<%= resource_singular %>_params)
22
+ if @<%= resource_singular %>.save
23
+ flash[:notice] = "Created Successfully!"
24
+ redirect_to resource_path @<%= resource_singular %>
25
+ else
26
+ flash[:notice] = "#{@<%= resource_singular %>.errors.full_messages}"
27
+ redirect_to new_resource_path @<%= resource_singular %>
28
+ #super
29
+ #render :new
30
+ end
31
+ end
32
+
33
+
34
+ def update
35
+ @<%= resource_singular %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.find(params[:id])
36
+ if @<%= resource_singular %>.update(<%= resource_singular %>_params)
37
+ flash[:notice] = "Updated Successfully!"
38
+ redirect_to resource_path @<%= resource_singular %>
39
+ else
40
+ flash.now[:notice] = "#{@<%= resource_singular %>.errors.full_messages}"
41
+ render :edit
42
+ #super
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ @<%= resource_singular %> = ::<%= module_camel %>::V<%= api_version %>::<%= resource_camel %>.find(params[:id])
48
+ @<%= resource_singular %>.destroy
49
+ flash.now[:notice] = "Deleted Successfully!"
50
+ render :index
51
+ end
52
+
53
+ private
54
+
55
+ def <%= resource_singular %>_params
56
+ params.require(:<%= resource_singular %>).permit(<%= params_list %>)
57
+ end
58
+
59
+ end
60
+
61
+ index do
62
+ column :id
63
+ <% attributes.each do |pair| %><% field = pair.split(":")[0] %>
64
+ column :<%= field %>
65
+ <% end %>
66
+ column :updated_at
67
+ column :created_at
68
+ actions
69
+ end
70
+
71
+ show do
72
+ attributes_table do
73
+ row :id
74
+ <% attributes.each do |pair| %><% field = pair.split(":")[0] %>
75
+ row :<%= field %>
76
+ <% end %>
77
+ row :updated_at
78
+ row :created_at
79
+ end
80
+ end
81
+
82
+ # See permitted parameters documentation:
83
+ # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters
84
+ #
85
+ # permit_params :list, :of, :attributes, :on, :model
86
+ #
87
+ # or
88
+ #
89
+ # permit_params do
90
+ # permitted = [:permitted, :attributes]
91
+ # permitted << :other if resource.something?
92
+ # permitted
93
+ # end
94
+
95
+
96
+ end
@@ -16,6 +16,7 @@ module JsonVoorhees
16
16
  rspec
17
17
  api_controller
18
18
  include_middleware
19
+ cors_route
19
20
  if options.admin?
20
21
  make_admin
21
22
  end
@@ -27,13 +28,33 @@ module JsonVoorhees
27
28
  routes
28
29
  make_controllers
29
30
  if options.arcadex? && options.active_admin?
30
- run "rails generate active_admin:resource arcadex::token"
31
+ #run "rails generate active_admin:resource arcadex::token"
32
+ custom_active_admin
31
33
  end
34
+ if options.active_admin?
35
+ seed_database
36
+ end
37
+ run "wheneverize"
32
38
  run_git
33
39
  end
34
40
 
35
41
  private
36
42
 
43
+ def seed_database
44
+ #db/seeds.rb
45
+ inject_into_file "db/seeds.rb", after: "# Mayor.create(name: 'Emanuel', city: cities.first)\n" do <<-'RUBY'
46
+
47
+ ::Defcon::AdminUser.create({username: "admin", password: "password", password_confirmation: "password"})
48
+
49
+ RUBY
50
+ end
51
+ run "rake db:seed"
52
+ end
53
+
54
+ def custom_active_admin
55
+ template "active_admin_token_register.rb.erb", "app/admin/arcadex_token.rb"
56
+ end
57
+
37
58
  def make_admin
38
59
  if !options.active_admin?
39
60
  if !options.arcadex? && !options.user?
@@ -92,12 +113,20 @@ module JsonVoorhees
92
113
  end
93
114
 
94
115
  def routes
116
+ route "mount Defcon::Engine, at: \'/\'"
95
117
  route "root to: \"app_index#app\""
96
118
  if !options.active_admin? && options.admin?
97
119
  route "get \'admin\' => \'main#admin\', as: \"admin\" #admin_path"
98
120
  end
99
121
  end
100
122
 
123
+ def cors_route
124
+ route "#This is to handle the CORS preflight request, it only catches the options action.
125
+ controller \'api/v1/api\' do
126
+ match \'*unmatched_route\', :to => \'api/v1/api#route_options\', via: [:options]
127
+ end"
128
+ end
129
+
101
130
  def make_controllers
102
131
  generate "controller", "app_index app"
103
132
  run "rm -f app/controllers/app_index_controller.rb"
@@ -159,7 +188,7 @@ module JsonVoorhees
159
188
  gem 'type_cartographer'
160
189
  gem 'devise', "~> 3.2.4"
161
190
  if options.arcadex?
162
- gem 'arcadex', '~> 1.1.0'
191
+ gem 'arcadex', '~> 1.1.3'
163
192
  end
164
193
  if options.admin?
165
194
  gem 'autoprefixer-rails'
@@ -167,8 +196,11 @@ module JsonVoorhees
167
196
  end
168
197
  if options.active_admin?
169
198
  gem 'activeadmin', :git => 'https://github.com/activeadmin/activeadmin.git', :branch => "master"
199
+ gem 'defcon', '~> 1.2.3'
170
200
  end
171
201
  gem 'authorization', :path => "gems/authorization"
202
+ gem 'whenever', :require => false
203
+ #gem 'websocket-rails'
172
204
  end
173
205
 
174
206
  def create_file_structure
@@ -0,0 +1,93 @@
1
+ ActiveAdmin.register Arcadex::Token do
2
+
3
+ config.per_page = 30
4
+
5
+ form do |f|
6
+ f.semantic_errors # shows errors on :base
7
+ #f.inputs # builds an input field for every attribute
8
+ f.inputs do
9
+ f.input :id
10
+ f.input :imageable_id
11
+ f.input :imageable_type
12
+ f.input :times_used
13
+ f.input :first_ip_address
14
+ f.input :current_ip_address
15
+ f.input :auth_token
16
+ f.input :expiration_minutes
17
+ f.input :updated_at
18
+ f.input :created_at
19
+ end
20
+ f.actions # adds the 'Submit' and 'Cancel' buttons
21
+ end
22
+
23
+ controller do
24
+ def create
25
+ @token = ::Arcadex::Token.new(token_params)
26
+ if @token.save
27
+ flash[:notice] = "Created Successfully!"
28
+ redirect_to resource_path @token
29
+ else
30
+ flash[:notice] = "#{@token.errors.full_messages}"
31
+ redirect_to new_resource_path @token
32
+ #super
33
+ #render :new
34
+ end
35
+ end
36
+
37
+ def update
38
+ @token = ::Arcadex::Token.find(params[:id])
39
+ if @token.update(token_params)
40
+ flash[:notice] = "Updated Successfully!"
41
+ redirect_to resource_path @token
42
+ else
43
+ flash.now[:notice] = "#{@token.errors.full_messages}"
44
+ render :edit
45
+ #super
46
+ end
47
+ end
48
+
49
+ def destroy
50
+ @token = ::Arcadex::Token.find(params[:id])
51
+ @token.destroy
52
+ flash.now[:notice] = "Deleted Successfully!"
53
+ render :index
54
+ end
55
+
56
+ private
57
+
58
+ def token_params
59
+ params.require(:token).permit(:times_used,:imageable_id,:imageable_type,:password_confirmation,:first_ip_address,:current_ip_address,:auth_token,:expiration_minutes)
60
+ end
61
+ end
62
+
63
+ index do
64
+ column :id
65
+ column :imageable_id
66
+ column :imageable_type
67
+ column :times_used
68
+ column :first_ip_address
69
+ column :current_ip_address
70
+ column :auth_token
71
+ column :expiration_minutes
72
+ column :updated_at
73
+ column :created_at
74
+ actions
75
+ end
76
+
77
+ show do
78
+ attributes_table do
79
+ row :id
80
+ row :imageable_id
81
+ row :imageable_type
82
+ row :times_used
83
+ row :first_ip_address
84
+ row :current_ip_address
85
+ row :auth_token
86
+ row :expiration_minutes
87
+ row :updated_at
88
+ row :created_at
89
+ end
90
+ end
91
+
92
+
93
+ end
@@ -1,8 +1,32 @@
1
1
  class Api::V1::ApiController < ::ActionController::API
2
2
 
3
+ after_filter :cors_set_access_control_headers
4
+
5
+ def route_options
6
+ cors_preflight_check
7
+ end
8
+
3
9
  private
4
10
 
5
- def current_user
6
- nil
7
- end
11
+ def current_user
12
+ nil
13
+ end
14
+
15
+ def cors_set_access_control_headers
16
+ response.headers['Access-Control-Allow-Origin'] = '*'
17
+ response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
18
+ response.headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept, Authorization, Token, Auth-Token, Email'
19
+ response.headers['Access-Control-Max-Age'] = "1728000"
20
+ end
21
+
22
+ def cors_preflight_check
23
+ if request.method == 'OPTIONS'
24
+ request.headers['Access-Control-Allow-Origin'] = '*'
25
+ request.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
26
+ request.headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version, Token, Auth-Token, Email'
27
+ request.headers['Access-Control-Max-Age'] = '1728000'
28
+ render :text => '', :content_type => 'text/plain'
29
+ end
30
+ end
31
+
8
32
  end
@@ -1,6 +1,12 @@
1
1
  class Api::V1::ApiController < ::ActionController::API
2
2
 
3
3
  before_action :authenticate_user
4
+ after_filter :cors_set_access_control_headers
5
+ skip_before_filter :authenticate_user, :only => [:route_options]
6
+
7
+ def route_options
8
+ cors_preflight_check
9
+ end
4
10
 
5
11
  private
6
12
 
@@ -23,4 +29,22 @@ class Api::V1::ApiController < ::ActionController::API
23
29
  @instance_hash["current_token"]
24
30
  end
25
31
  end
32
+
33
+ def cors_set_access_control_headers
34
+ response.headers['Access-Control-Allow-Origin'] = '*'
35
+ response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
36
+ response.headers['Access-Control-Allow-Headers'] = 'Origin, Content-Type, Accept, Authorization, Token, Auth-Token, Email'
37
+ response.headers['Access-Control-Max-Age'] = "1728000"
38
+ end
39
+
40
+ def cors_preflight_check
41
+ if request.method == 'OPTIONS'
42
+ request.headers['Access-Control-Allow-Origin'] = '*'
43
+ request.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, PATCH, DELETE, OPTIONS'
44
+ request.headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version, Token, Auth-Token, Email'
45
+ request.headers['Access-Control-Max-Age'] = '1728000'
46
+ render :text => '', :content_type => 'text/plain'
47
+ end
48
+ end
49
+
26
50
  end
@@ -1,3 +1,3 @@
1
1
  module JsonVoorhees
2
- VERSION = "0.3.9"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_voorhees
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cleophus Robinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-12 00:00:00.000000000 Z
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -57,6 +57,8 @@ files:
57
57
  - config/routes.rb
58
58
  - lib/generators/json_voorhees/app_make_admin/USAGE
59
59
  - lib/generators/json_voorhees/app_make_admin/app_make_admin_generator.rb
60
+ - lib/generators/json_voorhees/app_make_admin/templates/dashboard.rb.erb
61
+ - lib/generators/json_voorhees/app_make_admin/templates/defcon_admin_register.rb.erb
60
62
  - lib/generators/json_voorhees/app_make_admin/templates/views/_footer.html.erb
61
63
  - lib/generators/json_voorhees/app_make_admin/templates/views/_header.html.erb
62
64
  - lib/generators/json_voorhees/app_make_admin/templates/views/admin_home_no_user
@@ -75,6 +77,7 @@ files:
75
77
  - lib/generators/json_voorhees/app_make_tests/templates/routing.rb.erb
76
78
  - lib/generators/json_voorhees/app_make_user/USAGE
77
79
  - lib/generators/json_voorhees/app_make_user/app_make_user_generator.rb
80
+ - lib/generators/json_voorhees/app_make_user/templates/active_admin_register.rb.erb
78
81
  - lib/generators/json_voorhees/app_make_user/templates/user/include_authorization.rb
79
82
  - lib/generators/json_voorhees/app_make_user/templates/user/specs/factory_girl.rb
80
83
  - lib/generators/json_voorhees/app_make_user/templates/user/specs/model_specs.rb
@@ -102,8 +105,10 @@ files:
102
105
  - lib/generators/json_voorhees/engine_scaffold/engine_scaffold_generator.rb
103
106
  - lib/generators/json_voorhees/massive_scaffold/USAGE
104
107
  - lib/generators/json_voorhees/massive_scaffold/massive_scaffold_generator.rb
108
+ - lib/generators/json_voorhees/massive_scaffold/templates/active_admin_register.rb.erb
105
109
  - lib/generators/json_voorhees/setup_app/USAGE
106
110
  - lib/generators/json_voorhees/setup_app/setup_app_generator.rb
111
+ - lib/generators/json_voorhees/setup_app/templates/active_admin_token_register.rb.erb
107
112
  - lib/generators/json_voorhees/setup_app/templates/api_controller_no_arcadex.rb
108
113
  - lib/generators/json_voorhees/setup_app/templates/api_controller_with_arcadex.rb
109
114
  - lib/generators/json_voorhees/setup_app/templates/app_index_controller.rb