redisk 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.
- data/.document +5 -0
- data/.gitignore +23 -0
- data/LICENSE +20 -0
- data/README.rdoc +56 -0
- data/Rakefile +49 -0
- data/lib/redisk/helper.rb +13 -0
- data/lib/redisk/io.rb +867 -0
- data/lib/redisk/logger.rb +36 -0
- data/lib/redisk/stat.rb +382 -0
- data/lib/redisk.rb +37 -0
- data/redisk.gemspec +70 -0
- data/spec/fixtures/rails.log +100 -0
- data/spec/redis-test.conf +132 -0
- data/spec/redisk_io_spec.rb +348 -0
- data/spec/redisk_logger_spec.rb +53 -0
- data/spec/redisk_stat_spec.rb +87 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +47 -0
- metadata +105 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# Redisk::Log is a wrapper around logger, that uses Redisk::IO internally and provides some extra options
|
2
|
+
module Redisk
|
3
|
+
class Logger
|
4
|
+
extend Helper
|
5
|
+
include Helper
|
6
|
+
|
7
|
+
attr_reader :name, :logger, :io
|
8
|
+
|
9
|
+
def initialize(name, options = {})
|
10
|
+
@name = name
|
11
|
+
@io = Redisk::IO.new(name)
|
12
|
+
@truncate = options.delete(:truncate) || false
|
13
|
+
@logger = ::Logger.new(@io, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def length
|
17
|
+
@io.length
|
18
|
+
end
|
19
|
+
|
20
|
+
def truncate!
|
21
|
+
@io.truncate(@truncate) if @truncate && length > @truncate
|
22
|
+
end
|
23
|
+
|
24
|
+
# delegate to logger
|
25
|
+
def method_missing(meth, *args)
|
26
|
+
if @logger.respond_to?(meth)
|
27
|
+
returned = @logger.send(meth, *args)
|
28
|
+
truncate!
|
29
|
+
returned
|
30
|
+
else
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
data/lib/redisk/stat.rb
ADDED
@@ -0,0 +1,382 @@
|
|
1
|
+
# Redisk::Stat mimics File::Stat
|
2
|
+
# mostly accessed through Redisk::IO#stat
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module Redisk
|
6
|
+
class Stat
|
7
|
+
extend Helper
|
8
|
+
include Helper
|
9
|
+
include Comparable
|
10
|
+
|
11
|
+
attr_reader :name
|
12
|
+
|
13
|
+
def initialize(name)
|
14
|
+
@name = name
|
15
|
+
write_default('atime', Time.now)
|
16
|
+
write_default('ctime', Time.now)
|
17
|
+
write_default('mtime', Time.now)
|
18
|
+
write_default('size', 0)
|
19
|
+
end
|
20
|
+
|
21
|
+
# stat <=> other_stat => -1, 0, 1
|
22
|
+
# Compares File::Stat objects by comparing their respective modification times.
|
23
|
+
#
|
24
|
+
# f1 = File.new("f1", "w")
|
25
|
+
# sleep 1
|
26
|
+
# f2 = File.new("f2", "w")
|
27
|
+
# f1.stat <=> f2.stat #=> -1
|
28
|
+
def <=>(other_stat)
|
29
|
+
self.mtime <=> other_stat.mtime
|
30
|
+
end
|
31
|
+
|
32
|
+
# stat.atime => time
|
33
|
+
# Returns the last access time for this file as an object of class Time.
|
34
|
+
#
|
35
|
+
# File.stat("testfile").atime #=> Wed Dec 31 18:00:00 CST 1969
|
36
|
+
def atime
|
37
|
+
Time.parse(read_attribute('atime'))
|
38
|
+
end
|
39
|
+
|
40
|
+
# stat.blksize => integer or nil
|
41
|
+
# Returns the native file system‘s block size. Will return nil on platforms that don‘t support this information.
|
42
|
+
#
|
43
|
+
# File.stat("testfile").blksize #=> 4096
|
44
|
+
def blksize
|
45
|
+
0
|
46
|
+
end
|
47
|
+
|
48
|
+
# stat.blockdev? => true or false
|
49
|
+
# Returns true if the file is a block device, false if it isn‘t or if the operating system doesn‘t support this feature.
|
50
|
+
#
|
51
|
+
# File.stat("testfile").blockdev? #=> false
|
52
|
+
# File.stat("/dev/hda1").blockdev? #=> true
|
53
|
+
def blockdev?
|
54
|
+
false
|
55
|
+
end
|
56
|
+
|
57
|
+
# stat.blocks => integer or nil
|
58
|
+
# Returns the number of native file system blocks allocated for this file, or nil if the operating system doesn‘t support this feature.
|
59
|
+
#
|
60
|
+
# File.stat("testfile").blocks #=> 2
|
61
|
+
def blocks
|
62
|
+
0
|
63
|
+
end
|
64
|
+
|
65
|
+
# stat.chardev? => true or false
|
66
|
+
# Returns true if the file is a character device, false if it isn‘t or if the operating system doesn‘t support this feature.
|
67
|
+
#
|
68
|
+
# File.stat("/dev/tty").chardev? #=> true
|
69
|
+
def chardev?
|
70
|
+
false
|
71
|
+
end
|
72
|
+
|
73
|
+
# stat.ctime → aTime
|
74
|
+
# Returns the change time for stat (that is, the time directory information about the file was changed, not the file itself).
|
75
|
+
#
|
76
|
+
# File.stat("testfile").ctime #=> Wed Apr 09 08:53:14 CDT 2003
|
77
|
+
def ctime
|
78
|
+
Time.parse(read_attribute('ctime'))
|
79
|
+
end
|
80
|
+
|
81
|
+
# stat.dev => fixnum
|
82
|
+
# Returns an integer representing the device on which stat resides.
|
83
|
+
#
|
84
|
+
# File.stat("testfile").dev #=> 774
|
85
|
+
def dev
|
86
|
+
nil
|
87
|
+
end
|
88
|
+
|
89
|
+
# stat.dev_major => fixnum
|
90
|
+
# Returns the major part of File_Stat#dev or nil.
|
91
|
+
#
|
92
|
+
# File.stat("/dev/fd1").dev_major #=> 2
|
93
|
+
# File.stat("/dev/tty").dev_major #=> 5
|
94
|
+
def dev_major
|
95
|
+
0
|
96
|
+
end
|
97
|
+
|
98
|
+
# stat.dev_minor => fixnum
|
99
|
+
# Returns the minor part of File_Stat#dev or nil.
|
100
|
+
#
|
101
|
+
# File.stat("/dev/fd1").dev_minor #=> 1
|
102
|
+
# File.stat("/dev/tty").dev_minor #=> 0
|
103
|
+
def dev_minor
|
104
|
+
0
|
105
|
+
end
|
106
|
+
|
107
|
+
# stat.directory? => true or false
|
108
|
+
# Returns true if stat is a directory, false otherwise.
|
109
|
+
#
|
110
|
+
# File.stat("testfile").directory? #=> false
|
111
|
+
# File.stat(".").directory? #=> true
|
112
|
+
def directory?
|
113
|
+
false
|
114
|
+
end
|
115
|
+
|
116
|
+
# stat.executable? => true or false
|
117
|
+
# Returns true if stat is executable or if the operating system doesn‘t distinguish executable files from nonexecutable files. The tests are made using the effective owner of the process.
|
118
|
+
#
|
119
|
+
# File.stat("testfile").executable? #=> false
|
120
|
+
def executable?
|
121
|
+
false
|
122
|
+
end
|
123
|
+
|
124
|
+
# stat.executable_real? => true or false
|
125
|
+
# Same as executable?, but tests using the real owner of the process.
|
126
|
+
def executable_real?
|
127
|
+
false
|
128
|
+
end
|
129
|
+
|
130
|
+
# stat.file? => true or false
|
131
|
+
# Returns true if stat is a regular file (not a device file, pipe, socket, etc.).
|
132
|
+
#
|
133
|
+
# File.stat("testfile").file? #=> true
|
134
|
+
def file?
|
135
|
+
false
|
136
|
+
end
|
137
|
+
|
138
|
+
# stat.ftype => string
|
139
|
+
# Identifies the type of stat. The return string is one of: ``file’’, ``directory’’, ``characterSpecial’’, ``blockSpecial’’, ``fifo’’, ``link’’, ``socket’’, or ``unknown’’.
|
140
|
+
#
|
141
|
+
# File.stat("/dev/tty").ftype #=> "characterSpecial"
|
142
|
+
def ftype
|
143
|
+
'unknown'
|
144
|
+
end
|
145
|
+
|
146
|
+
# stat.gid => fixnum
|
147
|
+
# Returns the numeric group id of the owner of stat.
|
148
|
+
#
|
149
|
+
# File.stat("testfile").gid #=> 500
|
150
|
+
def gid
|
151
|
+
Process.gid
|
152
|
+
end
|
153
|
+
|
154
|
+
# stat.grpowned? => true or false
|
155
|
+
# Returns true if the effective group id of the process is the same as the group id of stat. On Windows NT, returns false.
|
156
|
+
#
|
157
|
+
# File.stat("testfile").grpowned? #=> true
|
158
|
+
# File.stat("/etc/passwd").grpowned? #=> false
|
159
|
+
def grpowned?
|
160
|
+
Process.grpowned?
|
161
|
+
end
|
162
|
+
|
163
|
+
# stat.ino => fixnum
|
164
|
+
# Returns the inode number for stat.
|
165
|
+
#
|
166
|
+
# File.stat("testfile").ino #=> 1083669
|
167
|
+
def ino
|
168
|
+
Process.ino
|
169
|
+
end
|
170
|
+
|
171
|
+
# stat.inspect => string
|
172
|
+
# Produce a nicely formatted description of stat.
|
173
|
+
#
|
174
|
+
# File.stat("/etc/passwd").inspect
|
175
|
+
# #=> "#<File::Stat dev=0xe000005, ino=1078078, mode=0100644,
|
176
|
+
# nlink=1, uid=0, gid=0, rdev=0x0, size=1374, blksize=4096,
|
177
|
+
# blocks=8, atime=Wed Dec 10 10:16:12 CST 2003,
|
178
|
+
# mtime=Fri Sep 12 15:41:41 CDT 2003,
|
179
|
+
# ctime=Mon Oct 27 11:20:27 CST 2003>"
|
180
|
+
def inspect
|
181
|
+
"#<Redis::Stat (#{name}) atime=#{atime}, ctime=#{ctime}, mtime=#{mtime}, size=#{size}"
|
182
|
+
end
|
183
|
+
alias :to_s :inspect
|
184
|
+
|
185
|
+
# stat.mode => fixnum
|
186
|
+
# Returns an integer representing the permission bits of stat. The meaning of the bits is platform dependent; on Unix systems, see stat(2).
|
187
|
+
#
|
188
|
+
# File.chmod(0644, "testfile") #=> 1
|
189
|
+
# s = File.stat("testfile")
|
190
|
+
# sprintf("%o", s.mode) #=> "100644"
|
191
|
+
def mode
|
192
|
+
Process.mode
|
193
|
+
end
|
194
|
+
|
195
|
+
# stat.mtime → aTime
|
196
|
+
# Returns the modification time of stat.
|
197
|
+
#
|
198
|
+
# File.stat("testfile").mtime #=> Wed Apr 09 08:53:14 CDT 2003
|
199
|
+
def mtime
|
200
|
+
Time.parse(read_attribute('mtime'))
|
201
|
+
end
|
202
|
+
|
203
|
+
# stat.nlink => fixnum
|
204
|
+
# Returns the number of hard links to stat.
|
205
|
+
#
|
206
|
+
# File.stat("testfile").nlink #=> 1
|
207
|
+
# File.link("testfile", "testfile.bak") #=> 0
|
208
|
+
# File.stat("testfile").nlink #=> 2
|
209
|
+
def nlink
|
210
|
+
0
|
211
|
+
end
|
212
|
+
|
213
|
+
# stat.owned? => true or false
|
214
|
+
# Returns true if the effective user id of the process is the same as the owner of stat.
|
215
|
+
#
|
216
|
+
# File.stat("testfile").owned? #=> true
|
217
|
+
# File.stat("/etc/passwd").owned? #=> false
|
218
|
+
def owned?
|
219
|
+
true
|
220
|
+
end
|
221
|
+
|
222
|
+
# stat.pipe? => true or false
|
223
|
+
# Returns true if the operating system supports pipes and stat is a pipe; false otherwise.
|
224
|
+
def pipe
|
225
|
+
false
|
226
|
+
end
|
227
|
+
|
228
|
+
# stat.rdev => fixnum or nil
|
229
|
+
# Returns an integer representing the device type on which stat resides. Returns nil if the operating system doesn‘t support this feature.
|
230
|
+
#
|
231
|
+
# File.stat("/dev/fd1").rdev #=> 513
|
232
|
+
# File.stat("/dev/tty").rdev #=> 1280
|
233
|
+
def rdev
|
234
|
+
0
|
235
|
+
end
|
236
|
+
|
237
|
+
# stat.rdev_major => fixnum
|
238
|
+
# Returns the major part of File_Stat#rdev or nil.
|
239
|
+
#
|
240
|
+
# File.stat("/dev/fd1").rdev_major #=> 2
|
241
|
+
# File.stat("/dev/tty").rdev_major #=> 5
|
242
|
+
def rdev_major
|
243
|
+
0
|
244
|
+
end
|
245
|
+
|
246
|
+
# stat.rdev_minor => fixnum
|
247
|
+
# Returns the minor part of File_Stat#rdev or nil.
|
248
|
+
#
|
249
|
+
# File.stat("/dev/fd1").rdev_minor #=> 1
|
250
|
+
# File.stat("/dev/tty").rdev_minor #=> 0
|
251
|
+
def rdev_minor
|
252
|
+
0
|
253
|
+
end
|
254
|
+
|
255
|
+
# stat.readable? => true or false
|
256
|
+
# Returns true if stat is readable by the effective user id of this process.
|
257
|
+
#
|
258
|
+
# File.stat("testfile").readable? #=> true
|
259
|
+
def readable?
|
260
|
+
true
|
261
|
+
end
|
262
|
+
|
263
|
+
# stat.readable_real? → true or false
|
264
|
+
# Returns true if stat is readable by the real user id of this process.
|
265
|
+
#
|
266
|
+
# File.stat("testfile").readable_real? #=> true
|
267
|
+
def readable_real?
|
268
|
+
true
|
269
|
+
end
|
270
|
+
|
271
|
+
# stat.setgid? => true or false
|
272
|
+
# Returns true if stat has the set-group-id permission bit set, false if it doesn‘t or if the operating system doesn‘t support this feature.
|
273
|
+
#
|
274
|
+
# File.stat("/usr/sbin/lpc").setgid? #=> true
|
275
|
+
def setgid?
|
276
|
+
Process.setgid?
|
277
|
+
end
|
278
|
+
|
279
|
+
# stat.setuid? => true or false
|
280
|
+
# Returns true if stat has the set-user-id permission bit set, false if it doesn‘t or if the operating system doesn‘t support this feature.
|
281
|
+
#
|
282
|
+
# File.stat("/bin/su").setuid? #=> true
|
283
|
+
def setuid?
|
284
|
+
Process.setuid?
|
285
|
+
end
|
286
|
+
|
287
|
+
# stat.size => fixnum
|
288
|
+
# Returns the size of stat in bytes.
|
289
|
+
#
|
290
|
+
# File.stat("testfile").size #=> 66
|
291
|
+
def size
|
292
|
+
read_attribute('size').to_i
|
293
|
+
end
|
294
|
+
|
295
|
+
# stat.socket? => true or false
|
296
|
+
# Returns true if stat is a socket, false if it isn‘t or if the operating system doesn‘t support this feature.
|
297
|
+
#
|
298
|
+
# File.stat("testfile").socket? #=> false
|
299
|
+
def socket
|
300
|
+
false
|
301
|
+
end
|
302
|
+
|
303
|
+
# stat.sticky? => true or false
|
304
|
+
# Returns true if stat has its sticky bit set, false if it doesn‘t or if the operating system doesn‘t support this feature.
|
305
|
+
#
|
306
|
+
# File.stat("testfile").sticky? #=> false
|
307
|
+
def sticky
|
308
|
+
false
|
309
|
+
end
|
310
|
+
|
311
|
+
# stat.symlink? => true or false
|
312
|
+
# Returns true if stat is a symbolic link, false if it isn‘t or if the operating system doesn‘t support this feature. As File::stat automatically follows symbolic links, symlink? will always be false for an object returned by File::stat.
|
313
|
+
#
|
314
|
+
# File.symlink("testfile", "alink") #=> 0
|
315
|
+
# File.stat("alink").symlink? #=> false
|
316
|
+
# File.lstat("alink").symlink? #=> true
|
317
|
+
def symlink?
|
318
|
+
false
|
319
|
+
end
|
320
|
+
|
321
|
+
|
322
|
+
# stat.uid => fixnum
|
323
|
+
# Returns the numeric user id of the owner of stat.
|
324
|
+
#
|
325
|
+
# File.stat("testfile").uid #=> 501
|
326
|
+
def uid
|
327
|
+
Process.uid
|
328
|
+
end
|
329
|
+
|
330
|
+
# stat.writable? → true or false
|
331
|
+
# Returns true if stat is writable by the effective user id of this process.
|
332
|
+
#
|
333
|
+
# File.stat("testfile").writable? #=> true
|
334
|
+
def writable?
|
335
|
+
true
|
336
|
+
end
|
337
|
+
|
338
|
+
# stat.writable_real? → true or false
|
339
|
+
# Returns true if stat is writable by the real user id of this process.
|
340
|
+
#
|
341
|
+
# File.stat("testfile").writable_real? #=> true
|
342
|
+
def writable_real?
|
343
|
+
true
|
344
|
+
end
|
345
|
+
|
346
|
+
# stat.zero? => true or false
|
347
|
+
# Returns true if stat is a zero-length file; false otherwise.
|
348
|
+
#
|
349
|
+
# File.stat("testfile").zero? #=> false
|
350
|
+
def zero?
|
351
|
+
size == 0
|
352
|
+
end
|
353
|
+
|
354
|
+
# redis specific
|
355
|
+
|
356
|
+
# reads the attribute from Redis or returns nil
|
357
|
+
def read_attribute(key)
|
358
|
+
write_attribute('atime', Time.now)
|
359
|
+
redis.get key_for_attribute(key)
|
360
|
+
end
|
361
|
+
|
362
|
+
# writes the attribute to redis as a string
|
363
|
+
def write_attribute(key, value)
|
364
|
+
redis.set key_for_attribute(key), value.to_s
|
365
|
+
redis.set key_for_attribute('ctime'), Time.now
|
366
|
+
value.to_s
|
367
|
+
end
|
368
|
+
|
369
|
+
# writes the default if this is the first time for this file
|
370
|
+
def write_default(key, value)
|
371
|
+
redis.setnx key_for_attribute(key), value.to_s
|
372
|
+
end
|
373
|
+
|
374
|
+
private
|
375
|
+
def key_for_attribute(key)
|
376
|
+
"#{name}:_stat:#{key}"
|
377
|
+
end
|
378
|
+
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
|
data/lib/redisk.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'redis/namespace'
|
3
|
+
require 'redisk/helper'
|
4
|
+
require 'redisk/stat'
|
5
|
+
require 'redisk/io'
|
6
|
+
require 'redisk/logger'
|
7
|
+
|
8
|
+
module Redisk
|
9
|
+
VERSION = '0.1.0'
|
10
|
+
|
11
|
+
extend self
|
12
|
+
|
13
|
+
# straight up lifted from from @defunkt's resque
|
14
|
+
# Accepts a 'hostname:port' string or a Redis server.
|
15
|
+
def redis=(server)
|
16
|
+
case server
|
17
|
+
when String
|
18
|
+
host, port = server.split(':')
|
19
|
+
redis = Redis.new(:host => host, :port => port, :thread_safe => true)
|
20
|
+
@redis = Redis::Namespace.new(:redisk, :redis => redis)
|
21
|
+
when Redis
|
22
|
+
@redis = Redis::Namespace.new(:redisk, :redis => server)
|
23
|
+
else
|
24
|
+
raise "I don't know what to do with #{server.inspect}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns the current Redis connection. If none has been created, will
|
29
|
+
# create a new one.
|
30
|
+
def redis
|
31
|
+
return @redis if @redis
|
32
|
+
self.redis = 'localhost:6379'
|
33
|
+
self.redis
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
data/redisk.gemspec
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{redisk}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Aaron Quint"]
|
12
|
+
s.date = %q{2009-12-17}
|
13
|
+
s.description = %q{Redisk includes Redisk::IO which is ~ Ruby's stdlib IO. It can be used with stdlib's Logger to log directly to redis}
|
14
|
+
s.email = %q{aaron@quirkey.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"lib/redisk.rb",
|
26
|
+
"lib/redisk/helper.rb",
|
27
|
+
"lib/redisk/io.rb",
|
28
|
+
"lib/redisk/logger.rb",
|
29
|
+
"lib/redisk/stat.rb",
|
30
|
+
"redisk.gemspec",
|
31
|
+
"spec/fixtures/rails.log",
|
32
|
+
"spec/redis-test.conf",
|
33
|
+
"spec/redisk_io_spec.rb",
|
34
|
+
"spec/redisk_logger_spec.rb",
|
35
|
+
"spec/redisk_stat_spec.rb",
|
36
|
+
"spec/spec.opts",
|
37
|
+
"spec/spec_helper.rb"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/quirkey/redis_log}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = %q{1.3.5}
|
43
|
+
s.summary = %q{An interface to Redis that mimic's Ruby's IO classes}
|
44
|
+
s.test_files = [
|
45
|
+
"spec/redisk_io_spec.rb",
|
46
|
+
"spec/redisk_logger_spec.rb",
|
47
|
+
"spec/redisk_stat_spec.rb",
|
48
|
+
"spec/spec_helper.rb"
|
49
|
+
]
|
50
|
+
|
51
|
+
if s.respond_to? :specification_version then
|
52
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_runtime_dependency(%q<redis>, [">= 0.1.1"])
|
57
|
+
s.add_runtime_dependency(%q<redis-namespace>, [">= 0.1.0"])
|
58
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
59
|
+
else
|
60
|
+
s.add_dependency(%q<redis>, [">= 0.1.1"])
|
61
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.1.0"])
|
62
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
63
|
+
end
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<redis>, [">= 0.1.1"])
|
66
|
+
s.add_dependency(%q<redis-namespace>, [">= 0.1.0"])
|
67
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,100 @@
|
|
1
|
+
Processing ArticlesController#new (for 0.0.0.0 at 2009-08-26 00:07:30) [GET]
|
2
|
+
Parameters: {"action"=>"new", "controller"=>"admin/articles"}
|
3
|
+
[4;35;1mUser Load (0.3ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) LIMIT 1[0m
|
4
|
+
[4;36;1mRole Load (0.4ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
5
|
+
[4;35;1mRole Load (0.3ms)[0m [0mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
6
|
+
[4;36;1mRole Load (0.2ms)[0m [0;1mSELECT * FROM `roles` WHERE (`roles`.`title` = 'author') LIMIT 1[0m
|
7
|
+
Rendering template within layouts/admin
|
8
|
+
Rendering admin/articles/new
|
9
|
+
Rendered admin/contents/_category_select_form (0.3ms)
|
10
|
+
Rendered admin/contents/_category_select (1.1ms)
|
11
|
+
[4;35;1mUser Load (0.5ms)[0m [0mSELECT * FROM `users` INNER JOIN `roles_users` ON (`users`.`id`=`roles_users`.`user_id`) WHERE ((`roles_users`.`role_id` = 1034934473)) [0m
|
12
|
+
Rendered admin/stored_files/_file_selector (0.3ms)
|
13
|
+
Rendered admin/stored_files/_file_selector (0.3ms)
|
14
|
+
Rendered admin/articles/_form (153.2ms)
|
15
|
+
[4;36;1mRole Load (0.5ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
16
|
+
Completed in 171ms (View: 165, DB: 3) | 200 OK [http://test.host/admin/articles/new]
|
17
|
+
[4;35;1mSQL (0.2ms)[0m [0mROLLBACK[0m
|
18
|
+
[4;36;1mSQL (0.1ms)[0m [0;1mBEGIN[0m
|
19
|
+
[4;35;1mArticle Load (0.3ms)[0m [0mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
20
|
+
[4;36;1mUser Load (0.2ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) [0m
|
21
|
+
|
22
|
+
|
23
|
+
Processing ArticlesController#new (for 0.0.0.0 at 2009-08-26 00:07:30) [GET]
|
24
|
+
Parameters: {"action"=>"new", "controller"=>"admin/articles"}
|
25
|
+
[4;35;1mUser Load (0.3ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) LIMIT 1[0m
|
26
|
+
[4;36;1mRole Load (0.4ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
27
|
+
[4;35;1mRole Load (0.2ms)[0m [0mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
28
|
+
[4;36;1mRole Load (0.2ms)[0m [0;1mSELECT * FROM `roles` WHERE (`roles`.`title` = 'author') LIMIT 1[0m
|
29
|
+
Rendering template within layouts/admin
|
30
|
+
Rendering admin/articles/new
|
31
|
+
Rendered admin/contents/_category_select_form (0.3ms)
|
32
|
+
Rendered admin/contents/_category_select (1.1ms)
|
33
|
+
[4;35;1mUser Load (0.4ms)[0m [0mSELECT * FROM `users` INNER JOIN `roles_users` ON (`users`.`id`=`roles_users`.`user_id`) WHERE ((`roles_users`.`role_id` = 1034934473)) [0m
|
34
|
+
Rendered admin/stored_files/_file_selector (0.4ms)
|
35
|
+
Rendered admin/stored_files/_file_selector (0.2ms)
|
36
|
+
Rendered admin/articles/_form (18.4ms)
|
37
|
+
[4;36;1mRole Load (0.5ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
38
|
+
Completed in 36ms (View: 30, DB: 3) | 200 OK [http://test.host/admin/articles/new]
|
39
|
+
[4;35;1mSQL (0.2ms)[0m [0mROLLBACK[0m
|
40
|
+
[4;36;1mSQL (0.1ms)[0m [0;1mBEGIN[0m
|
41
|
+
[4;35;1mArticle Load (0.3ms)[0m [0mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
42
|
+
[4;36;1mUser Load (0.2ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) [0m
|
43
|
+
|
44
|
+
|
45
|
+
Processing ArticlesController#new (for 0.0.0.0 at 2009-08-26 00:07:30) [GET]
|
46
|
+
Parameters: {"action"=>"new", "controller"=>"admin/articles"}
|
47
|
+
[4;35;1mUser Load (0.3ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) LIMIT 1[0m
|
48
|
+
[4;36;1mRole Load (0.4ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
49
|
+
[4;35;1mRole Load (0.4ms)[0m [0mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
50
|
+
[4;36;1mRole Load (0.2ms)[0m [0;1mSELECT * FROM `roles` WHERE (`roles`.`title` = 'author') LIMIT 1[0m
|
51
|
+
Rendering template within layouts/admin
|
52
|
+
Rendering admin/articles/new
|
53
|
+
Rendered admin/contents/_category_select_form (0.4ms)
|
54
|
+
Rendered admin/contents/_category_select (1.0ms)
|
55
|
+
[4;35;1mUser Load (0.4ms)[0m [0mSELECT * FROM `users` INNER JOIN `roles_users` ON (`users`.`id`=`roles_users`.`user_id`) WHERE ((`roles_users`.`role_id` = 1034934473)) [0m
|
56
|
+
Rendered admin/stored_files/_file_selector (0.4ms)
|
57
|
+
Rendered admin/stored_files/_file_selector (0.4ms)
|
58
|
+
Rendered admin/articles/_form (21.1ms)
|
59
|
+
[4;36;1mRole Load (0.5ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
60
|
+
Completed in 40ms (View: 32, DB: 3) | 200 OK [http://test.host/admin/articles/new]
|
61
|
+
[4;35;1mSQL (0.2ms)[0m [0mROLLBACK[0m
|
62
|
+
[4;36;1mSQL (0.1ms)[0m [0;1mBEGIN[0m
|
63
|
+
[4;35;1mArticle Load (0.3ms)[0m [0mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
64
|
+
[4;36;1mUser Load (0.2ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) [0m
|
65
|
+
|
66
|
+
|
67
|
+
Processing ArticlesController#new (for 0.0.0.0 at 2009-08-26 00:07:30) [GET]
|
68
|
+
Parameters: {"action"=>"new", "controller"=>"admin/articles"}
|
69
|
+
[4;35;1mUser Load (0.3ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) LIMIT 1[0m
|
70
|
+
[4;36;1mRole Load (0.3ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
71
|
+
[4;35;1mRole Load (0.2ms)[0m [0mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
72
|
+
[4;36;1mRole Load (0.1ms)[0m [0;1mSELECT * FROM `roles` WHERE (`roles`.`title` = 'author') LIMIT 1[0m
|
73
|
+
Rendering template within layouts/admin
|
74
|
+
Rendering admin/articles/new
|
75
|
+
Rendered admin/contents/_category_select_form (0.4ms)
|
76
|
+
Rendered admin/contents/_category_select (1.1ms)
|
77
|
+
[4;35;1mUser Load (0.4ms)[0m [0mSELECT * FROM `users` INNER JOIN `roles_users` ON (`users`.`id`=`roles_users`.`user_id`) WHERE ((`roles_users`.`role_id` = 1034934473)) [0m
|
78
|
+
Rendered admin/stored_files/_file_selector (0.3ms)
|
79
|
+
Rendered admin/stored_files/_file_selector (0.3ms)
|
80
|
+
Rendered admin/articles/_form (16.9ms)
|
81
|
+
[4;36;1mRole Load (0.5ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
82
|
+
Completed in 35ms (View: 29, DB: 3) | 200 OK [http://test.host/admin/articles/new]
|
83
|
+
[4;35;1mSQL (0.1ms)[0m [0mROLLBACK[0m
|
84
|
+
[4;36;1mSQL (0.1ms)[0m [0;1mBEGIN[0m
|
85
|
+
[4;35;1mArticle Load (0.3ms)[0m [0mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
86
|
+
[4;36;1mUser Load (0.2ms)[0m [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) [0m
|
87
|
+
|
88
|
+
|
89
|
+
Processing ArticlesController#show (for 0.0.0.0 at 2009-08-26 00:07:30) [GET]
|
90
|
+
Parameters: {"action"=>"show", "id"=>"1910336964", "controller"=>"admin/articles"}
|
91
|
+
[4;35;1mUser Load (0.4ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) LIMIT 1[0m
|
92
|
+
[4;36;1mRole Load (0.4ms)[0m [0;1mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
93
|
+
[4;35;1mRole Load (0.4ms)[0m [0mSELECT `roles`.* FROM `roles` INNER JOIN `roles_users` ON (`roles`.`id`=`roles_users`.`role_id`) WHERE (`roles`.`title` = 'admin') AND ((`roles_users`.`user_id` = 2129706640)) LIMIT 1[0m
|
94
|
+
[4;36;1mRole Load (0.2ms)[0m [0;1mSELECT * FROM `roles` WHERE (`roles`.`title` = 'author') LIMIT 1[0m
|
95
|
+
[4;35;1mArticle Load (0.3ms)[0m [0mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
96
|
+
Completed in 9ms (View: 2, DB: 2) | 200 OK [http://test.host/admin/articles/show/1910336964]
|
97
|
+
[4;36;1mSQL (0.1ms)[0m [0;1mROLLBACK[0m
|
98
|
+
[4;35;1mSQL (0.1ms)[0m [0mBEGIN[0m
|
99
|
+
[4;36;1mArticle Load (0.3ms)[0m [0;1mSELECT * FROM `articles` WHERE (`articles`.`id` = 1910336964) [0m
|
100
|
+
[4;35;1mUser Load (0.3ms)[0m [0mSELECT * FROM `users` WHERE (`users`.`id` = 2129706640) [0m
|