textrazor 0.0.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,16 +6,20 @@ module TextRazor
6
6
 
7
7
  context "#create_from_hash" do
8
8
 
9
- it "should create a new instance" do
10
- phrase_hash = {"id" => 1, "wordPositions" => [0, 1, 2]}
11
- words = [
9
+ let(:phrase_hash) do
10
+ {"id" => 1, "wordPositions" => [0, 1, 2]}
11
+ end
12
+
13
+ let(:words) do
14
+ [
12
15
  OpenStruct.new(token: 'Word1'),
13
16
  OpenStruct.new(token: 'Word2'),
14
17
  OpenStruct.new(token: 'Word3')
15
18
  ]
19
+ end
16
20
 
21
+ it "should create a new instance" do
17
22
  phrase = Phrase.create_from_hash(phrase_hash, words)
18
-
19
23
  expect(phrase.id).to eq(1)
20
24
  end
21
25
 
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ module TextRazor
4
+
5
+ describe Property do
6
+
7
+ context "#create_from_hash" do
8
+ let(:property_hash) do
9
+ {
10
+ id: 1,
11
+ wordPositions: [9, 11, 12],
12
+ propertyPositions: [10]
13
+ }
14
+ end
15
+
16
+ let(:property) do
17
+ Property.create_from_hash(property_hash)
18
+ end
19
+
20
+ it "should create a new instance" do
21
+ expect(property.id).to eq(1)
22
+ expect(property.word_positions).to eq([9,11,12])
23
+ expect(property.property_positions).to eq([10])
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ module TextRazor
4
+
5
+ describe RelationParam do
6
+
7
+ context "#create_from_hash" do
8
+ let(:relation_param_hash) do
9
+ {
10
+ relation: "SUBJECT",
11
+ wordPositions: [18, 19, 20, 21]
12
+ }
13
+ end
14
+
15
+ let(:relation_param) do
16
+ RelationParam.create_from_hash(relation_param_hash)
17
+ end
18
+
19
+ it "should create a new instance" do
20
+ expect(relation_param.relation).to eq 'SUBJECT'
21
+ expect(relation_param.word_positions).to eq [18, 19, 20, 21]
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module TextRazor
4
+
5
+ describe Relation do
6
+
7
+ context "#create_from_hash" do
8
+ let(:relation_hash) do
9
+ {
10
+ id: 0,
11
+ wordPositions: [1, 6],
12
+ params: [{
13
+ relation: "SUBJECT",
14
+ wordPositions: [18, 19, 20, 21]
15
+ },
16
+ {
17
+ relation: "OBJECT",
18
+ wordPositions: [2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
19
+ }]
20
+ }
21
+ end
22
+
23
+ let(:relation) do
24
+ Relation.create_from_hash(relation_hash)
25
+ end
26
+
27
+ it "should create a new instance" do
28
+ expect(relation.number_of_relation_params).to eq 2
29
+ expect(relation.word_positions).to eq [1, 6]
30
+ expect(relation.relation_params.first).to be_instance_of RelationParam
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -57,13 +57,16 @@ module TextRazor
57
57
  context "custom options" do
58
58
 
59
59
  it "should make correct calls" do
60
- options = {api_key: 'api_key', extractors: %w(entities topics words), cleanup_html: true,
61
- language: 'fre', filter_dbpedia_types: %w(type1), filter_freebase_types: %w(type2)}
60
+ options = {api_key: 'api_key', extractors: %w(entities topics words), cleanup_mode: 'raw',
61
+ cleanup_return_cleaned: true, cleanup_return_raw: true, language: 'fre',
62
+ filter_dbpedia_types: %w(type1), filter_freebase_types: %w(type2), allow_overlap: false,
63
+ enrichment_queries: 'queries'}
62
64
 
63
65
  expect(::RestClient).to receive(:post).
64
66
  with("https://api.textrazor.com/", { "text" => 'text', "apiKey" => 'api_key', "extractors" => "entities,topics,words",
65
- "cleanupHTML" => true, "languageOverride" => 'fre', "entities.filterDbpediaTypes" => "type1",
66
- "entities.filterFreebaseTypes" => "type2" },
67
+ "cleanup.mode" => "raw", "cleanup.returnCleaned" => true, "cleanup.returnRaw" => true, "languageOverride" => 'fre',
68
+ "entities.filterDbpediaTypes" => "type1", "entities.filterFreebaseTypes" => "type2" , "entities.allowOverlap" => false,
69
+ "entities.enrichmentQueries" => "queries"},
67
70
  accept_encoding: 'gzip')
68
71
 
69
72
  Request.post('text', options)
@@ -4,7 +4,15 @@ module TextRazor
4
4
 
5
5
  describe Response do
6
6
 
7
- context "#initialize" do
7
+ let(:http_response) do
8
+ ::OpenStruct.new(code: 200, body: body)
9
+ end
10
+
11
+ let(:response) do
12
+ Response.new(http_response)
13
+ end
14
+
15
+ describe "#initialize" do
8
16
 
9
17
  context "when HTTP response code is 200" do
10
18
 
@@ -13,8 +21,8 @@ module TextRazor
13
21
  http_response = ::OpenStruct.new code: 200, body: body
14
22
 
15
23
  expect(JSON).to receive(:parse).
16
- with(body).
17
- and_return({"response"=>"{}"})
24
+ with(body, {symbolize_names: true}).
25
+ and_return({"response" => "{}"})
18
26
 
19
27
  Response.new(http_response)
20
28
  end
@@ -56,17 +64,191 @@ module TextRazor
56
64
 
57
65
  end
58
66
 
59
- context "#topics" do
67
+ describe '#time' do
60
68
 
61
- context "if there are topics returned from api" do
69
+ it 'returns time taken to process request' do
70
+ body = {time: "0.013219"}.to_json
71
+ http_response = ::OpenStruct.new code: 200, body: body
72
+ response = Response.new(http_response)
62
73
 
63
- it "should return topics" do
64
- body = "\n {\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true,\"topics\":[{\"id\":0,\"label\":\"Airlines \",\"wikiLink\":\"http://en.wikipedia.org/Category:Airlines_by_country\",\"score\":0.199069},{\"id\":1,\"label\":\"Companies \",\"wikiLink\":\"http://en.wikipedia.org/Category:Companies_by_year_of_establishment\",\"score\":0.136068}]}} \n"
74
+ time = response.time
75
+
76
+ expect(time).to eq(0.013219)
77
+ end
78
+
79
+ end
80
+
81
+ describe '#ok?' do
82
+
83
+ context 'when successfully analysed' do
65
84
 
85
+ it 'returns true' do
86
+ body = {ok: true}.to_json
66
87
  http_response = ::OpenStruct.new code: 200, body: body
88
+ response = Response.new(http_response)
89
+
90
+ expect(response).to be_ok
91
+ end
92
+
93
+ end
94
+
95
+ context 'when unsuccessfully analysed' do
67
96
 
97
+ it 'returns false' do
98
+ body = {ok: false}.to_json
99
+ http_response = ::OpenStruct.new code: 200, body: body
68
100
  response = Response.new(http_response)
69
101
 
102
+ expect(response).to_not be_ok
103
+ end
104
+
105
+ end
106
+
107
+ end
108
+
109
+ describe '#custom_annotation_output' do
110
+
111
+ it 'returns raw text' do
112
+ body = {
113
+ response: {
114
+ customAnnotationOutput: 'custom annotation output'
115
+ }
116
+ }.to_json
117
+
118
+ http_response = ::OpenStruct.new code: 200, body: body
119
+ response = Response.new(http_response)
120
+
121
+ expect(response.custom_annotation_output).to eq 'custom annotation output'
122
+ end
123
+
124
+ end
125
+
126
+ describe '#cleaned_text' do
127
+
128
+ it 'returns cleaned text' do
129
+ body = {
130
+ response: {
131
+ cleanedText: 'cleaned text'
132
+ }
133
+ }.to_json
134
+
135
+ http_response = ::OpenStruct.new code: 200, body: body
136
+ response = Response.new(http_response)
137
+
138
+ expect(response.cleaned_text).to eq 'cleaned text'
139
+ end
140
+
141
+ end
142
+
143
+ describe '#raw_text' do
144
+
145
+ it 'returns raw text' do
146
+ body = {
147
+ response:{
148
+ rawText: 'raw text'
149
+ }
150
+ }.to_json
151
+
152
+ http_response = ::OpenStruct.new code: 200, body: body
153
+ response = Response.new(http_response)
154
+
155
+ expect(response.raw_text).to eq 'raw text'
156
+ end
157
+
158
+ end
159
+
160
+ describe 'entailments' do
161
+
162
+ let(:http_response) { ::OpenStruct.new(code: 200, body: body) }
163
+ let(:response) { Response.new(http_response) }
164
+
165
+ context 'when response has entailments' do
166
+
167
+ let(:body) {
168
+ {
169
+ "time"=>"0.013219",
170
+ "response"=>{
171
+ "language"=>"eng",
172
+ "languageIsReliable"=>true,
173
+ "entailments"=>[{
174
+ "id"=>2, "wordPositions"=>[1],
175
+ "entailedWords"=>["misrepresentation"],
176
+ "entailedTree"=>{
177
+ "word"=>"misrepresentation", "wordId"=>0, "parentRelation"=>-1
178
+ },
179
+ "priorScore"=>0.00132419,
180
+ "contextScore"=>0.0694058,
181
+ "score"=>0.154246
182
+ }]
183
+ }
184
+ }.to_json
185
+ }
186
+
187
+ it 'returns entailments' do
188
+ entailments = response.entailments
189
+
190
+ expect(entailments).to_not be_nil
191
+ expect(entailments.size).to eq(1)
192
+ end
193
+
194
+ end
195
+
196
+ context 'when response does not have entailments' do
197
+
198
+ let(:body) {
199
+ {
200
+ "time"=>"0.013219",
201
+ "response"=>{
202
+ "language"=>"eng", "languageIsReliable"=>true
203
+ }
204
+ }.to_json
205
+ }
206
+
207
+ it 'returns nil' do
208
+ expect(response.entailments).to be_nil
209
+ end
210
+
211
+ end
212
+
213
+ end
214
+
215
+ describe "#topics" do
216
+
217
+ let(:http_response) do
218
+ ::OpenStruct.new(code: 200, body: body)
219
+ end
220
+
221
+ let(:response) do
222
+ Response.new(http_response)
223
+ end
224
+
225
+ context "if there are topics returned from api" do
226
+
227
+ let(:body) do
228
+ {
229
+ "time" => "0.013219",
230
+ "response" => {
231
+ "language" => "eng",
232
+ "languageIsReliable" => true,
233
+ "topics" => [
234
+ {
235
+ "id" => 0,
236
+ "label" => "Airlines ",
237
+ "wikiLink" => "http://en.wikipedia.org/Category:Airlines_by_country",
238
+ "score" => 0.199069
239
+ },
240
+ {
241
+ "id" => 1,
242
+ "label" => "Companies ",
243
+ "wikiLink" => "http://en.wikipedia.org/Category:Companies_by_year_of_establishment",
244
+ "score" => 0.136068
245
+ }
246
+ ]
247
+ }
248
+ }.to_json
249
+ end
250
+
251
+ it "returns topics" do
70
252
  topics = response.topics
71
253
 
72
254
  expect(topics).to_not be_nil
@@ -77,13 +259,17 @@ module TextRazor
77
259
 
78
260
  context "if there are no topics returned from api" do
79
261
 
80
- it "should return nil" do
81
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true}}"
82
-
83
- http_response = ::OpenStruct.new code: 200, body: body
84
-
85
- response = Response.new(http_response)
262
+ let(:body) do
263
+ {
264
+ "time" => "0.013219",
265
+ "response" => {
266
+ "language" => "eng",
267
+ "languageIsReliable" => true
268
+ }
269
+ }.to_json
270
+ end
86
271
 
272
+ it "returns nil" do
87
273
  expect(response.topics).to be_nil
88
274
  end
89
275
 
@@ -91,17 +277,43 @@ module TextRazor
91
277
 
92
278
  end
93
279
 
94
- context "#coarse_topics" do
280
+ describe "#coarse_topics" do
95
281
 
96
- context "if there are topics returned from api" do
282
+ let(:http_response) do
283
+ ::OpenStruct.new(code: 200, body: body)
284
+ end
97
285
 
98
- it "should return topics" do
99
- body = "\n {\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true,\"coarseTopics\":[{\"id\":0,\"label\":\"Airlines \",\"wikiLink\":\"http://en.wikipedia.org/Category:Airlines_by_country\",\"score\":0.199069},{\"id\":1,\"label\":\"Companies \",\"wikiLink\":\"http://en.wikipedia.org/Category:Companies_by_year_of_establishment\",\"score\":0.136068}]}} \n"
286
+ let(:response) do
287
+ Response.new(http_response)
288
+ end
100
289
 
101
- http_response = ::OpenStruct.new code: 200, body: body
290
+ context "if there are topics returned from api" do
102
291
 
103
- response = Response.new(http_response)
292
+ let(:body) do
293
+ {
294
+ "time" => "0.013219",
295
+ "response" => {
296
+ "language" => "eng",
297
+ "languageIsReliable"=>true,
298
+ "coarseTopics"=> [
299
+ {
300
+ "id"=>0,
301
+ "label" => "Airlines ",
302
+ "wikiLink" => "http://en.wikipedia.org/Category:Airlines_by_country",
303
+ "score"=>0.199069
304
+ },
305
+ {
306
+ "id"=>1,
307
+ "label" => "Companies ",
308
+ "wikiLink" => "http://en.wikipedia.org/Category:Companies_by_year_of_establishment",
309
+ "score"=>0.136068
310
+ }
311
+ ]
312
+ }
313
+ }.to_json
314
+ end
104
315
 
