admin_view 0.1.0 → 0.2.0

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.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  *.gem
2
3
  *.swp
3
4
  .bundle
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # admin_view
2
2
 
3
- Rails 3 generator of CRUD admin controllers, views and specs for existing models.
3
+ Rails 3 generator of CRUD admin controllers, views and specs for existing ActiveRecord models.
4
4
 
5
- It uses [meta_search](https://github.com/ernie/meta_search) for search and [kaminari](https://github.com/amatsuda/kaminari) for pagination.
5
+ It uses [meta_search](https://github.com/ernie/meta_search) for search and [kaminari](https://github.com/amatsuda/kaminari) for pagination. It also assumes that you have [dynamic_form](https://github.com/joelmoss/dynamic_form) plugin installed.
6
6
 
7
7
  Screenshot:
8
8
 
@@ -16,10 +16,15 @@ Include it in your Gemfile:
16
16
 
17
17
  Run the generator:
18
18
 
19
- $ bundle exec admin_view User --search_by name_or_email
19
+ $ bundle exec rails g admin_view User --search_by name_or_email
20
20
 
21
21
  The `--search_by` option is not required - if you don't pass it, the form template will come out commented out. However, it's useful most of the time, and you can use any meta_search-compatible expression to search in string or text fields.
22
22
 
23
+ Other options available are:
24
+
25
+ * `--no_create` - omit functionality to create a new record
26
+ * `--read_only` - omit create, edit and update functionality
27
+
23
28
  ## Contributing
24
29
 
25
30
  Yes! Feel free to fork the repo, make your changes in a topic branch and send us a pull request.
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  s.add_dependency("rails", ">= 3.0")
23
- s.add_dependency("rspec-rails", ">= 2.4.0")
24
- s.add_dependency("meta_search")
25
- s.add_dependency("kaminari")
23
+ s.add_dependency("meta_search", ">= 1.0")
24
+ s.add_dependency("kaminari", ">= 0.12")
25
+ s.add_development_dependency("rspec-rails", ">= 2.4.0")
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module AdminView
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -9,6 +9,10 @@ class AdminViewGenerator < Rails::Generators::NamedBase
9
9
 
10
10
  class_option :search_by, :type => :string, :desc => "The field or criteria to meta_search by (not required, but without a doubt recommended)"
11
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
+
12
16
  def create_base_controller
13
17
  empty_directory "app/controllers/admin"
14
18
  path = File.join("app/controllers/admin", "base_controller.rb")
@@ -29,13 +33,16 @@ class AdminViewGenerator < Rails::Generators::NamedBase
29
33
  template "controller_spec.rb", File.join("spec/controllers/admin", "#{controller_file_name}_controller_spec.rb")
30
34
  end
31
35
 
36
+ def create_helper
37
+ empty_directory "app/helpers/admin"
38
+ template "base_helper.rb", File.join("app/helpers/admin", "base_helper.rb")
39
+ end
40
+
32
41
  def create_views
33
42
  empty_directory "app/views/admin/#{controller_file_name}"
34
- if model_exists?(class_name)
35
- @attributes = class_name.constantize.send(:columns)
36
- available_views.each do |view|
37
- template "views/#{view}.html.erb", File.join("app/views/admin", controller_file_name, "#{view}.html.erb")
38
- end
43
+ @attributes = get_model_columns
44
+ available_views.each do |view|
45
+ template "views/#{view}.html.erb", File.join("app/views/admin", controller_file_name, "#{view}.html.erb")
39
46
  end
40
47
  end
41
48
 
@@ -50,7 +57,13 @@ class AdminViewGenerator < Rails::Generators::NamedBase
50
57
  protected
51
58
 
52
59
  def available_views
53
- ["index", "new", "show", "edit", "_form"]
60
+ views = ["index", "new", "show", "edit", "_form"]
61
+
62
+ views.delete("new") if options[:no_create]
63
+
64
+ ["new", "edit", "_form"].each { |v| views.delete(v) } if options[:read_only]
65
+
66
+ views
54
67
  end
55
68
 
56
69
  def model_exists?(klass_name)
@@ -62,4 +75,12 @@ class AdminViewGenerator < Rails::Generators::NamedBase
62
75
  end
63
76
  end
64
77
 
78
+ def get_model_columns
79
+ if model_exists?(class_name)
80
+ class_name.constantize.send(:columns)
81
+ else
82
+ [] # allow user (and test) to generate the view files
83
+ end
84
+ end
85
+
65
86
  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
@@ -2,13 +2,14 @@ class Admin::<%= controller_class_name %>Controller < Admin::BaseController
2
2
 
3
3
  helper_method :sort_column, :sort_direction, :search_params
4
4
 
5
- before_filter :find_<%= singular_table_name %>, :only => [:edit, :update, :show, :destroy]
5
+ before_filter :find_<%= singular_table_name %>, :only => [<% unless options[:read_only] %>:edit, :update,<% end %> :show, :destroy]
6
6
 
7
7
  def index
8
8
  @search = <%= class_name %>.search(params[:search])
9
9
  @<%= plural_table_name %> = find_<%= plural_table_name %>
10
10
  end
11
11
 
12
+ <% unless options[:no_create] or options[:read_only] %>
12
13
  def new
13
14
  @<%= singular_table_name %> = <%= class_name %>.new
14
15
  end
@@ -21,10 +22,12 @@ class Admin::<%= controller_class_name %>Controller < Admin::BaseController
21
22
  render :new
22
23
  end
23
24
  end
25
+ <% end -%>
24
26
 
25
27
  def show
26
28
  end
27
29
 
30
+ <% unless options[:read_only] %>
28
31
  def edit
29
32
  end
30
33
 
@@ -35,6 +38,7 @@ class Admin::<%= controller_class_name %>Controller < Admin::BaseController
35
38
  render :edit
36
39
  end
37
40
  end
41
+ <% end -%>
38
42
 
39
43
  def destroy
40
44
  @<%= singular_table_name %>.destroy
@@ -26,6 +26,7 @@ describe Admin::<%= controller_class_name %>Controller do
26
26
  end
27
27
  end
28
28
 
29
+ <% unless options[:no_create] or options[:read_only] %>
29
30
  describe "GET new" do
30
31
  it "assigns a new <%= singular_table_name %> as @<%= singular_table_name %>" do
31
32
  <%= class_name %>.stub(:new) { mock_<%= singular_table_name %> }
@@ -34,14 +35,6 @@ describe Admin::<%= controller_class_name %>Controller do
34
35
  end
35
36
  end
36
37
 
37
- describe "GET edit" do
38
- it "assigns the requested <%= singular_table_name %> as @<%= singular_table_name %>" do
39
- <%= class_name %>.stub(:find).with("37") { mock_<%= singular_table_name %> }
40
- get :edit, :id => "37"
41
- assigns(:<%= singular_table_name %>).should be(mock_<%= singular_table_name %>)
42
- end
43
- end
44
-
45
38
  describe "POST create" do
46
39
 
47
40
  describe "with valid params" do
@@ -73,6 +66,16 @@ describe Admin::<%= controller_class_name %>Controller do
73
66
  end
74
67
 
75
68
  end
69
+ <% end -%>
70
+
71
+ <% unless options[:read_only] %>
72
+ describe "GET edit" do
73
+ it "assigns the requested <%= singular_table_name %> as @<%= singular_table_name %>" do
74
+ <%= class_name %>.stub(:find).with("37") { mock_<%= singular_table_name %> }
75
+ get :edit, :id => "37"
76
+ assigns(:<%= singular_table_name %>).should be(mock_<%= singular_table_name %>)
77
+ end
78
+ end
76
79
 
77
80
  describe "PUT update" do
78
81
 
@@ -111,6 +114,7 @@ describe Admin::<%= controller_class_name %>Controller do
111
114
  end
112
115
 
113
116
  end
117
+ <% end -%>
114
118
 
115
119
  describe "DELETE destroy" do
116
120
  it "destroys the requested <%= singular_table_name %>" do
@@ -13,7 +13,9 @@
13
13
  <% end %>
14
14
  <%% end %>
15
15
 
16
+ <% unless options[:no_create] or options[:read_only] %>
16
17
  <p><%%= link_to("Create a new <%= human_name %>", new_admin_<%= singular_table_name %>_path) %></p>
18
+ <% end -%>
17
19
 
18
20
  <table class="sortable">
19
21
  <thead>
@@ -21,7 +23,9 @@
21
23
  <% @attributes.each do |attribute| -%>
22
24
  <th><%%= sortable "<%= attribute.name %>" %></th>
23
25
  <% end -%>
26
+ <% unless options[:read_only] %>
24
27
  <th>Edit</th>
28
+ <% end -%>
25
29
  <th>Delete</th>
26
30
  </tr>
27
31
  </thead>
@@ -33,7 +37,9 @@
33
37
  <% next if attribute.name == "id" -%>
34
38
  <td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
35
39
  <% end -%>
40
+ <% unless options[:read_only] %>
36
41
  <td><%%= link_to('Edit', edit_admin_<%= singular_table_name %>_path(<%= singular_table_name %>)) %></td>
42
+ <% end -%>
37
43
  <td><%%= link_to('Delete', admin_<%= singular_table_name %>_path(<%= singular_table_name %>), :confirm => "Are you sure?", :method => :delete) %></td>
38
44
  </tr>
39
45
  <%% end %>
@@ -1,13 +1,13 @@
1
1
  require File.join(File.dirname(__FILE__), 'test_helper')
2
-
2
+
3
3
  require 'generators/admin_view_generator'
4
-
4
+
5
5
  class AdminViewGeneratorTest < Rails::Generators::TestCase
6
6
 
7
7
  destination File.expand_path("../tmp", File.dirname(__FILE__))
8
8
  setup :prepare_destination
9
9
  tests AdminViewGenerator
10
-
10
+
11
11
  test "create the controllers and specs" do
12
12
  run_generator %w(User --search_by email)
13
13
 
@@ -15,5 +15,52 @@ class AdminViewGeneratorTest < Rails::Generators::TestCase
15
15
  assert_file "app/controllers/admin/users_controller.rb", /class Admin::UsersController < Admin::BaseController/
16
16
  assert_file "spec/controllers/admin/base_controller_spec.rb", /describe Admin::BaseController do/
17
17
  assert_file "spec/controllers/admin/users_controller_spec.rb", /describe Admin::UsersController do/
18
+ assert_file "app/views/admin/users/index.html.erb"
19
+ assert_file "app/views/admin/users/show.html.erb"
20
+ assert_file "app/views/admin/users/new.html.erb"
21
+ assert_file "app/views/admin/users/edit.html.erb"
22
+ assert_file "app/views/admin/users/_form.html.erb"
23
+ assert_file "app/helpers/admin/base_helper.rb", /def sortable/
24
+ end
25
+
26
+ test "--no-create option skips assets to create new record" do
27
+ run_generator %w(User --no_create)
28
+
29
+ assert_no_file "app/views/admin/users/new.html.erb"
30
+
31
+ content = File.read("tmp/app/views/admin/users/index.html.erb")
32
+ assert content !~ /Create a new/
33
+
34
+ content = File.read("tmp/app/controllers/admin/users_controller.rb")
35
+ assert content !~ /def new/
36
+ assert content !~ /def create/
37
+
38
+ controller_spec_content = File.read("tmp/spec/controllers/admin/users_controller_spec.rb")
39
+ assert controller_spec_content !~ /GET new/
40
+ assert controller_spec_content !~ /POST create/
41
+ end
42
+
43
+ test "--read_only skips create, edit and update" do
44
+ run_generator %w(User --read_only)
45
+
46
+ assert_no_file "app/views/admin/users/new.html.erb"
47
+ assert_no_file "app/views/admin/users/edit.html.erb"
48
+ assert_no_file "app/views/admin/users/_form.html.erb"
49
+
50
+ index_content = File.read("tmp/app/views/admin/users/index.html.erb")
51
+ assert index_content !~ /Create a new/
52
+ assert index_content !~ /Edit/
53
+
54
+ controller_content = File.read("tmp/app/controllers/admin/users_controller.rb")
55
+ assert controller_content !~ /def new/
56
+ assert controller_content !~ /def create/
57
+ assert controller_content !~ /def edit/
58
+ assert controller_content !~ /def update/
59
+
60
+ controller_spec_content = File.read("tmp/spec/controllers/admin/users_controller_spec.rb")
61
+ assert controller_spec_content !~ /GET new/
62
+ assert controller_spec_content !~ /POST create/
63
+ assert controller_spec_content !~ /GET edit/
64
+ assert controller_spec_content !~ /PUT update/
18
65
  end
19
66
  end
metadata CHANGED
@@ -1,68 +1,86 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: admin_view
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Marko Anastasov
9
13
  - Darko Fabijan
10
14
  autorequire:
11
15
  bindir: bin
12
16
  cert_chain: []
13
- date: 2011-09-19 00:00:00.000000000Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2011-10-14 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: rails
17
- requirement: &17270240 !ruby/object:Gem::Requirement
18
- none: false
19
- requirements:
20
- - - ! '>='
21
- - !ruby/object:Gem::Version
22
- version: '3.0'
23
- type: :runtime
24
23
  prerelease: false
25
- version_requirements: *17270240
26
- - !ruby/object:Gem::Dependency
27
- name: rspec-rails
28
- requirement: &17269740 !ruby/object:Gem::Requirement
29
- none: false
30
- requirements:
31
- - - ! '>='
32
- - !ruby/object:Gem::Version
33
- version: 2.4.0
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
34
32
  type: :runtime
35
- prerelease: false
36
- version_requirements: *17269740
37
- - !ruby/object:Gem::Dependency
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
38
35
  name: meta_search
39
- requirement: &17269360 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ! '>='
43
- - !ruby/object:Gem::Version
44
- version: '0'
45
- type: :runtime
46
36
  prerelease: false
47
- version_requirements: *17269360
48
- - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 0
44
+ version: "1.0"
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
49
48
  name: kaminari
50
- requirement: &17268900 !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ - 12
57
+ version: "0.12"
56
58
  type: :runtime
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: rspec-rails
57
62
  prerelease: false
58
- version_requirements: *17268900
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 2
69
+ - 4
70
+ - 0
71
+ version: 2.4.0
72
+ type: :development
73
+ version_requirements: *id004
59
74
  description: Rails 3 generator of admin views and controllers for existing models.
60
- email:
75
+ email:
61
76
  - devs@renderedtext.com
62
77
  executables: []
78
+
63
79
  extensions: []
80
+
64
81
  extra_rdoc_files: []
65
- files:
82
+
83
+ files:
66
84
  - .gitignore
67
85
  - Gemfile
68
86
  - MIT-LICENSE
@@ -74,6 +92,7 @@ files:
74
92
  - lib/generators/admin_view_generator.rb
75
93
  - lib/generators/templates/base_controller.rb
76
94
  - lib/generators/templates/base_controller_spec.rb
95
+ - lib/generators/templates/base_helper.rb
77
96
  - lib/generators/templates/controller.rb
78
97
  - lib/generators/templates/controller_spec.rb
79
98
  - lib/generators/templates/views/_form.html.erb
@@ -83,28 +102,36 @@ files:
83
102
  - lib/generators/templates/views/show.html.erb
84
103
  - test/admin_view_generator_test.rb
85
104
  - test/test_helper.rb
105
+ has_rdoc: true
86
106
  homepage: http://github.com/renderedtext/admin_view
87
107
  licenses: []
108
+
88
109
  post_install_message:
89
110
  rdoc_options: []
90
- require_paths:
111
+
112
+ require_paths:
91
113
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
- requirements:
95
- - - ! '>='
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- required_rubygems_version: !ruby/object:Gem::Requirement
99
- none: false
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ segments:
119
+ - 0
120
+ version: "0"
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ segments:
126
+ - 0
127
+ version: "0"
104
128
  requirements: []
129
+
105
130
  rubyforge_project: admin_view
106
- rubygems_version: 1.8.8
131
+ rubygems_version: 1.3.6
107
132
  signing_key:
108
133
  specification_version: 3
109
134
  summary: Rails 3 generator of admin views and controllers for existing models.
110
- test_files: []
135
+ test_files:
136
+ - test/admin_view_generator_test.rb
137
+ - test/test_helper.rb