request_log 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ doc/*
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- request_log (0.1.0)
4
+ request_log (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -28,7 +28,7 @@ module RequestLog
28
28
  start_time = Time.parse(start_time).utc if start_time.is_a?(String)
29
29
  end_time = Time.parse(end_time).utc if end_time.is_a?(String)
30
30
  time_condition = {"time" => {"$gt" => start_time, "$lt" => end_time}}
31
- requests.find(time_condition.merge(conditions))
31
+ requests.find(time_condition.merge(parse_conditions(conditions)))
32
32
  end
33
33
 
34
34
  def self.print_requests(start_time, end_time, conditions = {})
@@ -37,5 +37,15 @@ module RequestLog
37
37
  puts
38
38
  end
39
39
  end
40
+
41
+ def self.parse_conditions(conditions)
42
+ if conditions
43
+ # We need to parse a Ruby hash here, let's not require braces
44
+ conditions = "{#{conditions}}" unless conditions[0] == "{"
45
+ eval(conditions)
46
+ else
47
+ {}
48
+ end
49
+ end
40
50
  end
41
51
  end
@@ -1,3 +1,3 @@
1
1
  module RequestLog
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -6,7 +6,9 @@ namespace :request_log do
6
6
  wait_time = 10
7
7
  printed_ids = Set.new
8
8
  while(true)
9
- RequestLog::Db.requests.find("time" => {"$gt" => (Time.now - wait_time).utc}).each do |r|
9
+ time_condition = {"time" => {"$gt" => (Time.now - wait_time).utc}}
10
+ filter_conditions = RequestLog::Db.parse_conditions(ENV['conditions'])
11
+ RequestLog::Db.requests.find(filter_conditions.merge(time_condition)).each do |r|
10
12
  unless printed_ids.include?(r['_id'])
11
13
  puts
12
14
  puts RequestLog::Db.printable_request(r)
@@ -21,13 +23,6 @@ namespace :request_log do
21
23
  task :print do
22
24
  from = ENV['from'] || (Time.now-600).utc
23
25
  to = ENV['to'] || Time.now.utc
24
- if conditions = ENV['conditions']
25
- # We need to parse a Ruby hash here, let's not require braces
26
- conditions = "{#{conditions}}" unless conditions[0] == "{"
27
- conditions = eval(conditions)
28
- else
29
- conditions = {}
30
- end
31
- RequestLog::Db.print_requests(from, to, conditions)
26
+ RequestLog::Db.print_requests(from, to, ENV['conditions'])
32
27
  end
33
28
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Peter Marklund
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-02 00:00:00 +01:00
17
+ date: 2010-12-03 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -78,10 +78,6 @@ files:
78
78
  - Gemfile.lock
79
79
  - README.rdoc
80
80
  - Rakefile
81
- - doc/README_rdoc.html
82
- - doc/created.rid
83
- - doc/index.html
84
- - doc/rdoc.css
85
81
  - lib/request_log.rb
86
82
  - lib/request_log/data.rb
87
83
  - lib/request_log/db.rb
@@ -110,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
106
  requirements:
111
107
  - - ">="
112
108
  - !ruby/object:Gem::Version
113
- hash: 413546077
109
+ hash: 206132559
114
110
  segments:
115
111
  - 0
116
112
  version: "0"
@@ -119,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
115
  requirements:
120
116
  - - ">="
121
117
  - !ruby/object:Gem::Version
122
- hash: 413546077
118
+ hash: 206132559
123
119
  segments:
124
120
  - 0
125
121
  version: "0"
data/doc/README_rdoc.html DELETED
@@ -1,204 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
-
5
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
- <head>
7
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
-
9
- <title>File: README.rdoc [RDoc Documentation]</title>
10
-
11
- <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet" />
12
-
13
- <script src="./js/jquery.js" type="text/javascript"
14
- charset="utf-8"></script>
15
- <script src="./js/thickbox-compressed.js" type="text/javascript"
16
- charset="utf-8"></script>
17
- <script src="./js/quicksearch.js" type="text/javascript"
18
- charset="utf-8"></script>
19
- <script src="./js/darkfish.js" type="text/javascript"
20
- charset="utf-8"></script>
21
- </head>
22
-
23
- <body class="file">
24
- <div id="metadata">
25
- <div id="home-metadata">
26
- <div id="home-section" class="section">
27
- <h3 class="section-header">
28
- <a href="./index.html">Home</a>
29
- <a href="./index.html#classes">Classes</a>
30
- <a href="./index.html#methods">Methods</a>
31
- </h3>
32
- </div>
33
- </div>
34
-
35
- <div id="project-metadata">
36
-
37
-
38
- <div id="fileindex-section" class="section project-section">
39
- <h3 class="section-header">Files</h3>
40
- <ul>
41
-
42
- <li class="file"><a href="./README_rdoc.html">README.rdoc</a></li>
43
-
44
- </ul>
45
- </div>
46
-
47
-
48
- <div id="classindex-section" class="section project-section">
49
- <h3 class="section-header">Class Index
50
- <span class="search-toggle"><img src="./images/find.png"
51
- height="16" width="16" alt="[+]"
52
- title="show/hide quicksearch" /></span></h3>
53
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
54
- <fieldset>
55
- <legend>Quicksearch</legend>
56
- <input type="text" name="quicksearch" value=""
57
- class="quicksearch-field" />
58
- </fieldset>
59
- </form>
60
-
61
- <ul class="link-list">
62
-
63
- </ul>
64
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
65
- </div>
66
-
67
-
68
- </div>
69
- </div>
70
-
71
- <div id="documentation">
72
- <h1>Request Log</h1>
73
- <p>
74
- Request Log is a Rack middleware for logging web requests to MongoDB. Each
75
- web request becomes a document in MongoDB with fields like path, method,
76
- params, status, time, ip, runtime etc. The gem offers support for
77
- monitoring the time overhead (usually very small) that the logging incurs.
78
- The advantages of logging to MongoDB over logging to a plain text file are
79
- huge because of the query capabilities of MongoDB. Here is an example of
80
- what a log document can look like:
81
- </p>
82
- <pre>
83
- method: &quot;GET&quot;
84
- path: &quot;/&quot;
85
- ip: &quot;10.218.1.177&quot;
86
- time: 2010-10-28 21:43:38 UTC
87
- params: {&quot;hello_world&quot;=&gt;&quot;1&quot;}
88
- status: 200
89
- runtime: 0.000303
90
- </pre>
91
- <p>
92
- You can easily customize which fields are stored in the log.
93
- </p>
94
- <h2>Installation</h2>
95
- <p>
96
- Add gem dependencies with appropriate version numbers to your Gemfile
97
- (assuming you use Bundler):
98
- </p>
99
- <pre>
100
- gem 'mongo', '~&gt; version known to work'
101
- gem 'bson_ext', '~&gt; version known to work'
102
- gem 'request_log', '~&gt; version known to work'
103
- </pre>
104
- <p>
105
- Install with:
106
- </p>
107
- <pre>
108
- bundle install
109
- </pre>
110
- <p>
111
- Note that it&#8217;s up to your application how it wants to connect to
112
- MongoDB (if at all) and the suggested mongo and bson_ext gems are just
113
- suggestions.
114
- </p>
115
- <p>
116
- Next you need to setup a MongoDB connection. Here is a MongoHQ example that
117
- in Rails would belong in config/initializers/request_log.rb:
118
- </p>
119
- <pre>
120
- if ENV['MONGOHQ_URL']
121
- require 'uri'
122
- require 'mongo'
123
- uri = URI.parse(ENV['MONGOHQ_URL'])
124
- connection = Mongo::Connection.from_uri(uri.to_s)
125
- RequestLog::Db.mongo_db = connection.db(uri.path.gsub(/^\//, ''))
126
- end
127
- </pre>
128
- <p>
129
- MongoDB recommends using capped collections for logging as they have good
130
- write performance. Here is an example of how to do log rotation when the
131
- size hits 20GB (this step is optional, note that the command may take a
132
- while):
133
- </p>
134
- <pre>
135
- RequestLog::Db.mongo_db.create_collection(&quot;requests&quot;, :capped =&gt; true, :size =&gt; 20000000000)
136
- </pre>
137
- <p>
138
- Now setup the Middleware in your config.ru file:
139
- </p>
140
- <pre>
141
- use RequestLog::Middleware
142
- </pre>
143
- <p>
144
- Here is an example of how you can customize the middleware:
145
- </p>
146
- <pre>
147
- use RequestLog::Middleware,
148
- :logger =&gt; lambda { |data| ::RequestLog::Db.requests.insert(data.attributes.except(:runtime)) },
149
- :timeout =&gt; 0.5
150
- </pre>
151
- <p>
152
- In order to use the Rake tasks you need to make sure you have the MongoDB
153
- connection setup and that you require the tasks in your Rakefile, like
154
- this:
155
- </p>
156
- <pre>
157
- require 'request_log'
158
- require 'config/initializers/request_log.rb' # The file where you setup the mongo db connection
159
- require 'request_log/tasks'
160
- </pre>
161
- <h2>Accessing the logs</h2>
162
- <p>
163
- You can tail the log like this:
164
- </p>
165
- <pre>
166
- rake request_log:tail
167
- </pre>
168
- <p>
169
- If you want to query the log and print a certain time period you can use
170
- request_log:print:
171
- </p>
172
- <pre>
173
- rake request_log:print from=&quot;2010-10-28 17:06:08&quot; to=&quot;2010-10-28 17:06:10&quot; conditions='status: 200'
174
- </pre>
175
- <p>
176
- If you are using MONGOHQ, remember to set the MONGOHQ_URL environment
177
- variable.
178
- </p>
179
- <h2>Profiling</h2>
180
- <p>
181
- To monitor the time consumption and reliability of the MongoDB logging you
182
- can use the RequestLog::Profiler class. It records number of failed and
183
- successful loggings, average and maximum logging times etc. To persist the
184
- profiling information to MongoDB you can configure the profiler like this:
185
- </p>
186
- <pre>
187
- RequestLog::Profiler.persist_enabled = true
188
- RequestLog::Profiler.persist_frequency = 1000 # persist profiling info every 1000 requests
189
- </pre>
190
- <p>
191
- The profiling info will then be written to a table (request_log_profiling)
192
- in the MongoDB database.
193
- </p>
194
-
195
- </div>
196
-
197
- <div id="validator-badges">
198
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
199
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
200
- Rdoc Generator</a> 1.1.6</small>.</p>
201
- </div>
202
- </body>
203
- </html>
204
-
data/doc/created.rid DELETED
@@ -1,2 +0,0 @@
1
- Tue, 02 Nov 2010 16:49:03 +0100
2
- README.rdoc Tue, 02 Nov 2010 16:48:42 +0100
data/doc/index.html DELETED
@@ -1,54 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
-
5
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
6
- <head>
7
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
-
9
- <title>RDoc Documentation</title>
10
-
11
- <link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
12
-
13
- <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
14
- <script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
15
- <script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
16
- <script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
17
-
18
- </head>
19
- <body class="indexpage">
20
-
21
-
22
- <h1>RDoc Documentation</h1>
23
-
24
-
25
- <p>This is the API documentation for 'RDoc Documentation'.</p>
26
-
27
-
28
-
29
-
30
- <h2>Files</h2>
31
- <ul>
32
-
33
- <li class="file"><a href="README_rdoc.html">README.rdoc</a></li>
34
-
35
- </ul>
36
-
37
-
38
- <h2 id="classes">Classes/Modules</h2>
39
- <ul>
40
-
41
- </ul>
42
-
43
- <h2 id="methods">Methods</h2>
44
- <ul>
45
-
46
- </ul>
47
-
48
- <div id="validator-badges">
49
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
50
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
51
- Rdoc Generator</a> 1.1.6</small>.</p>
52
- </div>
53
- </body>
54
- </html>
data/doc/rdoc.css DELETED
@@ -1,706 +0,0 @@
1
- /*
2
- * "Darkfish" Rdoc CSS
3
- * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
4
- *
5
- * Author: Michael Granger <ged@FaerieMUD.org>
6
- *
7
- */
8
-
9
- /* Base Green is: #6C8C22 */
10
-
11
- *{ padding: 0; margin: 0; }
12
-
13
- body {
14
- background: #efefef;
15
- font: 14px "Helvetica Neue", Helvetica, Tahoma, sans-serif;
16
- }
17
- body.class, body.module, body.file {
18
- margin-left: 40px;
19
- }
20
- body.file-popup {
21
- font-size: 90%;
22
- margin-left: 0;
23
- }
24
-
25
- h1 {
26
- font-size: 300%;
27
- text-shadow: rgba(135,145,135,0.65) 2px 2px 3px;
28
- color: #6C8C22;
29
- }
30
- h2,h3,h4 { margin-top: 1.5em; }
31
-
32
- :link,
33
- :visited {
34
- color: #6C8C22;
35
- text-decoration: none;
36
- }
37
- :link:hover,
38
- :visited:hover {
39
- border-bottom: 1px dotted #6C8C22;
40
- }
41
-
42
- pre {
43
- background: #ddd;
44
- padding: 0.5em 0;
45
- }
46
-
47
-
48
- /* @group Generic Classes */
49
-
50
- .initially-hidden {
51
- display: none;
52
- }
53
-
54
- .quicksearch-field {
55
- width: 98%;
56
- background: #ddd;
57
- border: 1px solid #aaa;
58
- height: 1.5em;
59
- -webkit-border-radius: 4px;
60
- }
61
- .quicksearch-field:focus {
62
- background: #f1edba;
63
- }
64
-
65
- .missing-docs {
66
- font-size: 120%;
67
- background: white url(images/wrench_orange.png) no-repeat 4px center;
68
- color: #ccc;
69
- line-height: 2em;
70
- border: 1px solid #d00;
71
- opacity: 1;
72
- padding-left: 20px;
73
- text-indent: 24px;
74
- letter-spacing: 3px;
75
- font-weight: bold;
76
- -webkit-border-radius: 5px;
77
- -moz-border-radius: 5px;
78
- }
79
-
80
- .target-section {
81
- border: 2px solid #dcce90;
82
- border-left-width: 8px;
83
- padding: 0 1em;
84
- background: #fff3c2;
85
- }
86
-
87
- /* @end */
88
-
89
-
90
- /* @group Index Page, Standalone file pages */
91
- body.indexpage {
92
- margin: 1em 3em;
93
- }
94
- body.indexpage p,
95
- body.indexpage div,
96
- body.file p {
97
- margin: 1em 0;
98
- }
99
-
100
- .indexpage ul,
101
- .file #documentation ul {
102
- line-height: 160%;
103
- list-style: none;
104
- }
105
- .indexpage ul :link,
106
- .indexpage ul :visited {
107
- font-size: 16px;
108
- }
109
-
110
- .indexpage li,
111
- .file #documentation li {
112
- padding-left: 20px;
113
- background: url(images/bullet_black.png) no-repeat left 4px;
114
- }
115
- .indexpage li.module {
116
- background: url(images/package.png) no-repeat left 4px;
117
- }
118
- .indexpage li.class {
119
- background: url(images/ruby.png) no-repeat left 4px;
120
- }
121
- .indexpage li.file {
122
- background: url(images/page_white_text.png) no-repeat left 4px;
123
- }
124
- .file li p,
125
- .indexpage li p {
126
- margin: 0 0;
127
- }
128
-
129
- /* @end */
130
-
131
- /* @group Top-Level Structure */
132
-
133
- .class #metadata,
134
- .file #metadata,
135
- .module #metadata {
136
- float: left;
137
- width: 260px;
138
- }
139
-
140
- .class #documentation,
141
- .file #documentation,
142
- .module #documentation {
143
- margin: 2em 1em 5em 300px;
144
- min-width: 340px;
145
- }
146
-
147
- .file #metadata {
148
- margin: 0.8em;
149
- }
150
-
151
- #validator-badges {
152
- clear: both;
153
- margin: 1em 1em 2em;
154
- }
155
-
156
- /* @end */
157
-
158
- /* @group Metadata Section */
159
- #metadata .section {
160
- background-color: #dedede;
161
- -moz-border-radius: 5px;
162
- -webkit-border-radius: 5px;
163
- border: 1px solid #aaa;
164
- margin: 0 8px 16px;
165
- font-size: 90%;
166
- overflow: hidden;
167
- }
168
- #metadata h3.section-header {
169
- margin: 0;
170
- padding: 2px 8px;
171
- background: #ccc;
172
- color: #666;
173
- -moz-border-radius-topleft: 4px;
174
- -moz-border-radius-topright: 4px;
175
- -webkit-border-top-left-radius: 4px;
176
- -webkit-border-top-right-radius: 4px;
177
- border-bottom: 1px solid #aaa;
178
- }
179
- #metadata #home-section h3.section-header {
180
- border-bottom: 0;
181
- }
182
-
183
- #metadata ul,
184
- #metadata dl,
185
- #metadata p {
186
- padding: 8px;
187
- list-style: none;
188
- }
189
-
190
- #file-metadata ul {
191
- padding-left: 28px;
192
- list-style-image: url(images/page_green.png);
193
- }
194
-
195
- dl.svninfo {
196
- color: #666;
197
- margin: 0;
198
- }
199
- dl.svninfo dt {
200
- font-weight: bold;
201
- }
202
-
203
- ul.link-list li {
204
- white-space: nowrap;
205
- }
206
- ul.link-list .type {
207
- font-size: 8px;
208
- text-transform: uppercase;
209
- color: white;
210
- background: #969696;
211
- padding: 2px 4px;
212
- -webkit-border-radius: 5px;
213
- }
214
-
215
- /* @end */
216
-
217
-
218
- /* @group Project Metadata Section */
219
- #project-metadata {
220
- margin-top: 3em;
221
- }
222
-
223
- .file #project-metadata {
224
- margin-top: 0em;
225
- }
226
-
227
- #project-metadata .section {
228
- border: 1px solid #aaa;
229
- }
230
- #project-metadata h3.section-header {
231
- border-bottom: 1px solid #aaa;
232
- position: relative;
233
- }
234
- #project-metadata h3.section-header .search-toggle {
235
- position: absolute;
236
- right: 5px;
237
- }
238
-
239
-
240
- #project-metadata form {
241
- color: #777;
242
- background: #ccc;
243
- padding: 8px 8px 16px;
244
- border-bottom: 1px solid #bbb;
245
- }
246
- #project-metadata fieldset {
247
- border: 0;
248
- }
249
-
250
- #no-class-search-results {
251
- margin: 0 auto 1em;
252
- text-align: center;
253
- font-size: 14px;
254
- font-weight: bold;
255
- color: #aaa;
256
- }
257
-
258
- /* @end */
259
-
260
-
261
- /* @group Documentation Section */
262
- #description {
263
- font-size: 100%;
264
- color: #333;
265
- }
266
-
267
- #description p {
268
- margin: 1em 0.4em;
269
- }
270
-
271
- #description li p {
272
- margin: 0;
273
- }
274
-
275
- #description ul {
276
- margin-left: 1.5em;
277
- }
278
- #description ul li {
279
- line-height: 1.4em;
280
- }
281
-
282
- #description dl,
283
- #documentation dl {
284
- margin: 8px 1.5em;
285
- border: 1px solid #ccc;
286
- }
287
- #description dl {
288
- font-size: 14px;
289
- }
290
-
291
- #description dt,
292
- #documentation dt {
293
- padding: 2px 4px;
294
- font-weight: bold;
295
- background: #ddd;
296
- }
297
- #description dd,
298
- #documentation dd {
299
- padding: 2px 12px;
300
- }
301
- #description dd + dt,
302
- #documentation dd + dt {
303
- margin-top: 0.7em;
304
- }
305
-
306
- #documentation .section {
307
- font-size: 90%;
308
- }
309
- #documentation h3.section-header {
310
- margin-top: 2em;
311
- padding: 0.75em 0.5em;
312
- background-color: #dedede;
313
- color: #333;
314
- font-size: 150%;
315
- border: 1px solid #bbb;
316
- -moz-border-radius: 3px;
317
- -webkit-border-radius: 3px;
318
- }
319
-
320
- #constants-list > dl,
321
- #attributes-list > dl {
322
- margin: 1em 0 2em;
323
- border: 0;
324
- }
325
- #constants-list > dl dt,
326
- #attributes-list > dl dt {
327
- padding-left: 0;
328
- font-weight: bold;
329
- font-family: Monaco, "Andale Mono";
330
- background: inherit;
331
- }
332
- #constants-list > dl dt a,
333
- #attributes-list > dl dt a {
334
- color: inherit;
335
- }
336
- #constants-list > dl dd,
337
- #attributes-list > dl dd {
338
- margin: 0 0 1em 0;
339
- padding: 0;
340
- color: #666;
341
- }
342
-
343
- /* @group Method Details */
344
-
345
- #documentation .method-source-code {
346
- display: none;
347
- }
348
-
349
- #documentation .method-detail {
350
- margin: 0.5em 0;
351
- padding: 0.5em 0;
352
- cursor: pointer;
353
- }
354
- #documentation .method-detail:hover {
355
- background-color: #f1edba;
356
- }
357
- #documentation .method-heading {
358
- position: relative;
359
- padding: 2px 4px 0 20px;
360
- font-size: 125%;
361
- font-weight: bold;
362
- color: #333;
363
- background: url(images/brick.png) no-repeat left bottom;
364
- }
365
- #documentation .method-heading :link,
366
- #documentation .method-heading :visited {
367
- color: inherit;
368
- }
369
- #documentation .method-click-advice {
370
- position: absolute;
371
- top: 2px;
372
- right: 5px;
373
- font-size: 10px;
374
- color: #9b9877;
375
- visibility: hidden;
376
- padding-right: 20px;
377
- line-height: 20px;
378
- background: url(images/zoom.png) no-repeat right top;
379
- }
380
- #documentation .method-detail:hover .method-click-advice {
381
- visibility: visible;
382
- }
383
-
384
- #documentation .method-alias .method-heading {
385
- color: #666;
386
- background: url(images/brick_link.png) no-repeat left bottom;
387
- }
388
-
389
- #documentation .method-description,
390
- #documentation .aliases {
391
- margin: 0 20px;
392
- line-height: 1.2em;
393
- color: #666;
394
- }
395
- #documentation .aliases {
396
- padding-top: 4px;
397
- font-style: italic;
398
- cursor: default;
399
- }
400
- #documentation .method-description p {
401
- padding: 0;
402
- }
403
- #documentation .method-description p + p {
404
- margin-bottom: 0.5em;
405
- }
406
- #documentation .method-description ul {
407
- margin-left: 1.5em;
408
- }
409
-
410
- #documentation .attribute-method-heading {
411
- background: url(images/tag_green.png) no-repeat left bottom;
412
- }
413
- #documentation #attribute-method-details .method-detail:hover {
414
- background-color: transparent;
415
- cursor: default;
416
- }
417
- #documentation .attribute-access-type {
418
- font-size: 60%;
419
- text-transform: uppercase;
420
- vertical-align: super;
421
- padding: 0 2px;
422
- }
423
- /* @end */
424
-
425
- /* @end */
426
-
427
-
428
-
429
- /* @group Source Code */
430
-
431
- div.method-source-code {
432
- background: #262626;
433
- color: #efefef;
434
- margin: 1em;
435
- padding: 0.5em;
436
- border: 1px dashed #999;
437
- overflow: hidden;
438
- }
439
-
440
- div.method-source-code pre {
441
- background: inherit;
442
- padding: 0;
443
- color: white;
444
- overflow: auto;
445
- }
446
-
447
- /* @group Ruby keyword styles */
448
-
449
- .ruby-constant { color: #7fffd4; background: transparent; }
450
- .ruby-keyword { color: #00ffff; background: transparent; }
451
- .ruby-ivar { color: #eedd82; background: transparent; }
452
- .ruby-operator { color: #00ffee; background: transparent; }
453
- .ruby-identifier { color: #ffdead; background: transparent; }
454
- .ruby-node { color: #ffa07a; background: transparent; }
455
- .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
456
- .ruby-regexp { color: #ffa07a; background: transparent; }
457
- .ruby-value { color: #7fffd4; background: transparent; }
458
-
459
- /* @end */
460
- /* @end */
461
-
462
-
463
- /* @group File Popup Contents */
464
-
465
- .file #metadata,
466
- .file-popup #metadata {
467
- }
468
-
469
- .file-popup dl {
470
- font-size: 80%;
471
- padding: 0.75em;
472
- background-color: #dedede;
473
- color: #333;
474
- border: 1px solid #bbb;
475
- -moz-border-radius: 3px;
476
- -webkit-border-radius: 3px;
477
- }
478
- .file dt {
479
- font-weight: bold;
480
- padding-left: 22px;
481
- line-height: 20px;
482
- background: url(images/page_white_width.png) no-repeat left top;
483
- }
484
- .file dt.modified-date {
485
- background: url(images/date.png) no-repeat left top;
486
- }
487
- .file dt.requires {
488
- background: url(images/plugin.png) no-repeat left top;
489
- }
490
- .file dt.scs-url {
491
- background: url(images/wrench.png) no-repeat left top;
492
- }
493
-
494
- .file dl dd {
495
- margin: 0 0 1em 0;
496
- }
497
- .file #metadata dl dd ul {
498
- list-style: circle;
499
- margin-left: 20px;
500
- padding-top: 0;
501
- }
502
- .file #metadata dl dd ul li {
503
- }
504
-
505
-
506
- .file h2 {
507
- margin-top: 2em;
508
- padding: 0.75em 0.5em;
509
- background-color: #dedede;
510
- color: #333;
511
- font-size: 120%;
512
- border: 1px solid #bbb;
513
- -moz-border-radius: 3px;
514
- -webkit-border-radius: 3px;
515
- }
516
-
517
- /* @end */
518
-
519
-
520
-
521
-
522
- /* @group ThickBox Styles */
523
- #TB_window {
524
- font: 12px Arial, Helvetica, sans-serif;
525
- color: #333333;
526
- }
527
-
528
- #TB_secondLine {
529
- font: 10px Arial, Helvetica, sans-serif;
530
- color:#666666;
531
- }
532
-
533
- #TB_window :link,
534
- #TB_window :visited { color: #666666; }
535
- #TB_window :link:hover,
536
- #TB_window :visited:hover { color: #000; }
537
- #TB_window :link:active,
538
- #TB_window :visited:active { color: #666666; }
539
- #TB_window :link:focus,
540
- #TB_window :visited:focus { color: #666666; }
541
-
542
- #TB_overlay {
543
- position: fixed;
544
- z-index:100;
545
- top: 0px;
546
- left: 0px;
547
- height:100%;
548
- width:100%;
549
- }
550
-
551
- .TB_overlayMacFFBGHack {background: url(images/macFFBgHack.png) repeat;}
552
- .TB_overlayBG {
553
- background-color:#000;
554
- filter:alpha(opacity=75);
555
- -moz-opacity: 0.75;
556
- opacity: 0.75;
557
- }
558
-
559
- * html #TB_overlay { /* ie6 hack */
560
- position: absolute;
561
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
562
- }
563
-
564
- #TB_window {
565
- position: fixed;
566
- background: #ffffff;
567
- z-index: 102;
568
- color:#000000;
569
- display:none;
570
- border: 4px solid #525252;
571
- text-align:left;
572
- top:50%;
573
- left:50%;
574
- }
575
-
576
- * html #TB_window { /* ie6 hack */
577
- position: absolute;
578
- margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
579
- }
580
-
581
- #TB_window img#TB_Image {
582
- display:block;
583
- margin: 15px 0 0 15px;
584
- border-right: 1px solid #ccc;
585
- border-bottom: 1px solid #ccc;
586
- border-top: 1px solid #666;
587
- border-left: 1px solid #666;
588
- }
589
-
590
- #TB_caption{
591
- height:25px;
592
- padding:7px 30px 10px 25px;
593
- float:left;
594
- }
595
-
596
- #TB_closeWindow{
597
- height:25px;
598
- padding:11px 25px 10px 0;
599
- float:right;
600
- }
601
-
602
- #TB_closeAjaxWindow{
603
- padding:7px 10px 5px 0;
604
- margin-bottom:1px;
605
- text-align:right;
606
- float:right;
607
- }
608
-
609
- #TB_ajaxWindowTitle{
610
- float:left;
611
- padding:7px 0 5px 10px;
612
- margin-bottom:1px;
613
- font-size: 22px;
614
- }
615
-
616
- #TB_title{
617
- background-color: #6C8C22;
618
- color: #dedede;
619
- height:40px;
620
- }
621
- #TB_title :link,
622
- #TB_title :visited {
623
- color: white !important;
624
- border-bottom: 1px dotted #dedede;
625
- }
626
-
627
- #TB_ajaxContent{
628
- clear:both;
629
- padding:2px 15px 15px 15px;
630
- overflow:auto;
631
- text-align:left;
632
- line-height:1.4em;
633
- }
634
-
635
- #TB_ajaxContent.TB_modal{
636
- padding:15px;
637
- }
638
-
639
- #TB_ajaxContent p{
640
- padding:5px 0px 5px 0px;
641
- }
642
-
643
- #TB_load{
644
- position: fixed;
645
- display:none;
646
- height:13px;
647
- width:208px;
648
- z-index:103;
649
- top: 50%;
650
- left: 50%;
651
- margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
652
- }
653
-
654
- * html #TB_load { /* ie6 hack */
655
- position: absolute;
656
- margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
657
- }
658
-
659
- #TB_HideSelect{
660
- z-index:99;
661
- position:fixed;
662
- top: 0;
663
- left: 0;
664
- background-color:#fff;
665
- border:none;
666
- filter:alpha(opacity=0);
667
- -moz-opacity: 0;
668
- opacity: 0;
669
- height:100%;
670
- width:100%;
671
- }
672
-
673
- * html #TB_HideSelect { /* ie6 hack */
674
- position: absolute;
675
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
676
- }
677
-
678
- #TB_iframeContent{
679
- clear:both;
680
- border:none;
681
- margin-bottom:-1px;
682
- margin-top:1px;
683
- _margin-bottom:1px;
684
- }
685
-
686
- /* @end */
687
-
688
- /* @group Debugging Section */
689
-
690
- #debugging-toggle {
691
- text-align: center;
692
- }
693
- #debugging-toggle img {
694
- cursor: pointer;
695
- }
696
-
697
- #rdoc-debugging-section-dump {
698
- display: none;
699
- margin: 0 2em 2em;
700
- background: #ccc;
701
- border: 1px solid #999;
702
- }
703
-
704
-
705
-
706
- /* @end */