316
+ it "should return topics" do
105
317
  topics = response.coarse_topics
106
318
 
107
319
  expect(topics).to_not be_nil
@@ -112,31 +324,95 @@ module TextRazor
112
324
 
113
325
  context "if there are no topics returned from api" do
114
326
 
115
- it "should return nil" do
116
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true}}"
117
-
118
- http_response = ::OpenStruct.new code: 200, body: body
119
-
120
- response = Response.new(http_response)
327
+ let(:body) do
328
+ {
329
+ "time" => "0.013219",
330
+ "response" => {
331
+ "language" => "eng",
332
+ "languageIsReliable"=>true
333
+ }
334
+ }.to_json
335
+ end
121
336
 
122
- expect(response.topics).to be_nil
337
+ it "should return nil" do
338
+ expect(response.coarse_topics).to be_nil
123
339
  end
124
340
 
125
341
  end
126
342
 
127
343
  end
128
344
 
129
- context "#entities" do
345
+ describe "#entities" do
130
346
 
131
- context "if there are any entities returned" do
347
+ let(:http_response) do
348
+ ::OpenStruct.new(code: 200, body: body)
349
+ end
132
350
 
133
- it "should return entities" do
134
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true,\"entities\":[{\"id\":0,\"matchingTokens\":[0],\"entityId\":\"European Union\",\"freebaseTypes\":[\"/award/award_winner\",\"/book/author\",\"/location/country\",\"/organization/organization_scope\",\"/book/book_subject\",\"/location/dated_location\",\"/people/ethnicity\",\"/projects/project_participant\",\"/location/statistical_region\",\"/organization/organization\",\"/organization/organization_member\",\"/government/governmental_jurisdiction\",\"/organization/membership_organization\",\"/internet/website_category\",\"/internet/website_owner\",\"business/employer\",\"/location/location\"],\"confidenceScore\":1.01581,\"wikiLink\":\"http://en.wikipedia.org/wiki/European_Union\",\"matchedText\":\"eu\",\"freebaseId\":\"/m/02jxk\",\"relevanceScore\":0.567223,\"entityEnglishId\":\"European Union\",\"startingPos\":0,\"endingPos\":2},{\"id\":1,\"matchingTokens\":[1,2],\"entityId\":\"Foreign minister\",\"freebaseTypes\":[\"government/government_office_or_title\"],\"confidenceScore\":0.897858,\"wikiLink\":\"http://en.wikipedia.org/wiki/Foreign_minister\",\"matchedText\":\"foreign ministers\",\"freebaseId\":\"/m/01t_55\",\"relevanceScore\":0.311479,\"entityEnglishId\":\"Foreign minister\",\"startingPos\":3,\"endingPos\":20}]}}"
351
+ let(:response) do
352
+ Response.new(http_response)
353
+ end
135
354
 
136
- http_response = ::OpenStruct.new code: 200, body: body
355
+ context "if there are any entities returned" do
137
356
 
138
- response = Response.new(http_response)
357
+ let(:body) do
358
+ {
359
+ "time" => "0.013219",
360
+ "response"=>{
361
+ "language" => "eng",
362
+ "languageIsReliable"=>true,
363
+ "entities"=>[
364
+ {
365
+ "id"=>0,
366
+ "matchingTokens"=>[0],
367
+ "entityId" => "European Union",
368
+ "freebaseTypes" => [
369
+ "/award/award_winner",
370
+ "/book/author",
371
+ "/location/country",
372
+ "/organization/organization_scope",
373
+ "/book/book_subject",
374
+ "/location/dated_location",
375
+ "/people/ethnicity",
376
+ "/projects/project_participant",
377
+ "/location/statistical_region",
378
+ "/organization/organization",
379
+ "/organization/organization_member",
380
+ "/government/governmental_jurisdiction",
381
+ "/organization/membership_organization",
382
+ "/internet/website_category",
383
+ "/internet/website_owner",
384
+ "business/employer",
385
+ "/location/location"
386
+ ],
387
+ "confidenceScore" => 1.01581,
388
+ "wikiLink" => "http://en.wikipedia.org/wiki/European_Union",
389
+ "matchedText" => "eu",
390
+ "freebaseId" => "/m/02jxk",
391
+ "relevanceScore"=>0.567223,
392
+ "entityEnglishId" => "European Union",
393
+ "startingPos"=>0,
394
+ "endingPos"=>2
395
+ },
396
+ {
397
+ "id"=>1,
398
+ "matchingTokens"=>[1, 2],
399
+ "entityId" => "Foreign minister",
400
+ "freebaseTypes"=>["government/government_office_or_title"],
401
+ "confidenceScore"=>0.897858,
402
+ "wikiLink" => "http://en.wikipedia.org/wiki/Foreign_minister",
403
+ "matchedText" => "foreign ministers",
404
+ "freebaseId" => "/m/01t_55",
405
+ "relevanceScore"=>0.311479,
406
+ "entityEnglishId" => "Foreign minister",
407
+ "startingPos"=>3,
408
+ "endingPos"=>20
409
+ }
410
+ ]
411
+ }
412
+ }.to_json
413
+ end
139
414
 
