gemboree 0.1.2

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.
Files changed (47) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +59 -0
  3. data/Rakefile +38 -0
  4. data/app/assets/images/glyphicons-halflings-white.png +0 -0
  5. data/app/assets/images/glyphicons-halflings.png +0 -0
  6. data/app/assets/javascripts/bootstrap.js +2027 -0
  7. data/app/assets/javascripts/gemboree.js +2 -0
  8. data/app/assets/javascripts/scaffolds.js +20 -0
  9. data/app/assets/stylesheets/bootstrap-responsive.css +1092 -0
  10. data/app/assets/stylesheets/bootstrap.css +6039 -0
  11. data/app/assets/stylesheets/gemboree-nores.css +4 -0
  12. data/app/assets/stylesheets/gemboree.css +6 -0
  13. data/app/assets/stylesheets/navspace.css +4 -0
  14. data/app/assets/stylesheets/scaffolds.css +2 -0
  15. data/app/helpers/nav_helper.rb +7 -0
  16. data/app/helpers/sortable_helper.rb +10 -0
  17. data/app/models/role.rb +14 -0
  18. data/app/models/user_role.rb +11 -0
  19. data/app/views/layouts/_error_messages.html.erb +20 -0
  20. data/app/views/layouts/_errors.html.erb +11 -0
  21. data/config/routes.rb +3 -0
  22. data/lib/gemboree.rb +22 -0
  23. data/lib/gemboree/acts_as_actor.rb +47 -0
  24. data/lib/gemboree/version.rb +3 -0
  25. data/lib/generators/gemboree/devise_generator.rb +13 -0
  26. data/lib/generators/gemboree/install_generator.rb +46 -0
  27. data/lib/generators/gemboree/migration_generator.rb +25 -0
  28. data/lib/templates/devise/passwords/new.html.erb +27 -0
  29. data/lib/templates/devise/registrations/edit.html.erb +65 -0
  30. data/lib/templates/devise/registrations/new.html.erb +45 -0
  31. data/lib/templates/devise/sessions/new.html.erb +41 -0
  32. data/lib/templates/erb/scaffold/_form.html.erb +19 -0
  33. data/lib/templates/erb/scaffold/edit.html.erb +22 -0
  34. data/lib/templates/erb/scaffold/index.html.erb +31 -0
  35. data/lib/templates/erb/scaffold/new.html.erb +11 -0
  36. data/lib/templates/erb/scaffold/show.html.erb +22 -0
  37. data/lib/templates/gemboree/install/ability.rb +7 -0
  38. data/lib/templates/gemboree/install/application.html.erb +19 -0
  39. data/lib/templates/gemboree/install/home_controller.rb +6 -0
  40. data/lib/templates/gemboree/install/index.html.erb +5 -0
  41. data/lib/templates/gemboree/install/nav.html.erb +38 -0
  42. data/lib/templates/gemboree/install/users_controller.rb +7 -0
  43. data/lib/templates/migration/migration.rb +19 -0
  44. data/lib/templates/rails/scaffold_controller/controller.rb +81 -0
  45. data/test/gemboree_test.rb +7 -0
  46. data/test/test_helper.rb +15 -0
  47. metadata +195 -0
