evercookie 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/README.rdoc +59 -71
  2. data/config/routes.rb +7 -7
  3. data/lib/evercookie/controller.rb +40 -31
  4. data/lib/evercookie/engine.rb +1 -1
  5. data/lib/evercookie/version.rb +1 -1
  6. data/test/dummy/config/environments/production.rb +1 -1
  7. data/test/dummy4/Gemfile +19 -0
  8. data/test/dummy4/Gemfile.lock +119 -0
  9. data/test/dummy4/README.rdoc +28 -0
  10. data/test/dummy4/Rakefile +6 -0
  11. data/test/dummy4/app/assets/images/rails.png +0 -0
  12. data/test/dummy4/app/assets/javascripts/application.js +16 -0
  13. data/test/dummy4/app/assets/stylesheets/application.css +13 -0
  14. data/test/dummy4/app/controllers/application_controller.rb +5 -0
  15. data/test/dummy4/app/controllers/index_controller.rb +24 -0
  16. data/test/dummy4/app/helpers/application_helper.rb +2 -0
  17. data/test/dummy4/app/views/index/get.html.erb +5 -0
  18. data/test/dummy4/app/views/index/get_detailed.html.erb +26 -0
  19. data/test/dummy4/app/views/index/index.html.erb +36 -0
  20. data/test/dummy4/app/views/index/set.html.erb +3 -0
  21. data/test/dummy4/app/views/layouts/application.html.erb +14 -0
  22. data/test/dummy4/bin/bundle +3 -0
  23. data/test/dummy4/bin/rails +4 -0
  24. data/test/dummy4/bin/rake +4 -0
  25. data/test/dummy4/config.ru +4 -0
  26. data/test/dummy4/config/application.rb +22 -0
  27. data/test/dummy4/config/boot.rb +4 -0
  28. data/test/dummy4/config/database.yml +25 -0
  29. data/test/dummy4/config/environment.rb +5 -0
  30. data/test/dummy4/config/environments/development.rb +27 -0
  31. data/test/dummy4/config/environments/production.rb +80 -0
  32. data/test/dummy4/config/environments/test.rb +36 -0
  33. data/test/dummy4/config/initializers/backtrace_silencers.rb +7 -0
  34. data/test/dummy4/config/initializers/evercookie.rb +8 -0
  35. data/test/dummy4/config/initializers/filter_parameter_logging.rb +4 -0
  36. data/test/dummy4/config/initializers/inflections.rb +16 -0
  37. data/test/dummy4/config/initializers/mime_types.rb +5 -0
  38. data/test/dummy4/config/initializers/secret_token.rb +12 -0
  39. data/test/dummy4/config/initializers/session_store.rb +3 -0
  40. data/test/dummy4/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy4/config/locales/en.yml +23 -0
  42. data/test/dummy4/config/routes.rb +10 -0
  43. data/test/dummy4/db/seeds.rb +7 -0
  44. data/test/dummy4/public/404.html +27 -0
  45. data/test/dummy4/public/422.html +26 -0
  46. data/test/dummy4/public/500.html +26 -0
  47. data/test/dummy4/public/favicon.ico +0 -0
  48. data/test/dummy4/public/robots.txt +5 -0
  49. data/test/dummy4/test/test_helper.rb +15 -0
  50. metadata +94 -8
data/README.rdoc CHANGED
@@ -1,129 +1,117 @@
1
- ## Evercookie
1
+ == Evercookie
2
2
 
