openamplify 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,67 @@
1
+ module OpenAmplify
2
+
3
+ module Analysis
4
+
5
+ class Context
6
+ VALID_OPTIONS_KEYS = OpenAmplify::Configuration::VALID_OPTIONS_KEYS + [:input]
7
+
8
+ attr_accessor *VALID_OPTIONS_KEYS
9
+
10
+ attr_accessor :client
11
+ attr_reader :result
12
+
13
+ def initialize(client, input, options)
14
+ self.client = client
15
+ self.input = input
16
+
17
+ merged_options = OpenAmplify.options.merge(options)
18
+ OpenAmplify::Configuration::VALID_OPTIONS_KEYS.each do |key|
19
+ send("#{key}=", merged_options[key])
20
+ end
21
+ end
22
+
23
+ # The empty?, to_s, to_str are to make our object play
24
+ # with others that expect a string.
25
+ #
26
+ # Example, you can do this:
27
+ # puts result
28
+ #
29
+ # instead of:
30
+ # puts result.to_s
31
+
32
+ def empty?
33
+ result.empty?
34
+ end
35
+
36
+ def to_s
37
+ "#{result}"
38
+ end
39
+ alias_method :to_str, :to_s
40
+
41
+ # Support various conversion helpers
42
+
43
+ %w(xml json json_js rdf rdfa csv signals pretty dart oas).each do |format|
44
+ define_method("to_#{format}") do
45
+ @result = call(:output_format => format)
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def result
52
+ @result ||= call
53
+ end
54
+
55
+ def call(options={})
56
+ @result = client.request_analysis(request_analysis_options.merge(options))
57
+ end
58
+
59
+ def request_analysis_options
60
+ Hash[* VALID_OPTIONS_KEYS.map { |key| [key, send(key) ]}.flatten ]
61
+ end
62
+
63
+ end # Context
64
+
65
+ end # Analysis
66
+
67
+ end
@@ -0,0 +1,82 @@
1
+ require 'openamplify/analysis/context'
2
+ require 'openamplify/connection'
3
+ require 'openamplify/request'
4
+
5
+ module OpenAmplify
6
+ # Provides access to the OpenAmplify API http://portaltnx20.openamplify.com/AmplifyWeb_v20/
7
+ #
8
+ # Basic usage of the library is to call supported methods via the Client class.
9
+ #
10
+ # text = "After getting the MX1000 laser mouse and the Z-5500 speakers i fell in love with logitech"
11
+ # OpenAmplify::Client.new.amplify(text)
12
+
13
+ class Client
14
+ include OpenAmplify::Connection
15
+ include OpenAmplify::Request
16
+
17
+ attr_accessor *Configuration::VALID_CONFIG_KEYS
18
+
19
+ def initialize(options={})
20
+ merged_options = OpenAmplify.options.merge(options)
21
+ Configuration::VALID_CONFIG_KEYS.each do |key|
22
+ send("#{key}=", merged_options[key])
23
+ end
24
+ end
25
+
26
+ def amplify(input, options={})
27
+ options = analysis_options.merge(options)
28
+ Analysis::Context.new(self, input, options)
29
+ end
30
+
31
+ def analysis_options
32
+ Hash[ *Configuration::VALID_OPTIONS_KEYS.map { |key| [key, send(key)] }.flatten ]
33
+ end
34
+
35
+ def request_analysis(options)
36
+ params = prepare_request_params(options)
37
+
38
+ case self.method
39
+ when :post
40
+ post(self.endpoint, params)
41
+ else
42
+ get(self.endpoint, params)
43
+ end
44
+ end
45
+
46
+ # @deprecated Please use {#amplify} instead
47
+ def analyze_text(input)
48
+ warn "[DEPRECATION] `analyze_text` is deprecated. Please use `amplify` instead."
49
+ amplify input
50
+ end
51
+
52
+ # @deprecated Please use {#endpoint} instead
53
+ def base_url=(url)
54
+ warn "[DEPRECATION] `base_url` is deprecated. Please use `endpoint` instead."
55
+ self.endpoint = url
56
+ end
57
+
58
+ private
59
+
60
+ # Formulate the parameters that is understood by
61
+ # the OpenAmplify webservice.
62
+ # ex: :api_key becomes 'apikey'
63
+ def prepare_request_params(options)
64
+ params = detect_request_input options.delete(:input)
65
+
66
+ options.inject(params) do |params, kv|
67
+ key, value = kv
68
+ params.merge!("#{key.to_s.downcase.gsub(/_+/, '')}" => value)
69
+ end
70
+ end
71
+
72
+ def detect_request_input(input)
73
+ if input =~ /^https?:\/\//
74
+ { 'sourceurl' => input }
75
+ else
76
+ { 'inputtext' => input }
77
+ end
78
+ end
79
+
80
+ end # Client
81
+
82
+ end
@@ -0,0 +1,54 @@
1
+ require 'openamplify/version'
2
+
3
+ # TODO: output_format, analysis, scoring can be specied in the client and becomes the default unless overriden
4
+
5
+ module OpenAmplify
6
+ # Defines constants and methods for configuring a client
7
+ module Configuration
8
+ VALID_CONNECTION_KEYS = [:endpoint, :user_agent, :method, :adapter].freeze
9
+ VALID_OPTIONS_KEYS = [:api_key, :analysis, :output_format, :scoring].freeze
10
+
11
+ VALID_CONFIG_KEYS = VALID_CONNECTION_KEYS + VALID_OPTIONS_KEYS
12
+
13
+ DEFAULT_ENDPOINT = 'http://portaltnx20.openamplify.com/AmplifyWeb_v21/AmplifyThis'
14
+ DEFAULT_HTTP_METHOD = :get
15
+ DEFAULT_HTTP_ADAPTER = :net_http
16
+ DEFAULT_USER_AGENT = "OpenAmplify Ruby Gem #{OpenAmplify::VERSION}".freeze
17
+
18
+ DEFAULT_API_KEY = nil
19
+ DEFAULT_ANALYSIS = :all
20
+ DEFAULT_OUTPUT_FORMAT = :xml
21
+ DEFAULT_SCORING = :standard
22
+ DEFAULT_SOURCE_URL = nil
23
+ DEFAULT_INPUT_TEXT = nil
24
+
25
+ attr_accessor *VALID_CONFIG_KEYS
26
+
27
+ def self.extended(base)
28
+ base.reset
29
+ end
30
+
31
+ # Convenience method to allow configuration options to be set in a block
32
+ def configure
33
+ yield self
34
+ end
35
+
36
+ def options
37
+ Hash[ * VALID_CONFIG_KEYS.map { |key| [key, send(key)] }.flatten ]
38
+ end
39
+
40
+ def reset
41
+ self.endpoint = DEFAULT_ENDPOINT
42
+ self.method = DEFAULT_HTTP_METHOD
43
+ self.adapter = DEFAULT_HTTP_ADAPTER
44
+ self.user_agent = DEFAULT_USER_AGENT
45
+
46
+ self.api_key = DEFAULT_API_KEY
47
+ self.analysis = DEFAULT_ANALYSIS
48
+ self.output_format = DEFAULT_OUTPUT_FORMAT
49
+ self.scoring = DEFAULT_SCORING
50
+ end
51
+
52
+ end # Configuration
53
+
54
+ end
@@ -0,0 +1,28 @@
1
+ require 'faraday'
2
+ require 'openamplify/response/raise_client_error'
3
+ require 'openamplify/response/raise_server_error'
4
+
5
+ module OpenAmplify
6
+ module Connection
7
+
8
+ private
9
+
10
+ def connection(options)
11
+ default_options = {
12
+ :url => options.fetch(:endpoint, endpoint)
13
+ }
14
+
15
+ @connection ||= Faraday.new(default_options) do |builder|
16
+ builder.use OpenAmplify::Response::RaiseClientError
17
+ builder.use OpenAmplify::Response::RaiseServerError
18
+
19
+ # TODO: Make logging optional
20
+ # builder.response :logger
21
+
22
+ builder.adapter adapter
23
+ end
24
+ end
25
+
26
+ end # Connection
27
+
28
+ end
@@ -0,0 +1,20 @@
1
+ module OpenAmplify
2
+
3
+ class Error < StandardError
4
+ attr_reader :http_headers
5
+
6
+ def initialize(message, http_headers)
7
+ @http_headers = http_headers
8
+ super(message)
9
+ end
10
+
11
+ end # Error
12
+
13
+ class Error::ServerError < OpenAmplify::Error; end
14
+ class Error::ServiceUnavailable < Error::ServerError; end
15
+
16
+ class Error::ClientError < OpenAmplify::Error; end
17
+ class Error::Forbidden < Error::ClientError; end
18
+ class Error::BadRequest < Error::ClientError; end
19
+ class Error::RequestTooLarge < Error::ClientError; end
20
+ end
@@ -0,0 +1,35 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+
4
+ module OpenAmplify
5
+ # Handless HTTP requests
6
+ module Request
7
+ def get(path, params={}, options={})
8
+ request(:get, path, params, options)
9
+ end
10
+
11
+ def post(path, params={}, options={})
12
+ request(:post, path, params, options)
13
+ end
14
+
15
+ private
16
+
17
+ def request(method, path, params, options)
18
+ response = connection(options).run_request(method, nil, nil, nil) do |request|
19
+ request.options[:raw] = true if options[:raw]
20
+
21
+ case method.to_sym
22
+ when :get
23
+ request.url(path, params)
24
+ when :post
25
+ request.path = path
26
+ request.body = params unless params.empty?
27
+ end
28
+ end
29
+
30
+ options[:raw] ? response : response.body
31
+ end
32
+
33
+ end # Request
34
+
35
+ end
@@ -0,0 +1,28 @@
1
+ require 'faraday'
2
+
3
+ module OpenAmplify
4
+
5
+ module Response
6
+
7
+ class RaiseClientError < Faraday::Response::Middleware
8
+
9
+ def on_complete(env)
10
+ status = env[:status].to_i
11
+ body = env[:body]
12
+ headers = env[:response_headers]
13
+
14
+ case status
15
+ when 400
16
+ raise OpenAmplify::Error::BadRequest.new body, headers
17
+ when 403
18
+ raise OpenAmplify::Error::Forbidden.new body, headers
19
+ when 413
20
+ raise OpenAmplify::Error::RequestTooLarge.new body, headers
21
+ end
22
+ end
23
+
24
+ end # RaiseClientError
25
+
26
+ end # Response
27
+
28
+ end
@@ -0,0 +1,23 @@
1
+ require 'faraday'
2
+ require 'openamplify/error'
3
+
4
+ module OpenAmplify
5
+ module Response
6
+ class RaiseServerError < Faraday::Response::Middleware
7
+
8
+ def on_complete(env)
9
+ status = env[:status].to_i
10
+ body = env[:body]
11
+ headers = env[:response_headers]
12
+
13
+ case status
14
+ when 503
15
+ raise OpenAmplify::Error::ServiceUnavailable.new "503 No server is available to handle this request.", headers
16
+ end
17
+ end
18
+
19
+ end # RaiseServerError
20
+
21
+ end # Response
22
+
23
+ end
@@ -0,0 +1,3 @@
1
+ module OpenAmplify
2
+ VERSION = "0.3.0"
3
+ end
@@ -1,56 +1,26 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "openamplify/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{openamplify}
8
- s.version = "0.2.3"
6
+ s.name = "openamplify"
7
+ s.version = OpenAmplify::VERSION
8
+ s.authors = ["Greg Moreno"]
9
+ s.email = ["greg.moreno@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = "Wrapper for the OpenAmplify API"
12
+ s.description = "The OpenAmplify API reads text you supply and returns linguistic data explaining and classifying the content."
9
13
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Greg Moreno"]
12
- s.date = %q{2010-06-22}
13
- s.description = %q{The OpenAmplify API reads text you supply and returns linguistic data explaining and classifying the content.}
14
- s.email = %q{rubyoncloud@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".gitignore",
21
- "History",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION.yml",
26
- "lib/openamplify.rb",
27
- "lib/openamplify/validations.rb",
28
- "openamplify.gemspec",
29
- "test/test_openamplify.rb"
30
- ]
31
- s.homepage = %q{http://github.com/gregmoreno/openamplify}
32
- s.rdoc_options = ["--charset=UTF-8"]
33
- s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.6}
35
- s.summary = %q{Wrapper for the OpenAmplify API}
36
- s.test_files = [
37
- "test/test_openamplify.rb"
38
- ]
14
+ s.rubyforge_project = "openamplify"
39
15
 
40
- if s.respond_to? :specification_version then
41
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
42
- s.specification_version = 3
16
+ s.files = `git ls-files`.split("\n")
43
17
 
44
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<json>, ["~> 1.2"])
46
- s.add_development_dependency(%q<shoulda>, ["~> 2.11"])
47
- else
48
- s.add_dependency(%q<json>, ["~> 1.2"])
49
- s.add_dependency(%q<shoulda>, ["~> 2.11"])
50
- end
51
- else
52
- s.add_dependency(%q<json>, ["~> 1.2"])
53
- s.add_dependency(%q<shoulda>, ["~> 2.11"])
54
- end
55
- end
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
56
21
 
22
+ s.add_dependency 'faraday'
23
+ s.add_development_dependency 'minitest'
24
+ s.add_development_dependency 'nokogiri'
25
+ s.add_development_dependency 'json'
26
+ end
@@ -0,0 +1,2 @@
1
+ After getting the MX1000 laser mouse and the Z-5500 speakers i fell in
2
+ love with logitech
@@ -0,0 +1,14 @@
1
+ require 'openamplify'
2
+ require 'minitest/spec'
3
+ require 'minitest/autorun'
4
+
5
+ require 'awesome_print'
6
+
7
+ OpenAmplify.configure do |config|
8
+ config.api_key = ENV['OPEN_AMPLIFY_KEY']
9
+ end
10
+
11
+ def amplify_input
12
+ fpath = File.dirname(__FILE__) + '/fixtures/input.txt'
13
+ @amplify_params ||= File.read(fpath)
14
+ end