hipchat_searcher 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69cc10fd7c58d30a07200b217825b20c7b445a0b
4
- data.tar.gz: 4dc3f4a9387f9111ee4fb06362a750ad8e1ef00e
3
+ metadata.gz: 1fd098a01a0e50974e9e94aad6531217212b4f02
4
+ data.tar.gz: ff849519de62525a531f4705e0f4dcfe4c0c7f39
5
5
  SHA512:
6
- metadata.gz: 5118535bdbe1af759eb832d8bae11f94bc4f156110aab3086a0cf58440dcdef605fa3ab8629c1fbcbb0528962a125fb658e166d95863fd5467e97d40b3ec8982
7
- data.tar.gz: f5dbf4a436b03cbcc865d22e01ee7dbd030da587b75a0ab499bca5ab38b78a17b42b727b4983434e9ed722f5d4955d8156c7d63bb5b7a9825677bb6dd8c74750
6
+ metadata.gz: 88be4494c9f37e92b7668dcee89e9b57b106d788bf6b2d50c3ea967c5fb6d21140dff7ad5f9413cf69290677766b404b5c5a0f849e932bf81927a627dd682827
7
+ data.tar.gz: 2633cdb60c1494e9545048b0cc73031c647f876afa64bce65644c3c20043857752b6448db960ad4f285ed9a3ff042bdc3121dc312d3a37aeb819125a1d37088f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.0.3
2
+ ### Feature
3
+ * Enable to search option `-A`, `-B`, `-C`, such as `grep`
4
+
5
+ ### Bugfix
6
+ * Remove `#p` because `spec/lib/hipchat_searcher/searcher_spec.rb` was included
7
+
1
8
  # 0.0.2
2
9
  ### Feature
3
10
  * Enable to search Regexp on ignorecase.
data/README.md CHANGED
@@ -22,9 +22,11 @@ echo {access_token} > ~/.hps
22
22
 
23
23
  ## Usage
24
24
 
