cinch-logsearch 0.0.1 → 1.0.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/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -16,4 +16,11 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency 'rake'
21
+ gem.add_development_dependency 'rspec'
22
+ gem.add_development_dependency 'coveralls'
23
+ gem.add_development_dependency 'cinch-test'
24
+
25
+ gem.add_dependency 'cinch', '~> 2.0.0'
19
26
  end
@@ -1,44 +1,57 @@
1
+ require 'cinch'
2
+
1
3
  module Cinch::Plugins
2
4
  class LogSearch
3
5
  include Cinch::Plugin
4
6
 
5
7
  self.help = "Use .search <text> to search the logs. *Only works via private message*, limited to 5 results for now."
6
8
 
7
- match /search (.*)/
8
-
9
- def execute(m, search)
10
- # Don't listen to searches in channels. Reduce SPAM.
11
- return if m.channel?
9
+ match /search (.*)/, react_on: :private
12
10
 
13
- # However, make sure the user is in a channel with the bot
14
- chans = @bot.channels
15
- chans.delete_if { |chan| !chan.has_user?(m.user) }
16
- return if chans.empty?
17
-
18
- @max_results = config[:max_results] || 5
19
- @matches = []
11
+ def initialize(*args)
12
+ super
13
+ @max_results = config[:max_results] || 5
14
+ @log_directory = config[:logs_directory] || File.join('.', 'logs', '*.log')
15
+ end
20
16
 
21
- # Search the logs for the phrase, this is pretty simple.
22
- Dir[config[:log_path] || File.join('.', 'logs', '*.log')].sort.reverse.each do |file|
23
- @matches += File.open(file, 'r').grep(Regexp.new(search))
24
- # For the sake of sanity, stop looking once we find @max_results
25
- break if @matches.length > @max_results
26
- end
17
+ def execute(m, search)
18
+ return unless log_files_exist?
27
19
 
28
- # I hate new lines.
29
- @matches.map! { |msg| msg.chomp }
20
+ matches = search_for(search)
30
21
 
31
- if @matches.empty?
22
+ if matches.empty?
32
23
  m.user.msg "No matches found!"
33
24
  else
34
- msg = "Found #{@matches.count} matches"
35
- msg << "before giving up" if @matches.length > @max_results
36
- msg << ". Here's the last #{@max_results}:"
37
- m.user.msg msg
38
- @matches[-@max_results..-1].each do |match|
25
+ msg = ['Found', matches.count, 'matches before giving up,',
26
+ 'here\'s the most recent', @max_results]
27
+ m.user.msg msg.join(' ')
28
+ matches.reverse[0..(@max_results - 1)].reverse.each do |match|
39
29
  m.user.msg match
40
30
  end
41
31
  end
42
32
  end
33
+
34
+ private
35
+
36
+ def log_files_exist?
37
+ return true if File.exist?(@log_directory)
38
+ debug 'Log files not found!'
39
+ false
40
+ end
41
+
42
+ def search_for(search_term)
43
+ matches = []
44
+
45
+ # Search the logs for the phrase, this is pretty simple and kind of dumb.
46
+ # Probably make this smarter by using a real search algo at some point if people care.
47
+ Dir[@log_directory].sort.reverse.each do |file|
48
+ matches += File.open(file, 'r').grep(Regexp.new(search_term))
49
+ # For the sake of sanity, stop looking once we find @max_results
50
+ break if matches.length > @max_results
51
+ end
52
+
53
+ # I hate new lines.
54
+ matches.map(&:chomp)
55
+ end
43
56
  end
44
57
  end
@@ -1,7 +1,7 @@
1
1
  module Cinch
2
2
  module Plugins
3
3
  class LogSearch
