access_token 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +8 -0
  4. data/CHANGELOG.md +5 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +169 -0
  9. data/Rakefile +9 -0
  10. data/access_token.gemspec +32 -0
  11. data/examples/rails-app/.gitignore +17 -0
  12. data/examples/rails-app/Gemfile +13 -0
  13. data/examples/rails-app/Gemfile.lock +149 -0
  14. data/examples/rails-app/README.rdoc +28 -0
  15. data/examples/rails-app/Rakefile +6 -0
  16. data/examples/rails-app/app/assets/images/.keep +0 -0
  17. data/examples/rails-app/app/assets/stylesheets/application.css +15 -0
  18. data/examples/rails-app/app/controllers/application_controller.rb +23 -0
  19. data/examples/rails-app/app/controllers/auth_controller.rb +13 -0
  20. data/examples/rails-app/app/controllers/concerns/.keep +0 -0
  21. data/examples/rails-app/app/controllers/profile_controller.rb +7 -0
  22. data/examples/rails-app/app/helpers/application_helper.rb +2 -0
  23. data/examples/rails-app/app/mailers/.keep +0 -0
  24. data/examples/rails-app/app/models/.keep +0 -0
  25. data/examples/rails-app/app/models/concerns/.keep +0 -0
  26. data/examples/rails-app/app/models/user.rb +3 -0
  27. data/examples/rails-app/app/views/layouts/application.html.erb +13 -0
  28. data/examples/rails-app/bin/bundle +3 -0
  29. data/examples/rails-app/bin/rails +4 -0
  30. data/examples/rails-app/bin/rake +4 -0
  31. data/examples/rails-app/bin/setup +29 -0
  32. data/examples/rails-app/config.ru +4 -0
  33. data/examples/rails-app/config/application.rb +26 -0
  34. data/examples/rails-app/config/boot.rb +3 -0
  35. data/examples/rails-app/config/database.yml +25 -0
  36. data/examples/rails-app/config/environment.rb +5 -0
  37. data/examples/rails-app/config/environments/development.rb +41 -0
  38. data/examples/rails-app/config/environments/production.rb +79 -0
  39. data/examples/rails-app/config/environments/test.rb +42 -0
  40. data/examples/rails-app/config/initializers/assets.rb +11 -0
  41. data/examples/rails-app/config/initializers/backtrace_silencers.rb +7 -0
  42. data/examples/rails-app/config/initializers/cookies_serializer.rb +3 -0
  43. data/examples/rails-app/config/initializers/filter_parameter_logging.rb +4 -0
  44. data/examples/rails-app/config/initializers/inflections.rb +16 -0
  45. data/examples/rails-app/config/initializers/mime_types.rb +4 -0
  46. data/examples/rails-app/config/initializers/session_store.rb +3 -0
  47. data/examples/rails-app/config/initializers/wrap_parameters.rb +14 -0
  48. data/examples/rails-app/config/locales/en.yml +23 -0
  49. data/examples/rails-app/config/routes.rb +4 -0
  50. data/examples/rails-app/config/secrets.yml +25 -0
  51. data/examples/rails-app/db/migrate/20150601000736_create_users.rb +17 -0
  52. data/examples/rails-app/db/schema.rb +25 -0
  53. data/examples/rails-app/db/seeds.rb +7 -0
  54. data/examples/rails-app/lib/assets/.keep +0 -0
  55. data/examples/rails-app/lib/tasks/.keep +0 -0
  56. data/examples/rails-app/log/.keep +0 -0
  57. data/examples/rails-app/public/404.html +67 -0
  58. data/examples/rails-app/public/422.html +67 -0
  59. data/examples/rails-app/public/500.html +66 -0
  60. data/examples/rails-app/public/favicon.ico +0 -0
  61. data/examples/rails-app/public/robots.txt +5 -0
  62. data/examples/rails-app/test/controllers/.keep +0 -0
  63. data/examples/rails-app/test/fixtures/.keep +0 -0
  64. data/examples/rails-app/test/fixtures/users.yml +9 -0
  65. data/examples/rails-app/test/helpers/.keep +0 -0
  66. data/examples/rails-app/test/integration/.keep +0 -0
  67. data/examples/rails-app/test/mailers/.keep +0 -0
  68. data/examples/rails-app/test/models/.keep +0 -0
  69. data/examples/rails-app/test/models/user_test.rb +7 -0
  70. data/examples/rails-app/test/test_helper.rb +10 -0
  71. data/examples/rails-app/vendor/assets/stylesheets/.keep +0 -0
  72. data/examples/sinatra-app/Gemfile +9 -0
  73. data/examples/sinatra-app/Gemfile.lock +76 -0
  74. data/examples/sinatra-app/config.ru +2 -0
  75. data/examples/sinatra-app/server.rb +78 -0
  76. data/lib/access_token.rb +84 -0
  77. data/lib/access_token/memcached_store.rb +25 -0
  78. data/lib/access_token/null_store.rb +19 -0
  79. data/lib/access_token/redis_store.rb +28 -0
  80. data/lib/access_token/version.rb +3 -0
  81. metadata +305 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aed36edb392a0af5ee9c97a0190ecac3dad636d5
