keepcon 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDJkOGU2ZjJkMDU1NjYzYTc5YWNlZTg3YzkyMWI5YjU0YTkwNTdlMg==
4
+ MzY3Mzc4Y2YxZmIwNzM2YjQyNGM5NGQ2YTQxNmQ2NzhiZjdhNjk4Yw==
5
5
  data.tar.gz: !binary |-
6
- M2RjNjhhNDQ3MDA3YWI2MjY1M2EyYzU3MTE0NDdkZTExNjZkMzFmOA==
6
+ ZmM0MjhlODRiMDU0NjU4MDg3MWVhZjlkZGVjNTBkNzcwZWU5MGRhYw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGM5YjJiY2Q0NjFkNzJkYzE5YTQyN2FmODcyMTNkMWMyZjY4NmJkYWMzZmY1
10
- ZmIwN2JkM2I3ZGRkYTMwODVjMzMyMTk2OGM1ZDc2MTEyMWE3Nzk4YzBiYjM3
11
- MDgyNjM1NDhhZmNlMGNjZmFiNDE5NjUwMTI3M2EzMTBiZjY0MzA=
9
+ NmE4ZTgyNGMyZDhlZGQ3ZTZjNjBkZmFhMmRiNWI3M2Y3MGQwNzM2NGY0NmYw
10
+ OTZjYmU5NmQ2MThmZDE3MzFjMWQ1M2I4MmVhZTFkMjJkMWQzMDJjYjg4ZDI2
11
+ OTEzYmVjYjU4OTZmODk4YmY0ZWNlMzU4YWRlZjc3ZjM0OWIxYmE=
12
12
  data.tar.gz: !binary |-
13
- OWY2ZWFiNDYxNmU5YjJiN2U1ZDhkYzFlYzIxZGY2NDMyY2M2NGZiMDYyNTJl
14
- MDdhZjZiMzdhZjA2MmFlMGZiNGM3MTJhMTQ4MTVlNmFkMjUwYTUxMGVkYzVk
15
- YmYyZDkwMjUwNmJhZjZkZTZhNzQ0ZDlmYjgyMGM3YTRlNWY4OGM=
13
+ MTVjMGM5OGU1MjFkM2M1YzdhYTYwYzQwMjEwYjY4ZGZjY2M1NWU4ZjQxYmNh
14
+ ZTgwNTFiMTNmMjA3NDM3OTc5ZWY2ODIwOTNmMzFmNzdlZGU5NWM3ZGJkMmUy
15
+ YzBjMDM4NGZhM2JkMDJlMTczZGVmZDc4MmVlZjEyOWRiNTkzY2Q=
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # Keepcon
2
2
 
