oauth2_provider_engine 0.0.1

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 (132) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/oauth2_provider/application.js +52 -0
  5. data/app/assets/javascripts/oauth2_provider/highcharts.js +162 -0
  6. data/app/assets/javascripts/oauth2_provider/jquery.tagsinput.js +218 -0
  7. data/app/assets/stylesheets/oauth2_provider/gh-buttons.css +388 -0
  8. data/app/assets/stylesheets/oauth2_provider/gh-icons.png +0 -0
  9. data/app/assets/stylesheets/oauth2_provider/jquery.tagsinput.css +6 -0
  10. data/app/assets/stylesheets/oauth2_provider/reset.css +2 -0
  11. data/app/assets/stylesheets/oauth2_provider/template.css +52 -0
  12. data/app/controllers/oauth2_provider/accesses_controller.rb +39 -0
  13. data/app/controllers/oauth2_provider/application_controller.rb +17 -0
  14. data/app/controllers/oauth2_provider/authorize_controller.rb +141 -0
  15. data/app/controllers/oauth2_provider/clients_controller.rb +85 -0
  16. data/app/controllers/oauth2_provider/scopes_controller.rb +63 -0
  17. data/app/controllers/oauth2_provider/token_controller.rb +187 -0
  18. data/app/helpers/clients_helper.rb +5 -0
  19. data/app/helpers/oauth2_provider/application_helper.rb +4 -0
  20. data/app/models/oauth2_provider/client.rb +129 -0
  21. data/app/models/oauth2_provider/document.rb +15 -0
  22. data/app/models/oauth2_provider/oauth_access.rb +80 -0
  23. data/app/models/oauth2_provider/oauth_authorization.rb +70 -0
  24. data/app/models/oauth2_provider/oauth_daily_request.rb +54 -0
  25. data/app/models/oauth2_provider/oauth_refresh_token.rb +20 -0
  26. data/app/models/oauth2_provider/oauth_token.rb +78 -0
  27. data/app/models/oauth2_provider/scope.rb +39 -0
  28. data/app/views/layouts/oauth2_provider/application.html.erb +62 -0
  29. data/app/views/oauth2_provider/accesses/index.html.erb +25 -0
  30. data/app/views/oauth2_provider/accesses/show.html.erb +35 -0
  31. data/app/views/oauth2_provider/clients/_form.html.erb +50 -0
  32. data/app/views/oauth2_provider/clients/edit.html.erb +9 -0
  33. data/app/views/oauth2_provider/clients/index.html.erb +43 -0
  34. data/app/views/oauth2_provider/clients/new.html.erb +8 -0
  35. data/app/views/oauth2_provider/clients/show.html.erb +49 -0
  36. data/app/views/oauth2_provider/scopes/_form.html.erb +35 -0
  37. data/app/views/oauth2_provider/scopes/edit.html.erb +8 -0
  38. data/app/views/oauth2_provider/scopes/index.html.erb +27 -0
  39. data/app/views/oauth2_provider/scopes/new.html.erb +7 -0
  40. data/app/views/oauth2_provider/scopes/show.html.erb +19 -0
  41. data/app/views/shared/authorize.html.erb +34 -0
  42. data/app/views/shared/token.json.erb +8 -0
  43. data/config/locales/en.yml +31 -0
  44. data/config/oauth.yml +4 -0
  45. data/config/routes.rb +25 -0
  46. data/lib/oauth2_provider.rb +38 -0
  47. data/lib/oauth2_provider/controller_mixin.rb +53 -0
  48. data/lib/oauth2_provider/engine.rb +4 -0
  49. data/lib/oauth2_provider_engine.rb +1 -0
  50. data/lib/oauth2_provider_engine/version.rb +3 -0
  51. data/test/dummy/CHANGELOG.rdoc +67 -0
  52. data/test/dummy/Gemfile +53 -0
  53. data/test/dummy/Gemfile.lock +254 -0
  54. data/test/dummy/README.rdoc +522 -0
  55. data/test/dummy/Rakefile +7 -0
  56. data/test/dummy/VERSION +1 -0
  57. data/test/dummy/app/assets/stylesheets/reset.css +2 -0
  58. data/test/dummy/app/assets/stylesheets/template.css +52 -0
  59. data/test/dummy/app/controllers/application_controller.rb +52 -0
  60. data/test/dummy/app/controllers/pastas_controller.rb +23 -0
  61. data/test/dummy/app/controllers/pizzas_controller.rb +23 -0
  62. data/test/dummy/app/controllers/sessions_controller.rb +26 -0
  63. data/test/dummy/app/controllers/users_controller.rb +59 -0
  64. data/test/dummy/app/models/user.rb +50 -0
  65. data/test/dummy/app/views/layouts/application.html.erb +65 -0
  66. data/test/dummy/app/views/sessions/new.html.erb +25 -0
  67. data/test/dummy/app/views/shared/403.json.erb +4 -0
  68. data/test/dummy/app/views/shared/404.json.erb +6 -0
  69. data/test/dummy/app/views/shared/422.json.erb +5 -0
  70. data/test/dummy/app/views/shared/500.json.erb +4 -0
  71. data/test/dummy/app/views/shared/html/404.html.erb +0 -0
  72. data/test/dummy/app/views/shared/html/422.html.erb +0 -0
  73. data/test/dummy/app/views/users/_form.html.erb +27 -0
  74. data/test/dummy/app/views/users/edit.html.erb +8 -0
  75. data/test/dummy/app/views/users/index.html.erb +20 -0
  76. data/test/dummy/app/views/users/new.html.erb +46 -0
  77. data/test/dummy/app/views/users/show.html.erb +15 -0
  78. data/test/dummy/app/views/users/show.json.erb +6 -0
  79. data/test/dummy/config.ru +4 -0
  80. data/test/dummy/config/application.rb +57 -0
  81. data/test/dummy/config/boot.rb +13 -0
  82. data/test/dummy/config/cucumber.yml +8 -0
  83. data/test/dummy/config/environment.rb +5 -0
  84. data/test/dummy/config/environments/development.rb +32 -0
  85. data/test/dummy/config/environments/production.rb +58 -0
  86. data/test/dummy/config/environments/test.rb +35 -0
  87. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  88. data/test/dummy/config/initializers/inflections.rb +10 -0
  89. data/test/dummy/config/initializers/mime_types.rb +5 -0
  90. data/test/dummy/config/initializers/secret_token.rb +7 -0
  91. data/test/dummy/config/initializers/session_store.rb +8 -0
  92. data/test/dummy/config/initializers/test.rb +3 -0
  93. data/test/dummy/config/locales/en.yml +1 -0
  94. data/test/dummy/config/mongoid.yml +20 -0
  95. data/test/dummy/config/routes.rb +22 -0
  96. data/test/dummy/db/seeds.rb +7 -0
  97. data/test/dummy/doc/README_FOR_APP +2 -0
  98. data/test/dummy/lib/tasks/cucumber.rake +53 -0
  99. data/test/dummy/lib/tasks/watchr.rake +5 -0
  100. data/test/dummy/public/404.html +26 -0
  101. data/test/dummy/public/422.html +26 -0
  102. data/test/dummy/public/500.html +4 -0
  103. data/test/dummy/public/favicon.ico +0 -0
  104. data/test/dummy/public/robots.txt +5 -0
  105. data/test/dummy/script/cucumber +10 -0
  106. data/test/dummy/script/rails +6 -0
  107. data/test/dummy/spec/acceptance/acceptance_helper.rb +5 -0
  108. data/test/dummy/spec/acceptance/accesses_controller_spec.rb +77 -0
  109. data/test/dummy/spec/acceptance/clients_controller_spec.rb +218 -0
  110. data/test/dummy/spec/acceptance/oauth_authorize_controller_spec.rb +241 -0
  111. data/test/dummy/spec/acceptance/oauth_token_controller_spec.rb +196 -0
  112. data/test/dummy/spec/acceptance/resource_controller_spec.rb +143 -0
  113. data/test/dummy/spec/acceptance/scopes_controller_spec.rb +227 -0
  114. data/test/dummy/spec/acceptance/support/helpers.rb +81 -0
  115. data/test/dummy/spec/acceptance/support/paths.rb +9 -0
  116. data/test/dummy/spec/acceptance/support/view_helpers.rb +52 -0
  117. data/test/dummy/spec/acceptance/users_controller_spec.rb +198 -0
  118. data/test/dummy/spec/extras/scope_spec.rb +105 -0
  119. data/test/dummy/spec/factories/oauth.rb +106 -0
  120. data/test/dummy/spec/models/oauth/client_spec.rb +123 -0
  121. data/test/dummy/spec/models/oauth/oauth_access_spec.rb +48 -0
  122. data/test/dummy/spec/models/oauth/oauth_authorization_spec.rb +50 -0
  123. data/test/dummy/spec/models/oauth/oauth_daily_request_spec.rb +14 -0
  124. data/test/dummy/spec/models/oauth/oauth_refresh_token_spec.rb +11 -0
  125. data/test/dummy/spec/models/oauth/oauth_token_spec.rb +55 -0
  126. data/test/dummy/spec/models/scope_spec.rb +17 -0
  127. data/test/dummy/spec/spec_helper.rb +39 -0
  128. data/test/dummy/spec/support/settings_helper.rb +28 -0
  129. data/test/dummy/test/initializers/capybara_headers_hack.rb +23 -0
  130. data/test/oauth2_provider_test.rb +7 -0
  131. data/test/test_helper.rb +15 -0
  132. metadata +387 -0
@@ -0,0 +1,8 @@
1
+ <%=
2
+ {
3
+ 'access_token' => @token.token,
4
+ 'expires_in' => Oauth2Provider.settings["token_expires_in"],
5
+ 'refresh_token' => @refresh_token.refresh_token,
6
+ 'resource_owner_uri' => @resource_owner_uri
7
+ }.to_json.html_safe
8
+ %>
@@ -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
+
@@ -0,0 +1,4 @@
1
+ token_expires_in: "1800"
2
+ authorization_expires_in: "150"
3
+ random_length: 32
4
+ scope_separator: " "
@@ -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,4 @@
1
+ module Oauth2Provider
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1 @@
1
+ require 'oauth2_provider'
@@ -0,0 +1,3 @@
1
+ module Oauth2ProviderEngine
2
+ VERSION = "0.0.1"
3
+ end
@@ -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
@@ -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