opener-opinion-detector 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e970449786cd7a7d5c31976bb12fbdcb784ee724
4
- data.tar.gz: c4ef6b925a24d5385f5552f0c485998060c7bbcc
3
+ metadata.gz: 31c4caf46aa2fa93dd88d5138cbd495325783565
4
+ data.tar.gz: 4e5d503fcc00e415d5bb0322a0adc0260d5b2cde
5
5
  SHA512:
6
- metadata.gz: 624550431e66fa3eed2286b53371ac883510f7f473aba7671e129f5502303ecf92af6f43fa876d453da621b5eb6dbc6bdb2f309ee0d2542f4918a796989961b6
7
- data.tar.gz: b5c059110b0940e0a917a118f688778d15637c22d5bed944098cfef11ca0da60765781b51e05c084d41ef4b7511bb51099628a88710616bfc75ba8c0754d8ad0
6
+ metadata.gz: d0ebc3136cec62b3178af44eacb6f49d7498a7806fa160fc802b4c496e5695728c1c3b19181e2972a48cf8f66fe5d49957fc1b96a8f9c38524ca22dfa54ffdf9
7
+ data.tar.gz: 7edbf31a74dae022a6ca3e16eb6adb848bb00d5376fa9bf66d22ed8d144d6a19674ebbc00960e6d6144ca9cff7b0fde21b9393efbb80254e19fb84a209dcd02c
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2014 OpeNER Project Consortium
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md CHANGED
@@ -1,67 +1,72 @@
1
- Opinion Detector
2
- ----------------
1
+ # Opinion Detector
3
2
 
4
3
  Component that wraps a machine learned Opinion Detector in Python.
5
4
 
6
- ### Confused by some terminology?
5
+ ## Confused by some terminology?
7
6
 