3
- {<img src="https://secure.travis-ci.org/daddyz/evercookie.png" alt="Build Status" />}[http://travis-ci.org/daddyz/evercookie]
3
+ {<img src="https://travis-ci.org/daddyz/evercookie.png?branch=master" alt="Build Status" />}[http://travis-ci.org/daddyz/evercookie]
4
+ {<img src="https://badge.fury.io/rb/evercookie.png" alt="Gem Version" />}[http://badge.fury.io/rb/evercookie]
5
+ {<img src="https://codeclimate.com/github/daddyz/evercookie.png" />}[https://codeclimate.com/github/daddyz/evercookie]
4
6
 
5
7
  Evercookie is a gem allowing you to use very persistent cookies on your rails project to track existing users on your system.
6
8
  It's javascript is based on https://github.com/samyk/evercookie javascript.
7
9
  Please note, that evercookie can't be fully reliable for detecting previous visiting of your site/application. For people who know the job it's simple enough to override it.
8
10
 
9
- As written on original javascript site (http://samy.pl/evercookie/), when creating a new cookie, it uses the following storage mechanisms when available:
10
- * Standard [HTTP Cookies](http://en.wikipedia.org/wiki/HTTP_cookie)
11
- * [Local Shared Objects](http://en.wikipedia.org/wiki/Local_Shared_Object) (Flash Cookies)
12
- * [Isolated Storage](http://www.silverlight.net/learn/quickstarts/isolatedstorage/) Silverlight (removed in gem)
11
+ As written on original javascript {site}[http://samy.pl/evercookie/], when creating a new cookie, it uses the following storage mechanisms when available:
12
+ * Standard {HTTP Cookies}[http://en.wikipedia.org/wiki/HTTP_cookie]
13
+ * {Local Shared Objects}[http://en.wikipedia.org/wiki/Local_Shared_Object] (Flash Cookies)
14
+ * {Isolated Storage}[http://www.silverlight.net/learn/quickstarts/isolatedstorage/] Silverlight (removed in gem)
13
15
  * Storing cookies in RGB values of auto-generated, force-cached PNGs using HTML5 Canvas tag to read pixels (cookies) back out
14
- * Storing cookies in and reading out [Web History](http://samy.pl/csshack/) (removed in gem)
15
- * Storing cookies in HTTP [ETags](http://en.wikipedia.org/wiki/HTTP_ETag)
16
- * Storing cookies in [Web cache](http://en.wikipedia.org/wiki/Web_cache)
17
- * [window.name](http://en.wikipedia.org/wiki/HTTP_cookie#window.name) caching
18
- * Internet Explorer [userData](http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx) storage
19
- * HTML5 [Session Storage](http://dev.w3.org/html5/webstorage/#the-sessionstorage-attribute)
20
- * HTML5 [Local Storage](http://dev.w3.org/html5/webstorage/#dom-localstorage)
21
- * HTML5 [Global Storage](https://developer.mozilla.org/en/dom/storage#globalStorage)
22
- * HTML5 [Database Storage](http://dev.w3.org/html5/webdatabase) via SQLite
16
+ * Storing cookies in and reading out {Web History}[http://samy.pl/csshack/] (removed in gem)
17
+ * Storing cookies in HTTP {ETags}[http://en.wikipedia.org/wiki/HTTP_ETag]
18
+ * Storing cookies in {Web cache}[http://en.wikipedia.org/wiki/Web_cache]
19
+ * {window.name}[http://en.wikipedia.org/wiki/HTTP_cookie=window.name] caching
20
+ * Internet Explorer {userData}[http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx] storage
21
+ * HTML5 {Session Storage}[http://dev.w3.org/html5/webstorage/=the-sessionstorage-attribute]
22
+ * HTML5 {Local Storage}[http://dev.w3.org/html5/webstorage/=dom-localstorage]
23
+ * HTML5 {Global Storage}[https://developer.mozilla.org/en/dom/storage=globalStorage]
24
+ * HTML5 {Database Storage}[http://dev.w3.org/html5/webdatabase] via SQLite
23
25
 
24
- ## Information
26
+ == Information
25
27
 
26
- ### RDoc
28
+ === RDoc
27
29
 
28
30
  RDoc documentation can be found here
29
31
  http://rubydoc.info/github/daddyz/evercookie/master/frames
30
32
 
31
- ### Bug reports
33
+ === Bug reports
32
34
 
33
35
  If you discover a problem with Evercookie gem, let us know about it.
34
36
  https://github.com/daddyz/evercookie/issues
35
37
 
36
- ### Example application
38
+ === Example application
37
39
 
38
40
  You can see an example of evercookie working in test/dummy application of this gem
39
41
 
40
- ## Getting started
42
+ == Getting started
41
43
 
42
44
  Evercookie works was written and tested on Rails 3.2. You can add in to your Gemfile with:
43
45
 
44
- ```ruby
45
- gem 'evercookie'
46
- ```
46
+ gem 'evercookie'
47
47
 
48
48
  Run the bundle command to install it.
49
49
 
50
- ### View helpers
50
+ === View helpers
51
51
 
52
52
  View helper that adds javascript for setting the evercookie for client:
53
53
 
54
- ```ruby
55
- set_evercookie(:key, :value)
56
- ```
54
+ set_evercookie(:key, :value)
57
55
 
58
56
  View helper that checks whether the cookie was set on client side and resets if some of cookies were deleted:
59
57
 
60
- ```ruby
61
- check_evercookie(:key)
62
- ```
58
+ check_evercookie(:key)
63
59
 
64
- ### Controller helpers
60
+ === Controller helpers
65
61
 
66
62
  Controller helper that gets the value of evercookie by key:
67
63
 
68
- ```ruby
69
- evercookie_get_value(:key)
70
- ```
64
+ evercookie_get_value(:key)
71
65
 
72
66
  Controller helper that checks if specific evercookie was set:
73
67
 
74
- ```ruby
75
- evercookie_is_set?(:key)
76
- evercookie_is_set?(:key, :value)
77
- ```
68
+ evercookie_is_set?(:key)
69
+ evercookie_is_set?(:key, :value)
78
70
 
79
- ### How it works
71
+ === How it works
80
72
 
81
73
  When you are calling:
82
- * `set_evercookie` helper it adds javascript to set evercookie values in all available storage mechanisms.
83
- * `check_evercookie` helper it adds javascript to get evercookie values from all storage mechanisms where it possible and resets their values where it was removed (like if user removed individual cookies it sets them back) and after that it calls it's controller action to save evercookie value in rails session
84
- * `evercookie_get_value` helper in controller it checks evercookie's session for provided 'key' value and returns it if exists
85
- * `evercookie_is_set?` helper in controller it checks if there is a provided 'key' in evercookie's session
74
+ * <tt>set_evercookie</tt> helper it adds javascript to set evercookie values in all available storage mechanisms.
75
+ * <tt>check_evercookie</tt> helper it adds javascript to get evercookie values from all storage mechanisms where it possible and resets their values where it was removed (like if user removed individual cookies it sets them back) and after that it calls it's controller action to save evercookie value in rails session
76
+ * <tt>evercookie_get_value</tt> helper in controller it checks evercookie's session for provided 'key' value and returns it if exists
77
+ * <tt>evercookie_is_set?</tt> helper in controller it checks if there is a provided 'key' in evercookie's session
86
78
 
87
- ### How this gem should be used
79
+ === How this gem should be used
88
80
 
89
81
  The main idea of this gem is to set somewhere in application an evercookie to track that this client already visited your application.
90
82
  I used it to track multiple registrations in such scenario:
91
83
  * After user was registered he was passed to specific view where I called set_evercookie helper:
92
- ```ruby
93
- set_evercookie(:uid, user_unique_id)
94
- ```
84
+
85
+ set_evercookie(:uid, user_unique_id)
86
+
95
87
  * In user sign up page view I called check_evercookie helper:
96
- ```ruby
97
- check_evercookie(:uid)
98
- ```
88
+
89
+ check_evercookie(:uid)
90
+
99
91
  * In controller that was handling new user creation process I was running evercookie_get_value helper to check if previously I got evercookie value from user, and if I got it I was showing an error:
100
- ```ruby
101
- evercookie_get_value(:uid)
102
- ```
103
92
 
104
- ### Configuring the gem
93
+ evercookie_get_value(:uid)
105
94
 
106
- You can create the initializer for evercookie gem in your Rails application initializers folder:
95
+ === Configuring the gem
107
96
 
108
- ```ruby
109
- Evercookie.setup do |config|
110
- # path for evercookie controller
111
- config.namespace = :evercookie
97
+ You can create the initializer for evercookie gem in your Rails application initializers folder:
112
98
 
113
- # name of javascript class to be used for evercookie
114
- config.js_class = :evercookie
99
+ Evercookie.setup do |config|
100
+ # path for evercookie controller
101
+ config.namespace = :evercookie
115
102
 
116
- # hash name base for session storage variables
117
- config.hash_name = :evercookie
103
+ # name of javascript class to be used for evercookie
104
+ config.js_class = :evercookie
118
105
 
119
- # cookie name for cache storage
120
- config.cookie_cache = :evercookie_cache
106
+ # hash name base for session storage variables
107
+ config.hash_name = :evercookie
121
108
 
122
- # cookie name for png storage
123
- config.cookie_png = :evercookie_png
109
+ # cookie name for cache storage
110
+ config.cookie_cache = :evercookie_cache
124
111
 
125
- # cookie name for etag storage
126
- config.cookie_etag = :evercookie_etag
127
- end
128
- ```
112
+ # cookie name for png storage
113
+ config.cookie_png = :evercookie_png
129
114
 
115
+ # cookie name for etag storage
116
+ config.cookie_etag = :evercookie_etag
117
+ end
data/config/routes.rb CHANGED
@@ -3,18 +3,18 @@ Rails.application.routes.draw do
3
3
  # Adds routes for evercookie under namespace (path)
4
4
  scope "#{Evercookie.get_namespace}" do
5
5
  # route for js file to set cookie
6
- match 'set' => "evercookie/evercookie#set", as: :evercookie_set
6
+ get 'set' => "evercookie/evercookie#set", as: :evercookie_set
7
7
  # route for js file to get cookie
8
- match 'get' => "evercookie/evercookie#get", as: :evercookie_get
8
+ get 'get' => "evercookie/evercookie#get", as: :evercookie_get
9
9
  # route for save action to save cookie value to session
10
- match 'save' => "evercookie/evercookie#save", as: :evercookie_save
10
+ get 'save' => "evercookie/evercookie#save", as: :evercookie_save
11
11
 
12
12
  # route to png image to be tracked by js script
13
- match 'ec_png' => "evercookie/evercookie#ec_png", as: :evercookie_png
13
+ get 'ec_png' => "evercookie/evercookie#ec_png", as: :evercookie_png
14
14
  # route to etag action to be tracked by js script
15
- match 'ec_etag' => "evercookie/evercookie#ec_etag", as: :evercookie_etag
15
+ get 'ec_etag' => "evercookie/evercookie#ec_etag", as: :evercookie_etag
16
16
  # route to cache action to be tracked by js script
17
- match 'ec_cache' => "evercookie/evercookie#ec_cache", as: :evercookie_cache
17
+ get 'ec_cache' => "evercookie/evercookie#ec_cache", as: :evercookie_cache
18
18
  end
19
19
 
20
- end
20
+ end
@@ -14,6 +14,16 @@ module Evercookie
14
14
  end
15
15
  end
16
16
 
17
+ # Set evercookie value to session
18
+ # == Examples:
19
+ # set_evercookie(:key, :value)
20
+ #
21
+ def set_evercookie(key, value)
22
+ session[Evercookie.hash_name_for_saved] = {} unless
23
+ session[Evercookie.hash_name_for_saved].present?
24
+ session[Evercookie.hash_name_for_saved][key] = value
25
+ end
26
+
17
27
  # Checks whether the evercookie with specific key was defined
18
28
  # == Examples:
19
29
  # evercookie_is_set?(:key)
@@ -44,14 +54,10 @@ module Evercookie
44
54
 
45
55
  # Saves current evercookie value to session
46
56
  def save
47
- if session[Evercookie.hash_name_for_get].present?
48
- data = session[Evercookie.hash_name_for_get]
49
- if data[:key].present? && cookies[data[:key]].present?
50
- session[Evercookie.hash_name_for_saved] = {} unless
51
- session[Evercookie.hash_name_for_saved].present?
52
-
53
- session[Evercookie.hash_name_for_saved][data[:key]] =
54
- cookies[data[:key]]
57
+ if data = session[Evercookie.hash_name_for_get]
58
+ if data[:key] && cookies[data[:key]]
59
+ session[Evercookie.hash_name_for_saved] =
60
+ { data[:key] => cookies[data[:key]] }
55
61
  end
56
62
  end
57
63
  render nothing: true
@@ -64,33 +70,12 @@ module Evercookie
64
70
  return true
65
71
  end
66
72
 
67
- value = cookies[Evercookie.cookie_png]
68
-
69
- require 'chunky_png'
70
- image = ChunkyPNG::Image.new(200, 1, ChunkyPNG::Color::BLACK)
71
-
72
- pixel = 0
73
- while (index = pixel * 3) < value.length
74
- red = value[index] ? value[index].ord : 0
75
- green = value[index + 1] ? value[index + 1].ord : 0
76
- blue = value[index + 2] ? value[index + 2].ord : 0
77
-
78
- image[pixel, 0] = ChunkyPNG::Color.rgb(red, green, blue)
79
-
80
- pixel += 1
81
- end
82
-
83
73
  response.headers["Content-Type"] = "image/png"
84
74
  response.headers["Last-Modified"] = "Wed, 30 Jun 2010 21:36:48 GMT"
85
75
  response.headers["Expires"] = "Tue, 31 Dec 2030 23:30:45 GMT"
86
76
  response.headers["Cache-Control"] = "private, max-age=630720000"
87
77
 
88
- img_blob = image.to_blob(
89
- {color_mode: ChunkyPNG::COLOR_TRUECOLOR,
90
- compression: Zlib::DEFAULT_COMPRESSION}
91
- )
92
-
93
- render text: img_blob, status: 200, content_type: 'image/png'
78
+ render text: get_blob_png, status: 200, content_type: 'image/png'
94
79
  end
95
80
 
96
81
  # Renders page with etag header for evercookie js script
@@ -118,5 +103,29 @@ module Evercookie
118
103
 
119
104
  render text: cookies[Evercookie.cookie_cache]
120
105
  end
106
+
107
+ private
108
+ def get_blob_png
109
+ value = cookies[Evercookie.cookie_png]
110
+
111
+ require 'chunky_png'
112
+ image = ChunkyPNG::Image.new(200, 1, ChunkyPNG::Color::BLACK)
113
+
114
+ pixel = 0
115
+ while (index = pixel * 3) < value.length
116
+ red = value[index] ? value[index].ord : 0
117
+ green = value[index + 1] ? value[index + 1].ord : 0
118
+ blue = value[index + 2] ? value[index + 2].ord : 0
119
+
120
+ image[pixel, 0] = ChunkyPNG::Color.rgb(red, green, blue)
121
+
122
+ pixel += 1
123
+ end
124
+
125
+ image.to_blob(
126
+ {color_mode: ChunkyPNG::COLOR_TRUECOLOR,
127
+ compression: Zlib::DEFAULT_COMPRESSION}
128
+ )
129
+ end
121
130
  end
122
- end
131
+ end
@@ -5,7 +5,7 @@ module Evercookie
5
5
  class Engine < ::Rails::Engine
6
6
  # adds ec.js to be precompiled
7
7
  initializer "evercookie precompile hook" do |app|
8
- app.config.assets.precompile += %w(ec.js)
8
+ app.config.assets.precompile << /ec\.js/
9
9
  end
10
10
 
11
11
  # registers view helpers
@@ -1,4 +1,4 @@
1
1
  module Evercookie
2
2
  # Current gem version
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
@@ -12,7 +12,7 @@ Dummy::Application.configure do
12
12
  config.serve_static_assets = false
13
13
 
14
14
  # Compress JavaScripts and CSS
15
- config.assets.compress = true
15
+ config.assets.compress = false
16
16
 
17
17
  # Don't fallback to assets pipeline if a precompiled asset is missed
18
18
  config.assets.compile = false
@@ -0,0 +1,19 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
4
+ gem 'rails', '4.0.0.beta1'
5
+ gem 'sqlite3'
6
+
7
+ group :assets do
8
+ gem 'uglifier', '>= 1.0.3'
9
+ end
10
+
11
+ gem 'jquery-rails'
12
+
13
+ # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
14
+ gem 'turbolinks'
15
+
16
+ # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
17
+ gem 'jbuilder', '~> 1.0.1'
18
+
19
+ gem 'evercookie', path: '../../'
@@ -0,0 +1,119 @@
1
+ PATH
2
+ remote: ../../
3
+ specs:
4
+ evercookie (0.0.4)
5
+ chunky_png
6
+ rails (>= 3.1)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionmailer (4.0.0.beta1)
12
+ actionpack (= 4.0.0.beta1)
13
+ mail (~> 2.5.3)
14
+ actionpack (4.0.0.beta1)
15
+ activesupport (= 4.0.0.beta1)
16
+ builder (~> 3.1.0)
17
+ erubis (~> 2.7.0)
18
+ rack (~> 1.5.2)
19
+ rack-test (~> 0.6.2)
20
+ activemodel (4.0.0.beta1)
21
+ activesupport (= 4.0.0.beta1)
22
+ builder (~> 3.1.0)
23
+ activerecord (4.0.0.beta1)
24
+ activemodel (= 4.0.0.beta1)
25
+ activerecord-deprecated_finders (~> 0.0.3)
26
+ activesupport (= 4.0.0.beta1)
27
+ arel (~> 4.0.0.beta1)
28
+ activerecord-deprecated_finders (0.0.3)
29
+ activesupport (4.0.0.beta1)
30
+ i18n (~> 0.6.2)
31
+ minitest (~> 4.2)
32
+ multi_json (~> 1.3)
33
+ thread_safe (~> 0.1)
34
+ tzinfo (~> 0.3.33)
35
+ arel (4.0.0)
36
+ atomic (1.1.8)
37
+ builder (3.1.4)
38
+ chunky_png (1.2.8)
39
+ coffee-rails (4.0.0)
40
+ coffee-script (>= 2.2.0)
41
+ railties (>= 4.0.0.beta, < 5.0)
42
+ coffee-script (2.2.0)
43
+ coffee-script-source
44
+ execjs
45
+ coffee-script-source (1.6.2)
46
+ erubis (2.7.0)
47
+ execjs (1.4.0)
48
+ multi_json (~> 1.0)
49
+ hike (1.2.2)
50
+ i18n (0.6.4)
51
+ jbuilder (1.0.2)
52
+ activesupport (>= 3.0.0)
53
+ jquery-rails (2.2.1)
54
+ railties (>= 3.0, < 5.0)
55
+ thor (>= 0.14, < 2.0)
56
+ json (1.7.7)
57
+ mail (2.5.3)
58
+ i18n (>= 0.4.0)
59
+ mime-types (~> 1.16)
60
+ treetop (~> 1.4.8)
61
+ mime-types (1.23)
62
+ minitest (4.7.3)
63
+ multi_json (1.7.2)
64
+ polyglot (0.3.3)
65
+ rack (1.5.2)
66
+ rack-test (0.6.2)
67
+ rack (>= 1.0)
68
+ rails (4.0.0.beta1)
69
+ actionmailer (= 4.0.0.beta1)
70
+ actionpack (= 4.0.0.beta1)
71
+ activerecord (= 4.0.0.beta1)
72
+ activesupport (= 4.0.0.beta1)
73
+ bundler (>= 1.3.0, < 2.0)
74
+ railties (= 4.0.0.beta1)
75
+ sprockets-rails (~> 2.0.0.rc3)
76
+ railties (4.0.0.beta1)
77
+ actionpack (= 4.0.0.beta1)
78
+ activesupport (= 4.0.0.beta1)
79
+ rake (>= 0.8.7)
80
+ rdoc (~> 3.4)
81
+ thor (>= 0.17.0, < 2.0)
82
+ rake (10.0.4)
83
+ rdoc (3.12.2)
84
+ json (~> 1.4)
85
+ sprockets (2.9.3)
86
+ hike (~> 1.2)
87
+ multi_json (~> 1.0)
88
+ rack (~> 1.0)
89
+ tilt (~> 1.1, != 1.3.0)
90
+ sprockets-rails (2.0.0.rc4)
91
+ actionpack (>= 3.0)
92
+ activesupport (>= 3.0)
93
+ sprockets (~> 2.8)
94
+ sqlite3 (1.3.7)
95
+ thor (0.18.1)
96
+ thread_safe (0.1.0)
97
+ atomic
98
+ tilt (1.3.7)
99
+ treetop (1.4.12)
100
+ polyglot
101
+ polyglot (>= 0.3.1)
102
+ turbolinks (1.1.1)
103
+ coffee-rails
104
+ tzinfo (0.3.37)
105
+ uglifier (2.0.1)
106
+ execjs (>= 0.3.0)
107
+ multi_json (~> 1.0, >= 1.0.2)
108
+
109
+ PLATFORMS
110
+ ruby
111
+
112
+ DEPENDENCIES
113
+ evercookie!
114
+ jbuilder (~> 1.0.1)
115
+ jquery-rails
116
+ rails (= 4.0.0.beta1)
117
+ sqlite3
118
+ turbolinks
119
+ uglifier (>= 1.0.3)