citygate 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/README.rdoc +4 -2
  3. data/Rakefile +1 -2
  4. data/app/assets/javascripts/citygate/admin_users.coffee +14 -0
  5. data/app/assets/javascripts/citygate/application.js +1 -0
  6. data/app/assets/javascripts/citygate/global.coffee +14 -0
  7. data/app/controllers/citygate/admin/application_controller.rb +5 -0
  8. data/app/controllers/citygate/admin/users_controller.rb +17 -0
  9. data/app/controllers/citygate/application_controller.rb +24 -0
  10. data/app/controllers/citygate/home_controller.rb +7 -0
  11. data/app/controllers/{users → citygate/users}/omniauth_callbacks_controller.rb +6 -6
  12. data/app/controllers/citygate/users_controller.rb +7 -0
  13. data/app/models/citygate/ability.rb +31 -0
  14. data/app/models/citygate/authorization.rb +12 -0
  15. data/app/models/citygate/role.rb +6 -0
  16. data/app/models/citygate/user.rb +41 -0
  17. data/app/views/{admin/users/show.html.erb → citygate/admin/users/_user_show.html.erb} +0 -0
  18. data/app/views/citygate/admin/users/_users.html.erb +12 -0
  19. data/app/views/citygate/admin/users/index.html.erb +3 -0
  20. data/app/views/citygate/admin/users/index.js.erb +1 -0
  21. data/app/views/citygate/admin/users/show.html.erb +2 -0
  22. data/app/views/citygate/admin/users/show.js.erb +1 -0
  23. data/app/views/{devise → citygate/devise}/_links.erb +0 -0
  24. data/app/views/{devise → citygate/devise}/registrations/edit.html.haml +0 -0
  25. data/app/views/citygate/home/index.html.erb +6 -0
  26. data/app/views/{shared → citygate/shared}/_navigation.html.erb +6 -2
  27. data/app/views/{users → citygate/users}/show.html.erb +0 -0
  28. data/app/views/layouts/admin/application.html.erb +19 -0
  29. data/app/views/layouts/{citygate_layout.html.erb → application.html.erb} +1 -1
  30. data/config/initializers/devise.rb +4 -0
  31. data/config/routes.rb +7 -5
  32. data/db/migrate/20120303195052_devise_create_users.rb +3 -3
  33. data/db/migrate/20120303195103_add_name_to_users.rb +1 -2
  34. data/db/migrate/20120303195111_add_confirmable_to_users.rb +4 -5
  35. data/db/migrate/20120303195145_devise_invitable_add_to_users.rb +3 -3
  36. data/db/migrate/20120507112430_add_omniauth_to_devise.rb +3 -3
  37. data/db/migrate/20120523163700_create_roles.rb +10 -0
  38. data/db/seeds.rb +10 -3
  39. data/lib/app_controller_helpers.rb +1 -12
  40. data/lib/citygate/engine.rb +2 -2
  41. data/lib/citygate/version.rb +1 -1
  42. data/lib/citygate.rb +2 -2
  43. data/lib/gravatar.rb +13 -0
  44. metadata +85 -128
  45. data/app/controllers/admin/application_controller.rb +0 -3
  46. data/app/controllers/admin/users_controller.rb +0 -11
  47. data/app/controllers/application_controller.rb +0 -4
  48. data/app/controllers/home_controller.rb +0 -5
  49. data/app/controllers/users_controller.rb +0 -7
  50. data/app/models/authorization.rb +0 -6
  51. data/app/models/user.rb +0 -12
  52. data/app/views/admin/users/index.html.erb +0 -10
  53. data/app/views/home/index.html.erb +0 -8
  54. data/app/views/layouts/admin/application.html.haml +0 -0
  55. data/app/views/layouts/admin/citygate_admin_layout.html.erb +0 -32
  56. data/app/views/layouts/citygate.html.erb +0 -1
  57. data/config/initializers/devise-lol.rb +0 -4
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Miguel Regedor
1
+ Copyright (c) 2012 GroupBuddies
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -1,3 +1,5 @@
1
- = Citygate
1
+ = Citygate {<img src="https://secure.travis-ci.org/zamith/citygate.png" />}[http://travis-ci.org/zamith/citygate]
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ Citygate is a rails engine that provides your application with user authentication (on the site or through facebook or google) using Devise and fully customizable authorization using CanCan.
4
+
5
+ It also provides a customizable backend for administrating all your users, using pjax and pushState making your website as fast as responsive as you ever wanted it to be.
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  begin
3
3
  require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
4
5
  rescue LoadError
5
6
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
7
  end
@@ -23,8 +24,6 @@ end
23
24
  APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
25
  load 'rails/tasks/engine.rake'
25
26
 
26
-
27
-
28
27
  Bundler::GemHelper.install_tasks
29
28
 
30
29
  require 'rake/testtask'
@@ -0,0 +1,14 @@
1
+ $ ->
2
+ # Every link that is click in the users area must push the state for the previous location and update the URL,
3
+ # since everything is AJAXified
4
+ $("#users a").live "click", ->
5
+ # Push the state before the click (when it's the first page load it starts the stack)
6
+ history.pushState buildState(), "", window.location.href
7
+
8
+ # Gets the content for the container through AJAX
9
+ $.getScript @href, =>
10
+ # If the last url to be pushed to the history is different the one we're at, then push the new state
11
+ history.replaceState buildState(), "", @href if history.state.page isnt @href
12
+
13
+ # Prevent the page refresh
14
+ false
@@ -12,4 +12,5 @@
12
12
  //
13
13
  //= require jquery
14
14
  //= require jquery_ujs
15
+ //= require citygate/global
15
16
  //= require_tree .
@@ -0,0 +1,14 @@
1
+ $ ->
2
+ # Is triggered every time the user clicks the browser's back button or at page load (except for firefox)
3
+ window.onpopstate = (event) ->
4
+ # If there is a state on the stack use to populate the container
5
+ $(event.state.holder).html(event.state.html) if event.state?
6
+
7
+ # Helper to build the state JSON object
8
+ buildState = ->
9
+ {
10
+ html: $("#container").html(),
11
+ holder: "#container",
12
+ page: window.location.href
13
+ }
14
+
@@ -0,0 +1,5 @@
1
+ class Citygate::Admin::ApplicationController < Citygate::ApplicationController
2
+ protect_from_forgery
3
+ layout 'admin/application'
4
+
5
+ end
@@ -0,0 +1,17 @@
1
+ class Citygate::Admin::UsersController < Citygate::Admin::ApplicationController
2
+ load_and_authorize_resource :class => "Citygate::User"
3
+ respond_to :html, :json, :js
4
+
5
+ def index
6
+ @users = Citygate::User.paginate(per_page: 1, page: params[:page])
7
+
8
+ respond_with @users
9
+ end
10
+
11
+ def show
12
+ @user = Citygate::User.find(params[:id])
13
+
14
+ respond_with @user
15
+ end
16
+
17
+ end
@@ -0,0 +1,24 @@
1
+ # You can change the way CanCan handles an access denied to the user
2
+ # by writing a rescue_from method in your application_controller.rb
3
+ # @example CanCan::AccessDenied handling
4
+ # rescue_from CanCan::AccessDenied do |exception|
5
+ # redirect_to my_custom_path, :alert => exception.message
6
+ # end
7
+ class Citygate::ApplicationController < ::ApplicationController
8
+ protect_from_forgery
9
+
10
+ rescue_from CanCan::AccessDenied do |exception|
11
+ redirect_to root_url, :alert => exception.message
12
+ end unless ::ApplicationController.rescue_handlers.assoc "CanCan::AccessDenied"
13
+
14
+ # Gets or creates an Ability instance for usage with CanCan
15
+ def current_ability
16
+ @current_ability ||= Citygate::Ability.new(current_user)
17
+ end
18
+
19
+ # Change Devise's redirect after sign in url
20
+ # @param [Object] resource_or_scope Not used here
21
+ def stored_location_for(resource_or_scope)
22
+ root_url
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ class Citygate::HomeController < Citygate::ApplicationController
2
+ authorize_resource :class => false
3
+
4
+ def index
5
+ @users = Citygate::User.all
6
+ end
7
+ end
@@ -1,4 +1,4 @@
1
- class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
1
+ class Citygate::Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2
2
 
3
3
  def facebook
4
4
  oauthorize "Facebook"
@@ -77,27 +77,27 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
77
77
 
78
78
  def find_for_oauth_by_uid(uid, resource=nil)
79
79
  user = nil
80
- if auth = Authorization.find_by_uid(uid.to_s)
80
+ if auth = Citygate::Authorization.find_by_uid(uid.to_s)
81
81
  user = auth.user
82
82
  end
83
83
  return user
84
84
  end
85
85
 
86
86
  def find_for_oauth_by_email(email, resource=nil)
87
- if user = User.find_by_email(email)
87
+ if user = Citygate::User.find_by_email(email)
88
88
  user
89
89
  else
90
- user = User.new(:email => email, :password => Devise.friendly_token[0,20])
90
+ user = Citygate::User.new(:email => email, :password => Devise.friendly_token[0,20])
91
91
  user.save
92
92
  end
93
93
  return user
94
94
  end
95
95
 
96
96
  def find_for_oauth_by_name(name, resource=nil)
97
- if user = User.find_by_name(name)
97
+ if user = Citygate::User.find_by_name(name)
98
98
  user
99
99
  else
100
- user = User.new(:name => name, :password => Devise.friendly_token[0,20], :email => "#{UUIDTools::UUID.random_create}@host")
100
+ user = Citygate::User.new(:name => name, :password => Devise.friendly_token[0,20], :email => "#{UUIDTools::UUID.random_create}@host")
101
101
  user.save false
102
102
  end
103
103
  return user
@@ -0,0 +1,7 @@
1
+ class Citygate::UsersController < ApplicationController
2
+ load_and_authorize_resource :class => "Citygate::User"
3
+
4
+ def show
5
+ @user = User.find(params[:id])
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ module Citygate
2
+ # @author Zamith
3
+ class Ability
4
+ include CanCan::Ability
5
+
6
+ # Defines the permissions for a user wich is not logged in or if it is,
7
+ # calls the corresponding method to its role
8
+ # @param [Citygate::User] user the current user
9
+ def initialize(user)
10
+ @user = user || User.new # guest user (not logged in)
11
+
12
+ can :index, :home
13
+
14
+ if @user.role
15
+ send(@user.role.name.downcase)
16
+ end
17
+ end
18
+
19
+ # Defines the permissions on a user with the role of member
20
+ def member
21
+ can :read, Citygate::User
22
+ end
23
+
24
+ # Defines the permissions on a user with the role of admin, which inherits from member
25
+ def admin
26
+ member
27
+ can :manage, :all
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ module Citygate
2
+ # @author Zamith
3
+ # Holds the authorizations given by the users to get information
4
+ # from their facebook and/or google accounts
5
+ class Authorization < ActiveRecord::Base
6
+
7
+ belongs_to :user
8
+
9
+ # @!visibility public
10
+ attr_accessible :provider, :uid, :user_id, :token, :secret, :name, :link, :image_url
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ module Citygate
2
+ # @author Zamith
3
+ class Role < ActiveRecord::Base
4
+
5
+ end
6
+ end
@@ -0,0 +1,41 @@
1
+ module Citygate
2
+
3
+ # @author Zamith
4
+ # @!attribute name
5
+ # @return [String] the name of the user
6
+ # @!attribute email
7
+ # @return [String] the email of the user
8
+ class User < ActiveRecord::Base
9
+ include Gravatar
10
+
11
+ # @!group Devise configurations
12
+ devise :database_authenticatable, :registerable, :encryptable,
13
+ :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable
14
+
15
+ devise :encryptor => :sha1
16
+ # @!endgroup
17
+
18
+ attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :confirmed_at
19
+
20
+ has_many :authorizations, :dependent => :destroy
21
+ belongs_to :role
22
+
23
+ # Get the json object for an user
24
+ # @example
25
+ # {
26
+ # "email": "user@example.com",
27
+ # "name": "First User",
28
+ # "link": null,
29
+ # "image": "https://secure.gravatar.com/avatar/b58996c504c5638798eb6b511e6f49af.png/rating=g"
30
+ # }
31
+ def as_json(options = {})
32
+ authorization = self.authorizations.first
33
+ {
34
+ email: email,
35
+ name: name || (authorization.name if authorization),
36
+ link: (authorization.link if authorization),
37
+ image: (authorization.image_url if authorization) || self.gravatar_url
38
+ }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,12 @@
1
+ <% @users.each do |user| %>
2
+ <div class="user">
3
+ <span class="email"><%= user.email %></span>
4
+ <%= content_tag(:span, user.name) if user.name %>
5
+ <div class="user-links">
6
+ <%= link_to "Show", admin_user_path(user), :class => "show-link" %>
7
+ <%= link_to "Edit", edit_admin_user_path(user), :class => "edit-link" if can? :update, user %>
8
+ </div>
9
+ </div>
10
+ <% end %>
11
+
12
+ <%= will_paginate @users %>
@@ -0,0 +1,3 @@
1
+ <div id="users">
2
+ <%= render "users" %>
3
+ </div>
@@ -0,0 +1 @@
1
+ $("#users").html("<%= escape_javascript(render("users")) %>");
@@ -0,0 +1,2 @@
1
+ <p>User: <%= @user.name %></p>
2
+ <p>Email: <%= @user.email if @user.email %></p>
@@ -0,0 +1 @@
1
+ $("#container").html("<%= escape_javascript(render("user_show")) %>");
File without changes
@@ -0,0 +1,6 @@
1
+ <header>
2
+ <h1>NORMAL PANEL</h1>
3
+ <nav>
4
+ <%= render 'citygate/shared/navigation' %>
5
+ </nav>
6
+ </header>
@@ -8,8 +8,12 @@
8
8
 
9
9
  <li><%= link_to('Sign up', new_user_registration_path) %></li>
10
10
 
11
- <% User.omniauth_providers.each do |provider| %>
12
- <li><%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(User.new, provider) %></li>
11
+ <% Citygate::User.omniauth_providers.each do |provider| %>
12
+ <li><%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(Citygate::User.new, provider) %></li>
13
13
  <% end -%>
14
14
  <% end %>
15
+
16
+ <% if can?(:read, Citygate::User) && !params[:controller]["admin"] %>
17
+ <li><%= link_to("Admin", admin_users_path) %></li>
18
+ <% end %>
15
19
  </ul>
File without changes
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <%= stylesheet_link_tag "citygate/application", :media => "all" %>
5
+ <%= javascript_include_tag "citygate/application" %>
6
+ <%= csrf_meta_tags %>
7
+ <%= yield :head %>
8
+ </head>
9
+ <body>
10
+ <%= render 'citygate/shared/navigation' %>
11
+
12
+ <% flash.each do |name, msg| %>
13
+ <%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
14
+ <% end %>
15
+ <div id="container" class="container">
16
+ <%= yield %>
17
+ </div>
18
+ </body>
19
+ </html>
@@ -2,7 +2,7 @@
2
2
  <%= stylesheet_link_tag 'citygate/application' %>
3
3
  <% end %>
4
4
 
5
- <%= render 'shared/navigation' %>
5
+ <%= render 'citygate/shared/navigation' %>
6
6
 
7
7
  <% flash.each do |name, msg| %>
8
8
  <%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
@@ -224,4 +224,8 @@ Devise.setup do |config|
224
224
  # manager.intercept_401 = false
225
225
  # manager.default_strategies(:scope => :user).unshift :some_external_strategy
226
226
  # end
227
+
228
+ Devise.setup do |config|
229
+ config.router_name = :citygate
230
+ end
227
231
  end
data/config/routes.rb CHANGED
@@ -1,11 +1,13 @@
1
- Rails.application.routes.draw do
1
+ Citygate::Engine.routes.draw do
2
2
  root :to => "home#index"
3
- match 'user_root' => 'home#index'
4
-
5
- devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
3
+
4
+ devise_for :users,
5
+ :controllers => { :omniauth_callbacks => "citygate/users/omniauth_callbacks" },
6
+ :class_name => "Citygate::User",
7
+ :module => :devise
6
8
  resources :users, :only => [:show]
7
9
 
8
- namespace "admin" do
10
+ namespace "admin", constraints: { format: /(json|html|js| )/ } do
9
11
  resources :users
10
12
  end
11
13
 
@@ -1,6 +1,6 @@
1
1
  class DeviseCreateUsers < ActiveRecord::Migration
2
2
  def change
3
- create_table(:users) do |t|
3
+ create_table(:citygate_users) do |t|
4
4
  ## Database authenticatable
5
5
  t.string :email, :null => false, :default => ""
6
6
  t.string :encrypted_password, :null => false, :default => ""
@@ -40,8 +40,8 @@ class DeviseCreateUsers < ActiveRecord::Migration
40
40
  t.timestamps
41
41
  end
42
42
 
43
- add_index :users, :email, :unique => true
44
- add_index :users, :reset_password_token, :unique => true
43
+ add_index :citygate_users, :email, :unique => true
44
+ add_index :citygate_users, :reset_password_token, :unique => true
45
45
  # add_index :users, :confirmation_token, :unique => true
46
46
  # add_index :users, :unlock_token, :unique => true
47
47
  # add_index :users, :authentication_token, :unique => true
@@ -1,6 +1,5 @@
1
1
  class AddNameToUsers < ActiveRecord::Migration
2
2
  def change
3
- add_column :users, :name, :string
4
-
3
+ add_column :citygate_users, :name, :string
5
4
  end
6
5
  end
@@ -1,12 +1,11 @@
1
1
  class AddConfirmableToUsers < ActiveRecord::Migration
2
2
  def change
3
- add_column :users, :confirmation_token, :string
3
+ add_column :citygate_users, :confirmation_token, :string
4
4
 
5
- add_column :users, :confirmed_at, :datetime
5
+ add_column :citygate_users, :confirmed_at, :datetime
6
6
 
7
- add_column :users, :confirmation_sent_at, :datetime
8
-
9
- add_column :users, :unconfirmed_email, :string
7
+ add_column :citygate_users, :confirmation_sent_at, :datetime
10
8
 
9
+ add_column :citygate_users, :unconfirmed_email, :string
11
10
  end
12
11
  end
@@ -1,6 +1,6 @@
1
1
  class DeviseInvitableAddToUsers < ActiveRecord::Migration
2
2
  def up
3
- change_table :users do |t|
3
+ change_table :citygate_users do |t|
4
4
  t.string :invitation_token, :limit => 60
5
5
  t.datetime :invitation_sent_at
6
6
  t.datetime :invitation_accepted_at
@@ -11,11 +11,11 @@ class DeviseInvitableAddToUsers < ActiveRecord::Migration
11
11
  end
12
12
 
13
13
  # And allow null encrypted_password and password_salt:
14
- change_column_null :users, :encrypted_password, true
14
+ change_column_null :citygate_users, :encrypted_password, true
15
15
  end
16
16
 
17
17
  def down
18
- change_table :users do |t|
18
+ change_table :citygate_users do |t|
19
19
  t.remove_references :invited_by, :polymorphic => true
20
20
  t.remove :invitation_limit, :invitation_sent_at, :invitation_accepted_at, :invitation_token
21
21
  end
@@ -1,9 +1,9 @@
1
1
  class AddOmniauthToDevise < ActiveRecord::Migration
2
2
  def change
3
- add_index :users, :confirmation_token, :unique => true
4
- add_column :users , :password_salt, :string
3
+ add_index :citygate_users, :confirmation_token, :unique => true
4
+ add_column :citygate_users , :password_salt, :string
5
5
 
6
- create_table :authorizations do |t|
6
+ create_table :citygate_authorizations do |t|
7
7
  t.string :provider
8
8
  t.string :uid
9
9
  t.integer :user_id
@@ -0,0 +1,10 @@
1
+ class CreateRoles < ActiveRecord::Migration
2
+ def change
3
+ create_table :citygate_roles do |t|
4
+ t.string :name
5
+ t.timestamps
6
+ end
7
+
8
+ add_column :citygate_users, :role_id, :integer
9
+ end
10
+ end
data/db/seeds.rb CHANGED
@@ -5,6 +5,13 @@
5
5
  #
6
6
  # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
7
7
  # Mayor.create(name: 'Emanuel', city: cities.first)
8
- puts 'SETTING UP DEFAULT USER LOGIN'
9
- user = User.create! :name => 'First User', :email => 'user@example.com', :password => 'please', :password_confirmation => 'please', :confirmed_at => DateTime.now
10
- puts 'New user created: ' << user.name
8
+
9
+ puts 'SETTING UP ROLES...'
10
+ roles = [
11
+ {:name => "Member"},
12
+ {:name => "Admin"}
13
+ ]
14
+
15
+ roles.each do |attributes|
16
+ Citygate::Role.find_or_initialize_by_name(attributes[:name]).save!
17
+ end
@@ -4,17 +4,6 @@ module AppControllerHelpers
4
4
  end
5
5
 
6
6
  module InstanceMethods
7
- # Devise hack
8
- def stored_location_for(resource_or_scope)
9
- root_url
10
- end
11
-
12
- def after_sign_in_path_for(resource)
13
- # This should work, but session is lost. See https://github.com/plataformatec/devise/issues/1357
14
- # return_to = session[:return_to]
15
- # session[:return_to] = nil
16
- return_to = request.env['omniauth.origin']
17
- stored_location_for(resource) || return_to || root_path
18
- end
7
+
19
8
  end
20
9
  end
@@ -10,8 +10,7 @@ require 'omniauth-facebook'
10
10
  require 'omniauth-openid'
11
11
  require 'uuidtools'
12
12
  require 'will_paginate'
13
-
14
- require "citygate"
13
+ require 'cancan'
15
14
 
16
15
  module Citygate
17
16
  def self.root
@@ -19,5 +18,6 @@ module Citygate
19
18
  end
20
19
 
21
20
  class Engine < ::Rails::Engine
21
+ isolate_namespace Citygate
22
22
  end
23
23
  end
@@ -1,3 +1,3 @@
1
1
  module Citygate
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/citygate.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require "citygate/engine"
2
2
 
3
3
  module Citygate
4
- require "#{File.join(Citygate.root,'lib/app_controller_helpers')}"
5
-
4
+ Dir["#{Citygate.root}/lib/*.rb"].each {|file| require file}
5
+
6
6
  ActiveSupport.on_load(:action_controller) do
7
7
  extend AppControllerHelpers::ClassMethods
8
8
  include AppControllerHelpers::InstanceMethods
data/lib/gravatar.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'digest/md5'
2
+
3
+ module Gravatar
4
+
5
+ def gravatar_id
6
+ Digest::MD5.hexdigest(self.email.to_s.downcase)
7
+ end
8
+
9
+ def gravatar_url(options = { rating: 'g'})
10
+ "https://secure.gravatar.com/avatar/#{self.gravatar_id}.png/rating=#{options[:rating]}"
11
+ end
12
+
13
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: citygate
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Group Buddies
@@ -10,12 +10,10 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-05-18 00:00:00 +01:00
14
- default_executable:
13
+ date: 2012-05-26 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: rails
18
- prerelease: false
19
17
  requirement: &id001 !ruby/object:Gem::Requirement
20
18
  none: false
21
19
  requirements:
@@ -23,10 +21,10 @@ dependencies:
23
21
  - !ruby/object:Gem::Version
24
22
  version: 3.2.2
25
23
  type: :runtime
24
+ prerelease: false
26
25
  version_requirements: *id001
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: haml
29
- prerelease: false
30
28
  requirement: &id002 !ruby/object:Gem::Requirement
31
29
  none: false
32
30
  requirements:
@@ -34,10 +32,10 @@ dependencies:
34
32
  - !ruby/object:Gem::Version
35
33
  version: 3.1.4
36
34
  type: :runtime
35
+ prerelease: false
37
36
  version_requirements: *id002
38
37
  - !ruby/object:Gem::Dependency
39
38
  name: devise
40
- prerelease: false
41
39
  requirement: &id003 !ruby/object:Gem::Requirement
42
40
  none: false
43
41
  requirements:
@@ -45,10 +43,10 @@ dependencies:
45
43
  - !ruby/object:Gem::Version
46
44
  version: 2.0.4
47
45
  type: :runtime
46
+ prerelease: false
48
47
  version_requirements: *id003
49
48
  - !ruby/object:Gem::Dependency
50
49
  name: devise-encryptable
51
- prerelease: false
52
50
  requirement: &id004 !ruby/object:Gem::Requirement
53
51
  none: false
54
52
  requirements:
@@ -56,10 +54,10 @@ dependencies:
56
54
  - !ruby/object:Gem::Version
57
55
  version: 0.1.1
58
56
  type: :runtime
57
+ prerelease: false
59
58
  version_requirements: *id004
60
59
  - !ruby/object:Gem::Dependency
61
60
  name: devise_invitable
62
- prerelease: false
63
61
  requirement: &id005 !ruby/object:Gem::Requirement
64
62
  none: false
65
63
  requirements:
@@ -67,10 +65,10 @@ dependencies:
67
65
  - !ruby/object:Gem::Version
68
66
  version: 1.0.0
69
67
  type: :runtime
68
+ prerelease: false
70
69
  version_requirements: *id005
71
70
  - !ruby/object:Gem::Dependency
72
71
  name: omniauth
73
- prerelease: false
74
72
  requirement: &id006 !ruby/object:Gem::Requirement
75
73
  none: false
76
74
  requirements:
@@ -78,10 +76,10 @@ dependencies:
78
76
  - !ruby/object:Gem::Version
79
77
  version: 1.0.2
80
78
  type: :runtime
79
+ prerelease: false
81
80
  version_requirements: *id006
82
81
  - !ruby/object:Gem::Dependency
83
82
  name: omniauth-facebook
84
- prerelease: false
85
83
  requirement: &id007 !ruby/object:Gem::Requirement
86
84
  none: false
87
85
  requirements:
@@ -89,10 +87,10 @@ dependencies:
89
87
  - !ruby/object:Gem::Version
90
88
  version: 1.2.0
91
89
  type: :runtime
90
+ prerelease: false
92
91
  version_requirements: *id007
93
92
  - !ruby/object:Gem::Dependency
94
93
  name: omniauth-openid
95
- prerelease: false
96
94
  requirement: &id008 !ruby/object:Gem::Requirement
97
95
  none: false
98
96
  requirements:
@@ -100,10 +98,10 @@ dependencies:
100
98
  - !ruby/object:Gem::Version
101
99
  version: 1.0.1
102
100
  type: :runtime
101
+ prerelease: false
103
102
  version_requirements: *id008
104
103
  - !ruby/object:Gem::Dependency
105
104
  name: uuidtools
106
- prerelease: false
107
105
  requirement: &id009 !ruby/object:Gem::Requirement
108
106
  none: false
109
107
  requirements:
@@ -111,10 +109,10 @@ dependencies:
111
109
  - !ruby/object:Gem::Version
112
110
  version: 2.1.2
113
111
  type: :runtime
112
+ prerelease: false
114
113
  version_requirements: *id009
115
114
  - !ruby/object:Gem::Dependency
116
115
  name: will_paginate
117
- prerelease: false
118
116
  requirement: &id010 !ruby/object:Gem::Requirement
119
117
  none: false
120
118
  requirements:
@@ -122,194 +120,140 @@ dependencies:
122
120
  - !ruby/object:Gem::Version
123
121
  version: 3.0.3
124
122
  type: :runtime
123
+ prerelease: false
125
124
  version_requirements: *id010
126
125
  - !ruby/object:Gem::Dependency
127
- name: thin
128
- prerelease: false
126
+ name: cancan
129
127
  requirement: &id011 !ruby/object:Gem::Requirement
130
128
  none: false
131
129
  requirements:
132
130
  - - ">="
133
131
  - !ruby/object:Gem::Version
134
- version: 1.3.1
135
- type: :development
132
+ version: 1.6.7
133
+ type: :runtime
134
+ prerelease: false
136
135
  version_requirements: *id011
137
136
  - !ruby/object:Gem::Dependency
138
- name: haml-rails
139
- prerelease: false
137
+ name: thin
140
138
  requirement: &id012 !ruby/object:Gem::Requirement
141
139
  none: false
142
140
  requirements:
143
141
  - - ">="
144
142
  - !ruby/object:Gem::Version
145
- version: 0.3.4
143
+ version: 1.3.1
146
144
  type: :development
145
+ prerelease: false
147
146
  version_requirements: *id012
148
147
  - !ruby/object:Gem::Dependency
149
- name: guard
150
- prerelease: false
148
+ name: haml-rails
151
149
  requirement: &id013 !ruby/object:Gem::Requirement
152
150
  none: false
153
151
  requirements:
154
152
  - - ">="
155
153
  - !ruby/object:Gem::Version
156
- version: 0.6.2
154
+ version: 0.3.4
157
155
  type: :development
156
+ prerelease: false
158
157
  version_requirements: *id013
159
158
  - !ruby/object:Gem::Dependency
160
- name: rb-fsevent
161
- prerelease: false
159
+ name: rspec-rails
162
160
  requirement: &id014 !ruby/object:Gem::Requirement
163
161
  none: false
164
162
  requirements:
165
163
  - - ">="
166
164
  - !ruby/object:Gem::Version
167
- version: "0"
165
+ version: 2.8.1
168
166
  type: :development
167
+ prerelease: false
169
168
  version_requirements: *id014
170
169
  - !ruby/object:Gem::Dependency
171
- name: growl
172
- prerelease: false
170
+ name: email_spec
173
171
  requirement: &id015 !ruby/object:Gem::Requirement
174
172
  none: false
175
173
  requirements:
176
174
  - - ">="
177
175
  - !ruby/object:Gem::Version
178
- version: "0"
176
+ version: 1.2.1
179
177
  type: :development
178
+ prerelease: false
180
179
  version_requirements: *id015
181
180
  - !ruby/object:Gem::Dependency
182
- name: guard-bundler
183
- prerelease: false
181
+ name: factory_girl
184
182
  requirement: &id016 !ruby/object:Gem::Requirement
185
183
  none: false
186
184
  requirements:
187
- - - ">="
185
+ - - "="
188
186
  - !ruby/object:Gem::Version
189
- version: 0.1.3
187
+ version: 2.6.4
190
188
  type: :development
189
+ prerelease: false
191
190
  version_requirements: *id016
192
191
  - !ruby/object:Gem::Dependency
193
- name: guard-rails
194
- prerelease: false
192
+ name: cucumber-rails
195
193
  requirement: &id017 !ruby/object:Gem::Requirement
196
194
  none: false
197
195
  requirements:
198
196
  - - ">="
199
197
  - !ruby/object:Gem::Version
200
- version: 0.0.3
198
+ version: 1.3.0
201
199
  type: :development
200
+ prerelease: false
202
201
  version_requirements: *id017
203
202
  - !ruby/object:Gem::Dependency
204
- name: guard-livereload
205
- prerelease: false
203
+ name: capybara
206
204
  requirement: &id018 !ruby/object:Gem::Requirement
207
205
  none: false
208
206
  requirements:
209
207
  - - ">="
210
208
  - !ruby/object:Gem::Version
211
- version: 0.3.0
209
+ version: 1.1.2
212
210
  type: :development
211
+ prerelease: false
213
212
  version_requirements: *id018
214
213
  - !ruby/object:Gem::Dependency
215
- name: guard-rspec
216
- prerelease: false
214
+ name: database_cleaner
217
215
  requirement: &id019 !ruby/object:Gem::Requirement
218
216
  none: false
219
217
  requirements:
220
218
  - - ">="
221
219
  - !ruby/object:Gem::Version
222
- version: 0.4.3
220
+ version: 0.7.1
223
221
  type: :development
222
+ prerelease: false
224
223
  version_requirements: *id019
225
224
  - !ruby/object:Gem::Dependency
226
- name: guard-cucumber
227
- prerelease: false
225
+ name: launchy
228
226
  requirement: &id020 !ruby/object:Gem::Requirement
229
227
  none: false
230
228
  requirements:
231
229
  - - ">="
232
230
  - !ruby/object:Gem::Version
233
- version: 0.6.1
231
+ version: 2.0.5
234
232
  type: :development
233
+ prerelease: false
235
234
  version_requirements: *id020
236
235
  - !ruby/object:Gem::Dependency
237
- name: rspec-rails
238
- prerelease: false
236
+ name: jasmine-rails
239
237
  requirement: &id021 !ruby/object:Gem::Requirement
240
238
  none: false
241
239
  requirements:
242
240
  - - ">="
243
241
  - !ruby/object:Gem::Version
244
- version: 2.8.1
242
+ version: 0.0.3
245
243
  type: :development
244
+ prerelease: false
246
245
  version_requirements: *id021
247
246
  - !ruby/object:Gem::Dependency
248
- name: email_spec
249
- prerelease: false
247
+ name: jasmine-jquery-rails
250
248
  requirement: &id022 !ruby/object:Gem::Requirement
251
249
  none: false
252
250
  requirements:
253
251
  - - ">="
254
252
  - !ruby/object:Gem::Version
255
- version: 1.2.1
256
- type: :development
257
- version_requirements: *id022
258
- - !ruby/object:Gem::Dependency
259
- name: factory_girl
260
- prerelease: false
261
- requirement: &id023 !ruby/object:Gem::Requirement
262
- none: false
263
- requirements:
264
- - - "="
265
- - !ruby/object:Gem::Version
266
- version: 2.6.4
267
- type: :development
268
- version_requirements: *id023
269
- - !ruby/object:Gem::Dependency
270
- name: cucumber-rails
271
- prerelease: false
272
- requirement: &id024 !ruby/object:Gem::Requirement
273
- none: false
274
- requirements:
275
- - - ">="
276
- - !ruby/object:Gem::Version
277
- version: 1.3.0
278
- type: :development
279
- version_requirements: *id024
280
- - !ruby/object:Gem::Dependency
281
- name: capybara
282
- prerelease: false
283
- requirement: &id025 !ruby/object:Gem::Requirement
284
- none: false
285
- requirements:
286
- - - ">="
287
- - !ruby/object:Gem::Version
288
- version: 1.1.2
289
- type: :development
290
- version_requirements: *id025
291
- - !ruby/object:Gem::Dependency
292
- name: database_cleaner
293
- prerelease: false
294
- requirement: &id026 !ruby/object:Gem::Requirement
295
- none: false
296
- requirements:
297
- - - ">="
298
- - !ruby/object:Gem::Version
299
- version: 0.7.1
253
+ version: "0"
300
254
  type: :development
301
- version_requirements: *id026
302
- - !ruby/object:Gem::Dependency
303
- name: launchy
304
255
  prerelease: false
305
- requirement: &id027 !ruby/object:Gem::Requirement
306
- none: false
307
- requirements:
308
- - - ">="
309
- - !ruby/object:Gem::Version
310
- version: 2.0.5
311
- type: :development
312
- version_requirements: *id027
256
+ version_requirements: *id022
313
257
  description: Citygate is an Engine that provides user model with sign up and log in, admin backend for managing users.
314
258
  email:
315
259
  - zamith@groupbuddies.com
@@ -320,31 +264,36 @@ extensions: []
320
264
  extra_rdoc_files: []
321
265
 
322
266
  files:
267
+ - app/assets/javascripts/citygate/admin_users.coffee
323
268
  - app/assets/javascripts/citygate/application.js
269
+ - app/assets/javascripts/citygate/global.coffee
324
270
  - app/assets/stylesheets/citygate/application.css.scss
325
271
  - app/assets/stylesheets/citygate/main.sass
326
- - app/controllers/admin/application_controller.rb
327
- - app/controllers/admin/users_controller.rb
328
- - app/controllers/application_controller.rb
329
- - app/controllers/home_controller.rb
330
- - app/controllers/users/omniauth_callbacks_controller.rb
331
- - app/controllers/users_controller.rb
272
+ - app/controllers/citygate/admin/application_controller.rb
273
+ - app/controllers/citygate/admin/users_controller.rb
274
+ - app/controllers/citygate/application_controller.rb
275
+ - app/controllers/citygate/home_controller.rb
276
+ - app/controllers/citygate/users/omniauth_callbacks_controller.rb
277
+ - app/controllers/citygate/users_controller.rb
332
278
  - app/helpers/citygate/application_helper.rb
333
- - app/models/authorization.rb
334
- - app/models/user.rb
335
- - app/views/admin/users/index.html.erb
336
- - app/views/admin/users/show.html.erb
337
- - app/views/devise/_links.erb
338
- - app/views/devise/registrations/edit.html.haml
339
- - app/views/home/index.html.erb
340
- - app/views/layouts/admin/application.html.haml
341
- - app/views/layouts/admin/citygate_admin_layout.html.erb
342
- - app/views/layouts/citygate.html.erb
343
- - app/views/layouts/citygate_layout.html.erb
344
- - app/views/shared/_navigation.html.erb
345
- - app/views/users/show.html.erb
279
+ - app/models/citygate/ability.rb
280
+ - app/models/citygate/authorization.rb
281
+ - app/models/citygate/role.rb
282
+ - app/models/citygate/user.rb
283
+ - app/views/citygate/admin/users/_user_show.html.erb
284
+ - app/views/citygate/admin/users/_users.html.erb
285
+ - app/views/citygate/admin/users/index.html.erb
286
+ - app/views/citygate/admin/users/index.js.erb
287
+ - app/views/citygate/admin/users/show.html.erb
288
+ - app/views/citygate/admin/users/show.js.erb
289
+ - app/views/citygate/devise/_links.erb
290
+ - app/views/citygate/devise/registrations/edit.html.haml
291
+ - app/views/citygate/home/index.html.erb
292
+ - app/views/citygate/shared/_navigation.html.erb
293
+ - app/views/citygate/users/show.html.erb
294
+ - app/views/layouts/admin/application.html.erb
295
+ - app/views/layouts/application.html.erb
346
296
  - config/cucumber.yml
347
- - config/initializers/devise-lol.rb
348
297
  - config/initializers/devise.rb
349
298
  - config/locales/devise.en.yml
350
299
  - config/locales/devise_invitable.en.yml
@@ -355,16 +304,17 @@ files:
355
304
  - db/migrate/20120303195111_add_confirmable_to_users.rb
356
305
  - db/migrate/20120303195145_devise_invitable_add_to_users.rb
357
306
  - db/migrate/20120507112430_add_omniauth_to_devise.rb
307
+ - db/migrate/20120523163700_create_roles.rb
358
308
  - db/seeds.rb
359
309
  - lib/app_controller_helpers.rb
360
310
  - lib/citygate/engine.rb
361
311
  - lib/citygate/version.rb
362
312
  - lib/citygate.rb
313
+ - lib/gravatar.rb
363
314
  - lib/tasks/citygate_tasks.rake
364
315
  - MIT-LICENSE
365
316
  - Rakefile
366
317
  - README.rdoc
367
- has_rdoc: true
368
318
  homepage:
369
319
  licenses: []
370
320
 
@@ -378,19 +328,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
378
328
  requirements:
379
329
  - - ">="
380
330
  - !ruby/object:Gem::Version
331
+ hash: 1496931421819216404
332
+ segments:
333
+ - 0
381
334
  version: "0"
382
335
  required_rubygems_version: !ruby/object:Gem::Requirement
383
336
  none: false
384
337
  requirements:
385
338
  - - ">="
386
339
  - !ruby/object:Gem::Version
340
+ hash: 1496931421819216404
341
+ segments:
342
+ - 0
387
343
  version: "0"
388
344
  requirements: []
389
345
 
390
346
  rubyforge_project:
391
- rubygems_version: 1.6.2
347
+ rubygems_version: 1.8.24
392
348
  signing_key:
393
349
  specification_version: 3
394
350
  summary: Simple authentication and user management Engine.
395
351
  test_files: []
396
352
 
353
+ has_rdoc:
@@ -1,3 +0,0 @@
1
- class Admin::ApplicationController < ActionController::Base
2
- protect_from_forgery
3
- end
@@ -1,11 +0,0 @@
1
- class Admin::UsersController < Admin::ApplicationController
2
- before_filter :authenticate_user!
3
-
4
- def index
5
- @users = User.paginate(per_page: 15, page: params[:page])
6
- end
7
-
8
- def show
9
- @user = User.find(params[:id])
10
- end
11
- end
@@ -1,4 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- protect_from_forgery
3
-
4
- end
@@ -1,5 +0,0 @@
1
- class HomeController < ApplicationController
2
- def index
3
- @users = User.all
4
- end
5
- end
@@ -1,7 +0,0 @@
1
- class UsersController < ApplicationController
2
- before_filter :authenticate_user!
3
-
4
- def show
5
- @user = User.find(params[:id])
6
- end
7
- end
@@ -1,6 +0,0 @@
1
- class Authorization < ActiveRecord::Base
2
-
3
- belongs_to :user
4
-
5
- attr_accessible :provider, :uid, :user_id, :token, :secret, :name, :link, :image_url
6
- end
data/app/models/user.rb DELETED
@@ -1,12 +0,0 @@
1
- class User < ActiveRecord::Base
2
- devise :database_authenticatable, :registerable, :encryptable,
3
- :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable
4
-
5
- devise :encryptor => :sha1
6
-
7
- # Setup accessible (or protected) attributes for your model
8
- attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :confirmed_at
9
-
10
-
11
- has_many :authorizations, :dependent => :destroy
12
- end
@@ -1,10 +0,0 @@
1
- <div id="users">
2
- <% @users.each do |user| %>
3
- <div class="user">
4
- <span class="email"><%= user.email %></span>
5
- <%= content_tag(:span, user.name) if user.name %>
6
- </div>
7
- <% end %>
8
-
9
- <%= will_paginate @users %>
10
- </div>
@@ -1,8 +0,0 @@
1
- <header>
2
- <h1>NORMAL PANEL</h1>
3
- <nav>
4
- <ul class="hmenu">
5
- <%= render 'shared/navigation' %>
6
- </ul>
7
- </nav>
8
- </header>
File without changes
@@ -1,32 +0,0 @@
1
- !!!
2
- %html
3
- %head
4
- %title Citygate
5
- %meta{:charset => "utf-8"}
6
- %meta{"http-equiv" => "X-UA-Compatible", :content => "IE=edge,chrome=1"}
7
- %meta{:name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1"}
8
- = stylesheet_link_tag "citygate/application", :media => "all"
9
- = javascript_include_tag "citygate/application"
10
- = csrf_meta_tags
11
- %body{:class => params[:controller]}
12
- #container.container
13
- %header
14
- .navbar.navbar-fixed-top
15
- .navbar-inner
16
- .container
17
- %ul.nav
18
- %li.active
19
- <a href="/">Home</a>
20
- %li
21
- <a href="#">Link</a>
22
- %li
23
- <a href="#">Link</a>
24
- %h1 Admin PANEL
25
- %nav
26
- %ul.hmenu
27
- = render 'shared/navigation'
28
- - flash.each do |name, msg|
29
- = content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String)
30
- #main{:role => "main"}
31
- = yield
32
- %footer
@@ -1 +0,0 @@
1
- <%= render :file => "layouts/citygate_layout", :layout => "layouts/application" %>
@@ -1,4 +0,0 @@
1
- #Devise.setup do |config|
2
- # #config.router_name = :citygate
3
- # config.parent_controller = 'ActionController::Base'
4
- #end