8
- This software is part of a larger collection of natural language processing tools known as "the OpeNER project". You can find more information about the project at [the OpeNER portal](http://opener-project.github.io). There you can also find references to terms like KAF (an XML standard to represent linguistic annotations in texts), component, cores, scenario's and pipelines.
7
+ This software is part of a larger collection of natural language processing
8
+ tools known as "the OpeNER project". You can find more information about the
9
+ project at [the OpeNER portal](http://opener-project.github.io). There you can
10
+ also find references to terms like KAF (an XML standard to represent linguistic
11
+ annotations in texts), component, cores, scenario's and pipelines.
9
12
 
10
- Quick Use Example
11
- -----------------
13
+ ## Quick Use Example
12
14
 
13
15
  Installing the opinion-detector can be done by executing:
14
16
 
15
17
  gem install opener-opinion-detector
16
18
 
17
- Please bare in mind that all components in OpeNER take KAF as an input and output KAF by default.
19
+ Please keep in mind that all components in OpeNER take KAF as an input and
20
+ output KAF by default.
18
21
 
19
22
  ### Command line interface
20
23
 
21
- You should now be able to call the opinion detector as a regular shell command: by its name. Once installed the gem normally sits in your path so you can call it directly from anywhere.
24
+ You should now be able to call the opinion detector as a regular shell command:
25
+ by its name. Once installed the gem normally sits in your path so you can call
26
+ it directly from anywhere.
22
27
 
23
- This application reads a text from standard input in order process it. It needs models to work. There is a free set of models available trained on a news corpus.
28
+ This application reads a text from standard input in order process it. It needs
29
+ models to work. There is a free set of models available trained on a news
30
+ corpus.
24
31
 
25
32
  cat englist.kaf | opinion-detector \
26
33
  --resource-path /path/to/models \
27
34
  --resource-url http://opener.s3.amazonaws.com/Models/final_models_news_20140522.zip
28
35
 
29
- You have to download the models separately. You can download them here:
30
-
31
- This will output:
32
-
33
- ```
34
-
35
- ```
36
-
37
36
  ### Webservices
38
37
 
39
38
  You can launch a webservice by executing:
40
39
 
41
40
  opinion-detector-server
42
41
 
43
- This will launch a mini webserver with the webservice. It defaults to port 9292, so you can access it at <http://localhost:9292>.
42
+ This will launch a mini webserver with the webservice. It defaults to port 9292,
43
+ so you can access it at <http://localhost:9292>.
44
44
 
45
- To launch it on a different port provide the `-p [port-number]` option like this:
45
+ To launch it on a different port provide the `-p [port-number]` option like
46
+ this:
46
47
 
47
48
  opinion-detector-server -p 1234
48
49
 
49
50
  It then launches at <http://localhost:1234>
50
51
 
51
- Documentation on the Webservice is provided by surfing to the urls provided above. For more information on how to launch a webservice run the command with the ```-h``` option.
52
-
52
+ Documentation on the Webservice is provided by surfing to the urls provided
53
+ above. For more information on how to launch a webservice run the command with
54
+ the `--help` option.
53
55
 
54
56
  ### Daemon
55
57
 
56
- Last but not least the opinion detector comes shipped with a daemon that can read jobs (and write) jobs to and from Amazon SQS queues. For more information type:
58
+ Last but not least the opinion detector comes shipped with a daemon that can
59
+ read jobs (and write) jobs to and from Amazon SQS queues. For more information
60
+ type:
57
61
 
58
62
  opinion-detector-daemon -h
59
63
 
64
+ ## Description of dependencies
60
65
 
61
- Description of dependencies
62
- ---------------------------
63
-
64
- This component runs best if you run it in an environment suited for OpeNER components. You can find an installation guide and helper tools in the [OpeNER installer](https://github.com/opener-project/opener-installer) and an [installation guide on the Opener Website](http://opener-project.github.io/getting-started/how-to/local-installation.html)
66
+ This component runs best if you run it in an environment suited for OpeNER
67
+ components. You can find an installation guide and helper tools in the
68
+ [OpeNER installer](https://github.com/opener-project/opener-installer) and an
69
+ [installation guide on the Opener Website](http://opener-project.github.io/getting-started/how-to/local-installation.html)
65
70
 
66
71
  At least you need the following system setup:
67
72
 
@@ -71,38 +76,34 @@ At least you need the following system setup:
71
76
  * Python 2.6 or newer
72
77
  * lxml
73
78
 
74
- Domain Adaption
75
- ---------------
79
+ ## Domain Adaption
76
80
 
77
- TODO
81
+ TODO
78
82
 
79
- Language Extension
80
- ------------------
83
+ ## Language Extension
81
84
 
82
- TODO
85
+ TODO
83
86
 
84
- The Core
85
- --------
87
+ ## The Core
86
88
 
87
- The component is a fat wrapper around the actual language technology core. You can find the core technolies in the following repository
89
+ The component is a fat wrapper around the actual language technology core. You
90
+ can find the core technolies in the following repository
88
91
 
89
92
  * [opinion-detector-base](https://github.com/opener-project/opinion-detector-base)
90
93
 
91
- Where to go from here
92
- ---------------------
94
+ ## Where to go from here
93
95
 
94
96
  * [Check the project website](http://opener-project.github.io)
95
97
  * [Checkout the webservice](http://opener.olery.com/opinion-detector)
96
98
 
97
- Report problem/Get help
98
- -----------------------
99
+ ## Report problem/Get help
99
100
 
100
- If you encounter problems, please email <support@opener-project.eu> or leave an issue in the
101
+ If you encounter problems, please email <support@opener-project.eu> or leave an
102
+ issue in the
101
103
  [issue tracker](https://github.com/opener-project/opinion-detector/issues).
102
104
 
103
105
 
104
- Contributing
105
- ------------
106
+ ## Contributing
106
107
 
107
108
  1. Fork it <http://github.com/opener-project/opinion-detector/fork>
108
109
  2. Create your feature branch (`git checkout -b my-new-feature`)
data/bin/opinion-detector CHANGED
@@ -1,6 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
+
3
+ require 'opener/core'
4
+
2
5
  require_relative '../lib/opener/opinion_detector'
3
6
 
4
- cli = Opener::OpinionDetector::CLI.new(:args => ARGV)
7
+ switcher = Opener::Core::ResourceSwitcher.new
8
+ cli = Opener::OpinionDetector::CLI.new
9
+
10
+ switcher.bind(cli.parser)
5
11
 
6
- cli.run(STDIN.tty? ? nil : STDIN.read)
12
+ cli.run
@@ -1,10 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'opener/core'
3
4
  require 'opener/daemons'
4
5
 
5
- exec_path = File.expand_path('../../exec/opinion-detector.rb', __FILE__)
6
+ switcher = Opener::Core::ResourceSwitcher.new
7
+ controller = Opener::Daemons::Controller.new(
8
+ :name => 'opener-opinion-detector',
9
+ :exec_path => File.expand_path('../../exec/opinion-detector.rb', __FILE__)
10
+ )
6
11
 
7
- Opener::Daemons::Controller.new(
8
- :name => 'opinion-detector',
9
- :exec_path => exec_path
10
- )
12
+ switcher.bind(controller.parser.parser)
13
+
14
+ controller.run
@@ -1,54 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'puma/cli'
4
- require 'optparse'
5
3
  require 'opener/core'
4
+ require 'opener/webservice'
6
5
 
7
- rack_config = File.expand_path('../../config.ru', __FILE__)
8
- switcher = Opener::Core::ResourceSwitcher.new
9
- puma_args = [rack_config]
10
- switcher_opts = {}
6
+ switcher = Opener::Core::ResourceSwitcher.new
7
+ parser = Opener::Webservice::OptionParser.new(
8
+ 'opener-opinion-detector',
9
+ File.expand_path('../../config.ru', __FILE__)
10
+ )
11
11
 
12
- option_parser = OptionParser.new do |opts|
13
- opts.banner = "Usage: #{File.basename($0)} [OPTIONS]"
12
+ switcher.bind(parser.parser)
14
13
 
15
- opts.separator "\nOptions:\n\n"
16
-
17
- opts.on('-h', '--help', 'Shows this help message') do
18
- abort option_parser.to_s
19
- end
20
-
21
- opts.on('-S', '--state PATH', 'Where to store the state details') do |val|
22
- puma_args += ['--state', val]
23
- end
24
-
25
- opts.on('-b', '--bind URI', 'URI to bind to (tcp://, unix://, ssl://)') do |val|
26
- puma_args += ['--bind', val]
27
- end
28
-
29
- opts.on('--pidfile PATH', 'Use PATH as a pidfile') do |val|
30
- puma_args += ['--pidfile', val]
31
- end
32
-
33
- opts.on('--daemon', 'Daemonize the server into the background') do |val|
34
- puma_args << '--daemon'
35
- end
36
-
37
- opts.on('-e', '--environment ENVIRONMENT', 'The environment to use') do |val|
38
- puma_args += ['--environment', val]
39
- end
40
-
41
- opts.separator "\nResource Options:\n\n"
42
-
43
- switcher.bind(opts, switcher_opts)
44
- end
45
-
46
- option_parser.parse!(ARGV)
47
-
48
- switcher.install(switcher_opts)
49
-
50
- # Puma on JRuby does some weird stuff with forking/exec. As a result of this we
51
- # *have to* update ARGV as otherwise running Puma as a daemon does not work.
52
- ARGV.replace(puma_args)
53
-
54
- Puma::CLI.new(ARGV).run
14
+ parser.run
@@ -1,19 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'opener/daemons'
4
- require 'opener/core'
5
4
 
6
5
  require_relative '../lib/opener/opinion_detector'
7
6
 
8
- switcher = Opener::Core::ResourceSwitcher.new
9
- switcher_opts = {}
7
+ daemon = Opener::Daemons::Daemon.new(Opener::OpinionDetector)
10
8
 
11
- parser = Opener::Daemons::OptParser.new do |opts|
12
- switcher.bind(opts, switcher_opts)
13
- end
14
-
15
- options = parser.parse!(ARGV)
16
- daemon = Opener::Daemons::Daemon.new(Opener::OpinionDetector, options)
17
-
18
- switcher.install(switcher_opts)
19
9
  daemon.start
@@ -1,8 +1,8 @@
1
- require 'opener/opinion_detectors/base'
2
1
  require 'open3'
2
+
3
3
  require 'nokogiri'
4
- require 'optparse'
5
- require 'opener/core'
4
+ require 'slop'
5
+ require 'opener/opinion_detectors/base'
6
6
 
7
7
  require_relative 'opinion_detector/version'
8
8
  require_relative 'opinion_detector/cli'
@@ -18,50 +18,55 @@ module Opener
18
18
  class OpinionDetector
19
19
  attr_reader :options
20
20
 
21
- ##
22
- # Hash containing the default options to use.
23
- #
24
- # @return [Hash]
25
- #
26
- DEFAULT_OPTIONS = {
27
- :args => []
28
- }.freeze
29
-
30
21
  ##
31
22
  # @param [Hash] options
32
23
  #
33
- # @option options [Array] :args Collection of arbitrary arguments to pass
34
- # to the individual tokenizer commands.
24
+ # @see [Opener::OpinionDetectors::Base#initialize]
35
25
  #
36
26
  def initialize(options = {})
37
- @options = DEFAULT_OPTIONS.merge(options)
27
+ @options = options
38
28
  end
39
29
 
40
30
  ##
41
- # Processes the input and returns an array containing the output of STDOUT,
42
- # STDERR and an object containing process information.
31
+ # Processes the input KAF document and returns a new KAF document containing
32
+ # the results.
43
33
  #
44
34
  # @param [String] input
45
35
  # @return [String]
46
36
  #
47
37
  def run(input)
48
- begin
49
- language = language_from_kaf(input)
38
+ language = language_from_kaf(input)
50
39
 
51
- unless valid_language?(language)
52
- raise ArgumentError, "The specified language (#{language}) is invalid"
53
- end
40
+ unless valid_language?(language)
41
+ raise ArgumentError, "The specified language (#{language}) is invalid"
42
+ end
54
43
 
55
- kernel = language_constant(language).new(:args => options[:args])
44
+ kernel = language_constant(language).new(kernel_options)
56
45
 
57
- return kernel.run(input)
58
- rescue Exception => error
59
- return Opener::Core::ErrorLayer.new(input, error.message, self.class).add
60
- end
46
+ return kernel.run(input)
61
47
  end
62
48
 
63
49
  protected
64
50
 
51
+ ##
52
+ # Returns the options to use for the kernel.
53
+ #
54
+ # @return [Hash]
55
+ #
56
+ def kernel_options
57
+ return options.merge(:resource_path => models_path)
58
+ end
59
+
60
+ ##
61
+ # Returns the path to the models to use.
62
+ #
63
+ # @return [String]
64
+ #
65
+ def models_path
66
+ return options[:resource_path] || ENV['RESOURCE_PATH'] ||
67
+ ENV['OPINION_DETECTOR_MODELS_PATH']
68
+ end
69
+
65
70
  ##
66
71
  # Extracts the language from a KAF document.
67
72
  #
@@ -1,85 +1,65 @@
1
- require 'opener/core'
2
-
3
1
  module Opener
4
2
  class OpinionDetector
5
3
  ##
6
- # CLI wrapper around {Opener::OpinionDetector} using OptionParser.
4
+ # CLI wrapper around {Opener::OpinionDetector} using Slop.
7
5
  #
8
- # @!attribute [r] options
9
- # @return [Hash]
10
- # @!attribute [r] option_parser
11
- # @return [OptionParser]
6
+ # @!attribute [r] parser
7
+ # @return [Slop]
12
8
  #
13
9
  class CLI
14
- attr_reader :options, :option_parser, :resource_switcher
10
+ attr_reader :parser
11
+
12
+ def initialize
13
+ @parser = configure_slop
14
+ end
15
15
 
16
16
  ##
17
- # @param [Hash] options
17
+ # @param [Array] argv
18
18
  #
19
- def initialize(options = {})
20
- @options = DEFAULT_OPTIONS.merge(options)
21
- @resource_switcher = Opener::Core::ResourceSwitcher.new
22
-
23
- @option_parser = OptionParser.new do |opts|
24
- opts.program_name = 'opinion-detector'
25
- opts.summary_indent = ' '
26
-
27
- resource_switcher.bind(opts, @options)
28
-
29
- opts.on('-h', '--help', 'Shows this help message') do
30
- show_help
31
- end
19
+ def run(argv = ARGV)
20
+ parser.parse(argv)
21
+ end
32
22
 
33
- opts.on('-v', '--version', 'Shows the current version') do
34
- show_version
35
- end
23
+ ##
24
+ # @return [Slop]
25
+ #
26
+ def configure_slop
27
+ return Slop.new(:strict => false, :indent => 2, :help => true) do
28
+ banner 'Usage: opinion-detector [OPTIONS]'
36
29
 
37
- opts.on('-l', '--log', 'Enables logging to STDERR') do
38
- @options[:logging] = true
39
- end
30
+ separator <<-EOF.chomp
40
31
 
41
- opts.on('-d', '--domain DOMAIN_NAME', 'Domain name of the models.') do |v|
42
- @options[:domain] = v
43
- end
32
+ About:
44
33
 
45
- opts.separator <<-EOF
34
+ Machine learning based opinion detection for various languages such as Dutch
35
+ and English. This command reads input from STDIN.
46
36
 
47
- Examples:
37
+ Example:
48
38
 
49
- cat example.kaf | #{opts.program_name}
50
- cat example.kaf | #{opts.program_name} -l # Enables logging to STDERR
39
+ cat some_file.kaf | opinion-detector
51
40
  EOF
52
- end
53
41
 
54
- option_parser.parse!(options[:args])
55
- resource_switcher.install(@options)
56
- end
42
+ separator "\nOptions:\n"
57
43
 
58
- ##
59
- # @param [String] input
60
- #
61
- def run(input)
62
- option_parser.parse!(options[:args])
44
+ on :v, :version, 'Shows the current version' do
45
+ abort "opinion-detector v#{VERSION} on #{RUBY_DESCRIPTION}"
46
+ end
63
47
 
64
- detector = OpinionDetector.new(options)
48
+ on :d=, :domain=, 'The domain to use for the models',
49
+ :as => String,
50
+ :default => 'hotel'
65
51
 
66
- puts detector.run(input)
67
- end
52
+ run do |opts, args|
53
+ detector = OpinionDetector.new(
54
+ :args => args,
55
+ :domain => opts[:domain]
56
+ )
68
57
 
69
- private
58
+ input = STDIN.tty? ? nil : STDIN.read
70
59
 
71
- ##
72
- # Shows the help message and exits the program.
73
- #
74
- def show_help
75
- abort option_parser.to_s
76
- end
77
-
78
- ##
79
- # Shows the version and exits the program.
80
- #
81
- def show_version
82
- abort "#{option_parser.program_name} v#{VERSION} on #{RUBY_DESCRIPTION}"
60
+ puts detector.run(input)
61
+ end
62
+ end
83
63
  end
84
64
  end # CLI
85
65
  end # OpinionDetector
@@ -1,5 +1,3 @@
1
- require 'sinatra/base'
2
- require 'httpclient'
3
1
  require 'opener/webservice'
4
2
 
5
3
  module Opener
@@ -7,23 +5,11 @@ module Opener
7
5
  ##
8
6
  # Opinion Detector server powered by Sinatra.
9
7
  #
10
- class Server < Webservice
8
+ class Server < Webservice::Server
11
9
  set :views, File.expand_path('../views', __FILE__)
12
- text_processor OpinionDetector
13
- accepted_params :input
14
10
 
15
- ##
16
- # @see Opener::Webservice#analyze
17
- #
18
- def analyze(*args)
19
- begin
20
- super
21
- # ArgumentErrors are used for invalid languages. These happen too often
22
- # so we'll supress them for now.
23
- rescue ArgumentError => error
24
- halt(400, error.message.strip)
25
- end
26
- end
11
+ self.text_processor = OpinionDetector
12
+ self.accepted_params = [:input]
27
13
  end # Server
28
14
  end # OpinionDetector
29
15
  end # Opener
@@ -1,5 +1,5 @@
1
1
  module Opener
2
2
  class OpinionDetector
3
- VERSION = "1.2.0"
3
+ VERSION = '2.0.0'
4
4
  end
5
5
  end
@@ -10,24 +10,26 @@ Gem::Specification.new do |gem|
10
10
  gem.has_rdoc = "yard"
11
11
  gem.required_ruby_version = ">= 1.9.2"
12
12
 
13
+ gem.license = 'Apache 2.0'
14
+
13
15
  gem.files = Dir.glob([
14
16
  'lib/**/*',
15
17
  'config.ru',
16
18
  '*.gemspec',
17
19
  'README.md',
20
+ 'LICENSE.txt',
18
21
  'exec/**/*'
19
22
  ]).select { |file| File.file?(file) }
20
23
 
21
24
  gem.executables = Dir.glob('bin/*').map { |file| File.basename(file) }
22
25
 
23
26
  gem.add_dependency 'opener-opinion-detector-base'
27
+ gem.add_dependency 'opener-daemons', '~> 2.2'
28
+ gem.add_dependency 'opener-webservice', '~> 2.1'
29
+ gem.add_dependency 'opener-core', '~> 2.2'
30
+
24
31
  gem.add_dependency 'nokogiri'
25
- gem.add_dependency 'sinatra', '~>1.4.2'
26
- gem.add_dependency 'httpclient'
27
- gem.add_dependency 'puma'
28
- gem.add_dependency 'opener-daemons'
29
- gem.add_dependency 'opener-core', '~> 1.0.2'
30
- gem.add_dependency 'opener-webservice'
32
+ gem.add_dependency 'slop', '~> 3.5'
31
33
 
32
34
  gem.add_development_dependency 'rspec'
33
35
  gem.add_development_dependency 'cucumber'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opener-opinion-detector
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - development@olery.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opener-opinion-detector-base
@@ -25,63 +25,49 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: nokogiri
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
- - !ruby/object:Gem::Dependency
42
- name: sinatra
28
+ name: opener-daemons
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: 1.4.2
33
+ version: '2.2'
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: 1.4.2
40
+ version: '2.2'
55
41
  - !ruby/object:Gem::Dependency
56
- name: httpclient
42
+ name: opener-webservice
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ">="
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '0'
47
+ version: '2.1'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ">="
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '0'
54
+ version: '2.1'
69
55
  - !ruby/object:Gem::Dependency
70
- name: puma
56
+ name: opener-core
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - ">="
59
+ - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '0'
61
+ version: '2.2'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - ">="
66
+ - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '2.2'
83
69
  - !ruby/object:Gem::Dependency
84
- name: opener-daemons
70
+ name: nokogiri
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,33 +81,19 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: opener-core
84
+ name: slop
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: 1.0.2
89
+ version: '3.5'
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: 1.0.2
111
- - !ruby/object:Gem::Dependency
112
- name: opener-webservice
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
96
+ version: '3.5'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: rspec
127
99
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +159,7 @@ executables:
187
159
  extensions: []
188
160
  extra_rdoc_files: []
189
161
  files:
162
+ - LICENSE.txt
190
163
  - README.md
191
164
  - bin/opinion-detector
192
165
  - bin/opinion-detector-daemon
@@ -201,7 +174,8 @@ files:
201
174
  - lib/opener/opinion_detector/views/index.erb
202
175
  - opener-opinion-detector.gemspec
203
176
  homepage: http://opener-project.github.com/
204
- licenses: []
177
+ licenses:
178
+ - Apache 2.0
205
179
  metadata: {}
206
180
  post_install_message:
207
181
  rdoc_options: []