415
+ it "should return entities" do
140
416
  entities = response.entities
141
417
 
142
418
  expect(entities).to_not be_nil
@@ -147,13 +423,17 @@ module TextRazor
147
423
 
148
424
  context "if there are no entities returned" do
149
425
 
150
- it "should return nil" do
151
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true}}"
152
-
153
- http_response = ::OpenStruct.new code: 200, body: body
154
-
155
- response = Response.new(http_response)
426
+ let(:body) do
427
+ {
428
+ "time" => "0.013219",
429
+ "response"=> {
430
+ "language" => "eng",
431
+ "languageIsReliable" => true
432
+ }
433
+ }.to_json
434
+ end
156
435
 
436
+ it "should return nil" do
157
437
  expect(response.entities).to be_nil
158
438
  end
159
439
 
@@ -161,17 +441,72 @@ module TextRazor
161
441
 
162
442
  end
163
443
 
164
- context "#words" do
444
+ describe "#words" do
165
445
 
166
- context "if there are any words returned" do
446
+ let(:http_response) do
447
+ ::OpenStruct.new(code: 200, body: body)
448
+ end
167
449
 
168
- it "should return words" do
169
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true,\"sentences\":[{\"position\":1,\"words\":[{\"position\":0,\"startingPos\":0,\"endingPos\":3,\"stem\":\"the\",\"lemma\":\"the\",\"token\":\"The\",\"partOfSpeech\":\"DT\"},{\"position\":1,\"startingPos\":4,\"endingPos\":7,\"stem\":\"two\",\"lemma\":\"two\",\"token\":\"two\",\"partOfSpeech\":\"CD\"},{\"position\":2,\"startingPos\":8,\"endingPos\":11,\"stem\":\"men\",\"lemma\":\"man\",\"token\":\"men\",\"partOfSpeech\":\"NNS\"},{\"position\":3,\"startingPos\":12,\"endingPos\":19,\"stem\":\"accus\",\"lemma\":\"accuse\",\"token\":\"accused\",\"partOfSpeech\":\"VBN\"}]}]}}"
450
+ let(:response) do
451
+ Response.new(http_response)
452
+ end
170
453
 
