abbyy-cloud 0.0.2 → 0.0.3

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: 1d52d8a388887b3f4e08cf42ef30ae712b906871
4
- data.tar.gz: a10ee9b0f18b09cb669b1d48f8724f2df89a9ba2
3
+ metadata.gz: 19c1ff610b7210be89b61f821ff6642ce0d149c3
4
+ data.tar.gz: 896dbcb70a0796ef0445b7184d703bba31c2259e
5
5
  SHA512:
6
- metadata.gz: ad61bbb9f0c6fa939e34383692fece8384ed621269eb4761e530907e12d8a95d34b5ce3c36dd001f616b94f500ea0d21fc964bb788b80b79997f8417c2341c2a
7
- data.tar.gz: 66999b7e975385018c8d40f6f31e67414ece9f4f36781af0359237024dff32f23de0880691f608613aaf4539ca6012316b95bb2fc3f7a6394bae2702be283a3f
6
+ metadata.gz: ca702183cde764f614c77f26bb5bafa17a2f96614d230efccf97775f7f839fea047c35ea6bdb67b24fb270cada0402f89caefe0fcc8f7264fd295218e43f4a95
7
+ data.tar.gz: f4ec867431b3eab6e736700831db4f62aaa047289c90ee81847347bdf933331a1c742973c1ed96557a8f5f69fd4206577253a628d3fd4049049ae7f07f35dcb4
@@ -1,3 +1,26 @@
1
+ # [v0.0.3 2016-08-18](https://github.com/nepalez/abbyy-cloud/tree/v0.0.3)
2
+
3
+ ### Bugs Fixed
4
+
5
+ * Fix version in root path to ABBYY Cloud API (nepalez)
6
+ * Fix validation of language names (nepalez)
7
+ * Allow ResponseError to take response with non-json body (nepalez)
8
+
9
+ ### Added
10
+
11
+ * Operation `.mt.engines` (nepalez)
12
+
13
+ ### Changed
14
+
15
+ * Remove validation of engine names (nepalez)
16
+
17
+ ### Internal
18
+
19
+ * Add coverage to all models (nepalez)
20
+ * Add method `Types.register_type` for custom types (nepalez)
21
+
22
+ [Compare v0.0.2...v0.0.3](https://github.com/nepalez/abbyy-cloud/compare/v0.0.2...v0.0.3)
23
+
1
24
  # [v0.0.2 2016-08-18](https://github.com/nepalez/abbyy-cloud/tree/v0.0.2)
2
25
 
3
26
  ### Changed
data/README.md CHANGED
@@ -17,6 +17,8 @@ The library is available as a gem `abbyy-cloud`.
17
17
  Initialize the client with a corresponding credentials:
18
18
 
19
19
  ```ruby
20
+ require "abbyy/cloud"
21
+
20
22
  CLIENT = ABBYY::Cloud.new(id: "foo", token: "bar")
21
23
  ```
22
24
 
@@ -31,6 +33,32 @@ CLIENT = ABBYY::Cloud.new id: "foo",
31
33
  version: 0 # the only supported version
32
34
  ```
33
35
 
36
+ ### Machine Translations
37
+
38
+ #### Engines
39
+
40
+ See [the specification](https://api.abbyy.cloud/swagger/ui/index#!/MachineTranslation)
41
+
42
+ ```ruby
43
+ result = CLIENT.mt.engines
44
+ # => [#<ABBYY::Cloud::Models::Engine @name="Sandbox">]
45
+ ```
46
+
47
+ #### Engine
48
+
49
+ This operation is built on top of the previous one and simply takes settings for the specified engine:
50
+
51
+ ```ruby
52
+ result = CLIENT.mt.engine("Sandbox")
53
+
54
+ result.class # => ABBYY::Cloud::Models::Engine
55
+ result.name # => "Sandbox"
56
+ result.languages # => ["en", "ru"]
57
+ result.translation_directions # => [#<ABBYY::Cloud::Models::Direction source: "en", target: "ru">]
58
+ result.to_h
59
+ # => { name: "Sandbox", languages: ["en", "ru"], translation_directions: [{ source: "en", target: "ru" }] }
60
+ ```
61
+
34
62
  ### Orders
35
63
 
36
64
  #### Instant Translation
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "abbyy-cloud"
3
- gem.version = "0.0.2"
3
+ gem.version = "0.0.3"
4
4
  gem.authors = ["Andrew Kozin"]
5
5
  gem.email = ["andrew.kozin@gmail.com"]
6
6
  gem.summary = "HTTP client to ABBYY Cloud API"
@@ -17,15 +17,23 @@ module ABBYY
17
17
 
18
18
  require_relative "cloud/models/error"
19
19
  require_relative "cloud/models/translation"
20
+ require_relative "cloud/models/direction"
21
+ require_relative "cloud/models/engine"
20
22
 
21
23
  require_relative "cloud/operations/base"
22
24
  require_relative "cloud/operations/translate"
25
+ require_relative "cloud/operations/engines"
23
26
 
24
27
  require_relative "cloud/namespaces/base"
25
28
  require_relative "cloud/namespaces/orders"
29
+ require_relative "cloud/namespaces/machine_translations"
26
30
 
27
31
  attr_reader :settings
28
32
 
33
+ def mt
34
+ Namespaces::MachineTranslations.new(settings)
35
+ end
36
+
29
37
  def orders
30
38
  Namespaces::Orders.new(settings)
31
39
  end
@@ -14,7 +14,7 @@ class ABBYY::Cloud
14
14
 
15
15
  def call(http_method, path, body: nil, headers: nil)
16
16
  uri = root.merge(path).tap { |item| item.scheme = "https" }
17
- req = prepare_request(http_method, uri, body.to_h, headers.to_h)
17
+ req = prepare_request(http_method, uri, JSON(body.to_h), headers.to_h)
18
18
 
19
19
  Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
20
20
  handle_response http.request(req)
@@ -24,7 +24,7 @@ class ABBYY::Cloud
24
24
  private
25
25
 
26
26
  def root
27
- @root ||= URI("https://api.abbyy.cloud").merge("v#{version}")
27
+ @root ||= URI("https://api.abbyy.cloud").merge("v#{version}/")
28
28
  end
29
29
 
30
30
  def prepare_request(http_method, uri, body, headers)
@@ -5,7 +5,7 @@ class ABBYY::Cloud
5
5
  attr_reader :status, :data
6
6
 
7
7
  def initialize(response)
8
- @data = Models::Error[JSON.parse(response.body)]
8
+ @data = Models::Error[parse_response(response)]
9
9
  @status = response.code.to_i
10
10
 
11
11
  super <<-MESSAGE.gsub(/ +\|/, "")
@@ -15,5 +15,13 @@ class ABBYY::Cloud
15
15
  | model_state: #{data.model_state}
16
16
  MESSAGE
17
17
  end
18
+
19
+ private
20
+
21
+ def parse_response(response)
22
+ JSON.parse(response.body)
23
+ rescue
24
+ { error: "Server error", error_description: response.body }
25
+ end
18
26
  end
19
27
  end
@@ -0,0 +1,12 @@
1
+ class ABBYY::Cloud
2
+ module Models
3
+ # Description of the translation direction
4
+ class Direction < Struct
5
+ attribute :source, Types::Language
6
+ attribute :target, Types::Language
7
+ end
8
+
9
+ # Registers type Types::Direction
10
+ Types.register_type Direction
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ class ABBYY::Cloud
2
+ # Collection of models returned in requests
3
+ module Models
4
+ # Description of the engine
5
+ class Engine < Struct
6
+ attribute :name, Types::Strict::String
7
+ attribute :languages, Types::Array.member(Types::Language)
8
+ attribute :translation_directions, Types::Array.member(Types::Direction)
9
+ end
10
+
11
+ # Registers type Types::Engine
12
+ Types.register_type Engine
13
+ end
14
+ end
@@ -3,9 +3,9 @@ class ABBYY::Cloud
3
3
  module Models
4
4
  # An error returned by the server in case of wrong response
5
5
  class Error < Struct
6
- attribute :request_id, Types::Coercible::String.optional
7
- attribute :error, Types::Coercible::String.optional
8
- attribute :error_description, Types::Coercible::String.optional
6
+ attribute :request_id, Types::Strict::String.optional
7
+ attribute :error, Types::Strict::String.optional
8
+ attribute :error_description, Types::Strict::String.optional
9
9
  attribute :model_state, Types::Hash.optional
10
10
  end
11
11
  end
@@ -0,0 +1,17 @@
1
+ class ABBYY::Cloud
2
+ module Namespaces
3
+ # Namespace for operations with machine translations
4
+ # @see [https://api.abbyy.cloud/swagger/ui/index#!/MachineTranslation]
5
+ class MachineTranslations < Base
6
+ # Returns list of all available engines
7
+ def engines
8
+ Operations::Engines.new(settings).call
9
+ end
10
+
11
+ # Returns settigns for the engine selected by its name
12
+ def engine(name)
13
+ engines.find { |engine| engine.name == name }
14
+ end
15
+ end
16
+ end
17
+ end
@@ -6,7 +6,7 @@
6
6
  class ABBYY::Cloud
7
7
  module Operations
8
8
  class Base
9
- # Contains helper methods to specify concrete operations
9
+ # Helpers to specify concrete operations
10
10
  class << self
11
11
  include Forwardable
12
12
 
@@ -34,12 +34,13 @@ class ABBYY::Cloud
34
34
  private
35
35
 
36
36
  def provide_struct(variable, struct, &block)
37
- if block || instance_variable_get(variable).nil?
38
- struct ||= Class.new(Struct).tap { |obj| obj.instance_eval(&block) }
39
- instance_variable_set(variable, struct)
40
- else
41
- instance_variable_get(variable)
42
- end
37
+ value = instance_variable_get(variable)
38
+ return value if value && struct.nil? && block.nil?
39
+
40
+ struct ||= Class.new(Struct)
41
+ .tap { |obj| obj.instance_eval(&block) if block }
42
+
43
+ instance_variable_set(variable, struct)
43
44
  end
44
45
  end
45
46
 
@@ -0,0 +1,13 @@
1
+ class ABBYY::Cloud
2
+ module Operations
3
+ class Engines < Base
4
+ # rubocop: disable Metrics/LineLength
5
+ link "https://api.abbyy.cloud/swagger/ui/index#!/MachineTranslation/MachineTranslation_Engines"
6
+ # rubocop: enable Metrics/LineLength
7
+ path "mt/engines"
8
+ http_method "get"
9
+
10
+ response_body Types::Array.member(Types::Engine)
11
+ end
12
+ end
13
+ end
@@ -6,7 +6,7 @@ class ABBYY::Cloud
6
6
  http_method "post"
7
7
 
8
8
  request_body do
9
- attribute :engine, Types::Engine
9
+ attribute :engine, Types::Strict::String
10
10
  attribute :source_language, Types::Language
11
11
  attribute :target_language, Types::Language
12
12
  attribute :source_text, Types::Strict::String
@@ -6,7 +6,7 @@ class ABBYY::Cloud
6
6
  option :id, type: Types::AuthId
7
7
  option :token, type: Types::AuthToken
8
8
  option :version, type: Types::Version, default: proc { 0 }
9
- option :engine, type: Types::Engine, default: proc { "Sandbox" }
9
+ option :engine, type: Types::Strict::String, default: proc { "Sandbox" }
10
10
  end
11
11
 
12
12
  def connection
@@ -1,10 +1,13 @@
1
1
  class ABBYY::Cloud::Struct < Dry::Struct
2
- def self.[](data)
3
- default = schema.keys.each_with_object({}) { |key, hash| hash[key] = nil }
4
- actual = data.to_hash.each_with_object({}) do |(key, val), hash|
5
- hash[key.to_sym] = val
6
- end
2
+ class << self
3
+ def new(data)
4
+ default = schema.keys.each_with_object({}) { |key, hash| hash[key] = nil }
5
+ actual = data.to_hash.each_with_object({}) do |(key, val), hash|
6
+ hash[key.to_sym] = val
7
+ end
7
8
 
8
- new default.merge(actual)
9
+ super default.merge(actual)
10
+ end
11
+ alias_method :[], :new
9
12
  end
10
13
  end
@@ -1,15 +1,28 @@
1
1
  module ABBYY::Cloud::Types
2
2
  include Dry::Types.module
3
3
 
4
- ENGINES = %w(Sandbox Bing Google Systran).freeze
5
4
  VERSIONS = [0].freeze
6
- LANGUAGE = /\A[a-z]{2}(_[A-Z]{2})?\z/
5
+ LANGUAGE = /\A[A-Za-z]{2,}(-[A-Za-z]+)*\z/
7
6
 
8
7
  # Gem-specific primitive types
9
8
  AuthId = Strict::String
10
9
  AuthToken = Strict::String
11
- Engine = Coercible::String.constrained(included_in: ENGINES)
12
10
  Language = Strict::String.constrained(format: LANGUAGE)
13
11
  OrderId = Strict::String
14
12
  Version = Coercible::Int.constrained(included_in: VERSIONS)
13
+
14
+ # Registers new coercible type from a struct class
15
+ def self.register_type(struct, as: nil)
16
+ type_name = as || struct.name.split("::").last.downcase
17
+ definition = Dry::Types::Definition.new(struct).constructor do |value|
18
+ case value
19
+ when nil then nil
20
+ when struct then value
21
+ else struct[value]
22
+ end
23
+ end
24
+
25
+ Dry::Types.register type_name, definition
26
+ Dry::Types.define_constants self, [type_name]
27
+ end
15
28
  end
@@ -0,0 +1,40 @@
1
+ RSpec.describe ABBYY::Cloud::Models::Direction do
2
+ let(:data) { { source: "en-Br", target: "ru" } }
3
+
4
+ subject { described_class.new(data) }
5
+
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
7
+ its(:to_h) { is_expected.to eq data }
8
+
9
+ context "with invalid source:" do
10
+ before { data[:source] = "2" }
11
+
12
+ it "fails" do
13
+ expect { subject }.to raise_error(StandardError)
14
+ end
15
+ end
16
+
17
+ context "without source:" do
18
+ before { data.delete :source }
19
+
20
+ it "fails" do
21
+ expect { subject }.to raise_error(StandardError)
22
+ end
23
+ end
24
+
25
+ context "with invalid target:" do
26
+ before { data[:target] = "r" }
27
+
28
+ it "fails" do
29
+ expect { subject }.to raise_error(StandardError)
30
+ end
31
+ end
32
+
33
+ context "without target:" do
34
+ before { data.delete :target }
35
+
36
+ it "fails" do
37
+ expect { subject }.to raise_error(StandardError)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,70 @@
1
+ RSpec.describe ABBYY::Cloud::Models::Engine do
2
+ let(:data) do
3
+ {
4
+ name: "Bing",
5
+ languages: %w(ru en),
6
+ translation_directions: [{ source: "ru", target: "en" }]
7
+ }
8
+ end
9
+
10
+ subject { described_class.new(data) }
11
+
12
+ it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
13
+ its(:to_h) { is_expected.to eq data }
14
+
15
+ context "without name:" do
16
+ before { data.delete :name }
17
+
18
+ it "fails" do
19
+ expect { subject }.to raise_error(StandardError)
20
+ end
21
+ end
22
+
23
+ context "with invalid languages:" do
24
+ before { data[:languages] = "wrong" }
25
+
26
+ it "fails" do
27
+ expect { subject }.to raise_error(StandardError)
28
+ end
29
+ end
30
+
31
+ context "with invalid language:" do
32
+ before { data[:languages] = %w(en r) }
33
+
34
+ it "fails" do
35
+ expect { subject }.to raise_error(StandardError)
36
+ end
37
+ end
38
+
39
+ context "without languages:" do
40
+ before { data.delete :languages }
41
+
42
+ it "fails" do
43
+ expect { subject }.to raise_error(StandardError)
44
+ end
45
+ end
46
+
47
+ context "with invalid translation_directions:" do
48
+ before { data[:translation_directions] = "wrong" }
49
+
50
+ it "fails" do
51
+ expect { subject }.to raise_error(StandardError)
52
+ end
53
+ end
54
+
55
+ context "with invalid translation_direction:" do
56
+ before { data[:translation_directions] = [{ source: "r", target: "en" }] }
57
+
58
+ it "fails" do
59
+ expect { subject }.to raise_error(StandardError)
60
+ end
61
+ end
62
+
63
+ context "without translation_direction:" do
64
+ before { data.delete :translation_directions }
65
+
66
+ it "fails" do
67
+ expect { subject }.to raise_error(StandardError)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,55 @@
1
+ RSpec.describe ABBYY::Cloud::Models::Error do
2
+ let(:data) do
3
+ {
4
+ request_id: "foo",
5
+ error: "bar",
6
+ error_description: "baz",
7
+ model_state: {
8
+ id: 1,
9
+ value: "qux"
10
+ }
11
+ }
12
+ end
13
+
14
+ subject { described_class.new(data) }
15
+
16
+ it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
17
+ its(:to_h) { is_expected.to eq data }
18
+
19
+ context "without params" do
20
+ let(:data) { {} }
21
+ it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
22
+ end
23
+
24
+ context "with invalid request_id:" do
25
+ before { data[:request_id] = 1 }
26
+
27
+ it "fails" do
28
+ expect { subject }.to raise_error(StandardError)
29
+ end
30
+ end
31
+
32
+ context "with invalid error:" do
33
+ before { data[:error] = 1 }
34
+
35
+ it "fails" do
36
+ expect { subject }.to raise_error(StandardError)
37
+ end
38
+ end
39
+
40
+ context "with invalid error_description:" do
41
+ before { data[:error_description] = 1 }
42
+
43
+ it "fails" do
44
+ expect { subject }.to raise_error(StandardError)
45
+ end
46
+ end
47
+
48
+ context "with invalid model_state:" do
49
+ before { data[:model_state] = 1 }
50
+
51
+ it "fails" do
52
+ expect { subject }.to raise_error(StandardError)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,40 @@
1
+ RSpec.describe ABBYY::Cloud::Models::Translation do
2
+ let(:data) { { id: "foo", translation: "bar" } }
3
+
4
+ subject { described_class.new(data) }
5
+
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
7
+ its(:to_h) { is_expected.to eq data }
8
+
9
+ context "with invalid id:" do
10
+ before { data[:id] = 1 }
11
+
12
+ it "fails" do
13
+ expect { subject }.to raise_error(StandardError)
14
+ end
15
+ end
16
+
17
+ context "without id:" do
18
+ before { data.delete :id }
19
+
20
+ it "fails" do
21
+ expect { subject }.to raise_error(StandardError)
22
+ end
23
+ end
24
+
25
+ context "with invalid translation:" do
26
+ before { data[:translation] = 1 }
27
+
28
+ it "fails" do
29
+ expect { subject }.to raise_error(StandardError)
30
+ end
31
+ end
32
+
33
+ context "without translation:" do
34
+ before { data.delete :translation }
35
+
36
+ it "fails" do
37
+ expect { subject }.to raise_error(StandardError)
38
+ end
39
+ end
40
+ end
@@ -1,4 +1,5 @@
1
1
  RSpec.describe ABBYY::Cloud::ResponseError do
2
+ let(:body) { JSON(data) }
2
3
  let(:data) do
3
4
  {
4
5
  request_id: "foobar",
@@ -9,7 +10,7 @@ RSpec.describe ABBYY::Cloud::ResponseError do
9
10
  end
10
11
 
11
12
  let(:response) do
12
- instance_double "Net::HTTPResponse", code: "400", body: JSON(data)
13
+ instance_double "Net::HTTPResponse", code: "400", body: body
13
14
  end
14
15
 
15
16
  subject { described_class.new response }
@@ -17,4 +18,11 @@ RSpec.describe ABBYY::Cloud::ResponseError do
17
18
  it { is_expected.to be_kind_of StandardError }
18
19
  its(:status) { is_expected.to eq 400 }
19
20
  its("data.to_h") { is_expected.to eq data }
21
+
22
+ context "when server returned non-json body:" do
23
+ let(:body) { "Something went wrong" }
24
+
25
+ its("data.error") { is_expected.to eq "Server error" }
26
+ its("data.error_description") { is_expected.to eq "Something went wrong" }
27
+ end
20
28
  end
@@ -5,14 +5,6 @@ RSpec.describe ABBYY::Cloud::Settings do
5
5
  describe ".new" do
6
6
  subject { settings }
7
7
 
8
- context "with wrong engine" do
9
- before { options[:engine] = "Wrong" }
10
-
11
- it "fails" do
12
- expect { subject }.to raise_error(StandardError)
13
- end
14
- end
15
-
16
8
  context "without id" do
17
9
  before { options.delete :id }
18
10
 
@@ -0,0 +1,57 @@
1
+ RSpec.describe "mt.engines" do
2
+ let(:client) { ABBYY::Cloud.new settings }
3
+ let(:settings) { { id: "foo", token: "bar" } }
4
+ let(:path) { "https://api.abbyy.cloud/v0/mt/engines" }
5
+ let(:response_models) do
6
+ [
7
+ {
8
+ name: "Bing",
9
+ languages: %w(ru en),
10
+ translation_directions: [{ source: "ru", target: "en" }]
11
+ }
12
+ ]
13
+ end
14
+
15
+ before do
16
+ stub_request(:get, path)
17
+ .with(basic_auth: %w(foo bar))
18
+ .to_return status: 200,
19
+ headers: { "Content-Type" => "application/json" },
20
+ body: JSON(response_models)
21
+ end
22
+
23
+ subject { client.mt.engines }
24
+
25
+ it "sends a request to ABBYY Cloud API" do
26
+ subject
27
+ expect(a_request(:get, path)).to have_been_made
28
+ end
29
+
30
+ it "returns list of engines" do
31
+ expect(subject).to be_kind_of Array
32
+ expect(subject.map(&:class)).to eq [ABBYY::Cloud::Models::Engine]
33
+ expect(subject.map(&:to_h)).to eq response_models
34
+ end
35
+
36
+ context "when API responded with error:" do
37
+ before do
38
+ stub_request(:get, path)
39
+ .with(basic_auth: %w(foo bar))
40
+ .to_return status: 500,
41
+ headers: { "Content-Type" => "application/json" },
42
+ body: "Server error"
43
+ end
44
+
45
+ it "raises ResponseError" do
46
+ expect { subject }.to raise_error(ABBYY::Cloud::ResponseError)
47
+ end
48
+ end
49
+
50
+ context "when API returned invalid engine:" do
51
+ let(:response_models) { [{ name: "Wrong" }] }
52
+
53
+ it "raises TypeError" do
54
+ expect { subject }.to raise_error(ABBYY::Cloud::TypeError)
55
+ end
56
+ end
57
+ end
@@ -4,9 +4,9 @@ RSpec.describe "orders.translate" do
4
4
  let(:default_engine) { "Google" }
5
5
  let(:custom_engine) { "Bing" }
6
6
  let(:source_language) { "ru" }
7
- let(:target_language) { "en_EN" }
7
+ let(:target_language) { "en" }
8
8
  let(:source_text) { "Бить или не бить" }
9
- let(:path) { "https://api.abbyy.cloud/order/mt/sync" }
9
+ let(:path) { "https://api.abbyy.cloud/v0/order/mt/sync" }
10
10
  let(:response_status) { 200 }
11
11
  let(:response_model) { { id: "42", translation: "To beat or not to beat" } }
12
12
  let(:params) do
@@ -38,7 +38,7 @@ RSpec.describe "orders.translate" do
38
38
 
39
39
  let(:expected_request) do
40
40
  a_request(:post, path).with do |req|
41
- expect(req.body).to include engine: "Google"
41
+ expect(JSON.parse(req.body)).to include "engine" => "Google"
42
42
  end
43
43
  end
44
44
 
@@ -54,7 +54,7 @@ RSpec.describe "orders.translate" do
54
54
 
55
55
  let(:expected_request) do
56
56
  a_request(:post, path).with do |req|
57
- expect(req.body).to include engine: "Sandbox"
57
+ expect(JSON.parse(req.body)).to include "engine" => "Sandbox"
58
58
  end
59
59
  end
60
60
 
@@ -74,7 +74,7 @@ RSpec.describe "orders.translate" do
74
74
  end
75
75
 
76
76
  context "with invalid source language:" do
77
- let(:source_language) { "ru_12" }
77
+ let(:source_language) { "1" }
78
78
 
79
79
  it "raises ArgumentError before sending a request" do
80
80
  expect { subject }.to raise_error(ABBYY::Cloud::ArgumentError)
@@ -92,7 +92,7 @@ RSpec.describe "orders.translate" do
92
92
  end
93
93
 
94
94
  context "with invalid target language:" do
95
- let(:target_language) { "neoru" }
95
+ let(:target_language) { "1" }
96
96
 
97
97
  it "raises ArgumentError before sending a request" do
98
98
  expect { subject }.to raise_error(ABBYY::Cloud::ArgumentError)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abbyy-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kozin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-initializer
@@ -146,19 +146,28 @@ files:
146
146
  - lib/abbyy/cloud/exceptions/argument_error.rb
147
147
  - lib/abbyy/cloud/exceptions/response_error.rb
148
148
  - lib/abbyy/cloud/exceptions/type_error.rb
149
+ - lib/abbyy/cloud/models/direction.rb
150
+ - lib/abbyy/cloud/models/engine.rb
149
151
  - lib/abbyy/cloud/models/error.rb
150
152
  - lib/abbyy/cloud/models/translation.rb
151
153
  - lib/abbyy/cloud/namespaces/base.rb
154
+ - lib/abbyy/cloud/namespaces/machine_translations.rb
152
155
  - lib/abbyy/cloud/namespaces/orders.rb
153
156
  - lib/abbyy/cloud/operations/base.rb
157
+ - lib/abbyy/cloud/operations/engines.rb
154
158
  - lib/abbyy/cloud/operations/translate.rb
155
159
  - lib/abbyy/cloud/settings.rb
156
160
  - lib/abbyy/cloud/struct.rb
157
161
  - lib/abbyy/cloud/types.rb
158
162
  - spec/abbyy/cloud/connection_spec.rb
163
+ - spec/abbyy/cloud/models/direction_spec.rb
164
+ - spec/abbyy/cloud/models/engine_spec.rb
165
+ - spec/abbyy/cloud/models/error_spec.rb
166
+ - spec/abbyy/cloud/models/translation_spec.rb
159
167
  - spec/abbyy/cloud/response_error_spec.rb
160
168
  - spec/abbyy/cloud/settings_spec.rb
161
169
  - spec/abbyy/cloud_spec.rb
170
+ - spec/feature/abbyy/mt_engines_spec.rb
162
171
  - spec/feature/abbyy/order_translate_spec.rb
163
172
  - spec/spec_helper.rb
164
173
  homepage: https://github.com/nepalez/abbyy-cloud
@@ -187,8 +196,13 @@ specification_version: 4
187
196
  summary: HTTP client to ABBYY Cloud API
188
197
  test_files:
189
198
  - spec/abbyy/cloud/connection_spec.rb
199
+ - spec/abbyy/cloud/models/direction_spec.rb
200
+ - spec/abbyy/cloud/models/engine_spec.rb
201
+ - spec/abbyy/cloud/models/error_spec.rb
202
+ - spec/abbyy/cloud/models/translation_spec.rb
190
203
  - spec/abbyy/cloud/response_error_spec.rb
191
204
  - spec/abbyy/cloud/settings_spec.rb
192
205
  - spec/abbyy/cloud_spec.rb
206
+ - spec/feature/abbyy/mt_engines_spec.rb
193
207
  - spec/feature/abbyy/order_translate_spec.rb
194
208
  - spec/spec_helper.rb