firewool 0.1.0

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 (63) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/README.rdoc +95 -0
  4. data/Rakefile +13 -0
  5. data/firewool.gemspec +24 -0
  6. data/lib/firewool.rb +23 -0
  7. data/lib/firewool/hook.rb +12 -0
  8. data/lib/firewool/instance_methods.rb +68 -0
  9. data/lib/firewool/railtie.rb +19 -0
  10. data/lib/firewool/version.rb +3 -0
  11. data/test/dummy/.gitignore +4 -0
  12. data/test/dummy/Gemfile +31 -0
  13. data/test/dummy/README +3 -0
  14. data/test/dummy/Rakefile +7 -0
  15. data/test/dummy/app/controllers/application_controller.rb +3 -0
  16. data/test/dummy/app/controllers/dummy_controller.rb +5 -0
  17. data/test/dummy/app/helpers/application_helper.rb +2 -0
  18. data/test/dummy/app/helpers/dummy_helper.rb +2 -0
  19. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  20. data/test/dummy/config.ru +4 -0
  21. data/test/dummy/config/application.rb +47 -0
  22. data/test/dummy/config/boot.rb +6 -0
  23. data/test/dummy/config/database.yml +22 -0
  24. data/test/dummy/config/environment.rb +5 -0
  25. data/test/dummy/config/environments/development.rb +26 -0
  26. data/test/dummy/config/environments/production.rb +49 -0
  27. data/test/dummy/config/environments/test.rb +35 -0
  28. data/test/dummy/config/firewool.yml +17 -0
  29. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  30. data/test/dummy/config/initializers/inflections.rb +10 -0
  31. data/test/dummy/config/initializers/mime_types.rb +5 -0
  32. data/test/dummy/config/initializers/secret_token.rb +7 -0
  33. data/test/dummy/config/initializers/session_store.rb +8 -0
  34. data/test/dummy/config/locales/en.yml +5 -0
  35. data/test/dummy/config/routes.rb +58 -0
  36. data/test/dummy/db/seeds.rb +7 -0
  37. data/test/dummy/doc/README_FOR_APP +2 -0
  38. data/test/dummy/lib/tasks/.gitkeep +0 -0
  39. data/test/dummy/public/403.html +26 -0
  40. data/test/dummy/public/404.html +26 -0
  41. data/test/dummy/public/422.html +26 -0
  42. data/test/dummy/public/500.html +26 -0
  43. data/test/dummy/public/favicon.ico +0 -0
  44. data/test/dummy/public/images/rails.png +0 -0
  45. data/test/dummy/public/index.html +239 -0
  46. data/test/dummy/public/javascripts/application.js +2 -0
  47. data/test/dummy/public/javascripts/controls.js +965 -0
  48. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  49. data/test/dummy/public/javascripts/effects.js +1123 -0
  50. data/test/dummy/public/javascripts/prototype.js +6001 -0
  51. data/test/dummy/public/javascripts/rails.js +191 -0
  52. data/test/dummy/public/robots.txt +5 -0
  53. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  54. data/test/dummy/script/rails +6 -0
  55. data/test/dummy/test/functional/dummy_controller_test.rb +8 -0
  56. data/test/dummy/test/performance/browsing_test.rb +9 -0
  57. data/test/dummy/test/test_helper.rb +13 -0
  58. data/test/dummy/test/unit/helpers/dummy_helper_test.rb +4 -0
  59. data/test/dummy/vendor/plugins/.gitkeep +0 -0
  60. data/test/firewool_test.rb +59 -0
  61. data/test/test_helper.rb +7 -0
  62. data/watchr.rb +73 -0
  63. metadata +189 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class DummyControllerTest < ActionController::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'rails/performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionDispatch::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path('../../config/environment', __FILE__)