171
- http_response = ::OpenStruct.new code: 200, body: body
454
+ context "if there are any words returned" do
172
455
 
173
- response = Response.new(http_response)
456
+ let(:body) do
457
+ {
458
+ "time" => "0.013219",
459
+ "response" => {
460
+ "language" => "eng",
461
+ "languageIsReliable" => true,
462
+ "sentences"=>[
463
+ {
464
+ "position"=>1,
465
+ "words"=>[
466
+ {
467
+ "position"=>0,
468
+ "startingPos"=>0,
469
+ "endingPos"=>3,
470
+ "stem" => "the",
471
+ "lemma" => "the",
472
+ "token" => "The",
473
+ "partOfSpeech" => "DT"
474
+ },
475
+ {
476
+ "position"=>1,
477
+ "startingPos"=>4,
478
+ "endingPos"=>7,
479
+ "stem" => "two",
480
+ "lemma" => "two",
481
+ "token" => "two",
482
+ "partOfSpeech" => "CD"
483
+ },
484
+ {
485
+ "position"=>2,
486
+ "startingPos"=>8,
487
+ "endingPos"=>11,
488
+ "stem" => "men",
489
+ "lemma" => "man",
490
+ "token" => "men",
491
+ "partOfSpeech" => "NNS"
492
+ },
493
+ {
494
+ "position"=>3,
495
+ "startingPos"=>12,
496
+ "endingPos"=>19,
497
+ "stem" => "accus",
498
+ "lemma" => "accuse",
499
+ "token" => "accused",
500
+ "partOfSpeech" => "VBN"
501
+ }
502
+ ]
503
+ }
504
+ ]
505
+ }
506
+ }.to_json
507
+ end
174
508
 
509
+ it "returns words" do
175
510
  words = response.words
176
511
 
177
512
  expect(words).to_not be_nil
@@ -183,16 +518,236 @@ module TextRazor
183
518
 
184
519
  context "if there are no words returned" do
185
520
 
186
- it "should return nil" do
187
- body = "{\"time\":\"0.013219\",\"response\":{\"language\":\"eng\",\"languageIsReliable\":true}}"
521
+ let(:body) do
522
+ {
523
+ "time" => "0.013219",
524
+ "response" => {
525
+ "language" => "eng",
526
+ "languageIsReliable"=>true
527
+ }
528
+ }.to_json
529
+ end
188
530
 
189
- http_response = ::OpenStruct.new code: 200, body: body
531
+ it "returns nil" do
532
+ expect(response.words).to be_nil
533
+ end
190
534
 
191
- response = Response.new(http_response)
535
+ end
192
536
 
193
- expect(response.words).to be_nil
537
+ end
538
+
539
+ describe '#properties' do
540
+
541
+ let(:http_response) do
542
+ ::OpenStruct.new(code: 200, body: body)
543
+ end
544
+
545
+ let(:response) do
546
+ Response.new(http_response)
547
+ end
548
+
549
+ context 'if there are properties' do
550
+
551
+ let(:body) do
552
+ {
553
+ "time" => "0.013219",
554
+ "response" => {
555
+ "language" => "eng",
556
+ "languageIsReliable"=>true,
557
+ "properties" => [
558
+ {
559
+ "id" => 0,
560
+ "wordPositions" => [9,10,12],
561
+ "propertyPositions" => [12]
562
+ }
563
+ ]
564
+ }
565
+ }.to_json
194
566
  end
195
567
 
