nginx_utils 0.0.3 → 0.0.4

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.md CHANGED
@@ -24,7 +24,7 @@ Or install it yourself as:
24
24
  require 'nginx_utils'
25
25
  ```
26
26
 
27
- Nginx log rotate:
27
+ Logrotate:
28
28
 
29
29
  ```
30
30
  params = {
@@ -35,13 +35,33 @@ params = {
35
35
  target_logs: "*.log",
36
36
  prefix: Time.now.strftime("%Y%m%d%H%M%S"),
37
37
  retention: 90,
38
- pid_file: "/usr/local/nginx/logs/nginx.pid"
38
+ pid_file: "/usr/local/nginx/logs/nginx.pid"
39
39
  }
40
40
 
41
41
  rotate = NginxUtils::Logrotate.new(params)
42
42
  rotate.execute
43
43
  ```
44
44
 
45
+ Status:
46
+
47
+ ```
48
+ p NginxUtils::Status.get # => {active_connection: 1, accepts: 4, handled: 5, requests: 51, reading: 1, writing: 3, waiting: 2}
49
+ ```
50
+
51
+ Logreader:
52
+
53
+ ```
54
+ reader = NginxUtils::Logreader.new("/path/to/nginx/logs/access.log")
55
+ reader.each do |line|
56
+ p line # => {time: "2013-05-19T08:13:14+00:00", host: "192.168.1.10", ...}
57
+ end
58
+ ```
59
+
60
+ Options that can be specified:
61
+
62
+ * :format => :ltsv or :combined
63
+ * :parser => Parse with scan method. Specified in Regexp.
64
+
45
65
  ## Contributing
46
66
 
47
67
  1. Fork it
@@ -0,0 +1,63 @@
1
+ # coding: utf-8
2
+
3
+ module NginxUtils
4
+ class Logreader
5
+ include Enumerable
6
+
7
+ def initialize(log, options={})
8
+ @log = File.open(log, "r")
9
+
10
+ if options[:parser]
11
+ if options[:parser].is_a? Regexp
12
+ @format = :custom
13
+ @parser = options[:parser]
14
+ else
15
+ raise ArgumentError, "invalid argument"
16
+ end
17
+ else
18
+ @format = options[:format] || :ltsv
19
+ end
20
+ end
21
+
22
+ def each
23
+ @log.each do |line|
24
+ yield parse(line.chomp)
25
+ end
26
+ end
27
+
28
+ private
29
+ def parse(line)
30
+ case @format
31
+ when :ltsv then
32
+ row = line.split("\t").map do |f|
33
+ c = f.split(":")
34
+ if c == 2
35
+ [c[0].to_sym, c[1]]
36
+ else
37
+ [c[0].to_sym, c[1..-1].join(":")]
38
+ end
39
+ end
40
+ Hash[row]
41
+ when :combined then
42
+ if /([0-9.]+)\s-\s([^\s]+)\s\[(.*?)\]\s"(.*?)"\s([0-9]+)\s([0-9]+)\s"(.*?)"\s"(.*?)".*/ =~ line
43
+ {
44
+ remote_addr: $1,
45
+ remote_user: $2,
46
+ time_local: $3,
47
+ request: $4,
48
+ status: $5,
49
+ body_bytes_sent: $6,
50
+ http_referer: $7,
51
+ http_user_agent: $8
52
+ }
53
+ else
54
+ {unknown: line}
55
+ end
56
+ when :custom then
57
+ line.scan @parser
58
+ else
59
+ raise "format error"
60
+ end
61
+ end
62
+ end
63
+ end
@@ -2,7 +2,9 @@
2
2
 
3
3
  module NginxUtils
4
4
  class Logrotate
5
- attr_accessor :logger, :rename_logs, :delete_logs
5
+ attr_accessor :logger
6
+ attr_accessor :rename_logs
7
+ attr_accessor :delete_logs
6
8
 
7
9
  def initialize(options={})
8
10
  # Debug
@@ -134,22 +136,22 @@ module NginxUtils
134
136
  @logger.debug "Nginx restart command: #{cmd}" if @logger
135
137
  if @execute
136
138
  if system(cmd)
137
- @logger.info "Nginx restart is successfully!" if @logger
139
+ @logger.info "Nginx restart is successfully" if @logger
138
140
  else
139
- @logger.error "Nginx restart failed!" if @logger
140
- raise "Nginx restart failed!" if @logger == false
141
+ @logger.error "Nginx restart failed" if @logger
142
+ raise "Nginx restart failed" if @logger == false
141
143
  end
142
144
  end
143
145
  else
144
- @logger.warn "Pid file is not found. not restart nginx. (#{@pid_file})" if @logger
146
+ @logger.warn "Pid file is not found. Do not restart nginx. (#{@pid_file})" if @logger
145
147
  end
146
148
  end
147
149
 
148
150
  def execute
149
- @logger.info "Nginx logrotate is started!" if @logger
151
+ @logger.info "Execute Nginx logrotate" if @logger
150
152
  rename
151
153
  delete
152
- @logger.info "Nginx logrotate is successfully!" if @logger
154
+ @logger.info "Nginx logrotate is successfully" if @logger
153
155
  restart
154
156
  end
155
157
 
@@ -1,3 +1,3 @@
1
1
  module NginxUtils
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/nginx_utils.rb CHANGED
@@ -5,4 +5,5 @@ require "net/http"
5
5
 
6
6
  require "nginx_utils/version"
7
7
  require "nginx_utils/logrotate"
8
+ require "nginx_utils/logreader"
8
9
  require "nginx_utils/status"
@@ -0,0 +1,126 @@
1
+ # coding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe NginxUtils do
6
+ include FakeFS::SpecHelpers
7
+
8
+ def create_log(format)
9
+ log_dir = "/tmp"
10
+ FileUtils.mkdir_p log_dir
11
+
12
+ case format
13
+ when :ltsv then
14
+ line = "time:2013-05-19T08:13:14+00:00\thost:192.168.1.10\txff:-\tmethod:GET\tpath:/\tstatus:200\tua:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31\treq_size:124\treq_time:0.007\tres_size:239\tbody_size:11\tapp_time:-\n"
15
+ when :combined then
16
+ line = "192.168.1.10 - - [19/May/2013:23:14:04 +0900] \"GET / HTTP/1.1\" 200 239 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31\"\n"
17
+ else raise "format error"
18
+ end
19
+
20
+ File.open(File.join(log_dir, "access.log"), "w") do |f|
21
+ 3.times {f.write line}
22
+ end
23
+ end
24
+
25
+ before(:each) do
26
+ @log_file = "/tmp/access.log"
27
+ @parser = /([0-9.]+)\s-\s([^\s]+)\s\[(.*?)\]\s"(.*?)"\s([0-9]+)\s([0-9]+)\s"(.*?)"\s"(.*?)"\s"(.*)".*/
28
+ end
29
+
30
+ describe "Logreader" do
31
+ describe "#initialize" do
32
+ context "with default parameters" do
33
+ before(:each) do
34
+ create_log(:ltsv)
35
+ @reader = NginxUtils::Logreader.new(@log_file)
36
+ end
37
+
38
+ it "specified file should be opened" do
39
+ expect(@reader.instance_eval{@log}.path).to eq(@log_file)
40
+ end
41
+
42
+ it "default format should be ltsv" do
43
+ expect(@reader.instance_eval{@format}).to eq(:ltsv)
44
+ end
45
+
46
+ it "default parser should be nil" do
47
+ expect(@reader.instance_eval{@parser}).to eq(nil)
48
+ end
49
+ end
50
+
51
+ context "with custom parameters" do
52
+ before(:each) do
53
+ create_log(:combined)
54
+ end
55
+
56
+ it "format should be specified parameter" do
57
+ reader = NginxUtils::Logreader.new(@log_file, format: :combined)
58
+ expect(reader.instance_eval{@format}).to eq(:combined)
59
+ end
60
+
61
+ it "parser should be specified parameter" do
62
+ reader = NginxUtils::Logreader.new(@log_file, parser: @parser)
63
+ expect(reader.instance_eval{@parser}).to eq(@parser)
64
+ end
65
+
66
+ it "format should be :custom if specified parser" do
67
+ reader = NginxUtils::Logreader.new(@log_file, parser: @parser)
68
+ expect(reader.instance_eval{@format}).to eq(:custom)
69
+ end
70
+
71
+ it "should create exception if parser is not Regexp instance" do
72
+ expect(proc{NginxUtils::Logreader.new(@log_file, parser: "invalid parser")}).to raise_error("invalid argument")
73
+ end
74
+ end
75
+ end
76
+
77
+ describe "#each" do
78
+ context "with ltsv log" do
79
+ it "return ltsv hash" do
80
+ create_log(:ltsv)
81
+ reader = NginxUtils::Logreader.new(@log_file)
82
+ ltsv_hash = {
83
+ time: "2013-05-19T08:13:14+00:00",
84
+ host: "192.168.1.10",
85
+ xff:"-",
86
+ method: "GET",
87
+ path: "/",
88
+ status: "200",
89
+ ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31",
90
+ req_size: "124",
91
+ req_time: "0.007",
92
+ res_size: "239",
93
+ body_size: "11",
94
+ app_time: "-"
95
+ }
96
+ reader.each {|line| expect(line).to eq(ltsv_hash)}
97
+ end
98
+ end
99
+
100
+ context "with combined log" do
101
+ it "return combined hash" do
102
+ create_log(:combined)
103
+ reader = NginxUtils::Logreader.new(@log_file, format: :combined)
104
+ combined_hash = {
105
+ remote_addr: "192.168.1.10",
106
+ remote_user: "-",
107
+ time_local: "19/May/2013:23:14:04 +0900",
108
+ request: "GET / HTTP/1.1",
109
+ status: "200",
110
+ body_bytes_sent: "239",
111
+ http_referer: "-",
112
+ http_user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
113
+ }
114
+ reader.each {|line| expect(line).to eq(combined_hash)}
115
+ end
116
+
117
+ it "return unknown log if parse error" do
118
+ create_log(:combined)
119
+ File.open(@log_file, "w") {|f| f.write "unknown log"}
120
+ reader = NginxUtils::Logreader.new(@log_file, format: :combined)
121
+ reader.each {|line| expect(line).to eq({unknown: "unknown log"})}
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -5,21 +5,21 @@ require "spec_helper"
5
5
  describe NginxUtils do
6
6
  include FakeFS::SpecHelpers
7
7
 
8
- def create_files(options={retention: 90})
9
- root_dir = options[:root_dir] || "/usr/local/nginx/logs"
8
+ def create_files
9
+ root_dir = "/usr/local/nginx/logs"
10
10
  FileUtils.mkdir_p root_dir
11
- not_del = Time.now - ((options[:retention].to_i - 1) * 3600 * 24)
12
- do_del = Time.now - ((options[:retention].to_i + 1) * 3600 * 24)
11
+ FileUtils.mkdir_p "/tmp"
12
+ not_del = Time.now - (89 * 3600 * 24)
13
+ do_del = Time.now - (91 * 3600 * 24)
13
14
  not_del_file = "access.log.#{not_del.strftime('%Y%m%d%H%M%S')}"
14
15
  do_del_file = "access.log.#{do_del.strftime('%Y%m%d%H%M%S')}"
15
- files = [
16
+ [
16
17
  "access.log",
17
18
  "error.log",
18
19
  "nginx.pid",
19
20
  not_del_file,
20
21
  do_del_file
21
- ]
22
- files.each{|f| File.open(File.join(root_dir, f), "w").close}
22
+ ].each{|f| File.open(File.join(root_dir, f), "w").close}
23
23
  File.utime(not_del, not_del, File.join(root_dir, not_del_file))
24
24
  File.utime(do_del, do_del, File.join(root_dir, do_del_file))
25
25
  {
@@ -28,8 +28,12 @@ describe NginxUtils do
28
28
  }
29
29
  end
30
30
 
31
+ def log_lines
32
+ File.open("/tmp/nginx_rotate.log").read.split("\n")
33
+ end
34
+
31
35
  before(:each) do
32
- FileUtils.mkdir_p "/tmp"
36
+ @created = create_files
33
37
  @script_log = File.open("/tmp/nginx_rotate.log", "a")
34
38
  end
35
39
 
@@ -37,15 +41,11 @@ describe NginxUtils do
37
41
  describe "#initialize" do
38
42
  before(:each) do
39
43
  @time_now = Time.now
40
- Time.stub!(:now).and_return(@time_now)
44
+ Time.stub(:now).and_return(@time_now)
45
+ @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
41
46
  end
42
47
 
43
48
  context "with default params" do
44
- before(:each) do
45
- create_files
46
- @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
47
- end
48
-
49
49
  it "@execute should be true" do
50
50
  expect(@rotate.instance_eval{@execute}).to eq(true)
51
51
  end
@@ -154,7 +154,7 @@ describe NginxUtils do
154
154
  describe "#config" do
155
155
  before(:each) do
156
156
  @time_now = Time.now
157
- Time.stub!(:now).and_return(@time_now)
157
+ Time.stub(:now).and_return(@time_now)
158
158
  @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
159
159
  end
160
160
 
@@ -225,60 +225,49 @@ describe NginxUtils do
225
225
 
226
226
  describe "#rename" do
227
227
  before(:each) do
228
- create_files
229
- @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
228
+ @prefix = Time.now.strftime('%Y%m%d%H%M%S')
229
+ @rotate = NginxUtils::Logrotate.new(script_log: @script_log, prefix: @prefix)
230
230
  end
231
231
 
232
232
  it "rename target logs" do
233
- prefix = Time.now.strftime('%Y%m%d%H%M%S')
234
- @rotate.config prefix: prefix
235
233
  @rotate.rename
236
234
  @rotate.rename_logs.each do |log|
237
235
  expect(File.exists? log).to eq(false)
238
- expect(File.exists? "#{log}.#{prefix}").to eq(true)
236
+ expect(File.exists? "#{log}.#{@prefix}").to eq(true)
239
237
  end
240
238
  end
241
239
 
242
240
  it "output log file" do
243
241
  @rotate.rename
244
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
245
242
  expect(log_lines.size).to eq(@rotate.rename_logs.size)
243
+ expect(log_lines.select{|l| /Rename log file/ =~ l}.size).to eq(@rotate.rename_logs.size)
246
244
  end
247
245
 
248
246
  it "do not rename if a file with the same name exists" do
249
- prefix = Time.now.strftime('%Y%m%d%H%M%S')
250
- @rotate.config prefix: prefix
251
- File.open("#{@rotate.rename_logs.first}.#{prefix}", "w").close
247
+ File.open("#{@rotate.rename_logs.first}.#{@prefix}", "w").close
252
248
  @rotate.rename
253
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
254
249
  expect(File.exists? @rotate.rename_logs.first).to eq(true)
255
250
  expect(log_lines.select{|line| /File already exists/ =~ line}.size).to eq(1)
256
251
  end
257
252
 
258
253
  it "do not rename if not executable" do
259
- prefix = Time.now.strftime('%Y%m%d%H%M%S')
260
- @rotate.config debug: true, script_log: false, prefix: prefix
254
+ @rotate.config debug: true, script_log: false
261
255
  @rotate.rename
262
256
  @rotate.rename_logs.each do |log|
263
257
  expect(File.exists? log).to eq(true)
264
- expect(File.exists? "#{log}.#{prefix}").to eq(false)
258
+ expect(File.exists? "#{log}.#{@prefix}").to eq(false)
265
259
  end
266
260
  end
267
261
 
268
262
  it "do not output log if script_log is false" do
269
263
  @rotate.config script_log: false
270
264
  @rotate.rename
271
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
272
265
  expect(log_lines.size).to eq(0)
273
266
  end
274
267
  end
275
268
 
276
269
  describe "#delete" do
277
270
  before(:each) do
278
- @time_now = Time.now
279
- Time.stub!(:now).and_return(@time_now)
280
- @retention = @time_now - (90 * 3600 * 24)
281
- @created = create_files
282
271
  @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
283
272
  end
284
273
 
@@ -290,89 +279,101 @@ describe NginxUtils do
290
279
 
291
280
  it "output log file" do
292
281
  @rotate.delete
293
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
294
282
  expect(log_lines.size).to eq(1)
295
283
  end
296
284
 
297
285
  it "do not delete if not executable" do
286
+ File.should_not_receive(:unlink)
298
287
  @rotate.config debug: true, script_log: false
299
288
  @rotate.delete
300
- expect(File.exists? @created[:do_del_file]).to eq(true)
301
289
  end
302
290
 
303
291
  it "do not output log if script_log is false" do
304
292
  @rotate.config script_log: false
305
293
  @rotate.delete
306
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
307
294
  expect(log_lines.size).to eq(0)
308
295
  end
309
296
  end
310
297
 
311
298
  describe "#restart" do
312
299
  before(:each) do
313
- @command = "kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`"
314
- create_files
300
+ Object.any_instance.stub(:system).and_return(true)
315
301
  @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
316
302
  end
317
303
 
318
304
  it "should execute command" do
319
- Object.any_instance.should_receive(:system).with(@command).and_return(true)
305
+ Object.any_instance.should_receive(:system).and_return(true)
306
+ @rotate.restart
307
+ end
308
+
309
+ it "output success log" do
320
310
  @rotate.restart
321
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
322
- expect(log_lines.select{|line| /Nginx restart is successfully!/ =~ line}.size).to eq(1)
311
+ expect(log_lines.select{|l| /Nginx restart command/ =~ l}.size).to eq(1)
312
+ expect(log_lines.select{|l| /Nginx restart is successfully/ =~ l}.size).to eq(1)
323
313
  end
324
314
 
325
315
  it "do not execute command if not exists pid file" do
326
- File.stub!(:exists?).and_return(false)
316
+ Object.any_instance.should_not_receive(:system)
317
+ File.stub(:exists?).and_return(false)
327
318
  @rotate.restart
328
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
329
- expect(log_lines.select{|line| /Pid file is not found/ =~ line}.size).to eq(1)
319
+ end
320
+
321
+ it "should output log if not exists pid file" do
322
+ File.stub(:exists?).and_return(false)
323
+ @rotate.restart
324
+ expect(log_lines.select{|l| /Pid file is not found/ =~ l}.size).to eq(1)
330
325
  end
331
326
 
332
327
  it "do not execute commando if not executable" do
333
- @rotate.config debug: true, script_log: @script_log
328
+ Object.any_instance.should_not_receive(:system)
329
+ @rotate.config debug: true, script_log: false
334
330
  @rotate.restart
335
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
336
- expect(log_lines.size).to eq(1)
337
331
  end
338
332
 
339
333
  it "should outputs error log if it fails" do
340
- Object.any_instance.should_receive(:system).with(@command).and_return(false)
334
+ Object.any_instance.should_receive(:system).and_return(false)
341
335
  @rotate.restart
342
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
343
- expect(log_lines.select{|line| /Nginx restart failed!/ =~ line}.size).to eq(1)
336
+ expect(log_lines.select{|l| /Nginx restart failed/ =~ l}.size).to eq(1)
344
337
  end
345
338
 
346
339
  it "should generate an exception if it fails" do
340
+ Object.any_instance.should_receive(:system).and_return(false)
347
341
  @rotate.config script_log: false
348
- Object.any_instance.should_receive(:system).with(@command).and_return(false)
349
- expect(proc{@rotate.restart}).to raise_error
342
+ expect(proc{@rotate.restart}).to raise_error("Nginx restart failed")
343
+ end
344
+
345
+ it "do not output log if script_log is false" do
346
+ @rotate.config script_log: false
347
+ @rotate.restart
348
+ expect(log_lines.size).to eq(0)
350
349
  end
351
350
  end
352
351
 
353
352
  describe "#execute" do
354
353
  before(:each) do
355
- NginxUtils::Logrotate.any_instance.should_receive(:rename).and_return(true)
356
- NginxUtils::Logrotate.any_instance.should_receive(:delete).and_return(true)
357
- NginxUtils::Logrotate.any_instance.should_receive(:restart).and_return(true)
358
- create_files
354
+ NginxUtils::Logrotate.any_instance.stub(:rename).and_return(true)
355
+ NginxUtils::Logrotate.any_instance.stub(:delete).and_return(true)
356
+ NginxUtils::Logrotate.any_instance.stub(:restart).and_return(true)
359
357
  @rotate = NginxUtils::Logrotate.new(script_log: @script_log)
360
358
  end
361
359
 
362
- it "should call methods" do
360
+ it "should call rename and delete and restart methods" do
361
+ NginxUtils::Logrotate.any_instance.should_receive(:rename).and_return(true)
362
+ NginxUtils::Logrotate.any_instance.should_receive(:delete).and_return(true)
363
+ NginxUtils::Logrotate.any_instance.should_receive(:restart).and_return(true)
363
364
  @rotate.execute
364
365
  end
365
366
 
366
367
  it "output log file" do
367
368
  @rotate.execute
368
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
369
+ expect(log_lines.select{|l| /Execute Nginx logrotate/ =~ l}.size).to eq(1)
370
+ expect(log_lines.select{|l| /Nginx logrotate is successfully/ =~ l}.size).to eq(1)
369
371
  expect(log_lines.size).to eq(2)
370
372
  end
371
373
 
372
374
  it "do not output log if script_log is false" do
373
375
  @rotate.config script_log: false
374
376
  @rotate.execute
375
- log_lines = File.open("/tmp/nginx_rotate.log").read.split("\n")
376
377
  expect(log_lines.size).to eq(0)
377
378
  end
378
379
  end
@@ -8,14 +8,14 @@ describe NginxUtils do
8
8
  it "should get status" do
9
9
  body = "Active connections: 1 \nserver accepts handled requests\n 4 5 51 \nReading: 1 Writing: 3 Waiting: 2 \n"
10
10
  status = {active_connection: 1, accepts: 4, handled: 5, requests: 51, reading: 1, writing: 3, waiting: 2}
11
- response = OpenStruct.new(body: body)
11
+ response = double("http response mock", body: body)
12
12
  Net::HTTP.should_receive(:start).and_return(response)
13
13
  expect(NginxUtils::Status.get).to eq(status)
14
14
  end
15
15
 
16
16
  it "should generate an exception if status get fails" do
17
- res = OpenStruct.new(body: "invalid content")
18
- Net::HTTP.should_receive(:start).and_return(res)
17
+ response = double("http response mock", body: "invalid content")
18
+ Net::HTTP.should_receive(:start).and_return(response)
19
19
  expect(proc{NginxUtils::Status.get}).to raise_error("Nginx status get failed")
20
20
  end
21
21
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,2 @@
1
1
  require "fakefs/spec_helpers"
2
- require "ostruct"
3
2
  require "nginx_utils"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nginx_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-19 00:00:00.000000000 Z
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -89,10 +89,12 @@ files:
89
89
  - README.md
90
90
  - Rakefile
91
91
  - lib/nginx_utils.rb
92
+ - lib/nginx_utils/logreader.rb
92
93
  - lib/nginx_utils/logrotate.rb
93
94
  - lib/nginx_utils/status.rb
94
95
  - lib/nginx_utils/version.rb
95
96
  - nginx_utils.gemspec
97
+ - spec/nginx_utils/logreader_spec.rb
96
98
  - spec/nginx_utils/logrotate_spec.rb
97
99
  - spec/nginx_utils/status_spec.rb
98
100
  - spec/spec_helper.rb
@@ -111,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
113
  version: '0'
112
114
  segments:
113
115
  - 0
114
- hash: 17147575815869233
116
+ hash: -10429621290292328
115
117
  required_rubygems_version: !ruby/object:Gem::Requirement
116
118
  none: false
117
119
  requirements:
@@ -120,14 +122,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
122
  version: '0'
121
123
  segments:
122
124
  - 0
123
- hash: 17147575815869233
125
+ hash: -10429621290292328
124
126
  requirements: []
125
127
  rubyforge_project:
126
- rubygems_version: 1.8.23
128
+ rubygems_version: 1.8.25
127
129
  signing_key:
128
130
  specification_version: 3
129
131
  summary: Nginx utilities
130
132
  test_files:
133
+ - spec/nginx_utils/logreader_spec.rb
131
134
  - spec/nginx_utils/logrotate_spec.rb
132
135
  - spec/nginx_utils/status_spec.rb
133
136
  - spec/spec_helper.rb