rack-robotz 0.0.2
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.
- data/README.textile +9 -0
- data/lib/rack/robotz.rb +3 -0
- data/lib/rack/robotz/middleware.rb +27 -0
- data/test/lib/test_app.rb +5 -0
- data/test/test_helper.rb +11 -0
- data/test/unit/defaults_test.rb +21 -0
- data/test/unit/middleware_test.rb +34 -0
- data/test/unit/version_test.rb +9 -0
- metadata +142 -0
data/README.textile
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# rack-robotz
|
|
2
|
+
|
|
3
|
+
[](https://travis-ci.org/pietia/rack-robotz)
|
|
4
|
+
|
|
5
|
+
[](https://codeclimate.com/github/pietia/rack-robotz)
|
|
6
|
+
|
|
7
|
+
* Rack application to serve a robots.txt file dynamically.
|
|
8
|
+
* set `DISABLE_ROBOTS=true` to enable middleware
|
|
9
|
+
* sample usage: `use Rack::Robotz, "User-Agent" => "*", "Disallow" => "/"`
|
data/lib/rack/robotz.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Rack
|
|
2
|
+
|
|
3
|
+
class Robotz
|
|
4
|
+
|
|
5
|
+
VERSION = '0.0.2'
|
|
6
|
+
|
|
7
|
+
def initialize(app, items = {"User-Agent" => "*", "Disallow" => "/"})
|
|
8
|
+
@app = app
|
|
9
|
+
@items = items
|
|
10
|
+
@is_enabled = %w{1 true yes}.include?(ENV["DISABLE_ROBOTS"])
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_s
|
|
14
|
+
@items.map { |key, value| "#{key}: #{value}" }.join("\n")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call(env)
|
|
18
|
+
if @is_enabled && env['PATH_INFO'] == '/robots.txt'
|
|
19
|
+
[200, { 'Content-Type' => 'text/plain' }, [to_s]]
|
|
20
|
+
else
|
|
21
|
+
@app.call(env)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'bundler/setup'
|
|
2
|
+
require 'minitest/autorun'
|
|
3
|
+
require 'minitest/pride'
|
|
4
|
+
require 'minitest/spec'
|
|
5
|
+
require 'rack/test'
|
|
6
|
+
|
|
7
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib'
|
|
8
|
+
$LOAD_PATH.unshift File.dirname(File.dirname(__FILE__)) + '/lib'
|
|
9
|
+
|
|
10
|
+
require 'rack/robotz'
|
|
11
|
+
require 'test_app'
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
|
2
|
+
|
|
3
|
+
class DefaultsTest < MiniTest::Unit::TestCase
|
|
4
|
+
include Rack::Test::Methods
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
ENV.delete 'DISABLE_ROBOTS'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def app
|
|
11
|
+
Rack::Robotz.new TestApp
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_it_should_use_default_content
|
|
15
|
+
ENV['DISABLE_ROBOTS'] = 'true'
|
|
16
|
+
get "/robots.txt"
|
|
17
|
+
assert_equal last_response.status, 200
|
|
18
|
+
assert_equal last_response.body, "User-Agent: *\nDisallow: /"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
|
|
2
|
+
|
|
3
|
+
class MiddlewareTest < MiniTest::Unit::TestCase
|
|
4
|
+
include Rack::Test::Methods
|
|
5
|
+
|
|
6
|
+
def app
|
|
7
|
+
Rack::Robotz.new TestApp, "User-Agent" => "*", "Disallow" => "/"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
ENV.delete 'DISABLE_ROBOTS'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_should_generate_robots_txt_when_env_variable_set
|
|
15
|
+
ENV['DISABLE_ROBOTS'] = 'true'
|
|
16
|
+
get "/robots.txt"
|
|
17
|
+
assert_equal last_response.status, 200
|
|
18
|
+
assert_equal last_response.body, "User-Agent: *\nDisallow: /"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_should_not_generate_robots_txt_when_env_variable_set
|
|
22
|
+
get "/robots.txt"
|
|
23
|
+
assert_equal last_response.status, 200
|
|
24
|
+
assert_equal last_response.body, 'meow!'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_should_not_affect_other_urls
|
|
28
|
+
ENV['DISABLE_ROBOTS'] = 'true'
|
|
29
|
+
get "/"
|
|
30
|
+
assert_equal last_response.status, 200
|
|
31
|
+
assert_equal last_response.body, 'meow!'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rack-robotz
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- John Labovitz
|
|
9
|
+
- Piotr Gęga
|
|
10
|
+
autorequire:
|
|
11
|
+
bindir: bin
|
|
12
|
+
cert_chain: []
|
|
13
|
+
date: 2013-04-25 00:00:00.000000000 Z
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: rack
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
none: false
|
|
19
|
+
requirements:
|
|
20
|
+
- - ! '>='
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '0'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
none: false
|
|
27
|
+
requirements:
|
|
28
|
+
- - ! '>='
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
version: '0'
|
|
31
|
+
- !ruby/object:Gem::Dependency
|
|
32
|
+
name: gem-release
|
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
|
34
|
+
none: false
|
|
35
|
+
requirements:
|
|
36
|
+
- - ! '>='
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: '0'
|
|
39
|
+
type: :development
|
|
40
|
+
prerelease: false
|
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
42
|
+
none: false
|
|
43
|
+
requirements:
|
|
44
|
+
- - ! '>='
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: rake
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
type: :development
|
|
56
|
+
prerelease: false
|
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
58
|
+
none: false
|
|
59
|
+
requirements:
|
|
60
|
+
- - ! '>='
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '0'
|
|
63
|
+
- !ruby/object:Gem::Dependency
|
|
64
|
+
name: minitest
|
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
|
66
|
+
none: false
|
|
67
|
+
requirements:
|
|
68
|
+
- - ! '>='
|
|
69
|
+
- !ruby/object:Gem::Version
|
|
70
|
+
version: '0'
|
|
71
|
+
type: :development
|
|
72
|
+
prerelease: false
|
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
74
|
+
none: false
|
|
75
|
+
requirements:
|
|
76
|
+
- - ! '>='
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
79
|
+
- !ruby/object:Gem::Dependency
|
|
80
|
+
name: rack-test
|
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
|
82
|
+
none: false
|
|
83
|
+
requirements:
|
|
84
|
+
- - ! '>='
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
type: :development
|
|
88
|
+
prerelease: false
|
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
90
|
+
none: false
|
|
91
|
+
requirements:
|
|
92
|
+
- - ! '>='
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '0'
|
|
95
|
+
description: ! "\n Rack application to serve a robots.txt file dynamically. \n
|
|
96
|
+
\ "
|
|
97
|
+
email:
|
|
98
|
+
- johnl@johnlabovitz.com
|
|
99
|
+
- pietia@appgrinder.pl
|
|
100
|
+
executables: []
|
|
101
|
+
extensions: []
|
|
102
|
+
extra_rdoc_files: []
|
|
103
|
+
files:
|
|
104
|
+
- lib/rack/robotz/middleware.rb
|
|
105
|
+
- lib/rack/robotz.rb
|
|
106
|
+
- test/lib/test_app.rb
|
|
107
|
+
- test/test_helper.rb
|
|
108
|
+
- test/unit/defaults_test.rb
|
|
109
|
+
- test/unit/middleware_test.rb
|
|
110
|
+
- test/unit/version_test.rb
|
|
111
|
+
- README.textile
|
|
112
|
+
homepage: http://github.com/pietia/rack-robotz
|
|
113
|
+
licenses: []
|
|
114
|
+
post_install_message:
|
|
115
|
+
rdoc_options: []
|
|
116
|
+
require_paths:
|
|
117
|
+
- lib
|
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
|
+
none: false
|
|
120
|
+
requirements:
|
|
121
|
+
- - ! '>='
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0'
|
|
124
|
+
segments:
|
|
125
|
+
- 0
|
|
126
|
+
hash: 4364349245037134888
|
|
127
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
|
+
none: false
|
|
129
|
+
requirements:
|
|
130
|
+
- - ! '>='
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: '0'
|
|
133
|
+
segments:
|
|
134
|
+
- 0
|
|
135
|
+
hash: 4364349245037134888
|
|
136
|
+
requirements: []
|
|
137
|
+
rubyforge_project:
|
|
138
|
+
rubygems_version: 1.8.23
|
|
139
|
+
signing_key:
|
|
140
|
+
specification_version: 3
|
|
141
|
+
summary: Serve a robots.txt file dynamically.
|
|
142
|
+
test_files: []
|