first_click_free 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +97 -0
  4. data/Rakefile +30 -0
  5. data/config/domains.yml +195 -0
  6. data/lib/first_click_free.rb +42 -0
  7. data/lib/first_click_free/concerns/controller.rb +108 -0
  8. data/lib/first_click_free/exceptions/subsequent_access_exception.rb +6 -0
  9. data/lib/first_click_free/helpers/google.rb +41 -0
  10. data/lib/first_click_free/helpers/path.rb +22 -0
  11. data/lib/first_click_free/helpers/referrer.rb +26 -0
  12. data/lib/first_click_free/version.rb +3 -0
  13. data/lib/tasks/first_click_free_tasks.rake +24 -0
  14. data/spec/concerns/controller_spec.rb +128 -0
  15. data/spec/dummy/README.rdoc +28 -0
  16. data/spec/dummy/Rakefile +6 -0
  17. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  18. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  19. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  20. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  21. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  22. data/spec/dummy/bin/bundle +3 -0
  23. data/spec/dummy/bin/rails +4 -0
  24. data/spec/dummy/bin/rake +4 -0
  25. data/spec/dummy/config.ru +4 -0
  26. data/spec/dummy/config/application.rb +23 -0
  27. data/spec/dummy/config/boot.rb +5 -0
  28. data/spec/dummy/config/database.yml +25 -0
  29. data/spec/dummy/config/environment.rb +5 -0
  30. data/spec/dummy/config/environments/development.rb +29 -0
  31. data/spec/dummy/config/environments/production.rb +80 -0
  32. data/spec/dummy/config/environments/test.rb +36 -0
  33. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  34. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  35. data/spec/dummy/config/initializers/inflections.rb +16 -0
  36. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  37. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  38. data/spec/dummy/config/initializers/session_store.rb +3 -0
  39. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  40. data/spec/dummy/config/locales/en.yml +23 -0
  41. data/spec/dummy/config/routes.rb +56 -0
  42. data/spec/dummy/db/development.sqlite3 +0 -0
  43. data/spec/dummy/db/schema.rb +16 -0
  44. data/spec/dummy/db/test.sqlite3 +0 -0
  45. data/spec/dummy/log/development.log +18 -0
  46. data/spec/dummy/log/test.log +548 -0
  47. data/spec/dummy/public/404.html +58 -0
  48. data/spec/dummy/public/422.html +58 -0
  49. data/spec/dummy/public/500.html +57 -0
  50. data/spec/dummy/public/favicon.ico +0 -0
  51. data/spec/exceptions/subsequent_access_exception_spec.rb +5 -0
  52. data/spec/first_click_free_spec.rb +46 -0
  53. data/spec/helpers/google_spec.rb +104 -0
  54. data/spec/helpers/path_spec.rb +35 -0
  55. data/spec/helpers/referrer_spec.rb +39 -0
  56. data/spec/spec_helper.rb +18 -0
  57. metadata +185 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe FirstClickFree::Exceptions::SubsequentAccessException do