568
+ it 'returns properties' do
569
+ properties = response.properties
570
+
571
+ expect(properties).to_not be_nil
572
+ expect(properties.size).to eq(1)
573
+ expect(properties.first).to be_instance_of(Property)
574
+ end
575
+
576
+ end
577
+
578
+ context 'if there are no properties returned' do
579
+
580
+ let(:body) do
581
+ {
582
+ "time" => "0.013219",
583
+ "response" => {
584
+ "language" => "eng",
585
+ "languageIsReliable"=>true
586
+ }
587
+ }.to_json
588
+ end
589
+
590
+ it 'returns nil' do
591
+ expect(response.properties).to be_nil
592
+ end
593
+
594
+ end
595
+
596
+ end
597
+
598
+ describe '#relations' do
599
+
600
+ context 'if there are relations returned' do
601
+
602
+ let(:body) do
603
+ {
604
+ "time" => "0.013219",
605
+ "response" => {
606
+ "language" => "eng",
607
+ "languageIsReliable"=>true,
608
+ "relations" => [{
609
+ id: 0,
610
+ wordPositions: [1, 6],
611
+ params: [{
612
+ relation: "SUBJECT",
613
+ wordPositions: [18, 19, 20, 21]
614
+ },
615
+ {
616
+ relation: "OBJECT",
617
+ wordPositions: [2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
618
+ }]
619
+ }]
620
+ }
621
+ }.to_json
622
+ end
623
+
624
+ it 'returns relations' do
625
+ relations = response.relations
626
+
627
+ expect(relations).to_not be_nil
628
+ expect(relations.size).to eq(1)
629
+ expect(relations.first).to be_instance_of(Relation)
630
+ end
631
+
632
+ end
633
+
634
+ context 'if there are no relations returned' do
635
+
636
+ let(:body) do
637
+ {
638
+ "time" => "0.013219",
639
+ "response" => {
640
+ "language" => "eng",
641
+ "languageIsReliable"=>true
642
+ }
643
+ }.to_json
644
+ end
645
+
646
+ it 'returns nil' do
647
+ expect(response.relations).to be_nil
648
+ end
649
+ end
650
+ end
651
+
652
+ describe '#sentences' do
653
+
654
+ context 'if there are sentences returned' do
655
+
656
+ let(:body) do
657
+ {
658
+ "time" => "0.013219",
659
+ "response" => {
660
+ "language" => "eng",
661
+ "languageIsReliable"=>true,
662
+ "sentences" => [{
663
+ :position=>0,
664
+ :words=>
665
+ [{
666
+ :position=>0,
667
+ :startingPos=>0,
668
+ :endingPos=>8,
669
+ :stem=>"barclay",
670
+ :lemma=>"barclay",
671
+ :token=>"Barclays",
672
+ :partOfSpeech=>"NNP",
673
+ :parentPosition=>1,
674
+ :relationToParent=>"nsubj"
675
+ }]
676
+ }]
677
+ }
678
+ }.to_json
679
+ end
680
+
681
+ it 'returns sentences' do
682
+ sentences = response.sentences
683
+
684
+ expect(sentences).to_not be_nil
685
+ expect(sentences.size).to eq(1)
686
+ expect(sentences.first).to be_instance_of(Sentence)
687
+ end
688
+
689
+ end
690
+
691
+ context 'if there are no sentences returned' do
692
+
693
+ let(:body) do
694
+ {
695
+ "time" => "0.013219",
696
+ "response" => {
697
+ "language" => "eng",
698
+ "languageIsReliable"=>true
699
+ }
700
+ }.to_json
701
+ end
702
+
703
+ it 'returns nil' do
704
+ expect(response.sentences).to be_nil
705
+ end
706
+
707
+ end
708
+
709
+ end
710
+
711
+ describe '#language' do
712
+
713
+ let(:body) do
714
+ {
715
+ "time" => "0.013219",
716
+ "response" => {
717
+ "language" => "eng",
718
+ "languageIsReliable"=>true
719
+ }
720
+ }.to_json
721
+ end
722
+
723
+ it 'returns language' do
724
+ expect(response.language).to eq 'eng'
725
+ end
726
+
727
+ end
728
+
729
+ describe '#language_is_reliable?' do
730
+
731
+ let(:body) do
732
+ {
733
+ "time" => "0.013219",
734
+ "response" => {
735
+ "language" => "eng",
736
+ "languageIsReliable"=>true
737
+ }
738
+ }.to_json
739
+ end
740
+
741
+ let(:http_response) do
742
+ ::OpenStruct.new(code: 200, body: body)
743
+ end
744
+
745
+ let(:response) do
746
+ Response.new(http_response)
747
+ end
748
+
749
+ it 'returns language_is_reliable?' do
750
+ expect(response).to be_language_is_reliable
196
751
  end
197
752
 
198
753
  end