25
- `hipchat_searcher` search for a regular expression the words that you specify.
25
+ `hipchat_searcher` search for a regular expression the words that you specify.
26
+ In the specifications of the [hipchat api](https://www.hipchat.com/docs/apiv2/), `hipchat_searcher` search of the upcoming 100 comments.
26
27
 
27
28
  * Search the words in all room
29
+ * But it searches ALL the room that user know, so there may be heavy.
28
30
 
29
31
  ```
30
32
  hps word
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["mgi166"]
10
10
  spec.email = ["skskoari@gmail.com"]
11
11
  spec.summary = %q{Search hipchat log on terminal}
12
- spec.homepage = ""
12
+ spec.homepage = "https://github.com/mgi166/hipchat_searcher"
13
13
  spec.license = "MIT"
14
14
 
15
15
  spec.files = `git ls-files -z`.split("\x0")
@@ -24,7 +24,7 @@ module HipchatSearcher
24
24
 
25
25
  message = Message.new(@config.token, @options.message_options)
26
26
 
27
- rooms.inject([]) do |result, room|
27
+ rooms.each do |room|
28
28
  hist = message.history(room)
29
29
  Searcher.search(@pattern, hist, @options.search_options)
30
30
  end
@@ -11,7 +11,12 @@ module HipchatSearcher
11
11
  end
12
12
 
13
13
  def search_options
14
- user? ? { user: user } : {}
14
+ {}.tap do |o|
15
+ o.merge!(user: user) if user?
16
+ o.merge!(after_context: after_context) if after_context?
17
+ o.merge!(before_context: before_context) if before_context?
18
+ o.merge!(context: context) if context?
19
+ end
15
20
  end
16
21
 
17
22
  class << self
@@ -19,9 +24,12 @@ module HipchatSearcher
19
24
  # [shortname, longname, description]
20
25
  def with_value
21
26
  [
22
- ['r=', 'room=', 'Search only the log of the room that you specified'],
23
- ['u=', 'user=', 'Search only the log that specified user talk'],
24
- ['d=', 'date=', 'Search the log since specified date'],
27
+ ['r=', 'room=', 'Search only the log of the room that you specified'],
28
+ ['u=', 'user=', 'Search only the log that specified user talk'],
29
+ ['d=', 'date=', 'Search the log since specified date'],
30
+ ['A=', 'after_context=', 'Search the log that trails context after each match'],
31
+ ['B=', 'before_context=', 'Search the log that trails context before each match'],
32
+ ['C=', 'context=', 'Search the log that trails context surround each match'],
25
33
  ]
26
34
  end
27
35
 
@@ -2,40 +2,52 @@ require 'colorize'
2
2
 
3
3
  module HipchatSearcher
4
4
  class Searcher
5
- def initialize(result, options={})
5
+ def initialize(pattern, result, options={})
6
6
  @result = result
7
7
  @options = options
8
+ @pattern = Regexp.new(pattern, Regexp::IGNORECASE)
8
9
  @print_room = false
10
+ @print_item = {}
9
11
  end
10
12
 
11
13
  def self.search(pattern, result, options)
12
- new(result, options).search(pattern)
14
+ new(pattern, result, options).search
13
15
  end
14
16
 
15
- def contents(pattern, item)
16
- date = date(item)
17
- message = message(pattern, item)
17
+ def extended_items(index)
18
+ items[range(index)].map do |itm|
19
+ itm.extend(ItemExtention).tap do |i|
20
+ i.pattern = @pattern
21
+ end
22
+ end
23
+ end
18
24
 
19
- "%s\n%s\n\n" % [date, message]
25
+ def items
26
+ @items ||= @result.items
20
27
  end
21
28
 
22
- def puts_search_result(pattern, item)
23
- contents = contents(pattern, item)
29
+ def puts_search_result(item)
24
30
  if option_user?
25
- if @options[:user] == user_name(item)
26
- puts_contents(contents)
31
+ if @options[:user] == item.mention_name
32
+ puts_contents(item)
27
33
  end
28
34
  else
29
- puts_contents(contents)
35
+ puts_contents(item)
30
36
  end
31
37
  end
32
38
 
33
- def search(pattern)
34
- pattern = Regexp.new(pattern, Regexp::IGNORECASE)
35
-
36
- @result.items.each do |item|
37
- if pattern =~ item.message
38
- puts_search_result(pattern, item)
39
+ def search
40
+ items.each_with_index do |item, idx|
41
+ next unless @pattern =~ item.message
42
+
43
+ if option_search?
44
+ extended_items(idx).each do |itm|
45
+ puts_search_result(itm)
46
+ end
47
+ else
48
+ ext = item.extend(ItemExtention)
49
+ ext.pattern = @pattern
50
+ puts_search_result(ext)
39
51
  end
40
52
  end
41
53
 
@@ -44,17 +56,20 @@ module HipchatSearcher
44
56
 
45
57
  private
46
58
 
47
- def date(item)
48
- " Date: #{item.date}"
59
+ def option_after?
60
+ !!@options[:after_context]
49
61
  end
50
62
 
51
- def message(pattern, item)
52
- msg = item.message.gsub(pattern) do |matched|
53
- matched.colorize(:red)
54
- end
63
+ def option_before?
64
+ !!@options[:before_context]
65
+ end
55
66
 
56
- name = user_name(item)
57
- " @#{name}" + ': ' + msg
67
+ def option_context?
68
+ !!@options[:context]
69
+ end
70
+
71
+ def option_search?
72
+ option_after? || option_before? || option_context?
58
73
  end
59
74
 
60
75
  def option_user?
@@ -70,17 +85,65 @@ module HipchatSearcher
70
85
  puts room.underline
71
86
  end
72
87
 
73
- def puts_contents(contents)
88
+ def puts_contents(item)
74
89
  print_room? ? nil : puts_room
75
- puts contents
90
+ puts item.contents unless printed?(item.id)
91
+ end
92
+
93
+ def range(index)
94
+ param = []
95
+
96
+ case
97
+ when option_before?
98
+ _i = index - @options[:before_context].to_i
99
+ param = _i < 0 ? [0, index] : [_i, index]
100
+ when option_after?
101
+ _i = index + @options[:after_context].to_i
102
+ param = [index, _i]
103
+ when option_context?
104
+ _i = index - @options[:context].to_i
105
+ _j = index + @options[:context].to_i
106
+ param = _i < 0 ? [0, _j] : [_i, _j]
107
+ end
108
+
109
+ Range.new(*param)
76
110
  end
77
111
 
78
112
  def room
79
113
  @result.room
80
114
  end
81
115
 
82
- def user_name(item)
83
- item.from.mention_name rescue item.from
116
+ def printed?(id)
117
+ if @print_item.key?(id)
118
+ true
119
+ else
120
+ @print_item[id] = 1
121
+ false
122
+ end
123
+ end
124
+
125
+ module ItemExtention
126
+ attr_accessor :pattern
127
+
128
+ def contents
129
+ "%s\n%s\n\n" % [_date, _message]
130
+ end
131
+
132
+ def mention_name
133
+ self.from.mention_name rescue self.from
134
+ end
135
+
136
+ def _date
137
+ " Date: %s" % self.date
138
+ end
139
+
140
+ def _message
141
+ msg = self.message.gsub(pattern) do |matched|
142
+ matched.colorize(:red)
143
+ end
144
+
145
+ " @%s: %s" % [mention_name, msg]
146
+ end
84
147
  end
85
148
  end
86
149
  end
@@ -1,3 +1,3 @@
1
1
  module HipchatSearcher
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,67 @@
1
+ {
2
+ "items": [
3
+ {
4
+ "date": "2014-05-30T01:38:16.741565+00:00",
5
+ "from": {
6
+ "id": 12345,
7
+ "links": {"self": "https://api.hipchat.com/v2/user/12345"},
8
+ "mention_name": "jotaro",
9
+ "name": "Jotaro Kujo"
10
+ },
11
+ "id": "aaaa-bbbb-cccc",
12
+ "mentions": [],
13
+ "message": "yareyare daze"
14
+ },
15
+ {
16
+ "date": "2014-05-30T01:39:02.186319+00:00",
17
+ "from": {
18
+ "id": 23456,
19
+ "links": {"self": "https://api.hipchat.com/v2/user/23456"},
20
+ "mention_name": "noriaki",
21
+ "name": "Noriaki Kakyoin"
22
+ },
23
+ "id": "dddd-eeee-ffff",
24
+ "mentions": [],
25
+ "message": "rerorero"
26
+ },
27
+ {
28
+ "date": "2014-06-09T11:29:10.209014+00:00",
29
+ "from": {
30
+ "id": 34567,
31
+ "links": {"self": "https://api.hipchat.com/v2/user/34567"},
32
+ "mention_name": "polnareff",
33
+ "name": "Jean Pierre Polnareff"
34
+ },
35
+ "id": "gggg-hhhh-iiii",
36
+ "mentions": [],
37
+ "message": "a... arinomama ima okotta koto wo hanasu ze"
38
+ },
39
+ {
40
+ "date": "2014-06-10T08:36:09.281643+00:00",
41
+ "from": {
42
+ "id": 45678,
43
+ "links": {"self": "https://api.hipchat.com/v2/user/45678"},
44
+ "mention_name": "abdul",
45
+ "name": "mohamed abdul"
46
+ },
47
+ "id": "jjjj-kkkk-llll",
48
+ "mentions": [],
49
+ "message": "chirp chirp chirp"
50
+ },
51
+ {
52
+ "date": "2014-06-11T19:20:47.726182+00:00",
53
+ "from": {
54
+ "id": 34567,
55
+ "links": {"self": "https://api.hipchat.com/v2/user/34567"},
56
+ "mention_name": "lggy",
57
+ "name": "lggy"
58
+ },
59
+ "id": "mmmm-nnnn-oooo",
60
+ "mentions": [],
61
+ "message": "inu zuki no kodomo ha migoroshiniha dekine-ze"
62
+ }
63
+ ],
64
+ "links": {"self": "https://api.hipchat.com/v2/room/jojo-part3/history"},
65
+ "maxResults": 100,
66
+ "startIndex": 0
67
+ }
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe HipchatSearcher do
4
4
  it 'has a version number' do
5
- expect(HipchatSearcher::VERSION).not_to be '0.0.1'
5
+ HipchatSearcher::VERSION.should == '0.0.3'
6
6
  end
7
7
  end
@@ -1,20 +1,111 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe HipchatSearcher::Searcher do
4
- def searcher(result)
5
- described_class.new(result)
4
+ def searcher(pattern, result, options={})
5
+ described_class.new(pattern, result, options)
6
+ end
7
+
8
+ describe '#items' do
9
+ subject { searcher(pattern, result).items }
10
+
11
+ let(:pattern) { 'hoge' }
12
+ let(:result) do
13
+ response = File.read(File.join('spec', 'data', 'item-list.json'))
14
+ HipchatSearcher::Result.new(response)
15
+ end
16
+
17
+ it { should be_instance_of Array }
18
+
19
+ it 'should return array with Hashie::Mash objects' do
20
+ subject.first.should be_instance_of ::Hashie::Mash
21
+ subject.last.should be_instance_of ::Hashie::Mash
22
+ end
23
+ end
24
+
25
+ describe '#extended_items' do
26
+ describe 'you speciy :before_context option' do
27
+ context 'when specify the range is included in the array' do
28
+ subject { searcher(pattern, result, before_context: '3').extended_items(3) }
29
+
30
+ let(:pattern) { 'fuga' }
31
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
32
+
33
+ it 'should return the array of range to include index you specify' do
34
+ should == %w|1 2 3 4|
35
+ end
36
+ end
37
+
38
+ context 'when specify the range is exluded in the array' do
39
+ subject { searcher(pattern, result, before_context: '3').extended_items(1) }
40
+
41
+ let(:pattern) { 'fuga' }
42
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
43
+
44
+ it 'should return the array includes range until index from first' do
45
+ should == %w|1 2|
46
+ end
47
+ end
48
+ end
49
+
50
+ describe 'you specify :after_context option' do
51
+ context 'when specify the range is included in the array' do
52
+ subject { searcher(pattern, result, after_context: '3').extended_items(1) }
53
+
54
+ let(:pattern) { 'fuga' }
55
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
56
+
57
+ it 'should return the array of range to include index you specify' do
58
+ should == %w|2 3 4 5|
59
+ end
60
+ end
61
+
62
+ context 'when specify the range is exluded in the array' do
63
+ subject { searcher(pattern, result, after_context: '3').extended_items(4) }
64
+
65
+ let(:pattern) { 'fuga' }
66
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
67
+
68
+ it 'should return the array includes range until the end from index' do
69
+ should == %w|5 6|
70
+ end
71
+ end
72
+ end
73
+
74
+ describe 'you specify :context option' do
75
+ context 'when specify the range is included in the array' do
76
+ subject { searcher(pattern, result, context: '2').extended_items(3) }
77
+
78
+ let(:pattern) { 'fuga' }
79
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
80
+
81
+ it 'should return the array of range to surround index you specify' do
82
+ should == %w|2 3 4 5 6|
83
+ end
84
+ end
85
+
86
+ context 'when specify the range is exluded in the array' do
87
+ subject { searcher(pattern, result, context: '5').extended_items(3) }
88
+
89
+ let(:pattern) { 'fuga' }
90
+ let(:result) { double(:result, items: %w|1 2 3 4 5 6|) }
91
+
92
+ it 'should return the array includes range to surround as much as possible' do
93
+ should == %w|1 2 3 4 5 6|
94
+ end
95
+ end
96
+ end
6
97
  end
7
98
 
8
99
  describe '#search' do
9
100
  context 'when matches pattern in messages' do
10
- subject { searcher(result).search(pattern) }
101
+ subject { searcher(pattern, result).search }
11
102
 
12
103
  let(:pattern) { 'yare' }
13
- let(:response) { File.read(File.join('spec', 'data', 'item-list.json')) }
14
104
  let(:result) do
15
- r = HipchatSearcher::Result.new(response)
16
- r.room = "Joestars"
17
- r
105
+ response = File.read(File.join('spec', 'data', 'item-list.json'))
106
+ HipchatSearcher::Result.new(response).tap do |r|
107
+ r.room = "Joestars"
108
+ end
18
109
  end
19
110
  let(:search_result) do
20
111
  "\e[4;39;49mJoestars\e[0m" + "\n" + \
@@ -31,14 +122,14 @@ describe HipchatSearcher::Searcher do
31
122
  end
32
123
 
33
124
  context 'when matches pattern in many messages' do
34
- subject { searcher(result).search(pattern) }
125
+ subject { searcher(pattern, result).search }
35
126
 
36
127
  let(:pattern) { 'ze' }
37
- let(:response) { File.read(File.join('spec', 'data', 'item-list.json')) }
38
128
  let(:result) do
39
- r = HipchatSearcher::Result.new(response)
40
- r.room = "Joestars"
41
- r
129
+ response = File.read(File.join('spec', 'data', 'item-list.json'))
130
+ HipchatSearcher::Result.new(response).tap do |r|
131
+ r.room = "Joestars"
132
+ end
42
133
  end
43
134
  let(:search_result) do
44
135
  "\e[4;39;49mJoestars\e[0m" + "\n" + \
@@ -57,15 +148,140 @@ describe HipchatSearcher::Searcher do
57
148
  end
58
149
  end
59
150
 
151
+ context 'when search_option --before_context' do
152
+ subject { searcher(pattern, result, before_context: '1').search }
153
+
154
+ let(:pattern) { 'inu' }
155
+ let(:result) do
156
+ response = File.read(File.join('spec', 'data', 'item-list-with-overlap.json'))
157
+ HipchatSearcher::Result.new(response).tap do |r|
158
+ r.room = "Joestars"
159
+ end
160
+ end
161
+ let(:search_result) do
162
+ "\e[4;39;49mJoestars\e[0m" + "\n" + \
163
+ " Date: 2014-06-10T08:36:09.281643+00:00" + "\n" + \
164
+ " @abdul: chirp chirp chirp" + "\n" + \
165
+ "\n" + \
166
+ " Date: 2014-06-11T19:20:47.726182+00:00" + "\n" + \
167
+ " @lggy: \e[0;31;49minu\e[0m zuki no kodomo ha migoroshiniha dekine-ze" + "\n" + \
168
+ "\n"
169
+ end
170
+
171
+ it 'should print the matched message and after context' do
172
+ expect do
173
+ subject
174
+ end.to output(search_result).to_stdout
175
+ end
176
+ end
177
+
178
+ context 'when search_option --after_context' do
179
+ subject { searcher(pattern, result, after_context: '1').search }
180
+
181
+ let(:pattern) { 'rero' }
182
+ let(:result) do
183
+ response = File.read(File.join('spec', 'data', 'item-list-with-overlap.json'))
184
+ HipchatSearcher::Result.new(response).tap do |r|
185
+ r.room = "Joestars"
186
+ end
187
+ end
188
+ let(:search_result) do
189
+ "\e[4;39;49mJoestars\e[0m" + "\n" + \
190
+ " Date: 2014-05-30T01:39:02.186319+00:00" + "\n" + \
191
+ " @noriaki: \e[0;31;49mrero\e[0m\e[0;31;49mrero\e[0m" + "\n" + \
192
+ "\n" + \
193
+ " Date: 2014-06-09T11:29:10.209014+00:00" + "\n" + \
194
+ " @polnareff: a... arinomama ima okotta koto wo hanasu ze" + "\n" + \
195
+ "\n"
196
+ end
197
+
198
+ it 'should print the matched message and after context' do
199
+ expect do
200
+ subject
201
+ end.to output(search_result).to_stdout
202
+ end
203
+ end
204
+
205
+ context 'when search_option --context' do
206
+ subject { searcher(pattern, result, context: '2').search }
207
+
208
+ let(:pattern) { 'chirp' }
209
+ let(:result) do
210
+ response = File.read(File.join('spec', 'data', 'item-list-with-overlap.json'))
211
+ HipchatSearcher::Result.new(response).tap do |r|
212
+ r.room = "Joestars"
213
+ end
214
+ end
215
+ let(:search_result) do
216
+ "\e[4;39;49mJoestars\e[0m" + "\n" + \
217
+ " Date: 2014-05-30T01:39:02.186319+00:00" + "\n" + \
218
+ " @noriaki: rerorero" + "\n" + \
219
+ "\n" + \
220
+ " Date: 2014-06-09T11:29:10.209014+00:00" + "\n" + \
221
+ " @polnareff: a... arinomama ima okotta koto wo hanasu ze" + "\n" + \
222
+ "\n" + \
223
+ " Date: 2014-06-10T08:36:09.281643+00:00" + "\n" + \
224
+ " @abdul: \e[0;31;49mchirp\e[0m \e[0;31;49mchirp\e[0m \e[0;31;49mchirp\e[0m" + "\n" + \
225
+ "\n" + \
226
+ " Date: 2014-06-11T19:20:47.726182+00:00" + "\n" + \
227
+ " @lggy: inu zuki no kodomo ha migoroshiniha dekine-ze" + "\n" + \
228
+ "\n"
229
+ end
230
+
231
+ it 'should print the matched message and surround context' do
232
+ expect do
233
+ subject
234
+ end.to output(search_result).to_stdout
235
+ end
236
+ end
237
+
238
+ context 'when match result overlaped and specify search options' do
239
+ subject { searcher(pattern, result, after_context: '2').search }
240
+
241
+ let(:pattern) { 'ze' }
242
+ let(:result) do
243
+ response = File.read(File.join('spec', 'data', 'item-list-with-overlap.json'))
244
+ HipchatSearcher::Result.new(response).tap do |r|
245
+ r.room = "Joestars"
246
+ end
247
+ end
248
+ let(:search_result) do
249
+ "\e[4;39;49mJoestars\e[0m" + "\n" + \
250
+ " Date: 2014-05-30T01:38:16.741565+00:00" + "\n" + \
251
+ " @jotaro: yareyare da\e[0;31;49mze\e[0m" + "\n" + \
252
+ "\n" + \
253
+ " Date: 2014-05-30T01:39:02.186319+00:00" + "\n" + \
254
+ " @noriaki: rerorero" + "\n" + \
255
+ "\n" + \
256
+ " Date: 2014-06-09T11:29:10.209014+00:00" + "\n" + \
257
+ " @polnareff: a... arinomama ima okotta koto wo hanasu \e[0;31;49mze\e[0m" + "\n" + \
258
+ "\n" + \
259
+ " Date: 2014-06-10T08:36:09.281643+00:00" + "\n" + \
260
+ " @abdul: chirp chirp chirp" + "\n" + \
261
+ "\n" + \
262
+ " Date: 2014-06-11T19:20:47.726182+00:00" + "\n" + \
263
+ " @lggy: inu zuki no kodomo ha migoroshiniha dekine-\e[0;31;49mze\e[0m" + "\n" + \
264
+ "\n"
265
+ end
266
+
267
+ it 'should print the matched message without overlap' do
268
+ expect do
269
+ subject
270
+ end.to output(search_result).to_stdout
271
+ end
272
+ end
273
+
60
274
  context "when don't match pattern in messages" do
61
- subject { searcher(result).search(pattern) }
275
+ subject { searcher(pattern, result).search }
62
276
 
63
- let(:pattern) { 'abcd' }
64
- let(:result) { HipchatSearcher::Result.new(response) }
65
- let(:response) { File.read(File.join('spec', 'data', 'item-list.json')) }
277
+ let(:pattern) { 'abcd' }
278
+ let(:result) do
279
+ response = File.read(File.join('spec', 'data', 'item-list.json'))
280
+ HipchatSearcher::Result.new(response)
281
+ end
66
282
 
67
283
  it { should be_nil }
68
- p
284
+
69
285
  it 'should no output to stdout' do
70
286
  expect do
71
287
  subject
@@ -74,11 +290,13 @@ p
74
290
  end
75
291
 
76
292
  context "when pattern can't convert regexp" do
77
- subject { searcher(result).search(pattern) }
293
+ subject { searcher(pattern, result).search }
78
294
 
79
- let(:pattern) { nil }
80
- let(:result) { HipchatSearcher::Result.new(response) }
81
- let(:response) { File.read(File.join('spec', 'data', 'item-list.json')) }
295
+ let(:pattern) { nil }
296
+ let(:result) do
297
+ response = File.read(File.join('spec', 'data', 'item-list.json'))
298
+ HipchatSearcher::Result.new(response)
299
+ end
82
300
 
83
301
  it 'should raise exception' do
84
302
  expect do
@@ -89,14 +307,24 @@ p
89
307
  end
90
308
 
91
309
  describe '#puts_search_result' do
310
+ def extended_items(path, pattern)
311
+ hash = JSON.parse(File.read(path))
312
+ items = ::Hashie::Mash.new(hash).items
313
+ items.map do |itm|
314
+ itm.extend(HipchatSearcher::Searcher::ItemExtention).tap do |i|
315
+ i.pattern = Regexp.new(pattern)
316
+ end
317
+ end
318
+ end
319
+
92
320
  context 'when only person in room' do
93
- subject { searcher(double(:result, room: 'Joestars')).puts_search_result(pattern, item) }
321
+ subject { searcher(pattern, result).puts_search_result(item) }
94
322
 
95
- let(:pattern) { Regexp.new('yare') }
323
+ let(:pattern) { 'yare' }
324
+ let(:result) { double(:result, room: 'Joestars') }
96
325
  let(:item) do
97
- src = File.read(File.join('spec', 'data', 'item-list.json'))
98
- hash = JSON.parse(src)
99
- ::Hashie::Mash.new(hash).items.first
326
+ path = File.join('spec', 'data', 'item-list.json')
327
+ extended_items(path, pattern).first
100
328
  end
101
329
 
102
330
  let(:search_result) do
@@ -114,13 +342,13 @@ p
114
342
  end
115
343
 
116
344
  context 'when person and bot in room' do
117
- subject { searcher(double(:result, room: 'Joestars')).puts_search_result(pattern, item) }
345
+ subject { searcher(pattern, result).puts_search_result(item) }
118
346
 
119
- let(:pattern) { Regexp.new('mgi166') }
347
+ let(:pattern) { 'mgi166' }
348
+ let(:result) { double(:result, room: 'Joestars') }
120
349
  let(:item) do
121
- src = File.read(File.join('spec', 'data', 'item-list-with-bot.json'))
122
- hash = JSON.parse(src)
123
- ::Hashie::Mash.new(hash).items.first
350
+ path = File.join('spec', 'data', 'item-list-with-bot.json')
351
+ extended_items(path, pattern).first
124
352
  end
125
353
 
126
354
  let(:search_result) do
@@ -137,13 +365,13 @@ p
137
365
  end
138
366
 
139
367
  context "when user options specified but the user don't speak this message" do
140
- subject { described_class.new(double(:result, room: 'Joestars'), user: 'jotaro').puts_search_result(pattern, item) }
368
+ subject { searcher(pattern, result, user: 'jotaro').puts_search_result(item) }
141
369
 
142
- let(:pattern) { 'ze' }
370
+ let(:pattern) { 'ze' }
371
+ let(:result) { double(:result, room: 'Joestars') }
143
372
  let(:item) do
144
- src = File.read(File.join('spec', 'data', 'item-list.json'))
145
- hash = JSON.parse(src)
146
- ::Hashie::Mash.new(hash).items.last
373
+ path = File.join('spec', 'data', 'item-list.json')
374
+ extended_items(path, pattern).last
147
375
  end
148
376
 
149
377
  it 'should not print message' do
@@ -154,13 +382,13 @@ p
154
382
  end
155
383
 
156
384
  context "when user options specified and the user speak this message" do
157
- subject { described_class.new(double(:result, room: 'Joestars'), user: 'jotaro').puts_search_result(pattern, item) }
385
+ subject { searcher(pattern, result, user: 'jotaro').puts_search_result(item) }
158
386
 
159
- let(:pattern) { 'ze' }
387
+ let(:pattern) { 'ze' }
388
+ let(:result) { double(:result, room: 'Joestars') }
160
389
  let(:item) do
161
- src = File.read(File.join('spec', 'data', 'item-list.json'))
162
- hash = JSON.parse(src)
163
- ::Hashie::Mash.new(hash).items.first
390
+ path = File.join('spec', 'data', 'item-list.json')
391
+ extended_items(path, pattern).first
164
392
  end
165
393
 
166
394
  let(:search_result) do
@@ -177,21 +405,4 @@ p
177
405
  end
178
406
  end
179
407
  end
180
-
181
- describe '#contents' do
182
- subject { searcher(double(:result)).contents(pattern, item) }
183
-
184
- let(:pattern) { 'ze' }
185
- let(:item) do
186
- src = File.read(File.join('spec', 'data', 'item-list.json'))
187
- hash = JSON.parse(src)
188
- ::Hashie::Mash.new(hash).items.first
189
- end
190
-
191
- it 'should return string for search result contents' do
192
- should == " Date: 2014-05-30T01:38:16.741565+00:00" + "\n" + \
193
- " @jotaro: yareyare da\e[0;31;49mze\e[0m" + "\n" \
194
- "\n"
195
- end
196
- end
197
408
  end
data/spec/spec_helper.rb CHANGED
@@ -7,4 +7,7 @@ RSpec.configure do |config|
7
7
  config.order = :random
8
8
  config.filter_run :focus
9
9
  config.run_all_when_everything_filtered = true
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = [:should, :expect]
12
+ end
10
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hipchat_searcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - mgi166
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-25 00:00:00.000000000 Z
11
+ date: 2014-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hipchat
@@ -149,13 +149,14 @@ files:
149
149
  - lib/hipchat_searcher/searcher.rb
150
150
  - lib/hipchat_searcher/version.rb
151
151
  - spec/data/item-list-with-bot.json
152
+ - spec/data/item-list-with-overlap.json
152
153
  - spec/data/item-list.json
153
154
  - spec/data/room-list.txt
154
155
  - spec/hipchat_searcher_spec.rb
155
156
  - spec/lib/hipchat_searcher/result_spec.rb
156
157
  - spec/lib/hipchat_searcher/searcher_spec.rb
157
158
  - spec/spec_helper.rb
158
- homepage: ''
159
+ homepage: https://github.com/mgi166/hipchat_searcher
159
160
  licenses:
160
161
  - MIT
161
162
  metadata: {}
@@ -181,6 +182,7 @@ specification_version: 4
181
182
  summary: Search hipchat log on terminal
182
183
  test_files:
183
184
  - spec/data/item-list-with-bot.json
185
+ - spec/data/item-list-with-overlap.json
184
186
  - spec/data/item-list.json
185
187
  - spec/data/room-list.txt
186
188
  - spec/hipchat_searcher_spec.rb