bear 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/bear/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bear
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -9,6 +9,20 @@ inject_into_file 'features/support/paths.rb', :after => "case page_name\n" do
9
9
  FILE
10
10
  end
11
11
 
12
+ create_file 'features/admin.feature' do
13
+ <<-'FILE'
14
+ Feature: Admin dashboard
15
+ As an administrator
16
+ I want to manage the application
17
+ So that I can have full control over the site
18
+
19
+ Scenario: Login as an admin
20
+ Given a logged in admin user
21
+ When I am on the admin
22
+ Then I should see "Admin"
23
+ FILE
24
+ end
25
+
12
26
  create_file 'features/user_admin.feature' do
13
27
  <<-'FILE'
14
28
  Feature: Administer users
@@ -16,25 +30,30 @@ Feature: Administer users
16
30
  I want to manage the users
17
31
  So that I can provide support for them
18
32
 
33
+ Background:
34
+ Given the following role records
35
+ | name |
36
+ | Member |
37
+
19
38
  Scenario: Create, update, delete a user in the admin
20
39
  Given a logged in admin user
21
40
  When I am on the add user page
22
- And I fill in "Name" with "Big Boi"
23
- And I fill in "Email" with "big@sirluciousleftfoot.com"
24
- And I fill in "Password" with "Ch!coDusty$"
25
- And I fill in "Password confirmation" with "Ch!coDusty$"
41
+ And I fill in "user_name" with "Big Boi"
42
+ And I fill in "user_email" with "big@yoursite.com"
43
+ And I fill in "user_password" with "Ch!coDusty$"
44
+ And I fill in "user_password_confirmation" with "Ch!coDusty$"
26
45
  And I press "Create User"
27
46
  Then I should see "User created!"
28
47
  And I should see "Big Boi"
29
48
 
30
49
  When I follow "Big Boi"
31
- Then the "Name" field should contain "Big Boi"
32
- And the "Email" field should contain "big@sirluciousleftfoot.com"
50
+ Then the "user_name" field should contain "Big Boi"
51
+ And the "user_email" field should contain "big@yoursite.com"
33
52
 
34
- Then I fill in "Name" with "Bigger Boi"
35
- And I fill in "Email" with "bigger@sirluciousleftfoot.com"
36
- And I press "Update User"
37
- Then I should see "Successfully updated Bigger Boi."
53
+ When I follow "Bigger Boi"
54
+ Then the "user_name" field should contain "Bigger Boi"
55
+ And the "user_email" field should contain "bigger@yoursite.com"
56
+ Then I press "Update User"
38
57
 
39
58
  Then I follow "Delete"
40
59
  Then I should see "User deleted."
@@ -23,6 +23,7 @@ end
23
23
  inject_into_file 'app/controllers/admin/users_controller.rb', :after => "def create\n" do
24
24
  <<-'FILE'
25
25
  @user = User.new
26
+ # attr_accessor logic here
26
27
  @user.attributes = params[:user]
27
28
  if @user.save
28
29
  flash[:notice] = "User created!"
@@ -37,6 +38,7 @@ inject_into_file 'app/controllers/admin/users_controller.rb', :after => "def upd
37
38
  <<-'FILE'
38
39
  params[:user].delete(:password) if params[:user][:password].blank?
39
40
  params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
41
+ # attr_accessor logic here
40
42
  if @user.update_attributes(params[:user])
41
43
  flash[:notice] = "Successfully updated #{@user.name}."
42
44
  redirect_to(admin_users_url)
@@ -21,6 +21,8 @@ append_file ".gitignore" do
21
21
  ".bundle"
22
22
  "capybara-*.html"
23
23
  "config/database.yml"
24
+ "coverage.data"
25
+ "coverage/**/*"
24
26
  "log/*.log"
25
27
  "public/stylesheets/compiled/"
26
28
  "public/system/**/**/**/*"
@@ -63,6 +65,9 @@ apply File.expand_path("../devise.rb", __FILE__) if ENV["BEAR_AUTH"]
63
65
  # Apply admin
64
66
  apply File.expand_path("../admin.rb", __FILE__) if ENV["BEAR_ADMIN"]
65
67
 
68
+ # Apply cancan
69
+ apply File.expand_path("../cancan.rb", __FILE__) if ENV['BEAR_ROLES']
70
+
66
71
  # Apply db create and migrations
67
72
  apply File.expand_path("../db.rb", __FILE__)
68
73
 
