groupdocs 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. data/.travis.yml +5 -0
  2. data/Gemfile +3 -0
  3. data/README.md +141 -0
  4. data/Rakefile +9 -0
  5. data/groupdocs.gemspec +28 -0
  6. data/lib/groupdocs.rb +53 -0
  7. data/lib/groupdocs/api.rb +3 -0
  8. data/lib/groupdocs/api/entity.rb +113 -0
  9. data/lib/groupdocs/api/helpers.rb +5 -0
  10. data/lib/groupdocs/api/helpers/access_helper.rb +56 -0
  11. data/lib/groupdocs/api/helpers/actions_helper.rb +48 -0
  12. data/lib/groupdocs/api/helpers/rest_helper.rb +89 -0
  13. data/lib/groupdocs/api/helpers/status_helper.rb +48 -0
  14. data/lib/groupdocs/api/helpers/url_helper.rb +89 -0
  15. data/lib/groupdocs/api/request.rb +73 -0
  16. data/lib/groupdocs/api/sugar/lookup.rb +48 -0
  17. data/lib/groupdocs/datasource.rb +162 -0
  18. data/lib/groupdocs/datasource/field.rb +44 -0
  19. data/lib/groupdocs/document.rb +513 -0
  20. data/lib/groupdocs/document/annotation.rb +215 -0
  21. data/lib/groupdocs/document/annotation/reply.rb +167 -0
  22. data/lib/groupdocs/document/change.rb +35 -0
  23. data/lib/groupdocs/document/field.rb +27 -0
  24. data/lib/groupdocs/document/metadata.rb +26 -0
  25. data/lib/groupdocs/document/rectangle.rb +24 -0
  26. data/lib/groupdocs/document/view.rb +36 -0
  27. data/lib/groupdocs/errors.rb +10 -0
  28. data/lib/groupdocs/job.rb +201 -0
  29. data/lib/groupdocs/questionnaire.rb +221 -0
  30. data/lib/groupdocs/questionnaire/execution.rb +120 -0
  31. data/lib/groupdocs/questionnaire/page.rb +43 -0
  32. data/lib/groupdocs/questionnaire/question.rb +75 -0
  33. data/lib/groupdocs/questionnaire/question/answer.rb +10 -0
  34. data/lib/groupdocs/storage.rb +37 -0
  35. data/lib/groupdocs/storage/file.rb +248 -0
  36. data/lib/groupdocs/storage/folder.rb +314 -0
  37. data/lib/groupdocs/storage/package.rb +42 -0
  38. data/lib/groupdocs/user.rb +50 -0
  39. data/lib/groupdocs/version.rb +3 -0
  40. data/spec/groupdocs/api/entity_spec.rb +54 -0
  41. data/spec/groupdocs/api/helpers/access_helper_spec.rb +89 -0
  42. data/spec/groupdocs/api/helpers/actions_helper_spec.rb +51 -0
  43. data/spec/groupdocs/api/helpers/rest_helper_spec.rb +187 -0
  44. data/spec/groupdocs/api/helpers/status_helper_spec.rb +85 -0
  45. data/spec/groupdocs/api/helpers/url_helper_spec.rb +93 -0
  46. data/spec/groupdocs/api/request_spec.rb +85 -0
  47. data/spec/groupdocs/datasource/field_spec.rb +50 -0
  48. data/spec/groupdocs/datasource_spec.rb +156 -0
  49. data/spec/groupdocs/document/annotation/reply_spec.rb +179 -0
  50. data/spec/groupdocs/document/annotation_spec.rb +226 -0
  51. data/spec/groupdocs/document/change_spec.rb +35 -0
  52. data/spec/groupdocs/document/field_spec.rb +31 -0
  53. data/spec/groupdocs/document/metadata_spec.rb +26 -0
  54. data/spec/groupdocs/document/rectangle_spec.rb +34 -0
  55. data/spec/groupdocs/document/view_spec.rb +36 -0
  56. data/spec/groupdocs/document_spec.rb +509 -0
  57. data/spec/groupdocs/errors_spec.rb +7 -0
  58. data/spec/groupdocs/job_spec.rb +196 -0
  59. data/spec/groupdocs/questionnaire/execution_spec.rb +136 -0
  60. data/spec/groupdocs/questionnaire/page_spec.rb +50 -0
  61. data/spec/groupdocs/questionnaire/question/answer_spec.rb +11 -0
  62. data/spec/groupdocs/questionnaire/question_spec.rb +84 -0
  63. data/spec/groupdocs/questionnaire_spec.rb +217 -0
  64. data/spec/groupdocs/storage/file_spec.rb +242 -0
  65. data/spec/groupdocs/storage/folder_spec.rb +310 -0
  66. data/spec/groupdocs/storage/package_spec.rb +41 -0
  67. data/spec/groupdocs/storage_spec.rb +27 -0
  68. data/spec/groupdocs/user_spec.rb +53 -0
  69. data/spec/groupdocs_spec.rb +56 -0
  70. data/spec/spec_helper.rb +46 -0
  71. data/spec/support/files/resume.pdf +0 -0
  72. data/spec/support/json/annotation_collaborators_set.json +16 -0
  73. data/spec/support/json/annotation_create.json +12 -0
  74. data/spec/support/json/annotation_list.json +32 -0
  75. data/spec/support/json/annotation_remove.json +9 -0
  76. data/spec/support/json/annotation_replies_create.json +9 -0
  77. data/spec/support/json/annotation_replies_get.json +25 -0
  78. data/spec/support/json/comparison_changes.json +46 -0
  79. data/spec/support/json/comparison_compare.json +8 -0
  80. data/spec/support/json/comparison_document.json +10 -0
  81. data/spec/support/json/datasource_add.json +8 -0
  82. data/spec/support/json/datasource_get.json +22 -0
  83. data/spec/support/json/datasource_remove.json +8 -0
  84. data/spec/support/json/datasource_update.json +8 -0
  85. data/spec/support/json/document_access_info_get.json +14 -0
  86. data/spec/support/json/document_convert.json +8 -0
  87. data/spec/support/json/document_datasource.json +10 -0
  88. data/spec/support/json/document_fields.json +34 -0
  89. data/spec/support/json/document_formats.json +8 -0
  90. data/spec/support/json/document_metadata.json +15 -0
  91. data/spec/support/json/document_questionnaire_create.json +9 -0
  92. data/spec/support/json/document_questionnaires.json +23 -0
  93. data/spec/support/json/document_sharers_remove.json +8 -0
  94. data/spec/support/json/document_sharers_set.json +16 -0
  95. data/spec/support/json/document_views.json +32 -0
  96. data/spec/support/json/file_compress.json +8 -0
  97. data/spec/support/json/file_copy.json +14 -0
  98. data/spec/support/json/file_delete.json +5 -0
  99. data/spec/support/json/file_move.json +14 -0
  100. data/spec/support/json/file_upload.json +8 -0
  101. data/spec/support/json/folder_create.json +8 -0
  102. data/spec/support/json/folder_delete.json +5 -0
  103. data/spec/support/json/folder_list.json +21 -0
  104. data/spec/support/json/folder_move.json +8 -0
  105. data/spec/support/json/folder_sharers_get.json +16 -0
  106. data/spec/support/json/folder_sharers_remove.json +8 -0
  107. data/spec/support/json/folder_sharers_set.json +16 -0
  108. data/spec/support/json/job_add_url.json +8 -0
  109. data/spec/support/json/job_create.json +8 -0
  110. data/spec/support/json/job_documents.json +39 -0
  111. data/spec/support/json/job_file_add.json +8 -0
  112. data/spec/support/json/job_update.json +7 -0
  113. data/spec/support/json/jobs_get.json +52 -0
  114. data/spec/support/json/package_create.json +7 -0
  115. data/spec/support/json/questionnaire_create.json +8 -0
  116. data/spec/support/json/questionnaire_datasources.json +26 -0
  117. data/spec/support/json/questionnaire_execution_create.json +9 -0
  118. data/spec/support/json/questionnaire_execution_status_set.json +8 -0
  119. data/spec/support/json/questionnaire_execution_update.json +8 -0
  120. data/spec/support/json/questionnaire_executions.json +24 -0
  121. data/spec/support/json/questionnaire_get.json +14 -0
  122. data/spec/support/json/questionnaire_remove.json +8 -0
  123. data/spec/support/json/questionnaire_update.json +8 -0
  124. data/spec/support/json/questionnaires_get.json +22 -0
  125. data/spec/support/json/storage_info.json +10 -0
  126. data/spec/support/shared_examples/api/entity.rb +37 -0
  127. data/spec/support/shared_examples/api/helpers/status_helper.rb +12 -0
  128. data/spec/support/shared_examples/api/sugar/lookup.rb +57 -0
  129. metadata +356 -0
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - ruby-head
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,141 @@
1
+ ## GroupDocs [![Build Status](https://secure.travis-ci.org/p0deje/groupdocs-ruby.png)](http://travis-ci.org/p0deje/groupdocs-ruby)
2
+
3
+ Ruby SDK for [GroupDocs](http://groupdocs.com) REST API.
4
+
5
+ ## Installation
6
+
7
+ GroupDocs requires Ruby 1.9. Ruby 1.8 is not supported!
8
+
9
+ Install as usually
10
+
11
+ gem install groupdocs
12
+
13
+ Installing from source
14
+
15
+ gem install bundler # unless it's already installed
16
+ git clone git@github.com:p0deje/groupdocs-ruby.git
17
+ cd groupdocs-ruby/
18
+ git checkout master
19
+ bundle install --path vendor/bundle
20
+ bundle exec rake install
21
+
22
+ ## Usage
23
+
24
+ All "bang" methods (ending with exclamation sign) imply interaction with API server.
25
+
26
+ Other methods (with expect to some methods - see documentation) do not operate with API Server
27
+
28
+ ### Configuration
29
+
30
+ First of all you need to configure your access to API server.
31
+
32
+ ```ruby
33
+ require 'groupdocs'
34
+
35
+ GroupDocs.configure do |groupdocs|
36
+ groupdocs.client_id = 'your_client_id'
37
+ groupdocs.private_key = 'your_private_key'
38
+ # optionally specify API server and version
39
+ groupdocs.api_server = 'https://dev-api.groupdocs.com'
40
+ groupdocs.api_version = '2.0'
41
+ end
42
+
43
+ GroupDocs::Storage::Folder.create!('/folder')
44
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @id=1, @name="folder", @url="http://groupdocs.com">
45
+ ```
46
+
47
+ You can also pass access credentials to particular requests
48
+
49
+ ```ruby
50
+ GroupDocs::Storage::Folder.create!('/folder', client_id: 'your_client_id', private_key: 'your_private_key')
51
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @id=1, @name="folder", @url="http://groupdocs.com">
52
+
53
+ GroupDocs::Document.find!(:name, 'CV.doc', client_id: 'your_client_id', private_key: 'your_private_key')
54
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @id=1, @name="Folder1", @url="http://groupdocs.com">
55
+ ```
56
+
57
+ ### Entities
58
+
59
+ All entities can be initialized in several ways.
60
+
61
+ * Object is created, attributes are set later.
62
+
63
+ ```ruby
64
+ folder = GroupDocs::Storage::Folder.new
65
+ folder.name = 'Folder'
66
+ folder.inspect
67
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @name="Folder">
68
+ ```
69
+
70
+ * Hash of attributes are passed to object constructor.
71
+
72
+ ```ruby
73
+ GroupDocs::Storage::Folder.new(name: 'Folder')
74
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @name="Folder">
75
+ ```
76
+
77
+ * Block is passed to object constructor.
78
+
79
+ ```ruby
80
+ GroupDocs::Storage::Folder.new do |folder|
81
+ folder.name = 'Folder'
82
+ end
83
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @name="Folder">
84
+ ```
85
+
86
+ ### Find entities
87
+
88
+ Some entities support `#all!`, `#find!` and `#find_all!` methods. You can pass any attribute that object responds to and its value to find with.
89
+
90
+ * List all files
91
+
92
+ ```ruby
93
+ GroupDocs::Storage::File.all!
94
+ #=> [#<GroupDocs::Storage::File:0x0000000171f432 @id=123, @guid="uhfsa9dry29rhfodn", @name="resume.pdf", @url="http://groupdocs.com">, #<GroupDocs::Storage::File:0x0000000171f498 @id=456, @guid="soif97sr9u24bfosd9", @name="CV.doc", @url="http://groupdocs.com">]
95
+ ```
96
+
97
+ * Find folder with name `Folder1`
98
+
99
+ ```ruby
100
+ GroupDocs::Storage::Folder.find!(:name, 'Folder1')
101
+ #=> #<GroupDocs::Storage::Folder:0x0000000171f432 @id=1, @name="Folder1", @url="http://groupdocs.com">
102
+ ```
103
+
104
+ * Find all folders which name starts with `Folder`
105
+
106
+ ```ruby
107
+ GroupDocs::Storage::Folder.find_all!(:name, /^Folder/)
108
+ #=> [#<GroupDocs::Storage::Folder:0x0000000171f432 @id=1, @name="Folder1", @url="http://groupdocs.com">, #<GroupDocs::Storage::Folder:0x0000000171f467 @id=2, @name="Folder2", @url="http://groupdocs.com">]
109
+ ```
110
+
111
+ ### Annotation API
112
+
113
+ Read more about examples of using Annotation API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Annotation-API).
114
+
115
+ ### Assembly API
116
+
117
+ Read more about examples of using Assembly API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Assembly-API).
118
+
119
+ ### Comparison API
120
+
121
+ Read more about examples of using Comparison API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Comparison-API).
122
+
123
+ ### Document API
124
+
125
+ Read more about examples of using Document API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Document-API).
126
+
127
+ ### Job API
128
+
129
+ Read more about examples of using Job API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Job-API).
130
+
131
+ ### Signature API
132
+
133
+ Not yet implemented.
134
+
135
+ ### Storage API
136
+
137
+ Read more about examples of using Storage API on [wiki](https://github.com/p0deje/groupdocs-ruby/wiki/Storage-API).
138
+
139
+ ### Copyright
140
+
141
+ Copyright (c) 2012 Aspose Inc.
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new do |spec|
5
+ spec.rspec_opts = %w(--color)
6
+ spec.pattern = 'spec/**/*_spec.rb'
7
+ end
8
+
9
+ task default: :spec
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
3
+ require "groupdocs/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'groupdocs'
7
+ s.version = GroupDocs::VERSION
8
+ s.authors = 'Alex Rodionov'
9
+ s.email = 'p0deje@gmail.com'
10
+ s.homepage = 'https://github.com/p0deje/groupdocs-ruby'
11
+ s.summary = 'Ruby SDK for GroupDocs REST API'
12
+ s.description = 'Ruby SDK for GroupDocs REST API'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
+ s.require_path = 'lib'
18
+
19
+ s.add_runtime_dependency 'rest-client', '~> 1.6'
20
+ s.add_runtime_dependency 'json' , '~> 1.6'
21
+ s.add_runtime_dependency 'ruby-hmac' , '~> 0.4'
22
+
23
+ s.add_development_dependency 'rspec' , '~> 2.9'
24
+ s.add_development_dependency 'rake' , '~> 0.9'
25
+ s.add_development_dependency 'simplecov', '~> 0.6'
26
+ s.add_development_dependency 'yard' , '~> 0.7'
27
+ s.add_development_dependency 'webmock' , '~> 1.8'
28
+ end
@@ -0,0 +1,53 @@
1
+ require 'groupdocs/version'
2
+ require 'groupdocs/errors'
3
+ require 'groupdocs/api'
4
+ require 'groupdocs/datasource'
5
+ require 'groupdocs/document'
6
+ require 'groupdocs/job'
7
+ require 'groupdocs/questionnaire'
8
+ require 'groupdocs/storage'
9
+ require 'groupdocs/user'
10
+
11
+ module GroupDocs
12
+ class << self
13
+
14
+ # @attr [String] client_id Client ID
15
+ attr_accessor :client_id
16
+
17
+ # @attr [String] private_key Private key
18
+ attr_accessor :private_key
19
+
20
+ # @attr [String] api_server API server
21
+ attr_accessor :api_server
22
+
23
+ # @attr [String] api_version Version of API server
24
+ attr_accessor :api_version
25
+
26
+ #
27
+ # Returns hostname of API server.
28
+ #
29
+ # @return [String] API hostname. Default one if it has not been explicitly set
30
+ #
31
+ def api_server
32
+ @api_server || 'https://api.groupdocs.com'
33
+ end
34
+
35
+ #
36
+ # Calls block for configuration of GroupDocs.
37
+ #
38
+ # @example
39
+ # GroupDocs.configure do |groupdocs|
40
+ # groupdocs.client_id = '07aaaf95f8eb33a4'
41
+ # groupdocs.private_key = '5cb711b3a52ffc5d90ee8a0f79206f5a'
42
+ # groupdocs.api_server = 'https://api.groupdocs.com'
43
+ # groupdocs.api_version = '2.0'
44
+ # end
45
+ #
46
+ # @yield [GroupDocs]
47
+ #
48
+ def configure(&blk)
49
+ yield self
50
+ end
51
+
52
+ end # << self
53
+ end # GroupDocs
@@ -0,0 +1,3 @@
1
+ require 'groupdocs/api/entity'
2
+ require 'groupdocs/api/request'
3
+ require 'groupdocs/api/sugar/lookup'
@@ -0,0 +1,113 @@
1
+ module GroupDocs
2
+ module Api
3
+ class Entity
4
+
5
+ #
6
+ # Implements flexible API object creation.
7
+ #
8
+ # You can pass hash of options to automatically set attributes.
9
+ #
10
+ # @example Create folder with options hash
11
+ # GroupDocs::Storage::Folder.new(id: 1, name 'Test', url: 'http://groupdocs.com/folder/test')
12
+ # #=> <#GroupDocs::Storage::Folder @id=1 @name="Test" @url="http://groupdocs.com/folder/test">
13
+ #
14
+ # You can also pass block to set up attributes.
15
+ #
16
+ # @example Create folder with block
17
+ # GroupDocs::Storage::Folder.new do |folder|
18
+ # folder.id = 1
19
+ # folder.name = 'Test'
20
+ # folder.url = 'http://groupdocs.com/folder/test'
21
+ # end
22
+ # #=> <#GroupDocs::Storage::Folder @id=1 @name="Test" @url="http://groupdocs.com/folder/test">
23
+ #
24
+ # @param [Hash] options Each option is object attribute
25
+ # @yield [self] Use block to set up attributes
26
+ #
27
+ def initialize(options = {}, &blk)
28
+ if options.empty?
29
+ yield self if block_given?
30
+ else
31
+ options.each do |attr, value|
32
+ send(:"#{attr}=", value) if respond_to?(:"#{attr}=")
33
+ end
34
+ end
35
+ end
36
+
37
+ #
38
+ # Recursively converts object and all its attributes to hash.
39
+ #
40
+ # @example Convert simple object to hash
41
+ # object = GroupDocs::Storage::File.new(id: 1, name, 'Test.pdf')
42
+ # object.to_hash
43
+ # #=> { id: 1, name: 'Test.pdf' }
44
+ #
45
+ # @return [Hash]
46
+ #
47
+ def to_hash
48
+ hash = {}
49
+ instance_variables.each do |variable|
50
+ key = variable_to_accessor(variable)
51
+ value = instance_variable_get(variable)
52
+
53
+ hash[key] = case value
54
+ when GroupDocs::Api::Entity
55
+ value.to_hash
56
+ when Array
57
+ value.map do |i|
58
+ i.to_hash if i.respond_to?(:to_hash)
59
+ end
60
+ else
61
+ value
62
+ end
63
+ end
64
+
65
+ hash
66
+ end
67
+
68
+ #
69
+ # Inspects object using accessors instead of instance variables values.
70
+ #
71
+ # @api private
72
+ #
73
+ def inspect
74
+ not_nil_variables = instance_variables.select do |variable|
75
+ !send(variable_to_accessor(variable)).nil?
76
+ end
77
+
78
+ variables = not_nil_variables.map do |variable|
79
+ accessor = variable_to_accessor(variable)
80
+ value = send(accessor)
81
+ value = case value
82
+ when Symbol then ":#{value}"
83
+ when String then "\"#{value}\""
84
+ else value
85
+ end
86
+ "@#{accessor}=#{value}"
87
+ end
88
+
89
+ inspected = self.to_s
90
+ unless variables.empty?
91
+ inspected.gsub!(/>$/, '')
92
+ inspected << " #{variables.join(', ')}"
93
+ inspected << ?>
94
+ end
95
+
96
+ inspected
97
+ end
98
+
99
+ private
100
+
101
+ #
102
+ # Converts instance variable symbol to accessor method symbol.
103
+ # @api private
104
+ #
105
+ def variable_to_accessor(variable)
106
+ word = variable.to_s.delete(?@)
107
+ word.gsub!(/[A-Z]/) { |letter| "_#{letter.downcase}" }
108
+ word.to_sym
109
+ end
110
+
111
+ end # Entity
112
+ end # Api
113
+ end # GroupDocs
@@ -0,0 +1,5 @@
1
+ require 'groupdocs/api/helpers/access_helper'
2
+ require 'groupdocs/api/helpers/actions_helper'
3
+ require 'groupdocs/api/helpers/rest_helper'
4
+ require 'groupdocs/api/helpers/status_helper'
5
+ require 'groupdocs/api/helpers/url_helper'
@@ -0,0 +1,56 @@
1
+ module GroupDocs
2
+ module Api
3
+ module Helpers
4
+ module Access
5
+
6
+ MODES = {
7
+ private: 0,
8
+ restricted: 1,
9
+ public: 2
10
+ }
11
+
12
+ private
13
+
14
+ #
15
+ # Returns client ID from access hash or GroupDocs class variable.
16
+ #
17
+ # @return [String]
18
+ # @raise [NoClientIdError] If Client ID hasn't been set yet, raise exception.
19
+ # @api private
20
+ #
21
+ def client_id
22
+ client_id = options[:access][:client_id] || GroupDocs.client_id
23
+ client_id or raise Errors::NoClientIdError, 'Client ID has not been specified.'
24
+ end
25
+
26
+ #
27
+ # Returns private key from access hash or GroupDocs class variable.
28
+ #
29
+ # @return [String]
30
+ # @raise [NoPrivateKeyError] If private key hasn't been set yet, raise exception.
31
+ # @api private
32
+ #
33
+ def private_key
34
+ private_key = options[:access][:private_key] || GroupDocs.private_key
35
+ private_key or raise Errors::NoPrivateKeyError, 'Private Key has not been specified.'
36
+ end
37
+
38
+ #
39
+ # Converts access mode from/to human-readable format.
40
+ #
41
+ # @param [Integer, Symbol] mode
42
+ # @return [Symbol, Integer]
43
+ # @api private
44
+ #
45
+ def parse_access_mode(mode)
46
+ if mode.is_a?(Integer)
47
+ MODES.invert[mode]
48
+ else
49
+ MODES[mode]
50
+ end or raise ArgumentError, "Unknown access mode: #{mode.inspect}."
51
+ end
52
+
53
+ end # Access
54
+ end # Helpers
55
+ end # Api
56
+ end # GroupDocs
@@ -0,0 +1,48 @@
1
+ module GroupDocs
2
+ module Api
3
+ module Helpers
4
+ module Actions
5
+
6
+ ACTIONS = {
7
+ none: 0,
8
+ convert: 1,
9
+ combine: 2,
10
+ compress_zip: 4,
11
+ compress_rar: 8,
12
+ trace: 16,
13
+ convert_body: 32,
14
+ bind_data: 64,
15
+ print: 128,
16
+ import_annotations: 256,
17
+ }
18
+
19
+ #
20
+ # Converts actions array to byte flag.
21
+ #
22
+ # @param [Array<String, Symbol>] actions
23
+ # @return [Integer]
24
+ # @raise [ArgumentError] if actions is not an array
25
+ # @raise [ArgumentError] if action is unknown
26
+ # @api private
27
+ #
28
+ def convert_actions(actions)
29
+ actions.is_a?(Array) or raise ArgumentError, "Actions should be an array, received: #{actions.inspect}"
30
+ actions = actions.map(&:to_sym)
31
+
32
+ possible_actions = ACTIONS.map { |hash| hash.first }
33
+ actions.each do |action|
34
+ possible_actions.include?(action) or raise ArgumentError, "Unknown action: #{action.inspect}"
35
+ end
36
+
37
+ flag = 0
38
+ actions.each do |action|
39
+ flag += ACTIONS[action]
40
+ end
41
+
42
+ flag
43
+ end
44
+
45
+ end # Actions
46
+ end # Helpers
47
+ end # Api
48
+ end # GroupDocs