4
+ data.tar.gz: b8387c690fb472abc595061d3e25f4ab19a93fc0
5
+ SHA512:
6
+ metadata.gz: 1bfeb8a5eec2377decee65cddfd0054deb0e99c134ef638ea8168539edd7e97079d57044cf86e3341beba2f8a689d9881bdc76ed7b7c1a8a9a761d13801e877a
7
+ data.tar.gz: 367b5a440d992b167e138126fa85f6e66657c4a9e83a193929aff9b9938c518c868ca3df6908522ed8b94ab386e625437bcfee649e46b7bf291d9d8d45648ed1
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.sqlite3
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ cache: bundler
3
+ sudo: false
4
+ rvm:
5
+ - 2.2.2
6
+ services:
7
+ - redis-server
8
+ - memcached
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ # v0.1.0 - unreleased
4
+
5
+ - Initial release
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in access_token.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Nando Vieira
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,169 @@
1
+ # AccessToken
2
+
3
+ [![Build Status](https://travis-ci.org/fnando/access_token.svg)](https://travis-ci.org/fnando/access_token)
4
+
5
+ A simple and easy-to-use access token generator.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'access_token'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install access_token
22
+
23
+ ## Usage
24
+
25
+ ```ruby
26
+ class ApplicationController < ActionController::Base
27
+ private
28
+
29
+ def access_token
30
+ @access_token ||= AccessToken.new(
31
+ request: request,
32
+ response: response,
33
+ secret: Rails.application.secrets.access_token_secret,
34
+ ttl: 3600
35
+ )
36
+ end
37
+
38
+ def current_user
39
+ @current_user
40
+ end
41
+
42
+ def authenticate!
43
+ @current_user = User.find_by_id(access_token.resolve)
44
+ return render(nothing: true, status: 401) unless current_user
45
+ access_token.update(current_user)
46
+ end
47
+ end
48
+
49
+ class AuthController < ApplicationController
50
+ def create
51
+ user = User.find_by_email(params[:email].to_s)
52
+ .try(:authenticate, params[:password].to_s)
53
+
54
+ if user
55
+ access_token.update(user)
56
+ render json: user
57
+ else
58
+ render nothing: true, status: 401
59
+ end
60
+ end
61
+ end
62
+
63
+ class ProfileController < ApplicationController
64
+ before_action :authenticate!
65
+
66
+ def show
67
+ render json: current_user
68
+ end
69
+ end
70
+
71
+ Rails.application.routes.draw do
72
+ get '/profile', to: 'profile#show'
73
+ post '/auth', to: 'auth#create'
74
+ end
75
+ ```
76
+
77
+ Now, testing authentication using [httpie](http://httpie.org).
78
+
79
+ ```
80
+ $ http --form POST localhost:3000/auth email=john@example.com password=test
81
+ HTTP/1.1 200 OK
82
+ Bearer: 5A2tPbDOXrQSMH1WzsEhhPaw4rNa1sJ9j7OyAU6gr1kfaZM0xDiXUGuENKyKLC/rKuzhrDXG6FwehWhIWy3IMfhQ9n6FJwBCERlF1TavYo2lG0UM8Bz1/0vrz3DxJc/r
83
+ Cache-Control: max-age=0, private, must-revalidate
84
+ Connection: Keep-Alive
85
+ Content-Length: 196
86
+ Content-Type: application/json; charset=utf-8
87
+ Date: Mon, 01 Jun 2015 00:22:12 GMT
88
+ Etag: W/"a710bcbfd462f6c4f7fed6bd7cff32b5"
89
+ Expires: Mon, 01 Jun 2015 01:22:12 GMT
90
+ Server: WEBrick/1.3.1 (Ruby/2.2.2/2015-04-13)
91
+ X-Content-Type-Options: nosniff
92
+ X-Frame-Options: SAMEORIGIN
93
+ X-Request-Id: e4a07ab3-fa31-4058-aad5-2bcb5ce1f16e
94
+ X-Runtime: 0.102162
95
+ X-Xss-Protection: 1; mode=block
96
+
97
+ {
98
+ "created_at": "2015-06-01T00:08:46.308Z",
99
+ "email": "john@example.com",
100
+ "id": 1,
101
+ "password_digest": "$2a$10$ayl6Yj.Hu1s.sba11YuMpOwDX.fZ.zsj.lPAvyapgLf6FWZtin.FW",
102
+ "updated_at": "2015-06-01T00:08:46.308Z"
103
+ }
104
+ ```
105
+
106
+ You can use the bearer by setting the `Authorization` header.
107
+
108
+ ```
109
+ $ http GET localhost:3000/profile Authorization:'Bearer 5A2tPbDOXrQSMH1WzsEhhPaw4rNa1sJ9j7OyAU6gr1kfaZM0xDiXUGuENKyKLC/rKuzhrDXG6FwehWhIWy3IMfhQ9n6FJwBCERlF1TavYo2lG0UM8Bz1/0vrz3DxJc/r'
110
+ HTTP/1.1 200 OK
111
+ Bearer: 5A2tPbDOXrQSMH1WzsEhhAgjsNRUhdJ6MZkah4PAU8840fSkebzmJpooRIkcc3csBafqjm5tR+nPbnydN1N378bXQtxvKr6m5doHp/rhCYYF+PbR72NE37Q/DpRgg577
112
+ Cache-Control: max-age=0, private, must-revalidate
113
+ Connection: Keep-Alive
114
+ Content-Length: 196
115
+ Content-Type: application/json; charset=utf-8
116
+ Date: Mon, 01 Jun 2015 00:23:03 GMT
117
+ Etag: W/"a710bcbfd462f6c4f7fed6bd7cff32b5"
118
+ Expires: Mon, 01 Jun 2015 01:23:03 GMT
119
+ Server: WEBrick/1.3.1 (Ruby/2.2.2/2015-04-13)
120
+ X-Content-Type-Options: nosniff
121
+ X-Frame-Options: SAMEORIGIN
122
+ X-Request-Id: 45ee363e-5df5-4514-b625-d4eb1dcb2e2a
123
+ X-Runtime: 0.024450
124
+ X-Xss-Protection: 1; mode=block
125
+
126
+ {
127
+ "created_at": "2015-06-01T00:08:46.308Z",
128
+ "email": "john@example.com",
129
+ "id": 1,
130
+ "password_digest": "$2a$10$ayl6Yj.Hu1s.sba11YuMpOwDX.fZ.zsj.lPAvyapgLf6FWZtin.FW",
131
+ "updated_at": "2015-06-01T00:08:46.308Z"
132
+ }
133
+ ```
134
+
135
+ Notice that a new bearer is returned every time you call `access_token.update(current_user)`.
136
+
137
+ If you're using Redis or Memcached store, you can't use the same bearer twice.
138
+
139
+ ```
140
+ $ http GET localhost:3000/profile Authorization:'Bearer 5A2tPbDOXrQSMH1WzsEhhPaw4rNa1sJ9j7OyAU6gr1kfaZM0xDiXUGuENKyKLC/rKuzhrDXG6FwehWhIWy3IMfhQ9n6FJwBCERlF1TavYo2lG0UM8Bz1/0vrz3DxJc/r'
141
+ HTTP/1.1 401 Unauthorized
142
+ Cache-Control: no-cache
143
+ Connection: Keep-Alive
144
+ Content-Length: 0
145
+ Content-Type: text/plain; charset=utf-8
146
+ Date: Mon, 01 Jun 2015 00:23:23 GMT
147
+ Server: WEBrick/1.3.1 (Ruby/2.2.2/2015-04-13)
148
+ X-Content-Type-Options: nosniff
149
+ X-Frame-Options: SAMEORIGIN
150
+ X-Request-Id: 401c9b61-824c-44a0-8cd2-faab545127cc
151
+ X-Runtime: 0.024320
152
+ X-Xss-Protection: 1; mode=block
153
+ ```
154
+
155
+ Also, check out the `examples` directory.
156
+
157
+ ## Development
158
+
159
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
160
+
161
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
162
+
163
+ ## Contributing
164
+
165
+ 1. Fork it ( https://github.com/fnando/access_token/fork )
166
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
167
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
168
+ 4. Push to the branch (`git push origin my-new-feature`)
169
+ 5. Create a new Pull Request
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.test_files = FileList['./test/**/*_test.rb']
7
+ end
8
+
9
+ task :default => :test
@@ -0,0 +1,32 @@
1
+ require './lib/access_token/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'access_token'
5
+ spec.version = AccessToken::VERSION
6
+ spec.authors = ['Nando Vieira']
7
+ spec.email = ['fnando.vieira@gmail.com']
8
+
9
+ spec.summary = 'Access token for client-side and API authentication.'
10
+ spec.description = spec.summary
11
+ spec.homepage = 'http://rubygems.org/gems/access_token'
12
+ spec.license = 'MIT'
13
+
14
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ spec.bindir = 'exe'
16
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
17
+ spec.require_paths = ['lib']
18
+
19
+ spec.add_dependency 'parsel'
20
+ spec.add_development_dependency 'bundler', '~> 1.9'
21
+ spec.add_development_dependency 'rake', '~> 10.0'
22
+ spec.add_development_dependency 'minitest'
23
+ spec.add_development_dependency 'minitest-utils'
24
+ spec.add_development_dependency 'rack-test'
25
+ spec.add_development_dependency 'sinatra'
26
+ spec.add_development_dependency 'activerecord'
27
+ spec.add_development_dependency 'sqlite3'
28
+ spec.add_development_dependency 'bcrypt'
29
+ spec.add_development_dependency 'pry-meta'
30
+ spec.add_development_dependency 'redis'
31
+ spec.add_development_dependency 'dalli'
32
+ end
@@ -0,0 +1,17 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*
16
+ !/log/.keep
17
+ /tmp
@@ -0,0 +1,13 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '4.2.1'
4
+ gem 'sqlite3'
5
+ gem 'sass-rails', '~> 5.0'
6
+ gem 'uglifier', '>= 1.3.0'
7
+ gem 'bcrypt', '~> 3.1.7'
8
+ gem 'access_token', path: '../..'
9
+ gem 'redis'
10
+
11
+ group :development do
12
+ gem 'pry-meta'
13
+ end
@@ -0,0 +1,149 @@
1
+ PATH
2
+ remote: ../..
3
+ specs:
4
+ access_token (0.1.0)
5
+ parsel
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (4.2.1)
11
+ actionpack (= 4.2.1)
12
+ actionview (= 4.2.1)
13
+ activejob (= 4.2.1)
14
+ mail (~> 2.5, >= 2.5.4)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ actionpack (4.2.1)
17
+ actionview (= 4.2.1)
18
+ activesupport (= 4.2.1)
19
+ rack (~> 1.6)
20
+ rack-test (~> 0.6.2)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
23
+ actionview (4.2.1)
24
+ activesupport (= 4.2.1)
25
+ builder (~> 3.1)
26
+ erubis (~> 2.7.0)
27
+ rails-dom-testing (~> 1.0, >= 1.0.5)
28
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
29
+ activejob (4.2.1)
30
+ activesupport (= 4.2.1)
31
+ globalid (>= 0.3.0)
32
+ activemodel (4.2.1)
33
+ activesupport (= 4.2.1)
34
+ builder (~> 3.1)
35
+ activerecord (4.2.1)
36
+ activemodel (= 4.2.1)
37
+ activesupport (= 4.2.1)
38
+ arel (~> 6.0)
39
+ activesupport (4.2.1)
40
+ i18n (~> 0.7)
41
+ json (~> 1.7, >= 1.7.7)
42
+ minitest (~> 5.1)
43
+ thread_safe (~> 0.3, >= 0.3.4)
44
+ tzinfo (~> 1.1)
45
+ arel (6.0.0)
46
+ awesome_print (1.6.1)
47
+ bcrypt (3.1.10)
48
+ builder (3.2.2)
49
+ byebug (4.0.5)
50
+ columnize (= 0.9.0)
51
+ coderay (1.1.0)
52
+ columnize (0.9.0)
53
+ erubis (2.7.0)
54
+ execjs (2.5.2)
55
+ globalid (0.3.5)
56
+ activesupport (>= 4.1.0)
57
+ i18n (0.7.0)
58
+ json (1.8.2)
59
+ loofah (2.0.2)
60
+ nokogiri (>= 1.5.9)
61
+ mail (2.6.3)
62
+ mime-types (>= 1.16, < 3)
63
+ method_source (0.8.2)
64
+ mime-types (2.6.1)
65
+ mini_portile (0.6.2)
66
+ minitest (5.7.0)
67
+ nokogiri (1.6.6.2)
68
+ mini_portile (~> 0.6.0)
69
+ parsel (0.2.0)
70
+ pry (0.10.1)
71
+ coderay (~> 1.1.0)
72
+ method_source (~> 0.8.1)
73
+ slop (~> 3.4)
74
+ pry-byebug (3.1.0)
75
+ byebug (~> 4.0)
76
+ pry (~> 0.10)
77
+ pry-meta (0.0.10)
78
+ awesome_print
79
+ pry
80
+ pry-byebug
81
+ pry-remote
82
+ pry-remote (0.1.8)
83
+ pry (~> 0.9)
84
+ slop (~> 3.0)
85
+ rack (1.6.1)
86
+ rack-test (0.6.3)
87
+ rack (>= 1.0)
88
+ rails (4.2.1)
89
+ actionmailer (= 4.2.1)
90
+ actionpack (= 4.2.1)
91
+ actionview (= 4.2.1)
92
+ activejob (= 4.2.1)
93
+ activemodel (= 4.2.1)
94
+ activerecord (= 4.2.1)
95
+ activesupport (= 4.2.1)
96
+ bundler (>= 1.3.0, < 2.0)
97
+ railties (= 4.2.1)
98
+ sprockets-rails
99
+ rails-deprecated_sanitizer (1.0.3)
100
+ activesupport (>= 4.2.0.alpha)
101
+ rails-dom-testing (1.0.6)
102
+ activesupport (>= 4.2.0.beta, < 5.0)
103
+ nokogiri (~> 1.6.0)
104
+ rails-deprecated_sanitizer (>= 1.0.1)
105
+ rails-html-sanitizer (1.0.2)
106
+ loofah (~> 2.0)
107
+ railties (4.2.1)
108
+ actionpack (= 4.2.1)
109
+ activesupport (= 4.2.1)
110
+ rake (>= 0.8.7)
111
+ thor (>= 0.18.1, < 2.0)
112
+ rake (10.4.2)
113
+ redis (3.2.1)
114
+ sass (3.4.14)
115
+ sass-rails (5.0.3)
116
+ railties (>= 4.0.0, < 5.0)
117
+ sass (~> 3.1)
118
+ sprockets (>= 2.8, < 4.0)
119
+ sprockets-rails (>= 2.0, < 4.0)
120
+ tilt (~> 1.1)
121
+ slop (3.6.0)
122
+ sprockets (3.1.0)
123
+ rack (~> 1.0)
124
+ sprockets-rails (2.3.1)
125
+ actionpack (>= 3.0)
126
+ activesupport (>= 3.0)
127
+ sprockets (>= 2.8, < 4.0)
128
+ sqlite3 (1.3.10)
129
+ thor (0.19.1)
130
+ thread_safe (0.3.5)
131
+ tilt (1.4.1)
132
+ tzinfo (1.2.2)
133
+ thread_safe (~> 0.1)
134
+ uglifier (2.7.1)
135
+ execjs (>= 0.3.0)
136
+ json (>= 1.8.0)
137
+
138
+ PLATFORMS
139
+ ruby
140
+
141
+ DEPENDENCIES
142
+ access_token!
143
+ bcrypt (~> 3.1.7)
144
+ pry-meta
145
+ rails (= 4.2.1)
146
+ redis
147
+ sass-rails (~> 5.0)
148
+ sqlite3
149
+ uglifier (>= 1.3.0)