citygate 0.0.3 → 0.0.4

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 (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