4
- VERSION = "0.0.1"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,60 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ LOG = File.join('/tmp', 'cinch-testing.log')
5
+
6
+ describe Cinch::Plugins::LogSearch do
7
+ include Cinch::Test
8
+
9
+ before(:all) do
10
+ @bot = make_bot(Cinch::Plugins::LogSearch, { logs_directory: LOG })
11
+ build_logs
12
+ end
13
+
14
+ it 'should not find anything if no logs are present' do
15
+ get_replies(make_message(@bot, '!search foo'), :private).
16
+ first.text.should == "No matches found!"
17
+ end
18
+
19
+ it 'should not return any response when users search in channel' do
20
+ get_replies(make_message(@bot, '!search foo'), :channel).
21
+ should be_empty
22
+ end
23
+
24
+ it 'should let users search log files' do
25
+ get_replies(make_message(@bot, '!search movie'), :private).
26
+ first.text.should == "Found 1 matches before giving up, here's the most recent 5"
27
+ end
28
+
29
+ it 'should allow users to do complex searches' do
30
+ get_replies(make_message(@bot, '!search \sw.+\s'), :private).
31
+ first.text.should == "Found 3 matches before giving up, here's the most recent 5"
32
+ end
33
+ end
34
+
35
+ def build_logs
36
+ log = <<" EOF"
37
+ [2012-07-24 23:09:15] <Carnivor> Oh. Good. You timed out.
38
+ [2012-07-24 23:09:20] <feen> no
39
+ [2012-07-24 23:09:22] <feen> i got back home
40
+ [2012-07-24 23:09:31] <Carnivor> Oh. So you got that.
41
+ [2012-07-24 23:09:37] <Carnivor> Yay not having to resend.
42
+ [2012-07-24 23:10:05] <silveridea> oh god, i cant know this
43
+ [2012-07-24 23:10:12] <feen> sorry
44
+ [2012-07-24 23:10:12] <feen> ill stop
45
+ [2012-07-24 23:10:16] <silveridea> heh
46
+ [2012-07-24 23:10:20] <silveridea> i just wanted to quote mal
47
+ [2012-07-24 23:10:24] <feen> hahahahaha
48
+ [2012-07-24 23:10:30] <feen> i need to watch a good movie
49
+ [2012-07-24 23:10:35] <feen> OH SHIT I STILL HAVENT WATCHED TINKER TAILOR
50
+ [2012-07-24 23:10:37] <silveridea> heat
51
+ [2012-07-24 23:10:44] <silveridea> actually tinker tailor is pretty good
52
+ [2012-07-24 23:10:49] <silveridea> be prepared to pay attention
53
+ [2012-07-24 23:10:49] <feen> i've seen heat like
54
+ [2012-07-24 23:10:51] <feen> ten thousand times
55
+ [2012-07-24 23:11:27] <silveridea> well im going to attempt sleep
56
+ EOF
57
+ File.open(LOG, 'w') do |file|
58
+ file.write(log)
59
+ end
60
+ end
data/spec/secret.rb ADDED
@@ -0,0 +1,4 @@
1
+ ENV['CONSUMER_KEY'] = 'JX9aDzSNnzK2eZnUBVe5OQ'
2
+ ENV['CONSUMER_SECRET'] = 'H6J1yHlWbScTE0qCPnOQcatFFypHSYYy6oC6B5ogflU'
3
+ ENV['OAUTH_TOKEN'] = '1028981-26j3aDmrJKWUmfNjUHiF5tfaC64go551zk9fVHxtuk'
4
+ ENV['OAUTH_SECRET'] = 'fBooPZxuJHBLulw5IXAudIn61NFAD5sgCYxfOKnfI'
@@ -0,0 +1,12 @@
1
+ require 'coveralls'
2
+ require 'simplecov'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
9
+
10
+ require 'json'
11
+ require 'cinch-logsearch'
12
+ require 'cinch/test'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch-logsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,88 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-07 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-08-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: coveralls
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: cinch-test
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: cinch
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 2.0.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 2.0.0
14
94
  description: Cinch Plugin to search log files for users.
15
95
  email:
16
96
  - bhaberer@gmail.com
@@ -19,6 +99,7 @@ extensions: []
19
99
  extra_rdoc_files: []
20
100
  files:
21
101
  - .gitignore
102
+ - .travis.yml
22
103
  - Gemfile
23
104
  - LICENSE.txt
24
105
  - README.md
@@ -27,6 +108,9 @@ files:
27
108
  - lib/cinch-logsearch.rb
28
109
  - lib/cinch/plugins/logsearch/logsearch.rb
29
110
  - lib/cinch/plugins/logsearch/version.rb
111
+ - spec/cinch-logsearch_spec.rb
112
+ - spec/secret.rb
113
+ - spec/spec_helper.rb
30
114
  homepage: https://github.com/bhaberer/cinch-logsearch
31
115
  licenses: []
32
116
  post_install_message:
@@ -47,8 +131,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
131
  version: '0'
48
132
  requirements: []
49
133
  rubyforge_project:
50
- rubygems_version: 1.8.24
134
+ rubygems_version: 1.8.25
51
135
  signing_key:
52
136
  specification_version: 3
53
137
  summary: Cinch Plugin for searching irc logs.
54
- test_files: []
138
+ test_files:
139
+ - spec/cinch-logsearch_spec.rb
140
+ - spec/secret.rb
141
+ - spec/spec_helper.rb
142
+ has_rdoc: