abbyy-cloud 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -1
  3. data/abbyy-cloud.gemspec +3 -3
  4. data/lib/abbyy/cloud.rb +2 -2
  5. data/lib/abbyy/cloud/exceptions/response_error.rb +5 -5
  6. data/lib/abbyy/cloud/model.rb +61 -0
  7. data/lib/abbyy/cloud/models/direction.rb +3 -3
  8. data/lib/abbyy/cloud/models/discount.rb +3 -3
  9. data/lib/abbyy/cloud/models/engine.rb +5 -4
  10. data/lib/abbyy/cloud/models/error.rb +6 -5
  11. data/lib/abbyy/cloud/models/file_info.rb +18 -15
  12. data/lib/abbyy/cloud/models/file_link.rb +6 -6
  13. data/lib/abbyy/cloud/models/file_reference.rb +3 -3
  14. data/lib/abbyy/cloud/models/full_order.rb +30 -28
  15. data/lib/abbyy/cloud/models/ocr_settings.rb +4 -4
  16. data/lib/abbyy/cloud/models/ocr_statistics.rb +5 -5
  17. data/lib/abbyy/cloud/models/ocr_warning.rb +9 -6
  18. data/lib/abbyy/cloud/models/order_statistics.rb +5 -5
  19. data/lib/abbyy/cloud/models/price.rb +9 -9
  20. data/lib/abbyy/cloud/models/source_segment.rb +4 -3
  21. data/lib/abbyy/cloud/models/source_tag.rb +5 -4
  22. data/lib/abbyy/cloud/models/text_statistics.rb +5 -5
  23. data/lib/abbyy/cloud/models/transfer_data.rb +3 -3
  24. data/lib/abbyy/cloud/models/translation.rb +3 -3
  25. data/lib/abbyy/cloud/models/translation_link.rb +7 -7
  26. data/lib/abbyy/cloud/models/translation_segment.rb +5 -4
  27. data/lib/abbyy/cloud/models/unit_price.rb +4 -4
  28. data/lib/abbyy/cloud/operations/base.rb +12 -12
  29. data/lib/abbyy/cloud/operations/prices.rb +5 -5
  30. data/lib/abbyy/cloud/operations/submit_order.rb +20 -16
  31. data/lib/abbyy/cloud/operations/translate.rb +4 -4
  32. data/lib/abbyy/cloud/operations/translate_segments.rb +4 -4
  33. data/lib/abbyy/cloud/operations/upload_file.rb +5 -4
  34. data/spec/unit/abbyy/cloud/models/direction_spec.rb +1 -1
  35. data/spec/unit/abbyy/cloud/models/discount_spec.rb +1 -1
  36. data/spec/unit/abbyy/cloud/models/engine_spec.rb +1 -1
  37. data/spec/unit/abbyy/cloud/models/error_spec.rb +2 -2
  38. data/spec/unit/abbyy/cloud/models/file_link_spec.rb +1 -1
  39. data/spec/unit/abbyy/cloud/models/file_reference_spec.rb +1 -1
  40. data/spec/unit/abbyy/cloud/models/full_order_spec.rb +1 -1
  41. data/spec/unit/abbyy/cloud/models/order_statistics_spec.rb +1 -1
  42. data/spec/unit/abbyy/cloud/models/price_spec.rb +1 -1
  43. data/spec/unit/abbyy/cloud/models/source_segment_spec.rb +1 -1
  44. data/spec/unit/abbyy/cloud/models/source_tag_spec.rb +1 -1
  45. data/spec/unit/abbyy/cloud/models/transfer_data_spec.rb +1 -1
  46. data/spec/unit/abbyy/cloud/models/translation_link_spec.rb +1 -1
  47. data/spec/unit/abbyy/cloud/models/translation_segment_spec.rb +1 -1
  48. data/spec/unit/abbyy/cloud/models/translation_spec.rb +1 -1
  49. data/spec/unit/abbyy/cloud/models/unit_price_spec.rb +1 -1
  50. metadata +8 -8
  51. data/lib/abbyy/cloud/struct.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 938b0d59f4470c20fcf36a978dc3af2cc452f572
4
- data.tar.gz: 7f714120a1f2f07cfb70584a0665f6c83beb754f
3
+ metadata.gz: a2c718870d311c032c56d09eaefe85358d8053c6
4
+ data.tar.gz: 6b5236b37d7d2362cdb46f390a99cc4ed4d84675
5
5
  SHA512:
6
- metadata.gz: cd173cce75744e96fbd2d176c9f76436433312f4d29f623793acc6f87eea43de16e3bcf96fd88fc96be7a9242a7a97189280286ba5b4abdb43542d404fecf773
7
- data.tar.gz: fb9899694839692475db2373b008ba9839ecd9f1e197de4e6cd42b85934f766fd58feae413dda05a3d58e3743d5247d3e8803a156f4b0b62bde062626da41978
6
+ metadata.gz: e18b7be8f087be2564513df127d8676f7a0047cf807fc7ad8b12332505c69cad972c9c3ef76dcd74687ad3f57521bde7d1b27aad0f83b24729f6958d0fe87b4f
7
+ data.tar.gz: 7db9109e79a27f3100ad6e198b5e4f967e61662d181da6cb351c8e3ee5bb298f4e69a0fe60c038fdcb89699c800cce344e994fb6787d64a36510abb331803083
@@ -1,6 +1,16 @@
1
1
  # Master (to be released)
2
2
 
3
- [Compare v0.0.8...HEAD](https://github.com/nepalez/abbyy-cloud/compare/v0.0.8...HEAD)
3
+ [Compare v0.0.9...HEAD](https://github.com/nepalez/abbyy-cloud/compare/v0.0.9...HEAD)
4
+
5
+ # [v0.0.9 2016-10-11](https://github.com/nepalez/abbyy-cloud/tree/v0.0.9)
6
+
7
+ ### Internal
8
+
9
+ * Update dependency from the `dry-initializer` gem (nepalez)
10
+ * Switch from Dry::Struct to native ABBYY::Cloud::Model (nepalez)
11
+ * Drop dependency from `dry-struct` gem (nepalez)
12
+
13
+ [Compare v0.0.8...v0.0.9](https://github.com/nepalez/abbyy-cloud/compare/v0.0.8...v0.0.9)
4
14
 
5
15
  # [v0.0.8 2016-09-17](https://github.com/nepalez/abbyy-cloud/tree/v0.0.8)
6
16
 
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "abbyy-cloud"
6
- gem.version = "0.0.8"
6
+ gem.version = "0.0.9"
7
7
  gem.authors = ["Andrew Kozin"]
8
8
  gem.email = ["andrew.kozin@gmail.com"]
9
9
  gem.summary = "HTTP client to ABBYY Cloud API"
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.required_ruby_version = ">= 2.3.0"
19
19
 
20
- gem.add_runtime_dependency "dry-initializer", "~> 0.4.0"
21
- gem.add_runtime_dependency "dry-struct", "~> 0.0.1"
20
+ gem.add_runtime_dependency "dry-initializer", "~> 0.6"
21
+ gem.add_runtime_dependency "dry-types", "~> 0.9.0"
22
22
  gem.add_runtime_dependency "hashie", "~> 3.4"
23
23
  gem.add_runtime_dependency "multipart_body", "~> 0.2"
24
24
  gem.add_runtime_dependency "mime-types", "~> 3.1"
@@ -1,5 +1,5 @@
1
1
  require "dry-initializer"
2
- require "dry-struct"
2
+ require "dry-types"
3
3
  require "hashie/mash"
4
4
  require "json"
5
5
  require "net/http"
@@ -9,7 +9,7 @@ require "mime-types"
9
9
 
10
10
  module ABBYY
11
11
  class Cloud
12
- require_relative "cloud/struct"
12
+ require_relative "cloud/model"
13
13
  require_relative "cloud/types"
14
14
  require_relative "cloud/connection"
15
15
  require_relative "cloud/settings"
@@ -5,14 +5,14 @@ class ABBYY::Cloud
5
5
  attr_reader :status, :data
6
6
 
7
7
  def initialize(response)
8
- @data = Models::Error[parse_response(response)]
9
8
  @status = response.code.to_i
9
+ @data = Models::Error[parse_response(response)] unless @status == 500
10
10
 
11
11
  super <<-MESSAGE.gsub(/ +\|/, "")
12
- |ABBYY Cloud API responded to the request #{data.request_id} with a status #{status}
13
- | error: #{data.error}
14
- | description: #{data.error_description}
15
- | model_state: #{data.model_state}
12
+ |ABBYY Cloud API responded to the request #{data&.request_id} with a status #{status}
13
+ | error: #{data&.error}
14
+ | description: #{data&.error_description}
15
+ | model_state: #{data&.model_state}
16
16
  MESSAGE
17
17
  end
18
18
 
@@ -0,0 +1,61 @@
1
+ # Base structure for models describing parts of requests and responses
2
+ #
3
+ # The initializer accepts a hash with symbol/string keys,
4
+ # from which it takes and validates necessary options.
5
+ #
6
+ # The method [#to_h] converts nested data to hash
7
+ # with symbolic keys at any level of nesting.
8
+ #
9
+ class ABBYY::Cloud
10
+ class Model
11
+ class << self
12
+ include Dry::Initializer::Mixin
13
+ alias_method :attribute, :option
14
+ alias_method :param, :option
15
+
16
+ def new(value)
17
+ return value if value.is_a? self
18
+ value = value.to_h.each_with_object({}) do |(key, val), obj|
19
+ obj[key.to_sym] = val
20
+ end
21
+ super value
22
+ end
23
+ alias_method :call, :new
24
+ alias_method :[], :new
25
+ end
26
+
27
+ tolerant_to_unknown_options
28
+
29
+ def ==(other)
30
+ return false unless other.respond_to? :to_h
31
+ to_h == other.to_h
32
+ end
33
+
34
+ def to_h
35
+ attributes = method(:initialize)
36
+ .parameters
37
+ .map { |item| item[1] unless item[0] == :keyrest }.compact
38
+
39
+ attributes.each_with_object({}) do |key, hash|
40
+ val = send(key)
41
+ hash[key] = hashify(val) unless val == Dry::Initializer::UNDEFINED
42
+ end
43
+ end
44
+ alias_method :[], :send
45
+
46
+ private
47
+
48
+ def hashify(value)
49
+ if value.is_a? ABBYY::Cloud::Model
50
+ value.to_h
51
+ elsif value.respond_to? :to_hash
52
+ value.to_hash
53
+ .each_with_object({}) { |(key, val), obj| obj[key] = hashify(val) }
54
+ elsif value.is_a? Enumerable
55
+ value.map { |val| hashify(val) }
56
+ else
57
+ value
58
+ end
59
+ end
60
+ end
61
+ end
@@ -2,9 +2,9 @@ require_relative "locale"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class Direction < Struct
6
- attribute :source, Types::Locale
7
- attribute :target, Types::Locale
5
+ class Direction < Model
6
+ attribute :source, type: Types::Locale
7
+ attribute :target, type: Types::Locale
8
8
  end
9
9
 
10
10
  # Registers type Types::Direction
@@ -2,9 +2,9 @@ require_relative "discount_type"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class Discount < Struct
6
- attribute :discount_type, Types::DiscountType
7
- attribute :discount, Types::Coercible::Float
5
+ class Discount < Model
6
+ attribute :discount_type, type: Types::DiscountType
7
+ attribute :discount, type: Types::Coercible::Float
8
8
  end
9
9
 
10
10
  # Registers type Types::Discount
@@ -3,10 +3,11 @@ require_relative "direction"
3
3
 
4
4
  class ABBYY::Cloud
5
5
  module Models
6
- class Engine < Struct
7
- attribute :name, Types::Strict::String
8
- attribute :languages, Types::Array.member(Types::Locale)
9
- attribute :translation_directions, Types::Array.member(Types::Direction)
6
+ class Engine < Model
7
+ attribute :name, type: Types::Strict::String
8
+ attribute :languages, type: Types::Array.member(Types::Locale)
9
+ attribute :translation_directions,
10
+ type: Types::Array.member(Types::Direction)
10
11
  end
11
12
 
12
13
  # Registers type Types::Engine
@@ -1,11 +1,12 @@
1
1
  class ABBYY::Cloud
2
2
  # Collection of models returned in requests
3
3
  module Models
4
- class Error < Struct
5
- attribute :request_id, Types::Strict::String.optional
6
- attribute :error, Types::Strict::String.optional
7
- attribute :error_description, Types::Strict::String.optional
8
- attribute :model_state, Types::Hash.optional
4
+ class Error < Model
5
+ attribute :request_id, type: Types::Strict::String, optional: true
6
+ attribute :error, type: Types::Strict::String, optional: true
7
+ attribute :error_description, type: Types::Strict::String, optional: true
8
+ attribute :model_state, type: Types::Hash.constrained(type: Hash),
9
+ optional: true
9
10
  end
10
11
  end
11
12
  end
@@ -9,22 +9,25 @@ require_relative "text_statistics"
9
9
  class ABBYY::Cloud
10
10
  module Models
11
11
  class FileInfo < FileReference
12
- attribute :name, Types::Strict::String
13
- attribute :mime, Types::Strict::String
14
- attribute :created, Types::Form::Time
15
- attribute :is_recognizable, Types::Form::Bool
16
- attribute :is_deleted, Types::Form::Bool
17
- attribute :reading_status, Types::Strict::String
18
- attribute :reading_progress, Types::Coercible::Int
19
- attribute :expected_languages, Types::Array.member(Types::Locale).optional
20
- attribute :processed, Types::Form::Time.optional
21
- attribute :deleted, Types::Form::Time.optional
22
- attribute :error, Types::Strict::String.optional
23
- attribute :statistics, Types::TextStatistics.optional
24
- attribute :ocr_settings, Types::OcrSettings.optional
25
- attribute :ocr_statistics, Types::OcrStatistics.optional
12
+ attribute :name, type: Types::Strict::String
13
+ attribute :mime, type: Types::Strict::String
14
+ attribute :created, type: Types::Form::Time
15
+ attribute :is_recognizable, type: Types::Form::Bool
16
+ attribute :is_deleted, type: Types::Form::Bool
17
+ attribute :reading_status, type: Types::Strict::String
18
+ attribute :reading_progress, type: Types::Coercible::Int
19
+ attribute :processed, type: Types::Form::Time, optional: true
20
+ attribute :deleted, type: Types::Form::Time, optional: true
21
+ attribute :error, type: Types::Strict::String, optional: true
22
+ attribute :statistics, type: Types::TextStatistics, optional: true
23
+ attribute :ocr_settings, type: Types::OcrSettings, optional: true
24
+ attribute :ocr_statistics, type: Types::OcrStatistics, optional: true
25
+ attribute :expected_languages,
26
+ type: Types::Array.member(Types::Locale),
27
+ optional: true
26
28
  attribute :ocr_warnings,
27
- Types::Array.member(Types::OcrWarning).optional
29
+ type: Types::Array.member(Types::OcrWarning),
30
+ optional: true
28
31
  end
29
32
 
30
33
  # Registers type Types::FileInfo
@@ -4,12 +4,12 @@ require_relative "locale"
4
4
  class ABBYY::Cloud
5
5
  module Models
6
6
  class FileLink < FileReference
7
- attribute :name, Types::Strict::String
8
- attribute :language, Types::Locale
9
- attribute :is_deleted, Types::Form::Bool
10
- attribute :chars_count, Types::Coercible::Int.optional
11
- attribute :words_count, Types::Coercible::Int.optional
12
- attribute :pages_count, Types::Coercible::Int.optional
7
+ attribute :name, type: Types::Strict::String
8
+ attribute :language, type: Types::Locale
9
+ attribute :is_deleted, type: Types::Form::Bool
10
+ attribute :chars_count, type: Types::Coercible::Int, optional: true
11
+ attribute :words_count, type: Types::Coercible::Int, optional: true
12
+ attribute :pages_count, type: Types::Coercible::Int, optional: true
13
13
  end
14
14
 
15
15
  # Registers type Types::FileLink
@@ -1,8 +1,8 @@
1
1
  class ABBYY::Cloud
2
2
  module Models
3
- class FileReference < Struct
4
- attribute :id, Types::Strict::String
5
- attribute :token, Types::Strict::String
3
+ class FileReference < Model
4
+ attribute :id, type: Types::Strict::String
5
+ attribute :token, type: Types::Strict::String
6
6
  end
7
7
 
8
8
  # Registers type Types::FileReference
@@ -10,34 +10,36 @@ require_relative "unit_type"
10
10
 
11
11
  class ABBYY::Cloud
12
12
  module Models
13
- class FullOrder < Struct
14
- attribute :amount, Types::Coercible::Float.optional
15
- attribute :approval_required, Types::Form::Bool
16
- attribute :created, Types::Form::Time
17
- attribute :currency, Types::Currency
18
- attribute :deadline, Types::Form::Time.optional
19
- attribute :deleted, Types::Form::Time.optional
20
- attribute :delivered, Types::Form::Time.optional
21
- attribute :email, Types::Strict::String
22
- attribute :from, Types::Locale
23
- attribute :id, Types::Strict::String
24
- attribute :is_deleted, Types::Form::Bool
25
- attribute :is_layout_required, Types::Form::Bool
26
- attribute :is_manual_estimation, Types::Form::Bool
27
- attribute :label, Types::Label.optional
28
- attribute :number, Types::Coercible::Int
29
- attribute :payment_provider, Types::Strict::String.optional
30
- attribute :payment_type, Types::PaymentType
31
- attribute :progress, Types::Coercible::Int
32
- attribute :started, Types::Form::Time.optional
33
- attribute :statistics, Types::OrderStatistics.optional
34
- attribute :status, Types::Status
35
- attribute :to, Types::FilledArray.member(Types::Locale)
36
- attribute :translations, Types::Array.member(Types::TranslationLink)
37
- attribute :type, Types::TranslationType
38
- attribute :unit_count, Types::Coercible::Int.optional
39
- attribute :unit_type, Types::UnitType.optional
40
- attribute :units_count, Types::Hash.optional
13
+ class FullOrder < Model
14
+ attribute :amount, type: Types::Coercible::Float, optional: true
15
+ attribute :approval_required, type: Types::Form::Bool,
16
+ default: proc { false }
17
+ attribute :created, type: Types::Form::Time.constrained(type: Time)
18
+ attribute :currency, type: Types::Currency
19
+ attribute :deadline, type: Types::Form::Time, optional: true
20
+ attribute :deleted, type: Types::Form::Time, optional: true
21
+ attribute :delivered, type: Types::Form::Time, optional: true
22
+ attribute :email, type: Types::Strict::String
23
+ attribute :from, type: Types::Locale
24
+ attribute :id, type: Types::Strict::String
25
+ attribute :is_deleted, type: Types::Form::Bool
26
+ attribute :is_layout_required, type: Types::Form::Bool
27
+ attribute :is_manual_estimation, type: Types::Form::Bool,
28
+ default: proc { false }
29
+ attribute :label, type: Types::Label, optional: true
30
+ attribute :number, type: Types::Coercible::Int
31
+ attribute :payment_provider, type: Types::Strict::String, optional: true
32
+ attribute :payment_type, type: Types::PaymentType
33
+ attribute :progress, type: Types::Coercible::Int
34
+ attribute :started, type: Types::Form::Time, optional: true
35
+ attribute :statistics, type: Types::OrderStatistics, optional: true
36
+ attribute :status, type: Types::Status
37
+ attribute :to, type: Types::FilledArray.member(Types::Locale)
38
+ attribute :translations, type: Types::Array.member(Types::TranslationLink)
39
+ attribute :type, type: Types::TranslationType
40
+ attribute :unit_count, type: Types::Coercible::Int, optional: true
41
+ attribute :unit_type, type: Types::UnitType, optional: true
42
+ attribute :units_count, type: Types::Hash, optional: true
41
43
  end
42
44
 
43
45
  # Registers type Types::FullOrder
@@ -4,10 +4,10 @@ require_relative "ocr_quality"
4
4
 
5
5
  class ABBYY::Cloud
6
6
  module Models
7
- class OcrSettings < Struct
8
- attribute :format, Types::FileFormat
9
- attribute :mode, Types::OcrMode
10
- attribute :quality, Types::OcrQuality
7
+ class OcrSettings < Model
8
+ attribute :format, type: Types::FileFormat
9
+ attribute :mode, type: Types::OcrMode
10
+ attribute :quality, type: Types::OcrQuality
11
11
  end
12
12
 
13
13
  # Registers type Types::OcrSettings
@@ -1,10 +1,10 @@
1
1
  class ABBYY::Cloud
2
2
  module Models
3
- class OcrStatistics < Struct
4
- attribute :exported_pages, Types::Coercible::Int
5
- attribute :total_characters, Types::Coercible::Int
6
- attribute :uncertain_characters, Types::Coercible::Int
7
- attribute :success_part, Types::Coercible::Float
3
+ class OcrStatistics < Model
4
+ attribute :exported_pages, type: Types::Coercible::Int
5
+ attribute :total_characters, type: Types::Coercible::Int
6
+ attribute :uncertain_characters, type: Types::Coercible::Int
7
+ attribute :success_part, type: Types::Coercible::Float
8
8
  end
9
9
 
10
10
  # Registers type Types::OcrStatistics
@@ -2,12 +2,15 @@ require_relative "ocr_warning_type"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class OcrWarning < Struct
6
- attribute :warning_type, Types::OcrWarningType
7
- attribute :page_number, Types::Coercible::Int
8
- attribute :dpi, Types::Coercible::Int.optional
9
- attribute :language_count, Types::Coercible::Int.optional
10
- attribute :full_warning_message, Types::Strict::String.optional
5
+ class OcrWarning < Model
6
+ attribute :warning_type, type: Types::OcrWarningType
7
+ attribute :page_number, type: Types::Coercible::Int
8
+ attribute :dpi, type: Types::Coercible::Int,
9
+ optional: true
10
+ attribute :language_count, type: Types::Coercible::Int,
11
+ optional: true
12
+ attribute :full_warning_message, type: Types::Strict::String,
13
+ optional: true
11
14
  end
12
15
 
13
16
  # Registers type Types::OcrWarning
@@ -2,11 +2,11 @@ require_relative "source_tag"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class OrderStatistics < Struct
6
- attribute :documents_count, Types::Coercible::Int
7
- attribute :pages_count, Types::Coercible::Int
8
- attribute :words_count, Types::Coercible::Int
9
- attribute :chars_count, Types::Coercible::Int
5
+ class OrderStatistics < Model
6
+ attribute :documents_count, type: Types::Coercible::Int
7
+ attribute :pages_count, type: Types::Coercible::Int
8
+ attribute :words_count, type: Types::Coercible::Int
9
+ attribute :chars_count, type: Types::Coercible::Int
10
10
  end
11
11
 
12
12
  # Registers type Types::OrderStatistics
@@ -5,15 +5,15 @@ require_relative "discount"
5
5
  class ABBYY::Cloud
6
6
  module Models
7
7
  # Price details
8
- class Price < Struct
9
- attribute :id, Types::Strict::String
10
- attribute :account_id, Types::Strict::String.optional
11
- attribute :type, Types::Strict::String
12
- attribute :from, Types::Locale
13
- attribute :to, Types::Locale
14
- attribute :unit_prices, Types::Array.member(Types::UnitPrice)
15
- attribute :discounts, Types::Array.member(Types::Discount)
16
- attribute :created, Types::Coercible::Time
8
+ class Price < Model
9
+ attribute :id, type: Types::Strict::String
10
+ attribute :account_id, type: Types::Strict::String, optional: true
11
+ attribute :type, type: Types::Strict::String
12
+ attribute :from, type: Types::Locale
13
+ attribute :to, type: Types::Locale
14
+ attribute :unit_prices, type: Types::Array.member(Types::UnitPrice)
15
+ attribute :discounts, type: Types::Array.member(Types::Discount)
16
+ attribute :created, type: Types::Coercible::Time
17
17
  end
18
18
 
19
19
  # Registers type Types::Price
@@ -2,9 +2,10 @@ require_relative "source_tag"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class SourceSegment < Struct
6
- attribute :text, Types::Strict::String
7
- attribute :tags, Types::Array.member(Types::SourceTag).default([])
5
+ class SourceSegment < Model
6
+ attribute :text, type: Types::Strict::String
7
+ attribute :tags, type: Types::Array.member(Types::SourceTag),
8
+ default: proc { [] }
8
9
  end
9
10
 
10
11
  # Registers type Types::SourceSegment
@@ -2,10 +2,11 @@ class ABBYY::Cloud
2
2
  module Models
3
3
  TYPES = %w(Start End Placeholder).freeze
4
4
 
5
- class SourceTag < Struct
6
- attribute :number, Types::Strict::Int
7
- attribute :position, Types::Strict::Int
8
- attribute :type, Types::Strict::String.constrained(included_in: TYPES)
5
+ class SourceTag < Model
6
+ attribute :number, type: Types::Strict::Int
7
+ attribute :position, type: Types::Strict::Int
8
+ attribute :type,
9
+ type: Types::Strict::String.constrained(included_in: TYPES)
9
10
  end
10
11
 
11
12
  # Registers type Types::SourceTag
@@ -2,11 +2,11 @@ require_relative "source_tag"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class TextStatistics < Struct
6
- attribute :language, Types::Locale
7
- attribute :pages_count, Types::Coercible::Int
8
- attribute :words_count, Types::Coercible::Int
9
- attribute :chars_count, Types::Coercible::Int
5
+ class TextStatistics < Model
6
+ attribute :language, type: Types::Locale
7
+ attribute :pages_count, type: Types::Coercible::Int
8
+ attribute :words_count, type: Types::Coercible::Int
9
+ attribute :chars_count, type: Types::Coercible::Int
10
10
  end
11
11
 
12
12
  # Registers type Types::TextStatistics
@@ -1,8 +1,8 @@
1
1
  class ABBYY::Cloud
2
2
  module Models
3
- class TransferData < Struct
4
- attribute :position, Types::Strict::Int
5
- attribute :order, Types::Strict::Int
3
+ class TransferData < Model
4
+ attribute :position, type: Types::Strict::Int
5
+ attribute :order, type: Types::Strict::Int
6
6
  end
7
7
 
8
8
  # Registers type Types::TransferData
@@ -1,8 +1,8 @@
1
1
  class ABBYY::Cloud
2
2
  module Models
3
- class Translation < Struct
4
- attribute :id, Types::Strict::String
5
- attribute :translation, Types::Strict::String
3
+ class Translation < Model
4
+ attribute :id, type: Types::Strict::String
5
+ attribute :translation, type: Types::Strict::String
6
6
  end
7
7
  end
8
8
  end
@@ -3,13 +3,13 @@ require_relative "file_link"
3
3
 
4
4
  class ABBYY::Cloud
5
5
  module Models
6
- class TranslationLink < Struct
7
- attribute :delivered, Types::Form::Time.optional
8
- attribute :started, Types::Form::Time.optional
9
- attribute :progress, Types::Hash
10
- attribute :status, Types::Status
11
- attribute :source_file, Types::FileLink
12
- attribute :target_file, Types::FileLink
6
+ class TranslationLink < Model
7
+ attribute :delivered, type: Types::Form::Time, optional: true
8
+ attribute :started, type: Types::Form::Time, optional: true
9
+ attribute :progress, type: Types::Hash, default: proc { {} }
10
+ attribute :status, type: Types::Status
11
+ attribute :source_file, type: Types::FileLink
12
+ attribute :target_file, type: Types::FileLink
13
13
  end
14
14
 
15
15
  # Registers type Types::TranslationLink
@@ -2,11 +2,12 @@ require_relative "transfer_data"
2
2
 
3
3
  class ABBYY::Cloud
4
4
  module Models
5
- class TranslationSegment < Struct
6
- attribute :id, Types::Strict::String
7
- attribute :text, Types::Strict::String
5
+ class TranslationSegment < Model
6
+ attribute :id, type: Types::Strict::String
7
+ attribute :text, type: Types::Strict::String
8
8
  attribute :tags_transfer_data,
9
- Types::Array.member(Types::TransferData).default([])
9
+ type: Types::Array.member(Types::TransferData),
10
+ default: proc { [] }
10
11
  end
11
12
 
12
13
  # Registers type Types::TranslationSegment
@@ -4,10 +4,10 @@ require_relative "unit_type"
4
4
  class ABBYY::Cloud
5
5
  module Models
6
6
  # Price details
7
- class UnitPrice < Struct
8
- attribute :unit_type, Types::UnitType
9
- attribute :currency, Types::Currency
10
- attribute :amount, Types::Coercible::Float
7
+ class UnitPrice < Model
8
+ attribute :unit_type, type: Types::UnitType
9
+ attribute :currency, type: Types::Currency
10
+ attribute :amount, type: Types::Coercible::Float
11
11
  end
12
12
 
13
13
  # Registers type Types::UnitPrice
@@ -1,7 +1,7 @@
1
1
  require_relative "file"
2
2
 
3
3
  # Base class for specific operations
4
- # It validates request and response using corresponding structs
4
+ # It validates request and response using corresponding models
5
5
  #
6
6
  # @abstract
7
7
  #
@@ -28,32 +28,32 @@ class ABBYY::Cloud
28
28
  value ? (@request_type = value) : (@request_type || :json)
29
29
  end
30
30
 
31
- def request_body(struct = nil, &block)
32
- provide_struct :@request_body, struct, &block
31
+ def request_body(model = nil, &block)
32
+ provide_model :@request_body, model, &block
33
33
  end
34
34
 
35
- def request_query(struct = nil, &block)
36
- provide_struct :@request_query, struct, &block
35
+ def request_query(model = nil, &block)
36
+ provide_model :@request_query, model, &block
37
37
  end
38
38
 
39
39
  def response_type(value = nil)
40
40
  value ? (@response_type = value) : (@response_type || :json)
41
41
  end
42
42
 
43
- def response_body(struct = nil, &block)
44
- provide_struct :@response_body, struct, &block
43
+ def response_body(model = nil, &block)
44
+ provide_model :@response_body, model, &block
45
45
  end
46
46
 
47
47
  private
48
48
 
49
- def provide_struct(variable, struct, &block)
49
+ def provide_model(variable, model, &block)
50
50
  value = instance_variable_get(variable)
51
- return value if value && struct.nil? && block.nil?
51
+ return value if value && model.nil? && block.nil?
52
52
 
53
- struct ||= Class.new(Struct)
54
- .tap { |obj| obj.instance_eval(&block) if block }
53
+ model ||= Class.new(Model)
54
+ .tap { |obj| obj.instance_eval(&block) if block }
55
55
 
56
- instance_variable_set(variable, struct)
56
+ instance_variable_set(variable, model)
57
57
  end
58
58
  end
59
59
 
@@ -10,11 +10,11 @@ class ABBYY::Cloud
10
10
  http_method "get"
11
11
 
12
12
  request_query do
13
- attribute :skip, Types::Strict::Int
14
- attribute :take, Types::Strict::Int
15
- attribute :type, Types::Strict::String.optional
16
- attribute :from, Types::Locale.optional
17
- attribute :to, Types::Locale.optional
13
+ attribute :skip, type: Types::Strict::Int
14
+ attribute :take, type: Types::Strict::Int
15
+ attribute :type, type: Types::Strict::String, optional: true
16
+ attribute :from, type: Types::Locale, optional: true
17
+ attribute :to, type: Types::Locale, optional: true
18
18
  end
19
19
 
20
20
  response_body Types::Array.member(Types::Price)
@@ -10,22 +10,26 @@ class ABBYY::Cloud
10
10
  http_method "post"
11
11
 
12
12
  request_body do
13
- attribute :type, Types::TranslationType
14
- attribute :email, Types::Strict::String.optional
15
- attribute :contact_culture, Types::Strict::String.optional
16
- attribute :contact_utc_offset, Types::Coercible::String.optional
17
- attribute :mt_engine, Types::Strict::String.optional
18
- attribute :approval_required, Types::Form::Bool
19
- attribute :is_manual_estimation, Types::Form::Bool
20
- attribute :unit_type, Types::UnitType
21
- attribute :currency, Types::Currency
22
- attribute :from, Types::Locale
23
- attribute :label, Types::Label.optional
24
- attribute :to, Types::FilledArray.member(Types::Locale)
25
- attribute :files, Types::FilledArray.member(Types::FileReference)
26
- attribute :category, Types::Strict::String.optional
27
- attribute :cost_type,
28
- Types::CostType.default(Models::CostType.new("Default"))
13
+ attribute :type, type: Types::TranslationType
14
+ attribute :email, type: Types::Strict::String, optional: true
15
+ attribute :contact_culture, type: Types::Strict::String, optional: true
16
+ attribute :contact_utc_offset, type: Types::Coercible::String,
17
+ optional: true
18
+ attribute :mt_engine, type: Types::Strict::String,
19
+ default: proc { false }
20
+ attribute :approval_required, type: Types::Form::Bool,
21
+ default: proc { false }
22
+ attribute :is_manual_estimation, type: Types::Form::Bool,
23
+ optional: proc { false }
24
+ attribute :unit_type, type: Types::UnitType
25
+ attribute :currency, type: Types::Currency
26
+ attribute :from, type: Types::Locale
27
+ attribute :label, type: Types::Label, optional: true
28
+ attribute :to, type: Types::FilledArray.member(Types::Locale)
29
+ attribute :files, type: Types::FilledArray.member(Types::FileReference)
30
+ attribute :category, type: Types::Strict::String, optional: true
31
+ attribute :cost_type, type: Types::CostType,
32
+ default: proc { Models::CostType.new("Default") }
29
33
  end
30
34
 
31
35
  response_body Models::FullOrder
@@ -8,10 +8,10 @@ class ABBYY::Cloud
8
8
  http_method "post"
9
9
 
10
10
  request_body do
11
- attribute :engine, Types::Strict::String
12
- attribute :source_language, Types::Locale
13
- attribute :target_language, Types::Locale
14
- attribute :source_text, Types::Strict::String
11
+ attribute :engine, type: Types::Strict::String
12
+ attribute :source_language, type: Types::Locale
13
+ attribute :target_language, type: Types::Locale
14
+ attribute :source_text, type: Types::Strict::String
15
15
  end
16
16
 
17
17
  response_body Models::Translation
@@ -10,10 +10,10 @@ class ABBYY::Cloud
10
10
  http_method "post"
11
11
 
12
12
  request_body do
13
- attribute :engine, Types::Strict::String
14
- attribute :from, Types::Locale
15
- attribute :to, Types::Locale
16
- attribute :sources, Types::Array.member(Types::SourceSegment)
13
+ attribute :engine, type: Types::Strict::String
14
+ attribute :from, type: Types::Locale
15
+ attribute :to, type: Types::Locale
16
+ attribute :sources, type: Types::Array.member(Types::SourceSegment)
17
17
  end
18
18
 
19
19
  response_body Types::Array.member(Types::TranslationSegment)
@@ -10,10 +10,11 @@ class ABBYY::Cloud
10
10
  request_type :file
11
11
 
12
12
  request_query do
13
- attribute :quality, Types::OcrQuality.optional
14
- attribute :synthesisMode, Types::OcrMode.optional
15
- attribute :exportFormat, Types::FileFormat.optional
16
- attribute :languages, Types::Array.member(Types::Locale).optional
13
+ attribute :quality, type: Types::OcrQuality, optional: true
14
+ attribute :synthesisMode, type: Types::OcrMode, optional: true
15
+ attribute :exportFormat, type: Types::FileFormat, optional: true
16
+ attribute :languages, type: Types::Array.member(Types::Locale),
17
+ optional: true
17
18
  end
18
19
 
19
20
  response_body Types::Array.member(Types::FileInfo)
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::Direction do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid source:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::Discount do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid discount_type:" do
@@ -9,7 +9,7 @@ RSpec.describe ABBYY::Cloud::Models::Engine do
9
9
 
10
10
  subject { described_class.new(data) }
11
11
 
12
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
12
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
13
13
  its(:to_h) { is_expected.to eq data }
14
14
 
15
15
  context "without name:" do
@@ -13,12 +13,12 @@ RSpec.describe ABBYY::Cloud::Models::Error do
13
13
 
14
14
  subject { described_class.new(data) }
15
15
 
16
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
16
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
17
17
  its(:to_h) { is_expected.to eq data }
18
18
 
19
19
  context "without params" do
20
20
  let(:data) { {} }
21
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
21
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
22
22
  end
23
23
 
24
24
  context "with invalid request_id:" do
@@ -14,7 +14,7 @@ RSpec.describe ABBYY::Cloud::Models::FileLink do
14
14
 
15
15
  subject { described_class.new(data) }
16
16
 
17
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
17
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
18
18
  its(:to_h) { is_expected.to eq data }
19
19
 
20
20
  context "without id:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::FileReference do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "without id:" do
@@ -68,7 +68,7 @@ RSpec.describe ABBYY::Cloud::Models::FullOrder do
68
68
 
69
69
  subject { described_class.new(data) }
70
70
 
71
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
71
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
72
72
 
73
73
  context "without translations:" do
74
74
  before { data.delete :translations }
@@ -10,6 +10,6 @@ RSpec.describe ABBYY::Cloud::Models::OrderStatistics do
10
10
 
11
11
  subject { described_class.new(data) }
12
12
 
13
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
13
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
14
14
  its(:to_h) { is_expected.to eq data }
15
15
  end
@@ -14,7 +14,7 @@ RSpec.describe ABBYY::Cloud::Models::Price do
14
14
 
15
15
  subject { described_class.new(data) }
16
16
 
17
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
17
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
18
18
  its(:to_h) { is_expected.to eq data }
19
19
 
20
20
  context "without id:" do
@@ -8,7 +8,7 @@ RSpec.describe ABBYY::Cloud::Models::SourceSegment do
8
8
 
9
9
  subject { described_class.new(data) }
10
10
 
11
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
11
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
12
12
  its(:to_h) { is_expected.to eq data }
13
13
 
14
14
  context "without text:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::SourceTag do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid number:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::TransferData do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid order:" do
@@ -29,7 +29,7 @@ RSpec.describe ABBYY::Cloud::Models::TranslationLink do
29
29
 
30
30
  subject { described_class.new(data) }
31
31
 
32
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
32
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
33
33
 
34
34
  context "without source_file:" do
35
35
  before { data.delete :source_file }
@@ -9,7 +9,7 @@ RSpec.describe ABBYY::Cloud::Models::TranslationSegment do
9
9
 
10
10
  subject { described_class.new(data) }
11
11
 
12
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
12
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
13
13
  its(:to_h) { is_expected.to eq data }
14
14
 
15
15
  context "without text:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::Translation do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid id:" do
@@ -3,7 +3,7 @@ RSpec.describe ABBYY::Cloud::Models::UnitPrice do
3
3
 
4
4
  subject { described_class.new(data) }
5
5
 
6
- it { is_expected.to be_kind_of ABBYY::Cloud::Struct }
6
+ it { is_expected.to be_kind_of ABBYY::Cloud::Model }
7
7
  its(:to_h) { is_expected.to eq data }
8
8
 
9
9
  context "with invalid unit_type:" do
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.8
4
+ version: 0.0.9
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-09-17 00:00:00.000000000 Z
11
+ date: 2016-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-initializer
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.0
19
+ version: '0.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.4.0
26
+ version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-struct
28
+ name: dry-types
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.1
33
+ version: 0.9.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.1
40
+ version: 0.9.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hashie
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -188,6 +188,7 @@ files:
188
188
  - lib/abbyy/cloud/exceptions/argument_error.rb
189
189
  - lib/abbyy/cloud/exceptions/response_error.rb
190
190
  - lib/abbyy/cloud/exceptions/type_error.rb
191
+ - lib/abbyy/cloud/model.rb
191
192
  - lib/abbyy/cloud/models/cost_type.rb
192
193
  - lib/abbyy/cloud/models/currency.rb
193
194
  - lib/abbyy/cloud/models/direction.rb
@@ -241,7 +242,6 @@ files:
241
242
  - lib/abbyy/cloud/operations/translate_segments.rb
242
243
  - lib/abbyy/cloud/operations/upload_file.rb
243
244
  - lib/abbyy/cloud/settings.rb
244
- - lib/abbyy/cloud/struct.rb
245
245
  - lib/abbyy/cloud/types.rb
246
246
  - spec/feature/abbyy/files_download_spec.rb
247
247
  - spec/feature/abbyy/files_upload_spec.rb
@@ -1,13 +0,0 @@
1
- class ABBYY::Cloud::Struct < Dry::Struct
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
8
-
9
- super default.merge(actual)
10
- end
11
- alias_method :[], :new
12
- end
13
- end