carrot2 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: df9af6b5e399ac7f765c9d63d868c75414e0ff0a
4
+ data.tar.gz: 86addac3d8e7f071be5c04c3bd23d67ddb472acd
5
+ SHA512:
6
+ metadata.gz: e7606bd9caf52138a4e25f50d0019495bd8a9fc9ec7c0a79ca85789a8869a2490ff6275d2f72dca160a78c4cb5056bd5c317255416f5fe308e74259822b4570e
7
+ data.tar.gz: ec8b17439d0a30259d6791cd5d2f287f03e36f485457e1551038925e43c76bc146a6ecb16ed1de4bbddbb3e0c34c2c276244503e52dd49c505c2efc22d165d04
@@ -0,0 +1,8 @@
1
+ ## 0.1.0
2
+
3
+ - Added support for env var
4
+ - Added tests
5
+
6
+ ## 0.0.1
7
+
8
+ - First version
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in carrot2.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -1,14 +1,20 @@
1
1
  # Carrot2
2
2
 
3
- Ruby client for Carrot2 - the **awesome** open-source document clustering server
3
+ Ruby client for [Carrot2](http://project.carrot2.org/) - the open-source document clustering server
4
4
 
5
- ## Usage
5
+ ## Installation
6
6
 
7
- Download and run the Carrot2 server. [Great instructions here](http://project.carrot2.org/download-dcs.html)
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
+
9
+ Then add this line to your application’s Gemfile:
8
10
 
9
11
  ```ruby
10
- require "carrot2"
12
+ gem 'carrot2'
13
+ ```
11
14
 
15
+ ## How to Use
16
+
17
+ ```ruby
12
18
  documents = [
13
19
  "Sign up for an exclusive coupon.",
14
20
  "Exclusive members get a free coupon.",
@@ -58,16 +64,35 @@ returns
58
64
 
59
65
  Documents are numbered in the order provided, starting with 0.
60
66
 
61
- To specify the Carrot2 endpoint, use
67
+ To specify the Carrot2 server, set `ENV["CARROT2_URL"]` or use:
62
68
 
63
69
  ```ruby
64
- carrot2 = Carrot2.new("http://localhost:8080/dcs/rest") # default
70
+ Carrot2.new(url: "http://localhost:8080")
65
71
  ```
66
72
 
73
+ ## Heroku
74
+
75
+ Carrot2 can be easily deployed to Heroku thanks to support for [WAR deployment](https://devcenter.heroku.com/articles/war-deployment).
76
+
77
+ You can find the `.war` file in the `war` directory in the dcs download. Then run:
78
+
79
+ ```sh
80
+ heroku plugins:install heroku-cli-deploy
81
+ heroku create <app_name>
82
+ heroku war:deploy carrot2-dcs.war --app <app_name>
83
+ ```
84
+
85
+ And set `ENV["CARROT2_URL"]` in your application.
86
+
87
+ ## History
88
+
89
+ View the [changelog](https://github.com/ankane/carrot2/blob/master/CHANGELOG.md)
90
+
67
91
  ## Contributing
68
92
 
69
- 1. Fork it
70
- 2. Create your feature branch (`git checkout -b my-new-feature`)
71
- 3. Commit your changes (`git commit -am 'Add some feature'`)
72
- 4. Push to the branch (`git push origin my-new-feature`)
73
- 5. Create new Pull Request
93
+ Everyone is encouraged to help improve this project. Here are a few ways you can help:
94
+
95
+ - [Report bugs](https://github.com/ankane/carrot2/issues)
96
+ - Fix bugs and [submit pull requests](https://github.com/ankane/carrot2/pulls)
97
+ - Write, clarify, or fix documentation
98
+ - Suggest or add new features
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ task default: :test
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.pattern = "test/**/*_test.rb"
8
+ t.warning = false
9
+ end
@@ -1,20 +1,24 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/carrot2/version', __FILE__)
2
+ require File.expand_path("../lib/carrot2/version", __FILE__)
3
3
 
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Andrew Kane"]
6
- gem.email = ["acekane1@gmail.com"]
7
- gem.description = %q{Ruby client for Carrot2}
8
- gem.summary = %q{Ruby client for Carrot2}
9
- gem.homepage = ""
4
+ Gem::Specification.new do |spec|
5
+ spec.authors = ["Andrew Kane"]
6
+ spec.email = ["andrew@chartkick.com"]
7
+ spec.description = "Ruby client for Carrot2"
8
+ spec.summary = "Ruby client for Carrot2"
9
+ spec.homepage = "https://github.com/ankane/carrot2"
10
10
 
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "carrot2"
15
- gem.require_paths = ["lib"]
16
- gem.version = Carrot2::VERSION
11
+ spec.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
12
+ spec.executables = spec.files.grep(%r{^exe/}).map { |f| File.basename(f) }
13
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
+ spec.name = "carrot2"
15
+ spec.require_paths = ["lib"]
16
+ spec.version = Carrot2::VERSION
17
17
 
18
- gem.add_dependency "builder"
19
- gem.add_dependency "rest-client"
18
+ spec.add_dependency "builder"
19
+ spec.add_dependency "rest-client"
20
+
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "minitest"
20
24
  end
@@ -4,14 +4,16 @@ require "rest-client"
4
4
  require "json"
5
5
 
6
6
  class Carrot2
7
+ def initialize(url: nil)
8
+ @url = url || ENV["CARROT2_URL"] || "http://localhost:8080"
7
9
 
8
- def initialize(endpoint = "http://localhost:8080/dcs/rest")
9
- @endpoint = endpoint
10
+ # add dcs/rest
11
+ @url = "#{@url.sub(/\/\z/, "")}/dcs/rest"
10
12
  end
11
13
 
12
- def cluster(documents)
14
+ def cluster(documents, opts = {})
13
15
  xml = Builder::XmlMarkup.new
14
- xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"
16
+ xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
15
17
  xml.searchresult do |s|
16
18
  documents.each do |document|
17
19
  s.document do |d|
@@ -24,14 +26,14 @@ class Carrot2
24
26
  "dcs.output.format" => "JSON",
25
27
  "dcs.clusters.only" => true,
26
28
  "dcs.c2stream" => xml.target!,
27
- :multipart => true
29
+ "MultilingualClustering.defaultLanguage" => opts[:language] || "ENGLISH",
30
+ multipart: true
28
31
  }
29
- response = RestClient.post @endpoint, params
32
+ response = RestClient.post(@url, params) { |response, request, result| response }
30
33
  if response.code == 200
31
34
  JSON.parse(response.body)
32
35
  else
33
36
  raise "Bad response code from Carrot2 server: #{response.code}"
34
37
  end
35
38
  end
36
-
37
39
  end
@@ -1,3 +1,3 @@
1
1
  class Carrot2
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,15 @@
1
+ require_relative "test_helper"
2
+
3
+ class Carrot2Test < Minitest::Test
4
+ def test_basic
5
+ documents = [
6
+ "Sign up for an exclusive coupon.",
7
+ "Exclusive members get a free coupon.",
8
+ "Coupons are going fast.",
9
+ "This is completely unrelated to the other documents."
10
+ ]
11
+
12
+ carrot2 = Carrot2.new
13
+ assert_equal ["Coupon", "Exclusive", "Other Topics"], carrot2.cluster(documents)["clusters"].map { |c| c["phrases"].first }
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require "bundler/setup"
2
+ Bundler.require(:default)
3
+ require "minitest/autorun"
4
+ require "minitest/pride"
5
+
6
+ Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test)
metadata CHANGED
@@ -1,56 +1,94 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrot2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Andrew Kane
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-21 00:00:00.000000000 Z
11
+ date: 2017-01-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: builder
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rest-client
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
44
81
  - !ruby/object:Gem::Version
45
82
  version: '0'
46
83
  description: Ruby client for Carrot2
47
84
  email:
48
- - acekane1@gmail.com
85
+ - andrew@chartkick.com
49
86
  executables: []
50
87
  extensions: []
51
88
  extra_rdoc_files: []
52
89
  files:
53
- - .gitignore
90
+ - ".gitignore"
91
+ - CHANGELOG.md
54
92
  - Gemfile
55
93
  - LICENSE
56
94
  - README.md
@@ -58,34 +96,31 @@ files:
58
96
  - carrot2.gemspec
59
97
  - lib/carrot2.rb
60
98
  - lib/carrot2/version.rb
61
- homepage: ''
99
+ - test/carrot2_test.rb
100
+ - test/test_helper.rb
101
+ homepage: https://github.com/ankane/carrot2
62
102
  licenses: []
103
+ metadata: {}
63
104
  post_install_message:
64
105
  rdoc_options: []
65
106
  require_paths:
66
107
  - lib
67
108
  required_ruby_version: !ruby/object:Gem::Requirement
68
- none: false
69
109
  requirements:
70
- - - ! '>='
110
+ - - ">="
71
111
  - !ruby/object:Gem::Version
72
112
  version: '0'
73
- segments:
74
- - 0
75
- hash: 389504047466366044
76
113
  required_rubygems_version: !ruby/object:Gem::Requirement
77
- none: false
78
114
  requirements:
79
- - - ! '>='
115
+ - - ">="
80
116
  - !ruby/object:Gem::Version
81
117
  version: '0'
82
- segments:
83
- - 0
84
- hash: 389504047466366044
85
118
  requirements: []
86
119
  rubyforge_project:
87
- rubygems_version: 1.8.23
120
+ rubygems_version: 2.6.8
88
121
  signing_key:
89
- specification_version: 3
122
+ specification_version: 4
90
123
  summary: Ruby client for Carrot2
91
- test_files: []
124
+ test_files:
125
+ - test/carrot2_test.rb
126
+ - test/test_helper.rb