sharp_admin 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d833990187e75b9fedc524e9bd1fab0b8dcab152
4
+ data.tar.gz: f0a52fe45bc1dd7ca08380d38aa8a3973a6e3bd5
5
+ SHA512:
6
+ metadata.gz: 2188637259156f62c06a2ace1c46b502d4cd14de4ea690bf16152f6515c5032f501d9817c09b4f279e486f9048f1a2742190ae5c5cdeb6a4fd05ee144b3245dc
7
+ data.tar.gz: 53863881c2c65db47d478160c6ed31a78053347ad281785d9707cf2c64dbf222135d6ff4bd68a2b0bc00ced12ca6887a66497d9d323dc990e1d15111cfe261b5
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 sharp
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.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = EasyAdmin
2
+
3
+ This project rocks and uses MIT-LICENSE.
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 = 'SharpAdmin'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
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,2 @@
1
+ module SharpAdmin
2
+ end
@@ -0,0 +1,87 @@
1
+ require 'rails/generators/resource_helpers'
2
+ require 'rails/generators/named_base'
3
+
4
+ class SharpAdminGenerator < Rails::Generators::NamedBase
5
+
6
+ include Rails::Generators::ResourceHelpers
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ class_option :search_by, :type => :string, :desc => "The field or criteria to meta_search by (not required, but without a doubt recommended)"
11
+
12
+ class_option :no_create, :type => :boolean, :default => false, :desc => "Omit functionality to create a new record."
13
+
14
+ class_option :read_only, :type => :boolean, :default => false, :desc => "Omit create, edit and update functionality."
15
+
16
+ def create_base_controller
17
+ empty_directory "app/controllers/admin"
18
+ path = File.join("app/controllers/admin", "base_controller.rb")
19
+ template("base_controller.rb", path) unless File.exists?(path)
20
+ end
21
+
22
+ def create_base_controller_spec
23
+ empty_directory "spec/controllers/admin"
24
+ path = File.join("spec/controllers/admin", "base_controller_spec.rb")
25
+ template("base_controller_spec.rb", path) unless File.exists?(path)
26
+ end
27
+
28
+ def create_controller
29
+ @attributes_symbols = get_model_columns.dup.delete_if {|attribute| ['id', 'created_at', 'updated_at'].include? attribute.name }.collect {|attribute| ":#{attribute.name}" }
30
+ template "controller.rb", File.join("app/controllers/admin", "#{controller_file_name}_controller.rb")
31
+ end
32
+
33
+ def create_controller_rspec
34
+ template "controller_spec.rb", File.join("spec/controllers/admin", "#{controller_file_name}_controller_spec.rb")
35
+ end
36
+
37
+ def create_helper
38
+ empty_directory "app/helpers/admin"
39
+ template "base_helper.rb", File.join("app/helpers/admin", "base_helper.rb")
40
+ end
41
+
42
+ def create_views
43
+ empty_directory "app/views/admin/#{controller_file_name}"
44
+ @attributes = get_model_columns
45
+ available_views.each do |view|
46
+ template "views/#{view}.html.erb", File.join("app/views/admin", controller_file_name, "#{view}.html.haml")
47
+ end
48
+ end
49
+
50
+ def add_resource_route
51
+ return if not File.exists?("config/routes.rb")
52
+ route_config = "namespace :admin do "
53
+ route_config << "resources :#{file_name.pluralize}"
54
+ route_config << " end"
55
+ route route_config
56
+ end
57
+
58
+ protected
59
+
60
+ def available_views
61
+ views = ["index", "new", "show", "edit", "_form"]
62
+
63
+ views.delete("new") if options[:no_create]
64
+
65
+ ["new", "edit", "_form"].each { |v| views.delete(v) } if options[:read_only]
66
+
67
+ views
68
+ end
69
+
70
+ def model_exists?(klass_name)
71
+ begin
72
+ klass = Module.const_get(klass_name)
73
+ return klass.superclass == ActiveRecord::Base
74
+ rescue NameError
75
+ return false
76
+ end
77
+ end
78
+
79
+ def get_model_columns
80
+ if model_exists?(class_name)
81
+ class_name.constantize.send(:columns)
82
+ else
83
+ [] # allow user (and test) to generate the view files
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,18 @@
1
+ class Admin::BaseController < ApplicationController
2
+
3
+ before_filter :require_admin
4
+
5
+ protected
6
+
7
+ def require_admin
8
+ unless current_user.try(:admin?)
9
+ render404 and return false
10
+ end
11
+ end
12
+
13
+ def render404
14
+ render :file => File.join(Rails.root, 'public', '404.html'), :status => 404
15
+ return true
16
+ end
17
+
18
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Admin::BaseController do
4
+
5
+ describe "GET 'index'" do
6
+
7
+ context "logged in as admin" do
8
+
9
+ it "renders index page" do
10
+ controller.stub_chain(:current_user, :admin?).and_return(true)
11
+
12
+ get :index
13
+
14
+ expect(response).to render_template('index')
15
+ end
16
+
17
+ end
18
+
19
+ context "logged in as user" do
20
+
21
+ it "renders 404" do
22
+ controller.stub_chain(:current_user, :admin?).and_return(false)
23
+
24
+ get :index
25
+
26
+ expect(response).to render_template('404.html')
27
+ expect(response.response_code).to eql(404)
28
+ end
29
+
30
+ end
31
+
32
+ context "not logged in" do
33
+
34
+ it "renders 404" do
35
+ allow(controller).to receive(:current_user).and_return(nil)
36
+
37
+ get :index
38
+
39
+ expect(response).to render_template('404.html')
40
+ expect(response.response_code).to eql(404)
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,10 @@
1
+ module Admin::BaseHelper
2
+
3
+ def sortable(column, title = nil)
4
+ title ||= column.titleize
5
+ css_class = (column == sort_column) ? "current #{sort_direction}" : nil
6
+ direction = (column == sort_column && sort_direction == "asc") ? "desc" : "asc"
7
+ link_to title, { :sort => column, :direction => direction }, { :class => css_class }
8
+ end
9
+
10
+ end
@@ -0,0 +1,76 @@
1
+ class Admin::<%= controller_class_name %>Controller < Admin::BaseController
2
+
3
+ helper_method :sort_column, :sort_direction
4
+
5
+ before_filter :find_<%= singular_table_name %>, :only => [<% unless options[:read_only] %>:edit, :update,<% end %> :show, :destroy]
6
+
7
+ def index
8
+ @q = <%= class_name %>.search(params[:q])
9
+ @<%= plural_table_name %> = find_<%= plural_table_name %>
10
+ end
11
+
12
+ <% unless options[:no_create] || options[:read_only] %>
13
+ def new
14
+ @<%= singular_table_name %> = <%= class_name %>.new
15
+ end
16
+
17
+ def create
18
+ @<%= singular_table_name %> = <%= class_name %>.new(<%= singular_table_name %>_params)
19
+ if @<%= singular_table_name %>.save
20
+ redirect_to admin_<%= plural_table_name %>_path, :notice => "Successfully created <%= human_name.downcase %>."
21
+ else
22
+ render :new
23
+ end
24
+ end
25
+ <% end -%>
26
+
27
+ def show
28
+ end
29
+
30
+ <% unless options[:read_only] -%>
31
+ def edit
32
+ end
33
+
34
+ def update
35
+ if @<%= singular_table_name %>.update_attributes(<%= singular_table_name %>_params)
36
+ redirect_to admin_<%= plural_table_name %>_path, :notice => "Successfully updated <%= human_name.downcase %>."
37
+ else
38
+ render :edit
39
+ end
40
+ end
41
+ <% end -%>
42
+
43
+ def destroy
44
+ @<%= singular_table_name %>.destroy
45
+ redirect_to admin_<%= plural_table_name %>_path, :notice => "<%= human_name %> deleted."
46
+ end
47
+
48
+ protected
49
+
50
+ def find_<%= singular_table_name %>
51
+ @<%= singular_table_name %> = <%= class_name %>.find(params[:id])
52
+ end
53
+
54
+ def find_<%= plural_table_name %>
55
+ search_relation = @q.result
56
+ @<%= plural_table_name %> = search_relation.order(sort_column + " " + sort_direction).references(:<%= singular_table_name %>).page params[:page]
57
+ end
58
+
59
+ def sort_column
60
+ <%= class_name %>.column_names.include?(params[:sort]) ? params[:sort] : "created_at"
61
+ end
62
+
63
+ def sort_direction
64
+ %w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
65
+ end
66
+
67
+ <% unless options[:read_only] -%>
68
+ private
69
+
70
+ # Never trust parameters from the scary internet, only allow the white list through.
71
+ def <%= singular_table_name %>_params
72
+ params.require(:<%= singular_table_name %>).permit(<%= @attributes_symbols.join(", ") %>)
73
+ end
74
+ <% end -%>
75
+
76
+ end
@@ -0,0 +1,136 @@
1
+ require 'spec_helper'
2
+
3
+ describe Admin::<%= controller_class_name %>Controller do
4
+
5
+ def mock_<%= singular_table_name %>(stubs={})
6
+ (@mock_<%= singular_table_name %> ||= mock_model(<%= class_name %>).as_null_object).tap do |<%= singular_table_name %>|
7
+ stubs.each_key do |method_name|
8
+ allow(<%= singular_table_name %>).to receive(method_name).and_return(stubs[method_name])
9
+ end
10
+ end
11
+ end
12
+
13
+ before { allow(controller).to receive(:require_admin) }
14
+
15
+ describe "GET index" do
16
+ it "assigns all <%= plural_table_name %> as @<%= plural_table_name %>" do
17
+ allow(controller).to receive(:find_<%= plural_table_name %>).and_return([mock_<%= singular_table_name %>])
18
+ get :index
19
+ expect(assigns(:<%= plural_table_name %>)).to eq([mock_<%= singular_table_name %>])
20
+ end
21
+ end
22
+
23
+ describe "GET show" do
24
+ it "assigns the requested <%= singular_table_name %> as @<%=singular_table_name %>" do
25
+ allow(<%= class_name %>).to receive(:find).with("37") { mock_<%= singular_table_name %> }
26
+ get :show, :id => "37"
27
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
28
+ end
29
+ end
30
+
31
+ <% unless options[:no_create] or options[:read_only] %>
32
+ describe "GET new" do
33
+ it "assigns a new <%= singular_table_name %> as @<%= singular_table_name %>" do
34
+ allow(<%= class_name %>).to receive(:new) { mock_<%= singular_table_name %> }
35
+ get :new
36
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
37
+ end
38
+ end
39
+
40
+ describe "POST create" do
41
+
42
+ describe "with valid params" do
43
+ it "assigns a newly created <%= singular_table_name %> as @<%= singular_table_name %>" do
44
+ allow(<%= class_name %>).to receive(:new).with({'these' => 'params'}) { mock_<%= singular_table_name %>(:save => true) }
45
+ post :create, :<%= singular_table_name %> => {'these' => 'params'}
46
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
47
+ end
48
+
49
+ it "redirects to the created <%= singular_table_name %>" do
50
+ allow(<%= class_name %>).to receive(:new) { mock_<%= singular_table_name %>(:save => true) }
51
+ post :create, :<%= singular_table_name %> => {}
52
+ expect(response).to redirect_to(admin_<%= plural_table_name %>_url)
53
+ end
54
+ end
55
+
56
+ describe "with invalid params" do
57
+ it "assigns a newly created but unsaved <%= singular_table_name %> as @<%= singular_table_name %>" do
58
+ allow(<%= class_name %>).to receive(:new).with({'these' => 'params'}) { mock_<%= singular_table_name %>(:save => false) }
59
+ post :create, :<%= singular_table_name %> => {'these' => 'params'}
60
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
61
+ end
62
+
63
+ it "re-renders the 'new' template" do
64
+ allow(<%= class_name %>).to receive(:new) { mock_<%= singular_table_name %>(:save => false) }
65
+ post :create, :<%= singular_table_name %> => {}
66
+ expect(response).to render_template("new")
67
+ end
68
+ end
69
+
70
+ end
71
+ <% end -%>
72
+
73
+ <% unless options[:read_only] %>
74
+ describe "GET edit" do
75
+ it "assigns the requested <%= singular_table_name %> as @<%= singular_table_name %>" do
76
+ allow(<%= class_name %>).to receive(:find).with("37") { mock_<%= singular_table_name %> }
77
+ get :edit, :id => "37"
78
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
79
+ end
80
+ end
81
+
82
+ describe "PUT update" do
83
+
84
+ describe "with valid params" do
85
+ it "updates the requested <%= singular_table_name %>" do
86
+ expect(<%= class_name %>).to receive(:find).with("37") { mock_<%= singular_table_name %> }
87
+ expect(mock_<%= singular_table_name %>).to receive(:update_attributes).with({'these' => 'params'})
88
+ put :update, :id => "37", :<%= singular_table_name %> => {'these' => 'params'}
89
+ end
90
+
91
+ it "assigns the requested <%= singular_table_name %> as @<%= singular_table_name %>" do
92
+ allow(<%= class_name %>).to receive(:find) { mock_<%= singular_table_name %>(:update_attributes => true) }
93
+ put :update, :id => "1"
94
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
95
+ end
96
+
97
+ it "redirects to the <%= singular_table_name %>" do
98
+ allow(<%= class_name %>).to receive(:find) { mock_<%= singular_table_name %>(:update_attributes => true) }
99
+ put :update, :id => "1"
100
+ expect(response).to redirect_to(admin_<%= plural_table_name %>_url)
101
+ end
102
+ end
103
+
104
+ describe "with invalid params" do
105
+ it "assigns the <%= singular_table_name %> as @<%= singular_table_name %>" do
106
+ allow(<%= class_name %>).to receive(:find) { mock_<%= singular_table_name %>(:update_attributes => false) }
107
+ put :update, :id => "1"
108
+ expect(assigns(:<%= singular_table_name %>)).to be(mock_<%= singular_table_name %>)
109
+ end
110
+
111
+ it "re-renders the 'edit' template" do
112
+ allow(<%= class_name %>).to receive(:find) { mock_<%= singular_table_name %>(:update_attributes => false) }
113
+ put :update, :id => "1"
114
+ expect(response).to render_template("edit")
115
+ end
116
+ end
117
+
118
+ end
119
+ <% end -%>
120
+
121
+ describe "DELETE destroy" do
122
+ it "destroys the requested <%= singular_table_name %>" do
123
+ expect(<%= class_name %>).to receive(:find).with("37") { mock_<%= singular_table_name %> }
124
+ expect(mock_<%= singular_table_name %>).to receive(:destroy)
125
+ delete :destroy, :id => "37"
126
+ end
127
+
128
+ it "redirects to the <%= plural_table_name %> list" do
129
+ allow(<%= class_name %>).to receive(:find) { mock_<%= singular_table_name %> }
130
+ delete :destroy, :id => "1"
131
+ expect(response).to redirect_to(admin_<%= plural_table_name %>_url)
132
+ end
133
+ end
134
+
135
+ end
136
+
@@ -0,0 +1,17 @@
1
+ - if @<%= singular_table_name %>.errors.any?
2
+ %ul.errors
3
+ @<%= singular_table_name %>.errors.full_messages.each do |msg|
4
+ %li= msg
5
+
6
+ <% @attributes.each do |attribute| -%>
7
+ <% next if ["id", "created_at", "updated_at"].include?(attribute.name) -%>
8
+ .form-group
9
+ = f.label :<%= attribute.name %>, :class => "col-sm-2 control-label"
10
+ .col-sm-4
11
+ = f.text_field :<%= attribute.name %>, :class => "form-control", :placeholder => "<%= attribute.name.capitalize %>"
12
+ <% end -%>
13
+
14
+ - label = @<%= singular_table_name %>.new_record? ? "Create" : "Update"
15
+ .form-group
16
+ .col-sm-offset-2 col-sm-4
17
+ = f.submit label, class: 'btn btn-default'
@@ -0,0 +1,7 @@
1
+ .page-header
2
+ %h3
3
+ Editing
4
+ = link_to "<%= human_name.downcase %> #{@<%= singular_table_name %>.id}", admin_<%= singular_table_name %>_path(@<%= singular_table_name %>) %>
5
+
6
+ = form_for [:admin, @<%= singular_table_name %>], :html => { :class => "form-horizontal", :role => "form" } do |f|
7
+ = render "form", { :f => f }
@@ -0,0 +1,44 @@
1
+ .page-header
2
+ %h3
3
+ <%= human_name.pluralize %>
4
+
5
+ <% if options[:search_by].present? -%>
6
+ = search_form_for @q, :url => admin_<%= plural_table_name %>_path, :html => { :method => :get, :class => "well form-inline" } do |f|
7
+ .class="form-group
8
+ = f.text_field :<%= options[:search_by] %>_cont, :type => "search", :class => "form-control", :placeholder => "Search by <%= options[:search_by] %>"
9
+
10
+ = f.submit "Search", :class => "btn btn-default"
11
+ <% end %>
12
+
13
+ <% unless options[:no_create] || options[:read_only] %>
14
+ <p>
15
+ = link_to("Create a new <%= human_name %>", new_admin_<%= singular_table_name %>_path)
16
+ <% end -%>
17
+
18
+ %table.sortable.table.table-striped.table-bordered.table-condensed
19
+ %thead
20
+ %tr
21
+ <% @attributes.each do |attribute| -%>
22
+ <th>
23
+ = sortable "<%= attribute.name %>"
24
+ <% end -%>
25
+ <% unless options[:read_only] -%>
26
+ <th> Edit
27
+ <th> Delete
28
+ <% end -%>
29
+ %tbody
30
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
31
+ %tr.<%= singular_table_name %>
32
+ %td
33
+ = link_to(<%= singular_table_name %>.id, admin_<%= singular_table_name %>_path(<%= singular_table_name %>)) %>
34
+ <% @attributes.each do |attribute| -%>
35
+ <% next if attribute.name == "id" -%>
36
+ %td
37
+ = <%= singular_table_name %>.<%= attribute.name %> %>
38
+ <% end -%>
39
+ <% unless options[:read_only] -%>
40
+ %td= link_to('Edit', edit_admin_<%= singular_table_name %>_path(<%= singular_table_name %>))
41
+ %td= link_to('Delete', admin_<%= singular_table_name %>_path(<%= singular_table_name %>), :confirm => "Are you sure?", :method => :delete)
42
+ <% end -%>
43
+
44
+ = paginate @<%= plural_table_name %>
@@ -0,0 +1,6 @@
1
+ .page-header
2
+ %h3
3
+ Create new <%= human_name.downcase %>
4
+
5
+ = form_for [:admin, @<%= singular_table_name %>], :html => { :class => "form-horizontal", :role => "form" } do |f|
6
+ = render "form", { :f => f }
@@ -0,0 +1,20 @@
1
+ .page-header
2
+ %h3
3
+ <%= human_name.capitalize %> <%%= @<%= singular_table_name %>.id %>
4
+
5
+ .table.table-bordered
6
+ <% @attributes.each do |attribute| -%>
7
+ <tr>
8
+ <td>= attribute.human_name :</td>
9
+ <td><%%= @<%= singular_table_name %>.<%= attribute.name %> %></td>
10
+ </tr>
11
+ <% end -%>
12
+
13
+ <% unless options[:read_only] -%>
14
+ <tr>
15
+ <td>
16
+ Actions
17
+ <td>
18
+ = link_to "Edit", edit_admin_<%= singular_table_name %>_path(@<%= singular_table_name %>), :class => "btn btn-default"
19
+ = link_to("Delete", admin_<%= singular_table_name %>_path(@<%= singular_table_name %>), :data => { :confirm => "Are you sure?" }, :method => :delete, :class => "btn btn-danger")
20
+ <% end -%>
@@ -0,0 +1,3 @@
1
+ module EasyAdmin
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :easy_admin do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+
4
+ require 'sharp_admin/sharp_admin_generator'
5
+
6
+ class SharpAdminGeneratorTest < Rails::Generators::TestCase
7
+
8
+ destination File.expand_path("../tmp", File.dirname(__FILE__))
9
+ setup :prepare_destination
10
+ tests SharpAdminGenerator
11
+
12
+ test "create the controllers and specs" do
13
+ run_generator %w(User --search_by email)
14
+
15
+ assert_file "app/controllers/admin/base_controller.rb", /class Admin::BaseController < ApplicationController/
16
+ assert_file "app/controllers/admin/users_controller.rb", /class Admin::UsersController < Admin::BaseController/
17
+ assert_file "spec/controllers/admin/base_controller_spec.rb", /describe Admin::BaseController do/
18
+ assert_file "spec/controllers/admin/users_controller_spec.rb", /describe Admin::UsersController do/
19
+ assert_file "app/views/admin/users/index.html.haml"
20
+ assert_file "app/views/admin/users/show.html.haml"
21
+ assert_file "app/views/admin/users/new.html.haml"
22
+ assert_file "app/views/admin/users/edit.html.haml"
23
+ assert_file "app/views/admin/users/_form.html.haml"
24
+ assert_file "app/helpers/admin/base_helper.rb", /def sortable/
25
+ end
26
+
27
+ test "--no-create option skips assets to create new record" do
28
+ run_generator %w(User --no_create)
29
+
30
+ assert_no_file "app/views/admin/users/new.html.haml"
31
+
32
+ content = File.read("tmp/app/views/admin/users/index.html.haml")
33
+ assert content !~ /Create a new/
34
+
35
+ content = File.read("tmp/app/controllers/admin/users_controller.rb")
36
+ assert content !~ /def new/
37
+ assert content !~ /def create/
38
+
39
+ controller_spec_content = File.read("tmp/spec/controllers/admin/users_controller_spec.rb")
40
+ assert controller_spec_content !~ /GET new/
41
+ assert controller_spec_content !~ /POST create/
42
+ end
43
+
44
+ test "--read_only skips create, edit and update" do
45
+ run_generator %w(User --read_only)
46
+
47
+ assert_no_file "app/views/admin/users/new.html.haml"
48
+ assert_no_file "app/views/admin/users/edit.html.haml"
49
+ assert_no_file "app/views/admin/users/_form.html.haml"
50
+
51
+ index_content = File.read("tmp/app/views/admin/users/index.html.haml")
52
+ assert index_content !~ /Create a new/
53
+ assert index_content !~ /Edit/
54
+
55
+ controller_content = File.read("tmp/app/controllers/admin/users_controller.rb")
56
+ assert controller_content !~ /def new/
57
+ assert controller_content !~ /def create/
58
+ assert controller_content !~ /def edit/
59
+ assert controller_content !~ /def update/
60
+
61
+ controller_spec_content = File.read("tmp/spec/controllers/admin/users_controller_spec.rb")
62
+ assert controller_spec_content !~ /GET new/
63
+ assert controller_spec_content !~ /POST create/
64
+ assert controller_spec_content !~ /GET edit/
65
+ assert controller_spec_content !~ /PUT update/
66
+ end
67
+ end
@@ -0,0 +1,8 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require 'minitest/autorun'
5
+ require 'active_support/test_case'
6
+ require 'rails/all'
7
+ require 'rails/generators'
8
+ require 'rails/generators/test_case'
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sharp_admin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - sharp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: generator for your admin.
56
+ email:
57
+ - liuqiang_0701@163.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - MIT-LICENSE
63
+ - README.rdoc
64
+ - Rakefile
65
+ - lib/sharp_admin.rb
66
+ - lib/sharp_admin/sharp_admin_generator.rb
67
+ - lib/sharp_admin/templates/base_controller.rb
68
+ - lib/sharp_admin/templates/base_controller_spec.rb
69
+ - lib/sharp_admin/templates/base_helper.rb
70
+ - lib/sharp_admin/templates/controller.rb
71
+ - lib/sharp_admin/templates/controller_spec.rb
72
+ - lib/sharp_admin/templates/views/_form.html.erb
73
+ - lib/sharp_admin/templates/views/edit.html.erb
74
+ - lib/sharp_admin/templates/views/index.html.erb
75
+ - lib/sharp_admin/templates/views/new.html.erb
76
+ - lib/sharp_admin/templates/views/show.html.erb
77
+ - lib/sharp_admin/version.rb
78
+ - lib/tasks/easy_admin_tasks.rake
79
+ - test/easy_admin_test.rb
80
+ - test/test_helper.rb
81
+ homepage: https://github.com/sharp/sharp_admin
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.2.2
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: generator for your admin.
105
+ test_files:
106
+ - test/easy_admin_test.rb
107
+ - test/test_helper.rb