@@ -0,0 +1,4 @@
1
+ /*
2
+ *= require bootstrap.css
3
+ *= require scaffolds.css
4
+ */
@@ -0,0 +1,6 @@
1
+ /*
2
+ *= require bootstrap.css
3
+ *= require navspace.css
4
+ *= require bootstrap-responsive.css
5
+ *= require scaffolds.css
6
+ */
@@ -0,0 +1,4 @@
1
+ body {
2
+ padding-top: 60px;
3
+ padding-bottom: 40px;
4
+ }
@@ -0,0 +1,2 @@
1
+ .field_with_errors input {
2
+ border: 1px dashed #ff0000; }
@@ -0,0 +1,7 @@
1
+ module NavHelper
2
+
3
+ def active_link(controller, action)
4
+ 'class="active"' if params[:action] == action
5
+ end
6
+
7
+ end
@@ -0,0 +1,10 @@
1
+ module SortableHelper
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,14 @@
1
+ class Role < ActiveRecord::Base
2
+
3
+ attr_accessible :name, :access_level
4
+
5
+ has_many :user_roles, :dependent => :destroy
6
+ has_many :users, :through => :user_roles
7
+
8
+ validates :name,
9
+ :presence => true,
10
+ :uniqueness => true
11
+
12
+ validates :access_level, :presence => true
13
+
14
+ end
@@ -0,0 +1,11 @@
1
+ class UserRole < ActiveRecord::Base
2
+
3
+ attr_accessible :role_id, :user_id
4
+
5
+ belongs_to :role
6
+ belongs_to :user
7
+
8
+ validates :role_id, :presence => true
9
+ validates :user_id, :presence => true
10
+
11
+ end
@@ -0,0 +1,20 @@
1
+ <% if notice %>
2
+ <div class="alert alert-success">
3
+ <button type="button" class="close" data-dismiss="alert">x</button>
4
+ <strong><%= notice %></strong>
5
+ </div>
6
+ <% end %>
7
+
8
+ <% if alert %>
9
+ <div class="alert alert-alert">
10
+ <button type="button" class="close" data-dismiss="alert">x</button>
11
+ <strong><%= alert %></strong>
12
+ </div>
13
+ <% end %>
14
+
15
+ <% if flash[:error] %>
16
+ <div class="alert alert-error">
17
+ <button type="button" class="close" data-dismiss="alert">x</button>
18
+ <strong><%= flash[:error] %></strong>
19
+ </div>
20
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <% if target.errors.any? %>
2
+ <div id="errorExplanation">
3
+ <h2><%= pluralize(target.errors.count, "Error") %> prohibited this form from submission:</h2>
4
+ <ul class="errors_explained">
5
+ <% target.errors.full_messages.each do |message| %>
6
+ <li><%= message %></li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
10
+ <br class="clear"/>
11
+ <% end %>
@@ -0,0 +1,3 @@
1
+ Gemboree::Engine.routes.draw do
2
+
3
+ end
@@ -0,0 +1,22 @@
1
+ require 'devise'
2
+ require 'cancan'
3
+ require 'will_paginate'
4
+ require 'gemboree/version'
5
+ require 'gemboree/acts_as_actor'
6
+ require 'paperclip'
7
+
8
+ module Gemboree
9
+
10
+ class Engine < Rails::Engine
11
+
12
+ initializer 'acts_as_actor.ar_extensions' do |app|
13
+ ActiveRecord::Base.extend Gemboree::ActsAsActor
14
+ end
15
+
16
+ config.app_generators do |g|
17
+ g.templates.unshift File::expand_path('../templates', __FILE__)
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,47 @@
1
+ module Gemboree
2
+ module ActsAsActor
3
+
4
+ def acts_as_actor(options = {})
5
+ has_many :user_roles, :foreign_key => "user_id", :dependent => :destroy
6
+ has_many :roles, :through => :user_roles
7
+ include InstanceMethods
8
+ end
9
+
10
+ module InstanceMethods
11
+
12
+ def role_name
13
+ roles.order('access_level desc').first.try(:name)
14
+ end
15
+
16
+ def access_level
17
+ roles.first.nil? ? 0 : roles.order('access_level desc').first.access_level
18
+ end
19
+
20
+ def has_access?(level)
21
+ access_level >= level
22
+ end
23
+
24
+ def has_role?(name)
25
+ roles.find_by_name(name)
26
+ end
27
+
28
+ def add_role(name)
29
+ return false if has_role?(name)
30
+ role = Role.find_by_name(name)
31
+ role ? roles << role : false
32
+ end
33
+
34
+ def remove_role(name)
35
+ role = has_role?(name)
36
+ role ? UserRole.where(user_id: id, role_id: role.id).first.delete : false
37
+ end
38
+
39
+ def change_role(name)
40
+ roles.clear
41
+ add_role(name)
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ module Gemboree
2
+ VERSION = "0.1.2"
3
+ end
@@ -0,0 +1,13 @@
1
+ module Gemboree
2
+ module Generators
3
+ class DeviseGenerator < Rails::Generators::Base
4
+
5
+ source_root File.expand_path("../../../templates/devise/", __FILE__)
6
+
7
+ def copy_views
8
+ copy_file "registrations/new.html.erb", "app/views/devise/registrations/new.html.erb"
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,46 @@
1
+ module Gemboree
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def setup_home_page
6
+ remove_file "public/index.html"
7
+ remove_file "app/assets/images/rails.png"
8
+ remove_file "app/views/layouts/application.html.erb"
9
+ copy_file "home_controller.rb", "app/controllers/home_controller.rb"
10
+ copy_file "index.html.erb", "app/views/home/index.html.erb"
11
+ copy_file "nav.html.erb", "app/views/layouts/_nav.html.erb"
12
+ copy_file "application.html.erb", "app/views/layouts/application.html.erb"
13
+ route "root :to => 'home#index'"
14
+ end
15
+
16
+ def setup_asssets
17
+ insert_into_file "app/assets/javascripts/application.js", :after => "jquery_ujs\n" do
18
+ "//= require gemboree\n"
19
+ end
20
+ insert_into_file "app/assets/stylesheets/application.css", :after => "require_self\n" do
21
+ " *= require gemboree\n"
22
+ end
23
+ end
24
+
25
+ def setup_devise
26
+ generate "devise:install"
27
+ generate "devise", "User"
28
+ end
29
+
30
+ def setup_cancan
31
+ copy_file "ability.rb", "app/models/ability.rb"
32
+ end
33
+
34
+ def setup_roles
35
+ generate "gemboree:migration"
36
+ insert_into_file "app/models/user.rb", :after => "ActiveRecord::Base\n" do
37
+ %{ acts_as_actor
38
+ has_many :user_roles, :dependent => :destroy
39
+ has_many :roles, :through => :user_roles
40
+ }
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ module Gemboree
2
+ module Generators
3
+ class MigrationGenerator < Rails::Generators::Base
4
+
5
+ include Rails::Generators::Migration
6
+
7
+ source_root File.expand_path("../../../templates/migration/", __FILE__)
8
+
9
+ def self.next_migration_number(dirname)
10
+ if ActiveRecord::Base.timestamped_migrations
11
+ migration_number = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
12
+ migration_number += 1
13
+ migration_number.to_s
14
+ else
15
+ "%.3d" % (current_migration_number(dirname) + 1)
16
+ end
17
+ end
18
+
19
+ def create_migration
20
+ migration_template "migration.rb", "db/migrate/acts_as_actor"
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ <h2>Forgot your password?</h2>
2
+
3
+ <div class="row-fluid">
4
+ <div class="span6">
5
+
6
+ <%= form_for(resource, :as => resource_name, :url => password_path(resource_name),
7
+ :html => { :method => :post, class: 'form-horizontal well' }) do |f| %>
8
+
9
+ <%= devise_error_messages! %>
10
+
11
+ <div class="control-group">
12
+ <%= f.label :email, class: 'control-label' %>
13
+ <div class="controls">
14
+ <%= f.email_field :email %>
15
+ </div>
16
+ </div>
17
+
18
+ <div class="form-actions">
19
+ <%= f.submit "Send me reset password instructions", class: 'btn btn-warning' %>
20
+ </div>
21
+
22
+ <% end %>
23
+ </div>
24
+
25
+ <%= render "devise/shared/links" %>
26
+
27
+ </div><!--/.row-fluid -->
@@ -0,0 +1,65 @@
1
+ <h2>Edit <%= resource_name.to_s.humanize %></h2>
2
+
3
+ <div class="row-fluid">
4
+ <div class="span6">
5
+
6
+ <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name),
7
+ :html => { :method => :put, class: 'form-horizontal well' }) do |f| %>
8
+
9
+ <%= devise_error_messages! %>
10
+
11
+ <div class="control-group">
12
+ <%= f.label :first_name, class: 'control-label' %>
13
+ <div class="controls">
14
+ <%= f.text_field :first_name %>
15
+ </div>
16
+ </div>
17
+
18
+ <div class="control-group">
19
+ <%= f.label :last_name, class: 'control-label' %>
20
+ <div class="controls">
21
+ <%= f.text_field :last_name %>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="control-group">
26
+ <%= f.label :email, class: 'control-label' %>
27
+ <div class="controls">
28
+ <%= f.email_field :email %>
29
+ </div>
30
+ </div>
31
+
32
+ <div class="control-group">
33
+ <%= f.label :password, class: 'control-label' %>
34
+ <div class="controls">
35
+ <%= f.password_field :password, :autocomplete => "off" %><br />
36
+ <i>(leave blank if you don't want to change it)</i>
37
+ </div>
38
+ </div>
39
+
40
+ <div class="control-group">
41
+ <%= f.label :password_confirmation, class: 'control-label' %>
42
+ <div class="controls">
43
+ <%= f.password_field :password_confirmation %>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="control-group">
48
+ <%= f.label :current_password, class: 'control-label' %>
49
+ <div class="controls">
50
+ <%= f.password_field :current_password %><br />
51
+ <i>(we need your current password to confirm your changes)</i>
52
+ </div>
53
+ </div>
54
+
55
+ <div class="form-actions btn-group">
56
+ <%= link_to "Back", :back, class: 'btn' %>
57
+ <%= f.submit "Update", class: 'btn btn-success' %>
58
+ <%= link_to "Cancel my account", registration_path(resource_name),
59
+ :data => { :confirm => "Are you sure?" }, :method => :delete, class: 'btn btn-danger' %>
60
+ </div>
61
+
62
+ <% end %>
63
+ </div>
64
+
65
+ </div><!--/.row-fluid -->
@@ -0,0 +1,45 @@
1
+ <div class="row-fluid">
2
+ <legend>Sign Up</legend>
3
+ <div class="span6">
4
+ <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name),
5
+ :html => { class: 'form-horizontal well' }) do |f| %>
6
+
7
+ <%= devise_error_messages! %>
8
+
9
+ <div class="control-group">
10
+ <%= f.label :email, class: 'control-label' %>
11
+ <div class="controls">
12
+ <%= f.email_field :email %>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="control-group">
17
+ <%= f.label :password, class: 'control-label' %>
18
+ <div class="controls">
19
+ <%= f.password_field :password %>
20
+ </div>
21
+ </div>
22
+
23
+ <div class="control-group">
24
+ <%= f.label :password_confirmation, class: 'control-label' %>
25
+ <div class="controls">
26
+ <%= f.password_field :password_confirmation %>
27
+ </div>
28
+ </div>
29
+
30
+ <div class="form-actions">
31
+ <%= f.submit "Sign up", class: 'btn' %>
32
+ </div>
33
+
34
+ <% end %>
35
+ </div>
36
+
37
+ <div class="span4">
38
+ <div class="well sidebar-nav">
39
+ <ul class="nav nav-list">
40
+ <%= render "devise/shared/links" %>
41
+ </ul>
42
+ </div>
43
+ </div>
44
+
45
+ </div><!--./row-fluid>
@@ -0,0 +1,41 @@
1
+ <h2>Sign in</h2>
2
+
3
+ <div class="row-fluid">
4
+ <div class="span6">
5
+
6
+ <%= form_for(resource, :as => resource_name, :url => session_path(resource_name),
7
+ :html => { class: 'form-horizontal well' }) do |f| %>
8
+
9
+ <div class="control-group">
10
+ <%= f.label :email, class: 'control-label' %>
11
+ <div class="controls">
12
+ <%= f.email_field :email %>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="control-group">
17
+ <%= f.label :password, class: 'control-label' %>
18
+ <div class="controls">
19
+ <%= f.password_field :password %>
20
+ </div>
21
+ </div>
22
+
23
+ <% if devise_mapping.rememberable? -%>
24
+ <div class="control-group">
25
+ <%= f.label :remember_me, class: 'control-label' %>
26
+ <div class="controls">
27
+ <%= f.check_box :remember_me %>
28
+ </div>
29
+ </div>
30
+ <% end -%>
31
+
32
+ <div class="form-actions">
33
+ <%= f.submit "Sign in", class: 'btn btn-primary' %>
34
+ </div>
35
+
36
+ <% end %>
37
+ </div>
38
+
39
+ <%= render "devise/shared/links" %>
40
+
41
+ </div><!--/.row-fluid -->