3
+ require 'rails/test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
7
+ #
8
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
9
+ # -- they do not yet inherit this setting
10
+ fixtures :all
11
+
12
+ # Add more helper methods to be used by all tests here...
13
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class DummyHelperTest < ActionView::TestCase
4
+ end
File without changes
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+ require 'yaml'
3
+
4
+ class FirewoolTest < ActionController::TestCase
5
+ tests DummyController
6
+
7
+ # So rails on a before_filter uses the instance variable in requests:
8
+ # http://guides.rubyonrails.org/action_controller_overview.html
9
+ # So let's create an instance to test with.
10
+ dc = DummyController.new
11
+
12
+ # get our configuration, which we'll change later for certain tests
13
+ conf_file = dc.class.firewool_config[Rails.env]
14
+
15
+ # test basic module includes/extends
16
+ context "The controller" do
17
+ should "respond to instance method from module" do
18
+ assert dc.respond_to? :ip_filter
19
+ end
20
+ end
21
+
22
+ # test reading firewool.yml config file
23
+ context "The Firewool" do
24
+ should "have the configuration loaded" do
25
+ assert conf_file.key?("ip_restriction"), "Should have the ip_restriction in firewool conf file"
26
+ assert conf_file.key?("allow"), "Should have the ip_ranges_allowed in firewool conf file"
27
+ end
28
+ end
29
+
30
+ # test policy enforcement
31
+ context "The Firewool" do
32
+ should "allow valid IPs while blocking invalid IPs" do
33
+ # reset the configuration, this is weird that I have to
34
+ # , I thought this would go in order
35
+ dc.class.firewool_config[Rails.env]["allow"] = ["192.168.0.0/16"]
36
+ assert_equal false, dc.ip_allow?("172.168.0.1")
37
+ assert_equal false, dc.ip_allow?("12.168.0.1")
38
+ assert_equal false, dc.ip_allow?("0.0.0.0")
39
+ assert_equal true, dc.ip_allow?("192.168.0.1")
40
+ end
41
+ end
42
+
43
+ context "The Firewool" do
44
+ should "allow valid IPs when using a default allow" do
45
+ dc.class.firewool_config[Rails.env]["allow"] = ["0.0.0.0"]
46
+ assert_equal true, dc.ip_allow?("12.168.0.1")
47
+ end
48
+ end
49
+
50
+ context "The Firewool" do
51
+ should "allow and disallow correctly with a default allow" do
52
+ dc.class.firewool_config[Rails.env]["allow"] = ["0.0.0.0"]
53
+ # puts dc.class.firewool_config[Rails.env]
54
+ assert_equal true, dc.ip_allow?("12.168.0.1")
55
+ assert_equal true, dc.ip_allow?("192.168.0.1")
56
+ assert_equal false, dc.ip_allow?("172.16.0.1")
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'shoulda'
3
+ require 'bundler'
4
+ require 'firewool'
5
+ require "dummy/config/environment"
6
+ require "rails/test_help"
7
+ Bundler.setup
data/watchr.rb ADDED
@@ -0,0 +1,73 @@
1
+ ENV["WATCHR"] = "1"
2
+ system 'clear'
3
+
4
+ def growl(message)
5
+ growlnotify = `which growlnotify`.chomp
6
+ title = "Watchr Test Results"
7
+ passed = message.include?('0 failures, 0 errors')
8
+ image = passed ? "~/.watchr_images/passed.png" : "~/.watchr_images/failed.png"
9
+ severity = passed ? "-1" : "1"
10
+ options = "-w -n Watchr --image '#{File.expand_path(image)}'"
11
+ options << " -m '#{message}' '#{title}' -p #{severity}"
12
+ system %(#{growlnotify} #{options} &)
13
+ end
14
+
15
+ def run(cmd)
16
+ puts(cmd)
17
+ `#{cmd}`
18
+ end
19
+
20
+ def run_test_file(file)
21
+ system('clear')
22
+ result = run(%Q(ruby -I"lib:test" -rubygems #{file}))
23
+ result_lines = result.split("\n")
24
+ msg = result_lines[result_lines.size - 3]
25
+ growl msg rescue nil
26
+ puts result
27
+ end
28
+
29
+ def run_all_tests
30
+ system('clear')
31
+ result = run "rake test"
32
+ result_lines = result.split("\n")
33
+ # new rake has Test run options as last line, result is 2 lines up
34
+ msg = result_lines[result_lines.size - 3]
35
+ growl msg rescue nil
36
+ puts result
37
+ end
38
+
39
+ def related_test_files(path)
40
+ Dir['test/**/*.rb'].select { |file| file =~ /#{File.basename(path).split(".").first}_test.rb/ }
41
+ end
42
+
43
+ def run_suite
44
+ run_all_tests
45
+ end
46
+
47
+ watch('test/test_helper\.rb') { run_all_tests }
48
+ watch('test/.*_test\.rb') { |m| run_test_file(m[0]) }
49
+ watch('lib/.*\.rb') { run_all_tests }
50
+ watch('lib/firewool/.*\.rb') { run_all_tests }
51
+
52
+
53
+ # Ctrl-\
54
+ Signal.trap 'QUIT' do
55
+ puts " --- Running all tests ---\n\n"
56
+ run_all_tests
57
+ end
58
+
59
+ @interrupted = false
60
+
61
+ # Ctrl-C
62
+ Signal.trap 'INT' do
63
+ if @interrupted then
64
+ @wants_to_quit = true
65
+ abort("\n")
66
+ else
67
+ puts "Interrupt a second time to quit"
68
+ @interrupted = true
69
+ Kernel.sleep 1.5
70
+ # raise Interrupt, nil # let the run loop catch it
71
+ run_suite
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: firewool
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Chris Dillon
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-02-15 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: ipaddress
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.7.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: shoulda
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ description: Provides ip filtering based on a black/white list.
39
+ email:
40
+ - squarism@gmail.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - README.rdoc
51
+ - Rakefile
52
+ - firewool.gemspec
53
+ - lib/firewool.rb
54
+ - lib/firewool/hook.rb
55
+ - lib/firewool/instance_methods.rb
56
+ - lib/firewool/railtie.rb
57
+ - lib/firewool/version.rb
58
+ - test/dummy/.gitignore
59
+ - test/dummy/Gemfile
60
+ - test/dummy/README
61
+ - test/dummy/Rakefile
62
+ - test/dummy/app/controllers/application_controller.rb
63
+ - test/dummy/app/controllers/dummy_controller.rb
64
+ - test/dummy/app/helpers/application_helper.rb
65
+ - test/dummy/app/helpers/dummy_helper.rb
66
+ - test/dummy/app/views/layouts/application.html.erb
67
+ - test/dummy/config.ru
68
+ - test/dummy/config/application.rb
69
+ - test/dummy/config/boot.rb
70
+ - test/dummy/config/database.yml
71
+ - test/dummy/config/environment.rb
72
+ - test/dummy/config/environments/development.rb
73
+ - test/dummy/config/environments/production.rb
74
+ - test/dummy/config/environments/test.rb
75
+ - test/dummy/config/firewool.yml
76
+ - test/dummy/config/initializers/backtrace_silencers.rb
77
+ - test/dummy/config/initializers/inflections.rb
78
+ - test/dummy/config/initializers/mime_types.rb
79
+ - test/dummy/config/initializers/secret_token.rb
80
+ - test/dummy/config/initializers/session_store.rb
81
+ - test/dummy/config/locales/en.yml
82
+ - test/dummy/config/routes.rb
83
+ - test/dummy/db/seeds.rb
84
+ - test/dummy/doc/README_FOR_APP
85
+ - test/dummy/lib/tasks/.gitkeep
86
+ - test/dummy/public/403.html
87
+ - test/dummy/public/404.html
88
+ - test/dummy/public/422.html
89
+ - test/dummy/public/500.html
90
+ - test/dummy/public/favicon.ico
91
+ - test/dummy/public/images/rails.png
92
+ - test/dummy/public/index.html
93
+ - test/dummy/public/javascripts/application.js
94
+ - test/dummy/public/javascripts/controls.js
95
+ - test/dummy/public/javascripts/dragdrop.js
96
+ - test/dummy/public/javascripts/effects.js
97
+ - test/dummy/public/javascripts/prototype.js
98
+ - test/dummy/public/javascripts/rails.js
99
+ - test/dummy/public/robots.txt
100
+ - test/dummy/public/stylesheets/.gitkeep
101
+ - test/dummy/script/rails
102
+ - test/dummy/test/functional/dummy_controller_test.rb
103
+ - test/dummy/test/performance/browsing_test.rb
104
+ - test/dummy/test/test_helper.rb
105
+ - test/dummy/test/unit/helpers/dummy_helper_test.rb
106
+ - test/dummy/vendor/plugins/.gitkeep
107
+ - test/firewool_test.rb
108
+ - test/test_helper.rb
109
+ - watchr.rb
110
+ has_rdoc: true
111
+ homepage: http://github.com/squarism/firewool
112
+ licenses: []
113
+
114
+ post_install_message:
115
+ rdoc_options: []
116
+
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: "0"
131
+ requirements: []
132
+
133
+ rubyforge_project: firewool
134
+ rubygems_version: 1.5.2
135
+ signing_key:
136
+ specification_version: 3
137
+ summary: Firewalling gem for rails. Baa.
138
+ test_files:
139
+ - test/dummy/.gitignore
140
+ - test/dummy/Gemfile
141
+ - test/dummy/README
142
+ - test/dummy/Rakefile
143
+ - test/dummy/app/controllers/application_controller.rb
144
+ - test/dummy/app/controllers/dummy_controller.rb
145
+ - test/dummy/app/helpers/application_helper.rb
146
+ - test/dummy/app/helpers/dummy_helper.rb
147
+ - test/dummy/app/views/layouts/application.html.erb
148
+ - test/dummy/config.ru
149
+ - test/dummy/config/application.rb
150
+ - test/dummy/config/boot.rb
151
+ - test/dummy/config/database.yml
152
+ - test/dummy/config/environment.rb
153
+ - test/dummy/config/environments/development.rb
154
+ - test/dummy/config/environments/production.rb
155
+ - test/dummy/config/environments/test.rb
156
+ - test/dummy/config/firewool.yml
157
+ - test/dummy/config/initializers/backtrace_silencers.rb
158
+ - test/dummy/config/initializers/inflections.rb
159
+ - test/dummy/config/initializers/mime_types.rb
160
+ - test/dummy/config/initializers/secret_token.rb
161
+ - test/dummy/config/initializers/session_store.rb
162
+ - test/dummy/config/locales/en.yml
163
+ - test/dummy/config/routes.rb
164
+ - test/dummy/db/seeds.rb
165
+ - test/dummy/doc/README_FOR_APP
166
+ - test/dummy/lib/tasks/.gitkeep
167
+ - test/dummy/public/403.html
168
+ - test/dummy/public/404.html
169
+ - test/dummy/public/422.html
170
+ - test/dummy/public/500.html
171
+ - test/dummy/public/favicon.ico
172
+ - test/dummy/public/images/rails.png
173
+ - test/dummy/public/index.html
174
+ - test/dummy/public/javascripts/application.js
175
+ - test/dummy/public/javascripts/controls.js
176
+ - test/dummy/public/javascripts/dragdrop.js
177
+ - test/dummy/public/javascripts/effects.js
178
+ - test/dummy/public/javascripts/prototype.js
179
+ - test/dummy/public/javascripts/rails.js
180
+ - test/dummy/public/robots.txt
181
+ - test/dummy/public/stylesheets/.gitkeep
182
+ - test/dummy/script/rails
183
+ - test/dummy/test/functional/dummy_controller_test.rb
184
+ - test/dummy/test/performance/browsing_test.rb
185
+ - test/dummy/test/test_helper.rb
186
+ - test/dummy/test/unit/helpers/dummy_helper_test.rb
187
+ - test/dummy/vendor/plugins/.gitkeep
188
+ - test/firewool_test.rb
189
+ - test/test_helper.rb