carrot2 0.1.0 → 0.2.0

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: df9af6b5e399ac7f765c9d63d868c75414e0ff0a
4
- data.tar.gz: 86addac3d8e7f071be5c04c3bd23d67ddb472acd
3
+ metadata.gz: 33734687ea74c1750a823b92eb21648910a7c11c
4
+ data.tar.gz: 3683ea29b97fa311a23919048d49b2c4c3784701
5
5
  SHA512:
6
- metadata.gz: e7606bd9caf52138a4e25f50d0019495bd8a9fc9ec7c0a79ca85789a8869a2490ff6275d2f72dca160a78c4cb5056bd5c317255416f5fe308e74259822b4570e
7
- data.tar.gz: ec8b17439d0a30259d6791cd5d2f287f03e36f485457e1551038925e43c76bc146a6ecb16ed1de4bbddbb3e0c34c2c276244503e52dd49c505c2efc22d165d04
6
+ metadata.gz: 8c87a0029e7d304717778fc7fadeee896895cb412524e7fe0d435aec2f84308cbd9d6967481abd8493dff75303024bcdd467b33f7f25947931c8702f261d0f6c
7
+ data.tar.gz: 5028411dc8eb0bf3a5629824e9fba106846f2759a3c687a43fa5d19636b1cce0bc9b564daf5ab2b0e23ab2a6ca318061345584c0641db0933d7e5b834dc70e39
@@ -1,3 +1,9 @@
1
+ ## 0.2.0
2
+
3
+ - Added `request` method
4
+ - Removed dependency on `rest-client`
5
+ - Better error messages
6
+
1
7
  ## 0.1.0
2
8
 
3
9
  - Added support for env var
data/README.md CHANGED
@@ -6,6 +6,13 @@ Ruby client for [Carrot2](http://project.carrot2.org/) - the open-source documen
6
6
 
7
7
  First, [download and run](http://project.carrot2.org/download-dcs.html) the Carrot2 server. It’s the one on [this page](https://github.com/carrot2/carrot2/releases) that begins with `carrot2-dcs`.
8
8
 
9
+ With Homebrew, use:
10
+
11
+ ```sh
12
+ brew install carrot2
13
+ brew services start carrot2
14
+ ```
15
+
9
16
  Then add this line to your application’s Gemfile:
10
17
 
11
18
  ```ruby
@@ -14,6 +21,8 @@ gem 'carrot2'
14
21
 
15
22
  ## How to Use
16
23
 
24
+ To cluster documents, use:
25
+
17
26
  ```ruby
18
27
  documents = [
19
28
  "Sign up for an exclusive coupon.",
@@ -26,7 +35,7 @@ carrot2 = Carrot2.new
26
35
  carrot2.cluster(documents)
27
36
  ```
28
37
 
29
- returns
38
+ This returns:
30
39
 
31
40
  ```ruby
32
41
  {
@@ -64,6 +73,16 @@ returns
64
73
 
65
74
  Documents are numbered in the order provided, starting with 0.
66
75
 
76
+ For other requests, use:
77
+
78
+ ```ruby
79
+ carrot2.request(
80
+ "dcs.c2stream" => xml_str
81
+ )
82
+ ```
83
+
84
+ ## Configuration
85
+
67
86
  To specify the Carrot2 server, set `ENV["CARROT2_URL"]` or use:
68
87
 
69
88
  ```ruby
@@ -16,7 +16,6 @@ Gem::Specification.new do |spec|
16
16
  spec.version = Carrot2::VERSION
17
17
 
18
18
  spec.add_dependency "builder"
19
- spec.add_dependency "rest-client"
20
19
 
21
20
  spec.add_development_dependency "bundler"
22
21
  spec.add_development_dependency "rake"
@@ -1,19 +1,22 @@
1
1
  require "carrot2/version"
2
2
  require "builder"
3
- require "rest-client"
3
+ require "net/http"
4
4
  require "json"
5
5
 
6
6
  class Carrot2
7
+ class Error < StandardError; end
8
+
7
9
  def initialize(url: nil)
8
10
  @url = url || ENV["CARROT2_URL"] || "http://localhost:8080"
9
11
 
10
12
  # add dcs/rest
11
13
  @url = "#{@url.sub(/\/\z/, "")}/dcs/rest"
14
+ @uri = URI.parse(@url)
12
15
  end
13
16
 
14
- def cluster(documents, opts = {})
17
+ def cluster(documents, language: "ENGLISH")
15
18
  xml = Builder::XmlMarkup.new
16
- xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
19
+ xml.instruct! :xml, version: "1.0", encoding: "UTF-8"
17
20
  xml.searchresult do |s|
18
21
  documents.each do |document|
19
22
  s.document do |d|
@@ -22,18 +25,24 @@ class Carrot2
22
25
  end
23
26
  end
24
27
 
25
- params = {
26
- "dcs.output.format" => "JSON",
28
+ request(
27
29
  "dcs.clusters.only" => true,
28
30
  "dcs.c2stream" => xml.target!,
29
- "MultilingualClustering.defaultLanguage" => opts[:language] || "ENGLISH",
31
+ "MultilingualClustering.defaultLanguage" => language,
30
32
  multipart: true
31
- }
32
- response = RestClient.post(@url, params) { |response, request, result| response }
33
- if response.code == 200
33
+ )
34
+ end
35
+
36
+ def request(params)
37
+ response = Net::HTTP.post_form(@uri, params.merge("dcs.output.format" => "JSON"))
38
+ if response.code == "200"
34
39
  JSON.parse(response.body)
35
40
  else
36
- raise "Bad response code from Carrot2 server: #{response.code}"
41
+ body = response.body.to_s
42
+ # try to get reason from title
43
+ m = body.match(/<title>(.+)<\/title>/)
44
+ message = m ? m[1] : body
45
+ raise Carrot2::Error, message
37
46
  end
38
47
  end
39
48
  end
@@ -1,3 +1,3 @@
1
1
  class Carrot2
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require_relative "test_helper"
2
2
 
3
3
  class Carrot2Test < Minitest::Test
4
- def test_basic
4
+ def test_cluster
5
5
  documents = [
6
6
  "Sign up for an exclusive coupon.",
7
7
  "Exclusive members get a free coupon.",
@@ -9,7 +9,15 @@ class Carrot2Test < Minitest::Test
9
9
  "This is completely unrelated to the other documents."
10
10
  ]
11
11
 
12
- carrot2 = Carrot2.new
13
12
  assert_equal ["Coupon", "Exclusive", "Other Topics"], carrot2.cluster(documents)["clusters"].map { |c| c["phrases"].first }
14
13
  end
14
+
15
+ def test_bad_request
16
+ error = assert_raises(Carrot2::Error) { carrot2.request({}) }
17
+ assert_includes error.message, "Error 400"
18
+ end
19
+
20
+ def carrot2
21
+ @carrot2 ||= Carrot2.new
22
+ end
15
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrot2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-18 00:00:00.000000000 Z
11
+ date: 2017-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rest-client
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement