crowdin-api 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +96 -31
  3. data/README.md +8 -6
  4. data/bin/crowdin-console +1 -1
  5. data/crowdin-api.gemspec +1 -2
  6. data/lib/crowdin-api/{api-resources → api_resources}/dictionaries.rb +8 -10
  7. data/lib/crowdin-api/{api-resources → api_resources}/distributions.rb +25 -32
  8. data/lib/crowdin-api/{api-resources → api_resources}/glossaries.rb +64 -82
  9. data/lib/crowdin-api/{api-resources → api_resources}/labels.rb +28 -47
  10. data/lib/crowdin-api/api_resources/languages.rb +61 -0
  11. data/lib/crowdin-api/api_resources/machine_translation_engines.rb +79 -0
  12. data/lib/crowdin-api/api_resources/projects.rb +124 -0
  13. data/lib/crowdin-api/api_resources/reports.rb +120 -0
  14. data/lib/crowdin-api/{api-resources → api_resources}/screenshots.rb +47 -61
  15. data/lib/crowdin-api/{api-resources → api_resources}/source_files.rb +68 -131
  16. data/lib/crowdin-api/{api-resources → api_resources}/source_strings.rb +19 -24
  17. data/lib/crowdin-api/api_resources/storages.rb +54 -0
  18. data/lib/crowdin-api/{api-resources → api_resources}/string_comments.rb +18 -23
  19. data/lib/crowdin-api/{api-resources → api_resources}/string_translations.rb +63 -90
  20. data/lib/crowdin-api/{api-resources → api_resources}/tasks.rb +30 -41
  21. data/lib/crowdin-api/api_resources/teams.rb +135 -0
  22. data/lib/crowdin-api/{api-resources → api_resources}/translation_memory.rb +38 -52
  23. data/lib/crowdin-api/{api-resources → api_resources}/translation_status.rb +24 -30
  24. data/lib/crowdin-api/{api-resources → api_resources}/translations.rb +40 -58
  25. data/lib/crowdin-api/api_resources/users.rb +161 -0
  26. data/lib/crowdin-api/api_resources/vendors.rb +21 -0
  27. data/lib/crowdin-api/{api-resources → api_resources}/webhooks.rb +19 -24
  28. data/lib/crowdin-api/api_resources/workflows.rb +59 -0
  29. data/lib/crowdin-api/client/client.rb +51 -42
  30. data/lib/crowdin-api/client/configuration.rb +12 -12
  31. data/lib/crowdin-api/client/version.rb +1 -1
  32. data/lib/crowdin-api/core/errors_raisers.rb +1 -1
  33. data/lib/crowdin-api/core/request.rb +53 -88
  34. data/lib/crowdin-api/core/send_request.rb +67 -0
  35. data/lib/crowdin-api.rb +17 -24
  36. data/spec/api_resources/dictionaries_spec.rb +23 -0
  37. data/spec/api_resources/distributions_spec.rb +71 -0
  38. data/spec/api_resources/glossaries_spec.rb +167 -0
  39. data/spec/api_resources/labels_spec.rb +71 -0
  40. data/spec/api_resources/languages_spec.rb +51 -0
  41. data/spec/api_resources/machine_translation_engines_spec.rb +63 -0
  42. data/spec/api_resources/projects_spec.rb +215 -0
  43. data/spec/api_resources/reports_spec.rb +95 -0
  44. data/spec/api_resources/screenshots_spec.rb +134 -0
  45. data/spec/api_resources/source_files_spec.rb +13 -0
  46. data/spec/api_resources/source_strings_spec.rb +51 -0
  47. data/spec/api_resources/storages_spec.rb +13 -0
  48. data/spec/api_resources/string_comments_spec.rb +13 -0
  49. data/spec/api_resources/string_translations_spec.rb +13 -0
  50. data/spec/api_resources/tasks_spec.rb +79 -0
  51. data/spec/api_resources/teams_spec.rb +13 -0
  52. data/spec/api_resources/translation_memory_spec.rb +13 -0
  53. data/spec/api_resources/translation_status_spec.rb +15 -0
  54. data/spec/api_resources/translations_spec.rb +107 -0
  55. data/spec/api_resources/users_spec.rb +117 -0
  56. data/spec/api_resources/vendors_spec.rb +13 -0
  57. data/spec/api_resources/webhooks_spec.rb +51 -0
  58. data/spec/api_resources/workflows_spec.rb +41 -0
  59. data/spec/spec_helper.rb +20 -2
  60. data/spec/unit/client_spec.rb +85 -0
  61. metadata +64 -43
  62. data/bin/setup +0 -6
  63. data/lib/crowdin-api/api-resources/languages.rb +0 -82
  64. data/lib/crowdin-api/api-resources/machine_translation_engines.rb +0 -74
  65. data/lib/crowdin-api/api-resources/projects.rb +0 -148
  66. data/lib/crowdin-api/api-resources/reports.rb +0 -138
  67. data/lib/crowdin-api/api-resources/storages.rb +0 -106
  68. data/lib/crowdin-api/api-resources/teams.rb +0 -144
  69. data/lib/crowdin-api/api-resources/users.rb +0 -129
  70. data/lib/crowdin-api/api-resources/vendors.rb +0 -21
  71. data/lib/crowdin-api/api-resources/workflows.rb +0 -62
  72. data/lib/crowdin-api/core/utils.rb +0 -10
  73. data/spec/client/client-instance_spec.rb +0 -14
  74. data/spec/client/configuration-instance_spec.rb +0 -72
@@ -7,26 +7,24 @@ module Crowdin
7
7
  project_id || raise_project_id_is_required_error
8
8
 
9
9
  request = Web::Request.new(
10
- self,
10
+ connection,
11
11
  :get,
12
- "/projects/#{project_id}/webhooks",
13
- query
12
+ "#{config.target_api_url}/projects/#{project_id}/webhooks",
13
+ { params: query }
14
14
  )
15
-
16
- request.perform
15
+ Web::SendRequest.new(request).perform
17
16
  end
18
17
 
19
18
  def add_webhook(query = {}, project_id = config.project_id)
20
19
  project_id || raise_project_id_is_required_error
21
20
 
22
21
  request = Web::Request.new(
23
- self,
22
+ connection,
24
23
  :post,
25
- "/projects/#{project_id}/webhooks",
26
- query
24
+ "#{config.target_api_url}/projects/#{project_id}/webhooks",
25
+ { params: query }
27
26
  )
28
-
29
- request.perform
27
+ Web::SendRequest.new(request).perform
30
28
  end
31
29
 
32
30
  def get_webhook(webhook_id = nil, project_id = config.project_id)
@@ -34,12 +32,11 @@ module Crowdin
34
32
  project_id || raise_project_id_is_required_error
35
33
 
36
34
  request = Web::Request.new(
37
- self,
35
+ connection,
38
36
  :get,
39
- "/projects/#{project_id}/webhooks/#{webhook_id}"
37
+ "#{config.target_api_url}/projects/#{project_id}/webhooks/#{webhook_id}"
40
38
  )
41
-
42
- request.perform
39
+ Web::SendRequest.new(request).perform
43
40
  end
44
41
 
45
42
  def delete_webhook(webhook_id = nil, project_id = config.project_id)
@@ -47,26 +44,24 @@ module Crowdin
47
44
  project_id || raise_project_id_is_required_error
48
45
 
49
46
  request = Web::Request.new(
50
- self,
47
+ connection,
51
48
  :delete,
52
- "/projects/#{project_id}/webhooks/#{webhook_id}"
49
+ "#{config.target_api_url}/projects/#{project_id}/webhooks/#{webhook_id}"
53
50
  )
54
-
55
- request.perform
51
+ Web::SendRequest.new(request).perform
56
52
  end
57
53
 
58
- def edit_screenshot(webhook_id = nil, query = {}, project_id = config.project_id)
54
+ def edit_webhook(webhook_id = nil, query = {}, project_id = config.project_id)
59
55
  webhook_id || raise_parameter_is_required_error(:webhook_id)
60
56
  project_id || raise_project_id_is_required_error
61
57
 
62
58
  request = Web::Request.new(
63
- self,
59
+ connection,
64
60
  :patch,
65
- "/projects/#{project_id}/webhooks/#{webhook_id}",
66
- query
61
+ "#{config.target_api_url}/projects/#{project_id}/webhooks/#{webhook_id}",
62
+ { params: query }
67
63
  )
68
-
69
- request.perform
64
+ Web::SendRequest.new(request).perform
70
65
  end
71
66
  end
72
67
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crowdin
4
+ module ApiResources
5
+ module Workflows
6
+ # -- For Enterprise mode only --
7
+
8
+ def list_workflow_steps(query = {}, project_id = config.project_id)
9
+ enterprise_mode? || raise_only_for_enterprise_mode_error
10
+ project_id || raise_project_id_is_required_error
11
+
12
+ request = Web::Request.new(
13
+ connection,
14
+ :get,
15
+ "#{config.target_api_url}/projects/#{project_id}/workflow-steps",
16
+ { params: query }
17
+ )
18
+ Web::SendRequest.new(request).perform
19
+ end
20
+
21
+ def get_workflow_step(step_id = nil, project_id = config.project_id)
22
+ enterprise_mode? || raise_only_for_enterprise_mode_error
23
+ step_id || raise_parameter_is_required_error(:step_id)
24
+ project_id || raise_project_id_is_required_error
25
+
26
+ request = Web::Request.new(
27
+ connection,
28
+ :get,
29
+ "#{config.target_api_url}/projects/#{project_id}/workflow-steps/#{step_id}"
30
+ )
31
+ Web::SendRequest.new(request).perform
32
+ end
33
+
34
+ def list_workflow_templates(query = {})
35
+ enterprise_mode? || raise_only_for_enterprise_mode_error
36
+
37
+ request = Web::Request.new(
38
+ connection,
39
+ :get,
40
+ "#{config.target_api_url}/workflow-templates",
41
+ { params: query }
42
+ )
43
+ Web::SendRequest.new(request).perform
44
+ end
45
+
46
+ def get_workflow_template(template_id = nil)
47
+ enterprise_mode? || raise_only_for_enterprise_mode_error
48
+ template_id || raise_parameter_is_required_error(:template_id)
49
+
50
+ request = Web::Request.new(
51
+ connection,
52
+ :get,
53
+ "#{config.target_api_url}/workflow-templates/#{template_id}"
54
+ )
55
+ Web::SendRequest.new(request).perform
56
+ end
57
+ end
58
+ end
59
+ end
@@ -20,76 +20,85 @@ module Crowdin
20
20
  # crowdin.list_projects
21
21
  #
22
22
  class Client
23
- extend Utils
24
-
25
- # API Resources modules
26
- API_RESOURCES_MODULES = %i[Storages Languages Projects Workflows SourceFiles Translations SourceStrings
27
- StringTranslations StringComments Screenshots Glossaries TranslationMemory
28
- MachineTranslationEngines Reports Tasks Users Teams Vendors Webhooks
29
- Dictionaries Distributions Labels TranslationStatus].freeze
30
-
31
- # Error Raisers modules
32
- ERROR_RAISERS_MODULES = %i[ApiErrorsRaiser ClientErrorsRaiser].freeze
33
-
34
- # Processing all API Resources modules to include them to the Client
23
+ # Processing API Resources modules to include them to the Client
35
24
  API_RESOURCES_MODULES.each do |module_name|
36
- Client.send(:include, fetch_module_full_name_from_string("Crowdin::ApiResources::#{module_name}"))
25
+ Client.send(:include, Object.const_get("Crowdin::ApiResources::#{module_name}"))
37
26
  end
38
27
 
39
- # Processing all Error Raisers modules to include them to the Client
28
+ # Processing Error Raisers modules to include them to the Client
40
29
  ERROR_RAISERS_MODULES.each do |module_name|
41
- Client.send(:include, fetch_module_full_name_from_string("Crowdin::Errors::#{module_name}"))
30
+ Client.send(:include, Object.const_get("Crowdin::Errors::#{module_name}"))
42
31
  end
43
32
 
33
+ # Config instance that includes configuration options for the Client
44
34
  attr_reader :config
35
+ # Instance with established connection through RestClient to the Crowdin API
45
36
  attr_reader :connection
37
+ # Instance with options and headers for RestClient connection
46
38
  attr_reader :options
39
+ # Logger instance
47
40
  attr_reader :logger
48
41
 
49
42
  def initialize(&block)
50
43
  build_configuration(&block)
51
44
 
52
- check_logger
53
- check_rest_client_proxy
45
+ update_logger
46
+ update_rest_client_proxy
54
47
 
55
48
  build_connection
56
49
  end
57
50
 
58
- def log!(message)
59
- !config.logger_enabled? || logger.debug(message)
51
+ def log(message)
52
+ !logger_enabled? || logger.debug(message)
60
53
  end
61
54
 
62
55
  def logger=(logger)
63
- raise_logger_are_not_enabled_error unless config.logger_enabled?
64
- @logger = logger
65
- end
66
-
67
- private
56
+ raise_logger_are_not_enabled_error unless logger_enabled?
68
57
 
69
- def build_configuration
70
- @config = Crowdin::Configuration.new
71
- yield config if block_given?
72
- end
73
-
74
- def build_connection
75
- @connection ||= ::RestClient::Resource.new(config.base_url, build_options)
58
+ @logger = logger
59
+ update_rest_client_logger
76
60
  end
77
61
 
78
- def build_options
79
- @options ||= config.options.merge(headers: config.headers)
62
+ def enterprise_mode?
63
+ !!config.organization_domain
80
64
  end
81
65
 
82
- def set_default_logger
83
- require 'logger'
84
- @logger ||= Logger.new($stderr)
66
+ def logger_enabled?
67
+ config.logger_enabled?
85
68
  end
86
69
 
87
- def check_rest_client_proxy
88
- ENV['http_proxy'] ? ::RestClient.proxy = ENV['http_proxy'] : false
89
- end
70
+ private
90
71
 
91
- def check_logger
92
- config.logger_enabled? ? set_default_logger : config.enable_logger = false
93
- end
72
+ def build_configuration
73
+ @config = Crowdin::Configuration.new
74
+ yield config if block_given?
75
+ end
76
+
77
+ def build_connection
78
+ build_options
79
+ @connection ||= ::RestClient::Resource.new(config.base_url, options)
80
+ end
81
+
82
+ def build_options
83
+ @options ||= config.options.merge(headers: config.headers)
84
+ end
85
+
86
+ def set_default_logger
87
+ require 'logger'
88
+ @logger ||= Logger.new($stdout)
89
+ update_rest_client_logger
90
+ end
91
+
92
+ def update_rest_client_logger
93
+ ::RestClient.log = @logger
94
+ end
95
+
96
+ def update_rest_client_proxy
97
+ ENV['http_proxy'] ? ::RestClient.proxy = ENV.fetch('http_proxy') : false
98
+ end
99
+
100
+ def update_logger
101
+ config.logger_enabled? ? set_default_logger : config.enable_logger = false
102
+ end
94
103
  end
95
104
  end
@@ -5,12 +5,12 @@ module Crowdin
5
5
  attr_accessor :api_token
6
6
  attr_accessor :project_id
7
7
  attr_accessor :organization_domain
8
+
8
9
  attr_accessor :enable_logger
10
+ alias logger_enabled? enable_logger
9
11
 
10
12
  attr_reader :target_api_url
11
13
 
12
- alias logger_enabled? enable_logger
13
-
14
14
  def initialize
15
15
  @target_api_url = '/api/v2'
16
16
  end
@@ -33,16 +33,16 @@ module Crowdin
33
33
  end
34
34
 
35
35
  def base_url
36
- if enterprise_mode?
37
- organization_domain.include?('.com') ? organization_domain : "https://#{organization_domain}.api.crowdin.com"
38
- else
39
- 'https://api.crowdin.com'
40
- end
41
- end
42
-
43
- def organization_domain?
44
- !!organization_domain
36
+ @base_url ||=
37
+ if !!organization_domain
38
+ if organization_domain.include?('.com')
39
+ "https://#{organization_domain}"
40
+ else
41
+ "https://#{organization_domain}.api.crowdin.com"
42
+ end
43
+ else
44
+ 'https://api.crowdin.com'
45
+ end
45
46
  end
46
- alias enterprise_mode? organization_domain?
47
47
  end
48
48
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Crowdin
4
4
  class Client
5
- VERSION = '1.2.1'
5
+ VERSION = '1.3.0'
6
6
  end
7
7
  end
@@ -6,7 +6,7 @@ module Crowdin
6
6
  module ClientErrorsRaiser
7
7
  def raise_logger_are_not_enabled_error
8
8
  raise(LoggerAreNotEnabledError, 'Logger are not enabled in your Client configuration, enable it ' \
9
- 'before setting your own logger')
9
+ 'before setting your logger')
10
10
  end
11
11
  end
12
12
 
@@ -3,116 +3,81 @@
3
3
  module Crowdin
4
4
  module Web
5
5
  class Request
6
- attr_reader :client
7
-
8
- def initialize(client, method, path, query = {}, headers = {}, destination = nil)
9
- @client = client
10
- @method = method
11
- @full_path = client.config.target_api_url + path
12
- @payload = perform_payload(query)
13
- @headers = headers
14
- @destination = destination
15
- @errors = []
6
+ attr_reader :connection
7
+ attr_reader :method
8
+ attr_reader :payload
9
+
10
+ def initialize(connection, method, url, payload = {})
11
+ @connection = connection[url]
12
+ @method = method
13
+ @payload = build_payload(payload)
16
14
  end
17
15
 
18
- def perform
19
- process_request!
20
- process_response!
16
+ def get?
17
+ method.eql?(:get)
21
18
  end
22
19
 
23
- private
24
-
25
- def process_request!
26
- return @response = client.connection[@full_path].delete if delete_request?
27
- return @response = client.connection[@full_path].get(@payload) if get_request?
28
-
29
- client.connection[@full_path].send(@method, @payload, @headers) { |response, _, _| @response = response }
30
- rescue StandardError => error
31
- client.log! error
32
-
33
- @errors << "Something went wrong while request proccessing. Details - #{error.class}"
20
+ def get
21
+ connection.get(prepare_payload(payload[:params]))
34
22
  end
35
23
 
36
- def process_response!
37
- return fetch_errors if @errors.any?
38
-
39
- begin
40
- if @response
41
- client.log! "args: #{@response.request.args}"
42
-
43
- if @response.body.empty?
44
- @response.code
45
- else
46
- doc = JSON.parse(@response.body)
47
-
48
- client.log! "body: #{doc}"
49
-
50
- data = fetch_response_data(doc)
51
-
52
- @errors.any? ? fetch_errors : data
53
- end
54
- end
55
- rescue StandardError => error
56
- client.log! error
57
-
58
- @errors << "Something went wrong while response proccessing. Details - #{error.class}"
59
-
60
- fetch_errors
61
- end
24
+ def delete?
25
+ method.eql?(:delete)
62
26
  end
63
27
 
64
- def perform_payload(query)
65
- return query if query.is_a?(File)
66
-
67
- get_request? ? { params: fetch_cleared_query(query) } : fetch_cleared_query(query).to_json
28
+ def delete
29
+ connection.delete
68
30
  end
69
31
 
70
- def download_file(url)
71
- download = URI.parse(url).open
72
- destination = @destination || download.meta['content-disposition']
73
- .match(/filename=("?)(.+)\1/)[2]
32
+ def patch?
33
+ method.eql?(:patch)
34
+ end
74
35
 
75
- IO.copy_stream(download, destination)
36
+ def patch
37
+ connection.patch(prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
38
+ end
76
39
 
77
- destination
78
- rescue StandardError => error
79
- client.log! error
40
+ def post?
41
+ method.eql?(:post)
42
+ end
80
43
 
81
- @errors << "Something went wrong while downloading file. Details - #{error.class}"
44
+ def post
45
+ connection.post(prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
82
46
  end
83
47
 
84
- def fetch_errors
85
- @errors.join(';')
48
+ def put?
49
+ method.eql?(:put)
86
50
  end
87
51
 
88
- def fetch_response_data(doc)
89
- if doc['data'].is_a?(Hash) && doc['data']['url'] && doc['data']['url'].include?('response-content-disposition')
90
- download_file(doc['data']['url'])
91
- else
92
- doc
93
- end
52
+ def put
53
+ connection.put(prepare_payload(payload[:params]), payload[:headers]) { |response, _, _| response }
94
54
  end
95
55
 
96
- def fetch_cleared_query(query)
97
- case query
98
- when Array
99
- query.map do |el|
100
- el.reject { |_, value| value.nil? }
101
- end.reject(&:empty?)
102
- when Hash
103
- query.reject { |_, value| value.nil? }
104
- else
105
- query
56
+ private
57
+
58
+ def build_payload(payload)
59
+ %i[params headers].each do |key|
60
+ payload[key] ||= {}
61
+ end
62
+ payload
106
63
  end
107
- end
108
64
 
109
- def get_request?
110
- @method.eql?(:get)
111
- end
65
+ def prepare_payload(params)
66
+ return params if params.is_a?(File)
112
67
 
113
- def delete_request?
114
- @method.eql?(:delete)
115
- end
68
+ get? ? { params: fetch_cleared_params(params) } : fetch_cleared_params(params).to_json
69
+ end
70
+
71
+ def fetch_cleared_params(params)
72
+ case params
73
+ when Array
74
+ params.map { |el| el.reject { |_, value| value.nil? } }.reject(&:empty?)
75
+ when Hash
76
+ params.reject { |_, value| value.nil? }
77
+ else
78
+ params
79
+ end
80
+ end
116
81
  end
117
82
  end
118
83
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crowdin
4
+ module Web
5
+ class SendRequest
6
+ attr_reader :request
7
+
8
+ def initialize(request, file_destination = nil)
9
+ @request = request
10
+ @file_destination = file_destination
11
+ @errors = []
12
+ end
13
+
14
+ def perform
15
+ parse_response(process_request)
16
+ end
17
+
18
+ private
19
+
20
+ def process_request
21
+ request.send(request.method)
22
+ rescue StandardError => e
23
+ @errors << "Something went wrong while request processing. Details - #{e.message}"
24
+ end
25
+
26
+ def parse_response(response)
27
+ return @errors.join('; ') if @errors.any?
28
+
29
+ begin
30
+ if response
31
+ if response.body.empty?
32
+ response.code
33
+ else
34
+ parsed_body = JSON.parse(response.body)
35
+ parsed_response = fetch_response_data(parsed_body)
36
+
37
+ @errors.any? ? @errors.join('; ') : parsed_response
38
+ end
39
+ end
40
+ rescue StandardError => e
41
+ @errors << "Something went wrong while response processing. Details - #{e.message}"
42
+ @errors.join('; ')
43
+ end
44
+ end
45
+
46
+ def fetch_response_data(doc)
47
+ if doc['data'].is_a?(Hash) && doc['data']['url'] && doc['data']['url'].include?('response-content-disposition')
48
+ download_file(doc['data']['url'])
49
+ else
50
+ doc
51
+ end
52
+ end
53
+
54
+ def download_file(url)
55
+ download = URI.parse(url).open
56
+ destination = @file_destination || download.meta['content-disposition']
57
+ .match(/filename=("?)(.+)\1/)[2]
58
+
59
+ IO.copy_stream(download, destination)
60
+
61
+ destination
62
+ rescue StandardError => e
63
+ @errors << "Something went wrong while downloading file. Details - #{e.message}"
64
+ end
65
+ end
66
+ end
67
+ end
data/lib/crowdin-api.rb CHANGED
@@ -1,5 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module Crowdin
4
+ # API Resources modules
5
+ API_RESOURCES_MODULES = %i[Storages Languages Projects Workflows SourceFiles Translations SourceStrings
6
+ StringTranslations StringComments Screenshots Glossaries TranslationMemory
7
+ MachineTranslationEngines Reports Tasks Users Teams Vendors Webhooks
8
+ Dictionaries Distributions Labels TranslationStatus].freeze
9
+
10
+ # Error Raisers modules
11
+ ERROR_RAISERS_MODULES = %i[ApiErrorsRaiser ClientErrorsRaiser].freeze
12
+ end
13
+
3
14
  # Libs
4
15
  require 'json'
5
16
  require 'open-uri'
@@ -9,32 +20,14 @@ require 'rest-client'
9
20
  require 'crowdin-api/core/errors'
10
21
  require 'crowdin-api/core/errors_raisers'
11
22
  require 'crowdin-api/core/request'
12
- require 'crowdin-api/core/utils'
23
+ require 'crowdin-api/core/send_request'
13
24
 
14
25
  # API modules
15
- require 'crowdin-api/api-resources/storages'
16
- require 'crowdin-api/api-resources/languages'
17
- require 'crowdin-api/api-resources/projects'
18
- require 'crowdin-api/api-resources/workflows'
19
- require 'crowdin-api/api-resources/source_files'
20
- require 'crowdin-api/api-resources/translations'
21
- require 'crowdin-api/api-resources/source_strings'
22
- require 'crowdin-api/api-resources/string_translations'
23
- require 'crowdin-api/api-resources/string_comments'
24
- require 'crowdin-api/api-resources/screenshots'
25
- require 'crowdin-api/api-resources/glossaries'
26
- require 'crowdin-api/api-resources/translation_memory'
27
- require 'crowdin-api/api-resources/machine_translation_engines'
28
- require 'crowdin-api/api-resources/reports'
29
- require 'crowdin-api/api-resources/tasks'
30
- require 'crowdin-api/api-resources/users'
31
- require 'crowdin-api/api-resources/teams'
32
- require 'crowdin-api/api-resources/vendors'
33
- require 'crowdin-api/api-resources/webhooks'
34
- require 'crowdin-api/api-resources/dictionaries'
35
- require 'crowdin-api/api-resources/distributions'
36
- require 'crowdin-api/api-resources/labels'
37
- require 'crowdin-api/api-resources/translation_status'
26
+ Crowdin::API_RESOURCES_MODULES.each do |api_resource|
27
+ require "crowdin-api/api_resources/#{api_resource.to_s.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase}"
28
+ rescue LoadError
29
+ # Ignored
30
+ end
38
31
 
39
32
  # Client modules
40
33
  require 'crowdin-api/client/version'
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Crowdin::ApiResources::Dictionaries do
4
+ describe 'Default endpoints' do
5
+ describe '#list_dictionaries' do
6
+ it 'when request are valid', :default do
7
+ stub_request(:get, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/dictionaries")
8
+ list_dictionaries = @crowdin.list_dictionaries({}, project_id)
9
+ expect(list_dictionaries).to eq(200)
10
+ end
11
+ end
12
+
13
+ describe '#edit_dictionary' do
14
+ let(:language_id) { 1 }
15
+
16
+ it 'when request are valid', :default do
17
+ stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/dictionaries/#{language_id}")
18
+ edit_dictionary = @crowdin.edit_dictionary(language_id, {}, project_id)
19
+ expect(edit_dictionary).to eq(200)
20
+ end
21
+ end
22
+ end
23
+ end