4
+ it { described_class.superclass.should eq Exception }
5
+ end
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe FirstClickFree do
4
+ describe "#permitted_domains" do
5
+ subject { described_class.permitted_domains }
6
+
7
+ it { should have_at_least(10).items }
8
+ it { subject.select { |domain| domain =~ /google|bing|yahoo/ }.length.should eq subject.length }
9
+ end
10
+
11
+ describe "#permitted_paths" do
12
+ before { described_class.permitted_paths = nil }
13
+
14
+ it "should default to none" do
15
+ described_class.permitted_paths.should eq []
16
+ end
17
+
18
+ it "should be settable" do
19
+ expect { described_class.permitted_paths = ['/foo'] }.to change(described_class, :permitted_paths).to(['/foo'])
20
+ end
21
+ end
22
+
23
+ describe "#free_clicks" do
24
+ before { described_class.free_clicks = nil }
25
+
26
+ it "should default to one" do
27
+ described_class.free_clicks.should eq 1
28
+ end
29
+
30
+ it "should be settable" do
31
+ expect { described_class.free_clicks = 5 }.to change(described_class, :free_clicks).to(5)
32
+ end
33
+ end
34
+
35
+ describe "#test_mode" do
36
+ before { described_class.test_mode = nil }
37
+
38
+ it "should default to false" do
39
+ described_class.test_mode.should be_false
40
+ end
41
+
42
+ it "should be settable" do
43
+ expect { described_class.test_mode = true }.to change(described_class, :test_mode).to(true)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,104 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ describe FirstClickFree::Helpers::Google, type: :helper do
5
+
6
+ describe "#googlebot?" do
7
+
8
+ context "test mode" do
9
+ before { FirstClickFree.test_mode = true }
10
+ subject { helper.googlebot?(false) }
11
+
12
+ context "correct parameter is set" do
13
+ before { helper.stub(params: {googlebot: true}) }
14
+ it { should be_true }
15
+ end
16
+
17
+ context "parameter is not set" do
18
+ before { helper.stub(params: {}) }
19
+ it { should be_false }
20
+ end
21
+ end
22
+
23
+ context "not verifying DNS" do
24
+ subject { helper.googlebot?(false) }
25
+
26
+ context "user agent matches" do
27
+ before { helper.stub(request: OpenStruct.new(user_agent: "Googlebot")) }
28
+ it { subject.should be_true }
29
+ end
30
+
31
+ context "user agent does not match" do
32
+ before { helper.stub(request: OpenStruct.new(user_agent: "Google Chrome")) }
33
+ it { subject.should be_false }
34
+ end
35
+ end
36
+
37
+ context "verifying DNS" do
38
+ subject { helper.googlebot?(true) }
39
+
40
+ context "user agent matches, DNS verified" do
41
+ before { helper.stub(request: OpenStruct.new(user_agent: "Googlebot"), verify_googlebot_domain: true) }
42
+ it { subject.should be_true }
43
+ end
44
+
45
+ context "user agent matches, DNS not verified" do
46
+ before { helper.stub(request: OpenStruct.new(user_agent: "Googlebot"), verify_googlebot_domain: false) }
47
+ it { subject.should be_false }
48
+ end
49
+
50
+ context "user agent does not match, DNS verified" do
51
+ before { helper.stub(request: OpenStruct.new(user_agent: "Google Chrome"), verify_googlebot_domain: true) }
52
+ it { subject.should be_false }
53
+ end
54
+
55
+ context "user agent does not match, DNS not verified" do
56
+ before { helper.stub(request: OpenStruct.new(user_agent: "Google Chrome"), verify_googlebot_domain: false) }
57
+ it { subject.should be_false }
58
+ end
59
+ end
60
+ end
61
+
62
+ describe "#verify_googlebot_domain" do
63
+ before { helper.stub(request: OpenStruct.new(remote_ip: "111.222.333.444")) }
64
+ subject { helper.send(:verify_googlebot_domain) }
65
+
66
+ context "hostname is googlebot and IP matches" do
67
+ before do
68
+ Resolv.stub(getname: "test.googlebot.com")
69
+ Socket.stub(getaddrinfo: [[nil, nil, "111.222.333.444"]])
70
+ end
71
+
72
+ it { subject.should be_true }
73
+ end
74
+
75
+ context "IP matches" do
76
+ before do
77
+ Resolv.stub(getname: "test.test.dev")
78
+ Socket.stub(getaddrinfo: [[nil, nil, "111.222.333.666"]])
79
+ end
80
+
81
+ it { subject.should be_false }
82
+ end
83
+
84
+ context "hostname is googlebot and IP does not match" do
85
+ before do
86
+ Resolv.stub(getname: "test.googlebot.com")
87
+ Socket.stub(getaddrinfo: [[nil, nil, "111.222.333.666"]])
88
+ end
89
+
90
+ it { subject.should be_false }
91
+ end
92
+
93
+ context "hostname and IP does not match" do
94
+ before do
95
+ Resolv.stub(getname: "test.test.dev")
96
+ Socket.stub(getaddrinfo: [[nil, nil, "111.222.333.666"]])
97
+ end
98
+
99
+ it { subject.should be_false }
100
+ end
101
+
102
+ end
103
+
104
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe FirstClickFree::Helpers::Path, type: :helper do
5
+
6
+ describe '.permitted_path?' do
7
+ subject { helper.permitted_path? }
8
+
9
+ context 'with no permitted paths' do
10
+ it { should be_false }
11
+ end
12
+
13
+ describe 'with permitted paths' do
14
+ before { FirstClickFree.permitted_paths = %w[ /another/path ] }
15
+
16
+ context 'and mismatching path' do
17
+ before { helper.stub(request: OpenStruct.new(fullpath: '/a/path')) }
18
+
19
+ it { should be_false }
20
+ end
21
+
22
+ context 'and matching path' do
23
+ before { helper.stub(request: OpenStruct.new(fullpath: 'http://www.example.com/another/path')) }
24
+
25
+ it { should be_true }
26
+ end
27
+
28
+ context 'and matching path with params' do
29
+ before { helper.stub(request: OpenStruct.new(fullpath: 'https://www.example.com/another/path?a=1')) }
30
+
31
+ it { should be_true }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+ require "ostruct"
3
+
4
+ describe FirstClickFree::Helpers::Referrer, type: :helper do
5
+
6
+ describe ".permitted_domain?" do
7
+ subject { helper.permitted_domain? }
8
+
9
+ context "test mode" do
10
+ before { FirstClickFree.test_mode = true }
11
+ subject { helper.permitted_domain? }
12
+
13
+ context "correct parameter is set" do
14
+ before { helper.stub(params: {google_referrer: true}) }
15
+ it { should be_true }
16
+ end
17
+
18
+ context "parameter is not set" do
19
+ before { helper.stub(params: {}) }
20
+ it { should be_false }
21
+ end
22
+ end
23
+
24
+ context "with permitted domain" do
25
+ before { helper.stub(request: OpenStruct.new(referrer: "https://www.google.com/search?q=test")) }
26
+ it { should be_true }
27
+ end
28
+
29
+ context "without permitted domain" do
30
+ before { helper.stub(request: OpenStruct.new(referrer: "https://test.host/not/google")) }
31
+ it { should be_false }
32
+ end
33
+
34
+ context "no referrer" do
35
+ before { helper.stub(request: OpenStruct.new(referrer: nil)) }
36
+ it { should be_false }
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+
5
+ require 'rspec/rails'
6
+ require 'rspec/autorun'
7
+
8
+ Rails.backtrace_cleaner.remove_silencers!
9
+
10
+ # Load support files
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
+
13
+ RSpec.configure do |config|
14
+ config.mock_with :rspec
15
+ config.use_transactional_fixtures = true
16
+ config.infer_base_class_for_anonymous_controllers = false
17
+ config.order = "random"
18
+ end
metadata ADDED
@@ -0,0 +1,185 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: first_click_free
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - 3months
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: |-
56
+ Automatically allow Google-crawling and new visitors to your application
57
+ access to content without requiring sign-in.
58
+ email:
59
+ - blackadmin@3months.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - MIT-LICENSE
65
+ - README.md
66
+ - Rakefile
67
+ - config/domains.yml
68
+ - lib/first_click_free.rb
69
+ - lib/first_click_free/concerns/controller.rb
70
+ - lib/first_click_free/exceptions/subsequent_access_exception.rb
71
+ - lib/first_click_free/helpers/google.rb
72
+ - lib/first_click_free/helpers/path.rb
73
+ - lib/first_click_free/helpers/referrer.rb
74
+ - lib/first_click_free/version.rb
75
+ - lib/tasks/first_click_free_tasks.rake
76
+ - spec/concerns/controller_spec.rb
77
+ - spec/dummy/README.rdoc
78
+ - spec/dummy/Rakefile
79
+ - spec/dummy/app/assets/javascripts/application.js
80
+ - spec/dummy/app/assets/stylesheets/application.css
81
+ - spec/dummy/app/controllers/application_controller.rb
82
+ - spec/dummy/app/helpers/application_helper.rb
83
+ - spec/dummy/app/views/layouts/application.html.erb
84
+ - spec/dummy/bin/bundle
85
+ - spec/dummy/bin/rails
86
+ - spec/dummy/bin/rake
87
+ - spec/dummy/config.ru
88
+ - spec/dummy/config/application.rb
89
+ - spec/dummy/config/boot.rb
90
+ - spec/dummy/config/database.yml
91
+ - spec/dummy/config/environment.rb
92
+ - spec/dummy/config/environments/development.rb
93
+ - spec/dummy/config/environments/production.rb
94
+ - spec/dummy/config/environments/test.rb
95
+ - spec/dummy/config/initializers/backtrace_silencers.rb
96
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
97
+ - spec/dummy/config/initializers/inflections.rb
98
+ - spec/dummy/config/initializers/mime_types.rb
99
+ - spec/dummy/config/initializers/secret_token.rb
100
+ - spec/dummy/config/initializers/session_store.rb
101
+ - spec/dummy/config/initializers/wrap_parameters.rb
102
+ - spec/dummy/config/locales/en.yml
103
+ - spec/dummy/config/routes.rb
104
+ - spec/dummy/db/development.sqlite3
105
+ - spec/dummy/db/schema.rb
106
+ - spec/dummy/db/test.sqlite3
107
+ - spec/dummy/log/development.log
108
+ - spec/dummy/log/test.log
109
+ - spec/dummy/public/404.html
110
+ - spec/dummy/public/422.html
111
+ - spec/dummy/public/500.html
112
+ - spec/dummy/public/favicon.ico
113
+ - spec/exceptions/subsequent_access_exception_spec.rb
114
+ - spec/first_click_free_spec.rb
115
+ - spec/helpers/google_spec.rb
116
+ - spec/helpers/path_spec.rb
117
+ - spec/helpers/referrer_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: https://github.com/3months/first_click_free
120
+ licenses: []
121
+ metadata: {}
122
+ post_install_message:
123
+ rdoc_options: []
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 2.2.2
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Automatically support first-click-free access to your content.
142
+ test_files:
143
+ - spec/concerns/controller_spec.rb
144
+ - spec/dummy/app/assets/javascripts/application.js
145
+ - spec/dummy/app/assets/stylesheets/application.css
146
+ - spec/dummy/app/controllers/application_controller.rb
147
+ - spec/dummy/app/helpers/application_helper.rb
148
+ - spec/dummy/app/views/layouts/application.html.erb
149
+ - spec/dummy/bin/bundle
150
+ - spec/dummy/bin/rails
151
+ - spec/dummy/bin/rake
152
+ - spec/dummy/config/application.rb
153
+ - spec/dummy/config/boot.rb
154
+ - spec/dummy/config/database.yml
155
+ - spec/dummy/config/environment.rb
156
+ - spec/dummy/config/environments/development.rb
157
+ - spec/dummy/config/environments/production.rb
158
+ - spec/dummy/config/environments/test.rb
159
+ - spec/dummy/config/initializers/backtrace_silencers.rb
160
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
161
+ - spec/dummy/config/initializers/inflections.rb
162
+ - spec/dummy/config/initializers/mime_types.rb
163
+ - spec/dummy/config/initializers/secret_token.rb
164
+ - spec/dummy/config/initializers/session_store.rb
165
+ - spec/dummy/config/initializers/wrap_parameters.rb
166
+ - spec/dummy/config/locales/en.yml
167
+ - spec/dummy/config/routes.rb
168
+ - spec/dummy/config.ru
169
+ - spec/dummy/db/development.sqlite3
170
+ - spec/dummy/db/schema.rb
171
+ - spec/dummy/db/test.sqlite3
172
+ - spec/dummy/log/development.log
173
+ - spec/dummy/log/test.log
174
+ - spec/dummy/public/404.html
175
+ - spec/dummy/public/422.html
176
+ - spec/dummy/public/500.html
177
+ - spec/dummy/public/favicon.ico
178
+ - spec/dummy/Rakefile
179
+ - spec/dummy/README.rdoc
180
+ - spec/exceptions/subsequent_access_exception_spec.rb
181
+ - spec/first_click_free_spec.rb
182
+ - spec/helpers/google_spec.rb
183
+ - spec/helpers/path_spec.rb
184
+ - spec/helpers/referrer_spec.rb
185
+ - spec/spec_helper.rb