@@ -0,0 +1,91 @@
1
+ say "Building roles"
2
+ generate(:model, "role name:string")
3
+ generate(:migration, "UsersHaveAndBelongToManyRoles")
4
+ habtm_roles = Dir['db/migrate/*_users_have_and_belong_to_many_roles.rb'].first
5
+ inject_into_file habtm_roles, :after => "def self.up\n" do
6
+ <<-RUBY
7
+ create_table :roles_users, :id => false do |t|
8
+ t.references :role, :user
9
+ end
10
+ RUBY
11
+ end
12
+
13
+ inject_into_file habtm_roles, :after => "def self.down\n" do
14
+ <<-RUBY
15
+ drop_table :roles_users
16
+ RUBY
17
+ end
18
+
19
+ inject_into_file 'app/models/user.rb', :after => "class User < ActiveRecord::Base\n" do
20
+ <<-RUBY
21
+ has_and_belongs_to_many :roles
22
+ RUBY
23
+ end
24
+
25
+ inject_into_file 'app/models/role.rb', :after => "class Role < ActiveRecord::Base\n" do
26
+ <<-RUBY
27
+ has_and_belongs_to_many :users
28
+
29
+ def self.sanitize role
30
+ role.to_s.humanize.split(" ").each{ |word| word.capitalize! }.join(" ")
31
+ end
32
+ RUBY
33
+ end
34
+
35
+ create_file 'app/models/ability.rb' do
36
+ <<-RUBY
37
+ class Ability
38
+ include CanCan::Ability
39
+
40
+ def initialize(user)
41
+ user ||= User.new # guest user
42
+
43
+ if user.role?(:admin)
44
+ can :manage, :all
45
+ end
46
+ end
47
+ end
48
+ RUBY
49
+ end
50
+
51
+ inject_into_file 'app/models/user.rb', :before => "def destroy\n" do
52
+ <<-RUBY
53
+
54
+ def role?(role)
55
+ return !!self.roles.find_by_name(Role.sanitize(role))
56
+ end
57
+
58
+ RUBY
59
+ end
60
+
61
+ inject_into_file 'app/controllers/application_controller.rb', :before => "end\n" do
62
+ <<-RUBY
63
+
64
+ rescue_from(CanCan::AccessDenied) do |exception|
65
+ flash[:error] = "Access Denied"
66
+ redirect_to(root_url)
67
+ end
68
+ RUBY
69
+ end
70
+
71
+ if ENV['BEAR_ADMIN']
72
+ inject_into_file 'app/views/admin/users/_form.html.haml', :after => "= f.inputs(:name, :email, :password, :password_confirmation)\n" do
73
+ <<-'RUBY'
74
+ = f.input(:role_ids, :as => :check_boxes, :collection => Role.order(:name))
75
+ = hidden_field_tag("user[role_ids][]", "")
76
+ RUBY
77
+ end
78
+
79
+ gsub_file "app/controllers/admin/users_controller.rb", /# attr_accessor logic here/, "@user.accessible = [ :role_ids ] if current_user.role?(:admin)"
80
+ end
81
+
82
+ append_file 'db/seeds.rb' do
83
+ <<-FILE
84
+ Role.create!(:name => "Admin")
85
+ Role.create!(:name => "Member")
86
+
87
+ user1 = User.find_by_email("#{ENV['BEAR_USER_EMAIL']}")
88
+ user1.role_ids = [ 1, 2 ]
89
+ user1.save!
90
+ FILE
91
+ end
data/templates/gemfile.rb CHANGED
@@ -6,9 +6,10 @@ gem "rails", "~> 3.0.0"
6
6
  gem "autotest", :group => [ :test ]
7
7
  gem "autotest-rails", :group => [ :test ]
8
8
  gem "bistro_car"
9
+ gem "cancan" if ENV["BEAR_ROLES"]
9
10
  gem "capybara", "0.4.0", :group => [ :cucumber ]
10
11
  gem "carrierwave", "0.5.0"
11
- gem "cover_me", ">= 1.0.0.pre2", :require => false, :group => [ :development, :test, :cucumber ]
12
+ gem "cover_me", ">= 1.0.0.rc4", :group => [ :test ]
12
13
  gem "css_sprite", "1.4.10"
13
14
  gem "cucumber", :group => [ :cucumber ]
14
15
  gem "cucumber-rails", :group => [ :cucumber ]
data/templates/jammit.rb CHANGED
@@ -6,7 +6,7 @@ javascripts:
6
6
  common:
7
7
  - public/javascripts/jquery.js
8
8
  - public/javascripts/rails.js
9
- - public/javascripts/core.js
9
+ - public/javascripts/application.js
10
10
 
11
11
  stylesheets:
12
12
  main:
data/templates/js.rb CHANGED
@@ -1,4 +1,2 @@
1
1
  get "http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js", "public/javascripts/jquery.js"
2
2
  get_remote_https_file "https://github.com/rails/jquery-ujs/raw/master/src/rails.js", "public/javascripts/rails.js"
3
- get "http://html5shiv.googlecode.com/svn/trunk/html5.js", "public/javascripts/shiv.js"
4
- run "rm public/javascripts/application.js"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Russ Smith
@@ -132,6 +132,7 @@ files:
132
132
  - templates/admin/users_spec.rb
133
133
  - templates/application_layout.rb
134
134
  - templates/bootstrap.rb
135
+ - templates/cancan.rb
135
136
  - templates/clean_routes.rb
136
137
  - templates/db.rb
137
138
  - templates/db_seed.rb
@@ -180,6 +181,6 @@ rubyforge_project: bear
180
181
  rubygems_version: 1.3.7
181
182
  signing_key:
182
183
  specification_version: 3
183
- summary: bear-0.0.2
184
+ summary: bear-0.0.3
184
185
  test_files: []
185
186