3
-
4
3
  [![Build Status](https://travis-ci.org/LoveMondays/keepcon.svg)](https://travis-ci.org/LoveMondays/keepcon)
5
4
  [![Code Climate](https://codeclimate.com/github/LoveMondays/keepcon/badges/gpa.svg)](https://codeclimate.com/github/LoveMondays/keepcon)
6
5
  [![Test Coverage](https://codeclimate.com/github/LoveMondays/keepcon/badges/coverage.svg)](https://codeclimate.com/github/LoveMondays/keepcon)
6
+ [![Gem Version](https://badge.fury.io/rb/keepcon.svg)](http://badge.fury.io/rb/keepcon)
7
7
  [![Dependency Status](https://gemnasium.com/LoveMondays/keepcon.svg)](https://gemnasium.com/LoveMondays/keepcon)
8
8
 
9
9
  This is a Ruby wrapper for the [Keepcon](http://keepcon.com) API.
@@ -25,6 +25,13 @@ module Keepcon
25
25
  request(:put, url)
26
26
  end
27
27
 
28
+ def async_ack(setId)
29
+ url = config['urls']['content']['response']['ack']
30
+ url = url % { setId: setId }
31
+
32
+ request(:put, url)
33
+ end
34
+
28
35
  private
29
36
 
30
37
  def request(method, path, data = '', mode = :async)
@@ -43,7 +50,10 @@ module Keepcon
43
50
  end
44
51
 
45
52
  def headers
46
- { 'User-Agent' => user_agent }
53
+ {
54
+ 'User-Agent' => user_agent,
55
+ 'Content-Type' => 'text/plain; charset=utf-8'
56
+ }
47
57
  end
48
58
 
49
59
  def user_agent
@@ -7,3 +7,4 @@ content:
7
7
  async: '/input/contentSet'
8
8
  response:
9
9
  async: '/output/contentSet?contextName=%{context_name}&clientACK=true&maxResults=100'
10
+ ack: '/ack/%{setId}'
@@ -26,7 +26,10 @@ module Keepcon
26
26
  context = find_context(context_name)
27
27
 
28
28
  results = context.client.async_results_request
29
- Entity::Response.new(results)
29
+ response = Entity::Response.new(results)
30
+ context.client.async_ack(response.data['setId'])
31
+
32
+ response
30
33
  end
31
34
 
32
35
  private
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Keepcon
3
- VERSION = '0.2.2'
3
+ VERSION = '0.2.3'
4
4
  end
@@ -93,4 +93,31 @@ describe Keepcon::Client do
93
93
  it { expect(subject.status).to eq(200) }
94
94
  it { expect(subject.body).to eq('all-results-body') }
95
95
  end
96
+
97
+ describe '#async_ack' do
98
+ subject { client.async_ack('my_set_id') }
99
+
100
+ let!(:faraday) { Faraday.new { |f| f.adapter :test, adapter } }
101
+ let(:adapter) do
102
+ Faraday::Adapter::Test::Stubs.new do |stub|
103
+ uri = '/ack/my_set_id'
104
+ stub.put(uri, '', headers) do |_env|
105
+ [200, {}, 'ack_response_body']
106
+ end
107
+ end
108
+ end
109
+ let(:headers) do
110
+ {
111
+ 'User-Agent' => 'Keepcon Client API REST v1.0 - Context Name: [user]',
112
+ 'Authorization' => 'Basic dXNlcjpwYXNzd29yZA=='
113
+ }
114
+ end
115
+
116
+ before do
117
+ allow(Faraday).to receive(:new).and_return(faraday)
118
+ end
119
+
120
+ it { expect(subject.status).to eq(200) }
121
+ it { expect(subject.body).to eq('ack_response_body') }
122
+ end
96
123
  end
@@ -16,24 +16,48 @@ describe Keepcon::Entity::Response do
16
16
  describe '#data' do
17
17
  subject { response.data }
18
18
 
19
- let(:set_id) { '1d523f7e-f430-46dd-b126-980e385130ca' }
20
- let(:body) do
21
- <<-XML
22
- <?xml version="1.0" encoding="UTF-8"?>
23
- <response>
24
- <status>OK</status>
25
- <setId>#{set_id}</setId>
26
- </response>
27
- XML
28
- end
29
-
30
- it { is_expected.to include('status' => 'OK') }
31
- it { is_expected.to include('setId' => set_id) }
32
-
33
19
  context 'when the body is empty' do
34
20
  let(:body) { '' }
35
21
 
36
22
  it { is_expected.to eq({}) }
37
23
  end
24
+
25
+ context 'when the body is a sample of send data to process' do
26
+ let(:body) do
27
+ <<-XML
28
+ <?xml version="1.0" encoding="UTF-8"?>
29
+ <response>
30
+ <status>OK</status>
31
+ <setId>b126-980e385130ca</setId>
32
+ </response>
33
+ XML
34
+ end
35
+
36
+ it { is_expected.to include('status' => 'OK') }
37
+ it { is_expected.to include('setId' => 'b126-980e385130ca') }
38
+ end
39
+
40
+ context 'when the body is a sample of send data to process' do
41
+ let(:body) do
42
+ <<-XML
43
+ <?xml version="1.0" encoding="UTF-8"?>
44
+ <export setId="b537-35642fb84114">
45
+ <contents>
46
+ <content id="159407">
47
+ <moderatorName>AutomaticModerator</moderatorName>
48
+ <moderationDate>1440533232819</moderationDate>
49
+ <moderationDecision>UNKNOWN</moderationDecision>
50
+ <tagging>
51
+ <tag>02_PercepcaoEmotiva_qualidadeDeVida_neg</tag>
52
+ <tag>sa_Negativo</tag>
53
+ </tagging>
54
+ </content>
55
+ </contents>
56
+ </export>
57
+ XML
58
+ end
59
+
60
+ it { expect(subject['setId']).to eq('b537-35642fb84114') }
61
+ end
38
62
  end
39
63
  end
@@ -99,7 +99,15 @@ describe Keepcon::Integration do
99
99
  describe '.fetch_keepcon_results' do
100
100
  subject { dummy_class.fetch_keepcon_results(context) }
101
101
 
102
- let(:results) { double status: 200, body: 'keepcon-xml-response' }
102
+ let(:results) { double status: 200, body: body }
103
+ let(:body) do
104
+ <<-XML
105
+ <?xml version="1.0" encoding="UTF-8"?>
106
+ <export setId="b537-35642fb84114">
107
+ <contents></contents>
108
+ </export>
109
+ XML
110
+ end
103
111
 
104
112
  context 'when context do not exists' do
105
113
  let(:context) { :missing_context }
@@ -109,12 +117,12 @@ describe Keepcon::Integration do
109
117
 
110
118
  context 'when context exists' do
111
119
  let(:context) { :context }
120
+ let(:client) { added_context.client }
112
121
 
113
122
  it 'calls client async_results_request for that context' do
114
- expect(added_context.client).to receive(:async_results_request) do
115
- results
116
- end
117
- subject
123
+ expect(client).to receive(:async_results_request) { results }
124
+ expect(client).to receive(:async_ack).with('b537-35642fb84114')
125
+ is_expected.to be_a(Keepcon::Entity::Response)
118
126
  end
119
127
  end
120
128
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keepcon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane O'Grady
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-27 00:00:00.000000000 Z
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: retryable-rb