oauth2_provider_engine 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/oauth2_provider/application.js +52 -0
- data/app/assets/javascripts/oauth2_provider/highcharts.js +162 -0
- data/app/assets/javascripts/oauth2_provider/jquery.tagsinput.js +218 -0
- data/app/assets/stylesheets/oauth2_provider/gh-buttons.css +388 -0
- data/app/assets/stylesheets/oauth2_provider/gh-icons.png +0 -0
- data/app/assets/stylesheets/oauth2_provider/jquery.tagsinput.css +6 -0
- data/app/assets/stylesheets/oauth2_provider/reset.css +2 -0
- data/app/assets/stylesheets/oauth2_provider/template.css +52 -0
- data/app/controllers/oauth2_provider/accesses_controller.rb +39 -0
- data/app/controllers/oauth2_provider/application_controller.rb +17 -0
- data/app/controllers/oauth2_provider/authorize_controller.rb +141 -0
- data/app/controllers/oauth2_provider/clients_controller.rb +85 -0
- data/app/controllers/oauth2_provider/scopes_controller.rb +63 -0
- data/app/controllers/oauth2_provider/token_controller.rb +187 -0
- data/app/helpers/clients_helper.rb +5 -0
- data/app/helpers/oauth2_provider/application_helper.rb +4 -0
- data/app/models/oauth2_provider/client.rb +129 -0
- data/app/models/oauth2_provider/document.rb +15 -0
- data/app/models/oauth2_provider/oauth_access.rb +80 -0
- data/app/models/oauth2_provider/oauth_authorization.rb +70 -0
- data/app/models/oauth2_provider/oauth_daily_request.rb +54 -0
- data/app/models/oauth2_provider/oauth_refresh_token.rb +20 -0
- data/app/models/oauth2_provider/oauth_token.rb +78 -0
- data/app/models/oauth2_provider/scope.rb +39 -0
- data/app/views/layouts/oauth2_provider/application.html.erb +62 -0
- data/app/views/oauth2_provider/accesses/index.html.erb +25 -0
- data/app/views/oauth2_provider/accesses/show.html.erb +35 -0
- data/app/views/oauth2_provider/clients/_form.html.erb +50 -0
- data/app/views/oauth2_provider/clients/edit.html.erb +9 -0
- data/app/views/oauth2_provider/clients/index.html.erb +43 -0
- data/app/views/oauth2_provider/clients/new.html.erb +8 -0
- data/app/views/oauth2_provider/clients/show.html.erb +49 -0
- data/app/views/oauth2_provider/scopes/_form.html.erb +35 -0
- data/app/views/oauth2_provider/scopes/edit.html.erb +8 -0
- data/app/views/oauth2_provider/scopes/index.html.erb +27 -0
- data/app/views/oauth2_provider/scopes/new.html.erb +7 -0
- data/app/views/oauth2_provider/scopes/show.html.erb +19 -0
- data/app/views/shared/authorize.html.erb +34 -0
- data/app/views/shared/token.json.erb +8 -0
- data/config/locales/en.yml +31 -0
- data/config/oauth.yml +4 -0
- data/config/routes.rb +25 -0
- data/lib/oauth2_provider.rb +38 -0
- data/lib/oauth2_provider/controller_mixin.rb +53 -0
- data/lib/oauth2_provider/engine.rb +4 -0
- data/lib/oauth2_provider_engine.rb +1 -0
- data/lib/oauth2_provider_engine/version.rb +3 -0
- data/test/dummy/CHANGELOG.rdoc +67 -0
- data/test/dummy/Gemfile +53 -0
- data/test/dummy/Gemfile.lock +254 -0
- data/test/dummy/README.rdoc +522 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/VERSION +1 -0
- data/test/dummy/app/assets/stylesheets/reset.css +2 -0
- data/test/dummy/app/assets/stylesheets/template.css +52 -0
- data/test/dummy/app/controllers/application_controller.rb +52 -0
- data/test/dummy/app/controllers/pastas_controller.rb +23 -0
- data/test/dummy/app/controllers/pizzas_controller.rb +23 -0
- data/test/dummy/app/controllers/sessions_controller.rb +26 -0
- data/test/dummy/app/controllers/users_controller.rb +59 -0
- data/test/dummy/app/models/user.rb +50 -0
- data/test/dummy/app/views/layouts/application.html.erb +65 -0
- data/test/dummy/app/views/sessions/new.html.erb +25 -0
- data/test/dummy/app/views/shared/403.json.erb +4 -0
- data/test/dummy/app/views/shared/404.json.erb +6 -0
- data/test/dummy/app/views/shared/422.json.erb +5 -0
- data/test/dummy/app/views/shared/500.json.erb +4 -0
- data/test/dummy/app/views/shared/html/404.html.erb +0 -0
- data/test/dummy/app/views/shared/html/422.html.erb +0 -0
- data/test/dummy/app/views/users/_form.html.erb +27 -0
- data/test/dummy/app/views/users/edit.html.erb +8 -0
- data/test/dummy/app/views/users/index.html.erb +20 -0
- data/test/dummy/app/views/users/new.html.erb +46 -0
- data/test/dummy/app/views/users/show.html.erb +15 -0
- data/test/dummy/app/views/users/show.json.erb +6 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +57 -0
- data/test/dummy/config/boot.rb +13 -0
- data/test/dummy/config/cucumber.yml +8 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +32 -0
- data/test/dummy/config/environments/production.rb +58 -0
- data/test/dummy/config/environments/test.rb +35 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +10 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/test.rb +3 -0
- data/test/dummy/config/locales/en.yml +1 -0
- data/test/dummy/config/mongoid.yml +20 -0
- data/test/dummy/config/routes.rb +22 -0
- data/test/dummy/db/seeds.rb +7 -0
- data/test/dummy/doc/README_FOR_APP +2 -0
- data/test/dummy/lib/tasks/cucumber.rake +53 -0
- data/test/dummy/lib/tasks/watchr.rake +5 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +4 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/robots.txt +5 -0
- data/test/dummy/script/cucumber +10 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/spec/acceptance/acceptance_helper.rb +5 -0
- data/test/dummy/spec/acceptance/accesses_controller_spec.rb +77 -0
- data/test/dummy/spec/acceptance/clients_controller_spec.rb +218 -0
- data/test/dummy/spec/acceptance/oauth_authorize_controller_spec.rb +241 -0
- data/test/dummy/spec/acceptance/oauth_token_controller_spec.rb +196 -0
- data/test/dummy/spec/acceptance/resource_controller_spec.rb +143 -0
- data/test/dummy/spec/acceptance/scopes_controller_spec.rb +227 -0
- data/test/dummy/spec/acceptance/support/helpers.rb +81 -0
- data/test/dummy/spec/acceptance/support/paths.rb +9 -0
- data/test/dummy/spec/acceptance/support/view_helpers.rb +52 -0
- data/test/dummy/spec/acceptance/users_controller_spec.rb +198 -0
- data/test/dummy/spec/extras/scope_spec.rb +105 -0
- data/test/dummy/spec/factories/oauth.rb +106 -0
- data/test/dummy/spec/models/oauth/client_spec.rb +123 -0
- data/test/dummy/spec/models/oauth/oauth_access_spec.rb +48 -0
- data/test/dummy/spec/models/oauth/oauth_authorization_spec.rb +50 -0
- data/test/dummy/spec/models/oauth/oauth_daily_request_spec.rb +14 -0
- data/test/dummy/spec/models/oauth/oauth_refresh_token_spec.rb +11 -0
- data/test/dummy/spec/models/oauth/oauth_token_spec.rb +55 -0
- data/test/dummy/spec/models/scope_spec.rb +17 -0
- data/test/dummy/spec/spec_helper.rb +39 -0
- data/test/dummy/spec/support/settings_helper.rb +28 -0
- data/test/dummy/test/initializers/capybara_headers_hack.rb +23 -0
- data/test/oauth2_provider_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +387 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
en:
|
2
|
+
notifications:
|
3
|
+
oauth:
|
4
|
+
client:
|
5
|
+
not_found: "Client not found with the provided params"
|
6
|
+
not_authorized: "Client not authorized with the provided scope"
|
7
|
+
blocked: "Client blocked"
|
8
|
+
response_type:
|
9
|
+
not_valid: "Not valid response type"
|
10
|
+
authorization:
|
11
|
+
not_found: "Authorization not found with the provided params"
|
12
|
+
expired: "Authorization expired"
|
13
|
+
resource_owner:
|
14
|
+
not_found: "User not found with the provided params"
|
15
|
+
blocked_client: "Client blocked from the user (check preferences)"
|
16
|
+
token:
|
17
|
+
not_found: "Access token not found with the provided params"
|
18
|
+
expired: "Access token authorization expired"
|
19
|
+
blocked_token: "Access token blocked from the user (logged out)"
|
20
|
+
refresh_token:
|
21
|
+
not_found: "Refresh token not found with the provided params"
|
22
|
+
document:
|
23
|
+
not_found: "Resource not found"
|
24
|
+
not_valid: "Not valid attributes"
|
25
|
+
json:
|
26
|
+
not_valid: "Not valid JSON"
|
27
|
+
not_array: "Not a valid JSON type associated"
|
28
|
+
pagination:
|
29
|
+
not_valid_page: "Not a valid page"
|
30
|
+
not_valid_per_page: "Not a valid per_page"
|
31
|
+
|
data/config/oauth.yml
ADDED
data/config/routes.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Oauth2Provider::Engine.routes.draw do
|
2
|
+
namespace :oauth2_provider, path: '' do
|
3
|
+
|
4
|
+
get "authorize" => "authorize#show", defaults: { format: "html" }
|
5
|
+
post "authorize" => "authorize#create", defaults: { format: "html" }
|
6
|
+
delete "authorize" => "authorize#destroy", defaults: { format: "html" }
|
7
|
+
delete "token/:id" => "token#destroy", defaults: { format: "json" }
|
8
|
+
post "token" => "token#create", defaults: { format: "json" }
|
9
|
+
|
10
|
+
resources :scopes
|
11
|
+
|
12
|
+
resources :clients do
|
13
|
+
put :block, on: :member
|
14
|
+
put :unblock, on: :member
|
15
|
+
end
|
16
|
+
|
17
|
+
resources :accesses do
|
18
|
+
put :block, on: :member
|
19
|
+
put :unblock, on: :member
|
20
|
+
end
|
21
|
+
|
22
|
+
root :to => "clients#index"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
require 'validate_url'
|
3
|
+
require 'chronic'
|
4
|
+
require 'orm_adapter'
|
5
|
+
require "oauth2_provider/engine"
|
6
|
+
require "oauth2_provider/controller_mixin"
|
7
|
+
|
8
|
+
module Oauth2Provider
|
9
|
+
def self.settings
|
10
|
+
@settings ||= YAML.load_file("#{Oauth2Provider::Engine.root}/config/oauth.yml")
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.normalize_scope(scope = [])
|
14
|
+
scope = scope.split(" ") if scope.kind_of? String
|
15
|
+
normalized = self::Scope.any_in(name: scope)
|
16
|
+
normalized = normalized.map(&:values).flatten
|
17
|
+
|
18
|
+
if normalized.empty?
|
19
|
+
return self.clean(scope)
|
20
|
+
else
|
21
|
+
return self.clean(scope) + self.normalize_scope(normalized)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Remove 'no action' keys. For example during normalization
|
26
|
+
# we add keys like 'pizza' (resource names) or 'pizza/read'
|
27
|
+
# wihch we have to remove to easily make the access recognition
|
28
|
+
# with the bearer token.
|
29
|
+
#
|
30
|
+
# NOTE: at the moment are not allowed methods which contain
|
31
|
+
# the word "read" because it will be removed
|
32
|
+
def self.clean(scope)
|
33
|
+
scope = scope.keep_if {|scope| scope =~ /\// }
|
34
|
+
scope = scope.delete_if {|scope| scope =~ /read/ }
|
35
|
+
scope = scope.uniq
|
36
|
+
return scope
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Oauth2Provider
|
2
|
+
module ControllerMixin
|
3
|
+
def _oauth_provider_authenticate
|
4
|
+
if api_request
|
5
|
+
oauth_authorized # uncomment to make all json API protected
|
6
|
+
else
|
7
|
+
session_auth
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def api_request
|
12
|
+
json?
|
13
|
+
end
|
14
|
+
|
15
|
+
def json?
|
16
|
+
request.format == "application/json"
|
17
|
+
end
|
18
|
+
|
19
|
+
def _oauth_provider_json_body
|
20
|
+
body = request.body.read.to_s
|
21
|
+
@body = if body.empty?
|
22
|
+
HashWithIndifferentAccess.new({})
|
23
|
+
else
|
24
|
+
HashWithIndifferentAccess.new(Rack::Utils.parse_nested_query body)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def oauth_authorized
|
29
|
+
action = params[:controller] + "/" + params[:action]
|
30
|
+
_oauth_provider_normalize_token
|
31
|
+
@token = Oauth2Provider::OauthToken.to_adapter.find_first(token: params[:token], scope: action)
|
32
|
+
if @token.nil? or @token.blocked?
|
33
|
+
render text: "Unauthorized access.", status: 401
|
34
|
+
return false
|
35
|
+
else
|
36
|
+
access = Oauth2Provider::OauthAccess.to_adapter.find_first(client_uri: @token.client_uri , resource_owner_uri: @token.resource_owner_uri)
|
37
|
+
access.accessed!
|
38
|
+
@current_user = User.to_adapter.find_first(id: @token.resource_owner_uri.split('/').last)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def _oauth_provider_normalize_token
|
43
|
+
# Token in the body
|
44
|
+
if (_oauth_provider_json_body and @body[:token])
|
45
|
+
params[:token] = @body[:token]
|
46
|
+
end
|
47
|
+
# Token in the header
|
48
|
+
if request.env["Authorization"]
|
49
|
+
params[:token] = request.env["Authorization"].split(" ").last
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'oauth2_provider'
|
@@ -0,0 +1,67 @@
|
|
1
|
+
= Changelog
|
2
|
+
|
3
|
+
|
4
|
+
== Release v0.3.1 (2011/04/22)
|
5
|
+
|
6
|
+
* Added documentation with screenshots
|
7
|
+
* Added tag system on scope definition
|
8
|
+
* Added basic graph with access token stats
|
9
|
+
|
10
|
+
|
11
|
+
== Release v0.3.0 (2011/04/21)
|
12
|
+
|
13
|
+
* Added refined UI for the dashboard section
|
14
|
+
* Updated documentation
|
15
|
+
|
16
|
+
|
17
|
+
== Release v0.2.3 (2011/04/19)
|
18
|
+
|
19
|
+
* Added redirect to last URI before logging in
|
20
|
+
* Added functionality to block the access of a user resource in
|
21
|
+
behalf of a specific client
|
22
|
+
* Added client access and stats to every user in the dashboard
|
23
|
+
* Added functionality to block a client (only admin can do this)
|
24
|
+
* Added UI to automatically set admin the first user which
|
25
|
+
register into the OAuth Server
|
26
|
+
* Added autoupdate of scopes to all clients when one of them
|
27
|
+
changes
|
28
|
+
|
29
|
+
|
30
|
+
== Release v0.2.2 (2011/04/18)
|
31
|
+
|
32
|
+
* Added documentation on scope definition, action authorization, testing
|
33
|
+
framework and oauth flow testing code.
|
34
|
+
|
35
|
+
|
36
|
+
== Release v0.2.1 (2011/04/15)
|
37
|
+
|
38
|
+
* Added bearer token protection simply adding the filter
|
39
|
+
<tt>before_filter :oauth_authorized<tt> on the conrtoller
|
40
|
+
* Added dynamic scope setting. Now is possible to set the
|
41
|
+
scopes directly in the admin interface, and easily protect
|
42
|
+
every method inside a controller.
|
43
|
+
* Added dashboard for admin to add scopes and monitor all
|
44
|
+
registered users
|
45
|
+
* Added dashboard to control and create clients
|
46
|
+
* Added dashboard to edit user info
|
47
|
+
|
48
|
+
|
49
|
+
== Release v0.2.0 (2011/04/06)
|
50
|
+
|
51
|
+
* Added refresh token mechanisms
|
52
|
+
* Removed unuseful gems
|
53
|
+
* Changed denied message from access=denied to error=access_denied
|
54
|
+
* Introduced test to block of single token (idea of logout)
|
55
|
+
* Changed oauth/authorize with /oauth/authorization to make sistem more REST
|
56
|
+
* Redefinition of all documentation, more simple and complete
|
57
|
+
|
58
|
+
|
59
|
+
== Release v0.1.1 (2011/03/29)
|
60
|
+
|
61
|
+
* Added documentation explaining the authorization flows
|
62
|
+
|
63
|
+
|
64
|
+
== Release v0.1.0 (2011/03/29)
|
65
|
+
|
66
|
+
* Added documentation explaining the existing flows
|
67
|
+
* Added OAuth2 server with acceptance tests
|
data/test/dummy/Gemfile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
source 'http://gemcutter.org'
|
3
|
+
|
4
|
+
gem 'rails', '3.2.5'
|
5
|
+
|
6
|
+
# Gems used only for assets and not required
|
7
|
+
# in production environments by default.
|
8
|
+
group :assets do
|
9
|
+
gem 'sass-rails', '~> 3.2.3'
|
10
|
+
gem 'coffee-rails', '~> 3.2.1'
|
11
|
+
|
12
|
+
# See https://github.com/sstephenson/execjs#readme for more supported runtime
|
13
|
+
# gem 'therubyracer'
|
14
|
+
|
15
|
+
gem 'uglifier', '>= 1.0.3'
|
16
|
+
end
|
17
|
+
|
18
|
+
gem "jquery-rails"
|
19
|
+
gem 'mongoid'
|
20
|
+
gem 'bson_ext'
|
21
|
+
gem 'yajl-ruby'
|
22
|
+
gem 'will_paginate'
|
23
|
+
gem 'rack-ssl'
|
24
|
+
gem "bcrypt-ruby", :require => "bcrypt"
|
25
|
+
gem 'validate_url'
|
26
|
+
gem 'email_validator'
|
27
|
+
gem 'chronic'
|
28
|
+
gem 'jquery-rails'
|
29
|
+
gem 'orm_adapter', :git => 'git://github.com/timgaleckas/orm_adapter.git'
|
30
|
+
gem 'oauth2_provider', :path => '../..'
|
31
|
+
|
32
|
+
group :development, :test do
|
33
|
+
gem 'debugger'
|
34
|
+
gem 'rspec-rails'
|
35
|
+
end
|
36
|
+
|
37
|
+
group :test do
|
38
|
+
gem 'steak'
|
39
|
+
gem 'capybara'
|
40
|
+
gem 'selenium-client'
|
41
|
+
gem 'selenium-webdriver'
|
42
|
+
gem 'launchy'
|
43
|
+
gem 'shoulda'
|
44
|
+
gem 'factory_girl_rails'
|
45
|
+
gem 'webrat'
|
46
|
+
gem 'autotest'
|
47
|
+
gem 'autotest-growl'
|
48
|
+
gem 'database_cleaner'
|
49
|
+
gem 'fuubar'
|
50
|
+
gem 'watchr'
|
51
|
+
gem 'delorean'
|
52
|
+
gem 'rspec-set'
|
53
|
+
end
|
@@ -0,0 +1,254 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/timgaleckas/orm_adapter.git
|
3
|
+
revision: e4ae617d8eea6c50ca1a4db9de4a12669868119a
|
4
|
+
specs:
|
5
|
+
orm_adapter (0.1.0)
|
6
|
+
|
7
|
+
PATH
|
8
|
+
remote: ../..
|
9
|
+
specs:
|
10
|
+
oauth2_provider (0.0.1)
|
11
|
+
bson_ext
|
12
|
+
chronic
|
13
|
+
jquery-rails
|
14
|
+
mongoid
|
15
|
+
orm_adapter
|
16
|
+
rails (~> 3.2.5)
|
17
|
+
validate_url
|
18
|
+
|
19
|
+
GEM
|
20
|
+
remote: http://rubygems.org/
|
21
|
+
remote: http://gemcutter.org/
|
22
|
+
specs:
|
23
|
+
ZenTest (4.8.1)
|
24
|
+
actionmailer (3.2.5)
|
25
|
+
actionpack (= 3.2.5)
|
26
|
+
mail (~> 2.4.4)
|
27
|
+
actionpack (3.2.5)
|
28
|
+
activemodel (= 3.2.5)
|
29
|
+
activesupport (= 3.2.5)
|
30
|
+
builder (~> 3.0.0)
|
31
|
+
erubis (~> 2.7.0)
|
32
|
+
journey (~> 1.0.1)
|
33
|
+
rack (~> 1.4.0)
|
34
|
+
rack-cache (~> 1.2)
|
35
|
+
rack-test (~> 0.6.1)
|
36
|
+
sprockets (~> 2.1.3)
|
37
|
+
activemodel (3.2.5)
|
38
|
+
activesupport (= 3.2.5)
|
39
|
+
builder (~> 3.0.0)
|
40
|
+
activerecord (3.2.5)
|
41
|
+
activemodel (= 3.2.5)
|
42
|
+
activesupport (= 3.2.5)
|
43
|
+
arel (~> 3.0.2)
|
44
|
+
tzinfo (~> 0.3.29)
|
45
|
+
activeresource (3.2.5)
|
46
|
+
activemodel (= 3.2.5)
|
47
|
+
activesupport (= 3.2.5)
|
48
|
+
activesupport (3.2.5)
|
49
|
+
i18n (~> 0.6)
|
50
|
+
multi_json (~> 1.0)
|
51
|
+
addressable (2.2.8)
|
52
|
+
arel (3.0.2)
|
53
|
+
autotest (4.4.6)
|
54
|
+
ZenTest (>= 4.4.1)
|
55
|
+
autotest-growl (0.2.16)
|
56
|
+
bcrypt-ruby (3.0.1)
|
57
|
+
bson (1.6.4)
|
58
|
+
bson_ext (1.6.4)
|
59
|
+
bson (~> 1.6.4)
|
60
|
+
builder (3.0.0)
|
61
|
+
capybara (1.1.2)
|
62
|
+
mime-types (>= 1.16)
|
63
|
+
nokogiri (>= 1.3.3)
|
64
|
+
rack (>= 1.0.0)
|
65
|
+
rack-test (>= 0.5.4)
|
66
|
+
selenium-webdriver (~> 2.0)
|
67
|
+
xpath (~> 0.1.4)
|
68
|
+
childprocess (0.3.2)
|
69
|
+
ffi (~> 1.0.6)
|
70
|
+
chronic (0.6.7)
|
71
|
+
coffee-rails (3.2.2)
|
72
|
+
coffee-script (>= 2.2.0)
|
73
|
+
railties (~> 3.2.0)
|
74
|
+
coffee-script (2.2.0)
|
75
|
+
coffee-script-source
|
76
|
+
execjs
|
77
|
+
coffee-script-source (1.3.3)
|
78
|
+
columnize (0.3.6)
|
79
|
+
database_cleaner (0.8.0)
|
80
|
+
debugger (1.1.4)
|
81
|
+
columnize (>= 0.3.1)
|
82
|
+
debugger-linecache (~> 1.1.1)
|
83
|
+
debugger-ruby_core_source (~> 1.1.3)
|
84
|
+
debugger-linecache (1.1.1)
|
85
|
+
debugger-ruby_core_source (>= 1.1.1)
|
86
|
+
debugger-ruby_core_source (1.1.3)
|
87
|
+
delorean (1.2.0)
|
88
|
+
chronic
|
89
|
+
diff-lcs (1.1.3)
|
90
|
+
email_validator (1.3.0)
|
91
|
+
activemodel
|
92
|
+
erubis (2.7.0)
|
93
|
+
execjs (1.4.0)
|
94
|
+
multi_json (~> 1.0)
|
95
|
+
factory_girl (3.4.0)
|
96
|
+
activesupport (>= 3.0.0)
|
97
|
+
factory_girl_rails (3.4.0)
|
98
|
+
factory_girl (~> 3.4.0)
|
99
|
+
railties (>= 3.0.0)
|
100
|
+
ffi (1.0.11)
|
101
|
+
fuubar (1.0.0)
|
102
|
+
rspec (~> 2.0)
|
103
|
+
rspec-instafail (~> 0.2.0)
|
104
|
+
ruby-progressbar (~> 0.0.10)
|
105
|
+
hike (1.2.1)
|
106
|
+
i18n (0.6.0)
|
107
|
+
journey (1.0.3)
|
108
|
+
jquery-rails (2.0.2)
|
109
|
+
railties (>= 3.2.0, < 5.0)
|
110
|
+
thor (~> 0.14)
|
111
|
+
json (1.7.3)
|
112
|
+
launchy (2.1.0)
|
113
|
+
addressable (~> 2.2.6)
|
114
|
+
libwebsocket (0.1.3)
|
115
|
+
addressable
|
116
|
+
mail (2.4.4)
|
117
|
+
i18n (>= 0.4.0)
|
118
|
+
mime-types (~> 1.16)
|
119
|
+
treetop (~> 1.4.8)
|
120
|
+
mime-types (1.18)
|
121
|
+
mongo (1.6.2)
|
122
|
+
bson (~> 1.6.2)
|
123
|
+
mongoid (2.4.11)
|
124
|
+
activemodel (~> 3.1)
|
125
|
+
mongo (<= 1.6.2)
|
126
|
+
tzinfo (~> 0.3.22)
|
127
|
+
multi_json (1.3.6)
|
128
|
+
nokogiri (1.5.4)
|
129
|
+
polyglot (0.3.3)
|
130
|
+
rack (1.4.1)
|
131
|
+
rack-cache (1.2)
|
132
|
+
rack (>= 0.4)
|
133
|
+
rack-ssl (1.3.2)
|
134
|
+
rack
|
135
|
+
rack-test (0.6.1)
|
136
|
+
rack (>= 1.0)
|
137
|
+
rails (3.2.5)
|
138
|
+
actionmailer (= 3.2.5)
|
139
|
+
actionpack (= 3.2.5)
|
140
|
+
activerecord (= 3.2.5)
|
141
|
+
activeresource (= 3.2.5)
|
142
|
+
activesupport (= 3.2.5)
|
143
|
+
bundler (~> 1.0)
|
144
|
+
railties (= 3.2.5)
|
145
|
+
railties (3.2.5)
|
146
|
+
actionpack (= 3.2.5)
|
147
|
+
activesupport (= 3.2.5)
|
148
|
+
rack-ssl (~> 1.3.2)
|
149
|
+
rake (>= 0.8.7)
|
150
|
+
rdoc (~> 3.4)
|
151
|
+
thor (>= 0.14.6, < 2.0)
|
152
|
+
rake (0.9.2.2)
|
153
|
+
rdoc (3.12)
|
154
|
+
json (~> 1.4)
|
155
|
+
rspec (2.10.0)
|
156
|
+
rspec-core (~> 2.10.0)
|
157
|
+
rspec-expectations (~> 2.10.0)
|
158
|
+
rspec-mocks (~> 2.10.0)
|
159
|
+
rspec-core (2.10.1)
|
160
|
+
rspec-expectations (2.10.0)
|
161
|
+
diff-lcs (~> 1.1.3)
|
162
|
+
rspec-instafail (0.2.4)
|
163
|
+
rspec-mocks (2.10.1)
|
164
|
+
rspec-rails (2.10.1)
|
165
|
+
actionpack (>= 3.0)
|
166
|
+
activesupport (>= 3.0)
|
167
|
+
railties (>= 3.0)
|
168
|
+
rspec (~> 2.10.0)
|
169
|
+
rspec-set (0.0.1)
|
170
|
+
rspec (>= 2)
|
171
|
+
ruby-progressbar (0.0.10)
|
172
|
+
rubyzip (0.9.8)
|
173
|
+
sass (3.1.19)
|
174
|
+
sass-rails (3.2.5)
|
175
|
+
railties (~> 3.2.0)
|
176
|
+
sass (>= 3.1.10)
|
177
|
+
tilt (~> 1.3)
|
178
|
+
selenium-client (1.2.18)
|
179
|
+
selenium-webdriver (2.22.2)
|
180
|
+
childprocess (>= 0.2.5)
|
181
|
+
ffi (~> 1.0)
|
182
|
+
libwebsocket (~> 0.1.3)
|
183
|
+
multi_json (~> 1.0)
|
184
|
+
rubyzip
|
185
|
+
shoulda (3.0.1)
|
186
|
+
shoulda-context (~> 1.0.0)
|
187
|
+
shoulda-matchers (~> 1.0.0)
|
188
|
+
shoulda-context (1.0.0)
|
189
|
+
shoulda-matchers (1.0.0)
|
190
|
+
sprockets (2.1.3)
|
191
|
+
hike (~> 1.2)
|
192
|
+
rack (~> 1.0)
|
193
|
+
tilt (~> 1.1, != 1.3.0)
|
194
|
+
steak (2.0.0)
|
195
|
+
capybara (>= 1.0.0)
|
196
|
+
rspec-rails (>= 2.5.0)
|
197
|
+
thor (0.15.2)
|
198
|
+
tilt (1.3.3)
|
199
|
+
treetop (1.4.10)
|
200
|
+
polyglot
|
201
|
+
polyglot (>= 0.3.1)
|
202
|
+
tzinfo (0.3.33)
|
203
|
+
uglifier (1.2.4)
|
204
|
+
execjs (>= 0.3.0)
|
205
|
+
multi_json (>= 1.0.2)
|
206
|
+
validate_url (0.2.0)
|
207
|
+
activemodel (>= 3.0.0)
|
208
|
+
watchr (0.7)
|
209
|
+
webrat (0.7.3)
|
210
|
+
nokogiri (>= 1.2.0)
|
211
|
+
rack (>= 1.0)
|
212
|
+
rack-test (>= 0.5.3)
|
213
|
+
will_paginate (3.0.3)
|
214
|
+
xpath (0.1.4)
|
215
|
+
nokogiri (~> 1.3)
|
216
|
+
yajl-ruby (1.1.0)
|
217
|
+
|
218
|
+
PLATFORMS
|
219
|
+
ruby
|
220
|
+
|
221
|
+
DEPENDENCIES
|
222
|
+
autotest
|
223
|
+
autotest-growl
|
224
|
+
bcrypt-ruby
|
225
|
+
bson_ext
|
226
|
+
capybara
|
227
|
+
chronic
|
228
|
+
coffee-rails (~> 3.2.1)
|
229
|
+
database_cleaner
|
230
|
+
debugger
|
231
|
+
delorean
|
232
|
+
email_validator
|
233
|
+
factory_girl_rails
|
234
|
+
fuubar
|
235
|
+
jquery-rails
|
236
|
+
launchy
|
237
|
+
mongoid
|
238
|
+
oauth2_provider!
|
239
|
+
orm_adapter!
|
240
|
+
rack-ssl
|
241
|
+
rails (= 3.2.5)
|
242
|
+
rspec-rails
|
243
|
+
rspec-set
|
244
|
+
sass-rails (~> 3.2.3)
|
245
|
+
selenium-client
|
246
|
+
selenium-webdriver
|
247
|
+
shoulda
|
248
|
+
steak
|
249
|
+
uglifier (>= 1.0.3)
|
250
|
+
validate_url
|
251
|
+
watchr
|
252
|
+
webrat
|
253
|
+
will_paginate
|
254
|
+
yajl-ruby
|