crowdin-api 1.6.0 → 1.8.0

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
  SHA256:
3
- metadata.gz: c30c686d6eb10b527235cfbb182aad55d47ad1a8a546b96a4215a60b1b2e29fd
4
- data.tar.gz: cec244035e78c4abef7de5e44d845f4ccc306fd12a6b60e33762f26d88dca5f1
3
+ metadata.gz: e48386263c0d9c28eb7d659a8a35ee2b634991556f6d90794fe02edad4f76bb9
4
+ data.tar.gz: dcdcfd4f4a1f9d0415d7eb8ec6e0db54adbf2e77db9da9dad40b3568aee3938e
5
5
  SHA512:
6
- metadata.gz: 73df7b0e5b4a5281d9894f45ca81bf77e4afa2404ea84c6b50c5a6a97d146b629d610d9131cb0962e4f4dfeccfaafd290e2b225271e40691d18c602d53872201
7
- data.tar.gz: 388067874b3264c10e38eef41270416637b93a1b4affad5427e05f4fe246fc3f39377e5b25fb1e1f21d641dea6a3ba6165e75f9aeca0fd621028a0db09d07177
6
+ metadata.gz: 2702291c599443bbc8b8454bbe0755eaeaf08de6433fdf6f516014332fd262e6daa26f3944888ff42d4cf03647f840371f78cfbd5a7ada30264d30cfbb5ad214
7
+ data.tar.gz: 160bada2b69cc096bca583296d8ee2d5bc390a72d0d62e633bd4f4ae7bde56ef169bf324f5b19d1d3d16ee18b906231d999198abb8cce2d6b3e99f51e3a524e5
@@ -0,0 +1,9 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: '/'
5
+ schedule:
6
+ interval: monthly
7
+ ignore:
8
+ - dependency-name: "*"
9
+ update-types: [ "version-update:semver-major" ]
@@ -1,9 +1,10 @@
1
1
  name: Build and Publish
2
2
 
3
3
  on:
4
- push:
5
- tags:
6
- - '*'
4
+ release:
5
+ types: [published]
6
+ repository_dispatch:
7
+ types: [publish]
7
8
 
8
9
  jobs:
9
10
  build-and-publish:
@@ -12,12 +13,12 @@ jobs:
12
13
  packages: write
13
14
  contents: read
14
15
  steps:
15
- - uses: actions/checkout@v3
16
+ - uses: actions/checkout@v4
16
17
 
17
- - name: Set up Ruby 2.6
18
+ - name: Set up Ruby 3.0
18
19
  uses: ruby/setup-ruby@v1
19
20
  with:
20
- ruby-version: 2.6
21
+ ruby-version: 3.0
21
22
 
22
23
  - run: bundle install
23
24
 
@@ -0,0 +1,15 @@
1
+ name: Dependency Analysis
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ schedule:
8
+ - cron: '0 0 * * MON'
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ dependency-analysis:
13
+ uses: crowdin/.github/.github/workflows/dependency-analysis.yml@main
14
+ secrets:
15
+ FOSSA_API_KEY: ${{ secrets.FOSSA_API_KEY }}
@@ -1,20 +1,21 @@
1
1
  name: Docs
2
2
 
3
3
  on:
4
- push:
5
- tags:
6
- - '*'
4
+ release:
5
+ types: [published]
6
+ repository_dispatch:
7
+ types: [publish]
7
8
 
8
9
  jobs:
9
10
  docs:
10
11
  runs-on: ubuntu-latest
11
12
  steps:
12
- - uses: actions/checkout@v3
13
+ - uses: actions/checkout@v4
13
14
 
14
- - name: Set up Ruby 2.6
15
+ - name: Set up Ruby 3.0
15
16
  uses: ruby/setup-ruby@v1
16
17
  with:
17
- ruby-version: 2.6
18
+ ruby-version: 3.0
18
19
 
19
20
  - run: bundle install
20
21
 
@@ -27,7 +28,7 @@ jobs:
27
28
  run: yardoc lib/crowdin-api/api_resources/*.rb
28
29
 
29
30
  - name: Deploy 🚀
30
- uses: JamesIves/github-pages-deploy-action@v4.4.1
31
+ uses: JamesIves/github-pages-deploy-action@v4
31
32
  with:
32
33
  branch: gh-pages
33
- folder: doc
34
+ folder: doc
@@ -1,4 +1,4 @@
1
- name: lint-pr-title
1
+ name: Lint PR Title
2
2
 
3
3
  on:
4
4
  pull_request_target:
@@ -0,0 +1,29 @@
1
+ name: Release
2
+ run-name: Release ${{ github.event.inputs.version }} version
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ inputs:
7
+ version:
8
+ type: choice
9
+ description: Version
10
+ options:
11
+ - patch
12
+ - minor
13
+ - major
14
+
15
+ jobs:
16
+ version:
17
+ permissions:
18
+ contents: write
19
+ uses: crowdin/.github/.github/workflows/bump-version.yml@main
20
+
21
+ publish:
22
+ runs-on: ubuntu-latest
23
+ needs: version
24
+ permissions:
25
+ contents: write
26
+ steps:
27
+ - uses: peter-evans/repository-dispatch@v2
28
+ with:
29
+ event-type: publish
@@ -12,10 +12,10 @@ jobs:
12
12
  runs-on: ubuntu-latest
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: [ '2.6', '2.7', '3.0' ]
15
+ ruby-version: [ '3.0', '3.1', '3.2', '3.3' ]
16
16
  steps:
17
17
  - name: Checkout code
18
- uses: actions/checkout@v3
18
+ uses: actions/checkout@v4
19
19
 
20
20
  - name: Set up Ruby
21
21
  uses: ruby/setup-ruby@v1
@@ -30,5 +30,6 @@ jobs:
30
30
 
31
31
  - name: Publish code coverage report
32
32
  uses: codecov/codecov-action@v3
33
+ if: matrix.ruby-version == '3.0'
33
34
  with:
34
35
  token: ${{ secrets.CODECOV_TOKEN }}
data/.gitignore CHANGED
@@ -5,7 +5,6 @@
5
5
  .DS_Store
6
6
 
7
7
  # Ignore versioning files
8
- Gemfile.lock
9
8
  .ruby-version
10
9
 
11
10
  # Ignore tests coverage folder
data/.release-it.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "git": {
3
+ "push": true,
4
+ "commit": true,
5
+ "commitMessage": "chore: version ${version} [skip ci]",
6
+ "requireBranch": "main",
7
+ "tag": true
8
+ },
9
+ "github": {
10
+ "release": true,
11
+ "autoGenerate": true,
12
+ "releaseName": "${version}"
13
+ },
14
+ "plugins": {
15
+ "@j-ulrich/release-it-regex-bumper": {
16
+ "in": "lib/crowdin-api/client/version.rb",
17
+ "out": [
18
+ {
19
+ "file": "README.md",
20
+ "search": "gem 'crowdin-api', '~> \\d+\\.\\d+\\.\\d+'",
21
+ "replace": "gem 'crowdin-api', '~> {{versionWithoutPrerelease}}'"
22
+ },
23
+ {
24
+ "file": "lib/crowdin-api/client/version.rb",
25
+ "search": "VERSION = '\\d+\\.\\d+\\.\\d+'",
26
+ "replace": "VERSION = '{{versionWithoutPrerelease}}'"
27
+ },
28
+ {
29
+ "file": "Gemfile.lock",
30
+ "search": "crowdin-api \\(\\d+\\.\\d+\\.\\d+\\)",
31
+ "replace": "crowdin-api ({{versionWithoutPrerelease}})"
32
+ }
33
+ ]
34
+ }
35
+ }
36
+ }
data/CONTRIBUTING.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  :tada: First off, thanks for taking the time to contribute! :tada:
4
4
 
5
+ The Crowdin API client provides methods that essentially call Crowdin's APIs. This makes it much easier for other developers to make calls to Crowdin's APIs, as the client abstracts a lot of the work required. In short, the API client provides a lightweight interface for making API requests to Crowdin.
6
+
5
7
  The following is a set of guidelines for contributing to Crowdin Ruby Client. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
6
8
 
7
9
  This project and everyone participating in it are governed by the [Code of Conduct](/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
data/Gemfile.lock ADDED
@@ -0,0 +1,112 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ crowdin-api (1.8.0)
5
+ open-uri (>= 0.1.0, < 0.2.0)
6
+ rest-client (>= 2.0.0, < 2.2.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.8.6)
12
+ public_suffix (>= 2.0.2, < 6.0)
13
+ ast (2.4.2)
14
+ coderay (1.1.3)
15
+ crack (0.4.5)
16
+ rexml
17
+ diff-lcs (1.5.0)
18
+ docile (1.4.0)
19
+ domain_name (0.5.20190701)
20
+ unf (>= 0.0.5, < 1.0.0)
21
+ hashdiff (1.1.0)
22
+ http-accept (1.7.0)
23
+ http-cookie (1.0.5)
24
+ domain_name (~> 0.5)
25
+ json (2.7.1)
26
+ method_source (1.0.0)
27
+ mime-types (3.5.2)
28
+ mime-types-data (~> 3.2015)
29
+ mime-types-data (3.2023.1205)
30
+ netrc (0.11.0)
31
+ open-uri (0.1.0)
32
+ parallel (1.24.0)
33
+ parser (3.2.2.4)
34
+ ast (~> 2.4.1)
35
+ racc
36
+ pry (0.14.2)
37
+ coderay (~> 1.1)
38
+ method_source (~> 1.0)
39
+ public_suffix (5.0.4)
40
+ racc (1.7.3)
41
+ rainbow (3.1.1)
42
+ rake (13.1.0)
43
+ regexp_parser (2.8.3)
44
+ rest-client (2.1.0)
45
+ http-accept (>= 1.7.0, < 2.0)
46
+ http-cookie (>= 1.0.2, < 2.0)
47
+ mime-types (>= 1.16, < 4.0)
48
+ netrc (~> 0.8)
49
+ rexml (3.2.6)
50
+ rspec (3.12.0)
51
+ rspec-core (~> 3.12.0)
52
+ rspec-expectations (~> 3.12.0)
53
+ rspec-mocks (~> 3.12.0)
54
+ rspec-core (3.12.2)
55
+ rspec-support (~> 3.12.0)
56
+ rspec-expectations (3.12.3)
57
+ diff-lcs (>= 1.2.0, < 2.0)
58
+ rspec-support (~> 3.12.0)
59
+ rspec-mocks (3.12.6)
60
+ diff-lcs (>= 1.2.0, < 2.0)
61
+ rspec-support (~> 3.12.0)
62
+ rspec-support (3.12.1)
63
+ rubocop (1.50.2)
64
+ json (~> 2.3)
65
+ parallel (~> 1.10)
66
+ parser (>= 3.2.0.0)
67
+ rainbow (>= 2.2.2, < 4.0)
68
+ regexp_parser (>= 1.8, < 3.0)
69
+ rexml (>= 3.2.5, < 4.0)
70
+ rubocop-ast (>= 1.28.0, < 2.0)
71
+ ruby-progressbar (~> 1.7)
72
+ unicode-display_width (>= 2.4.0, < 3.0)
73
+ rubocop-ast (1.30.0)
74
+ parser (>= 3.2.1.0)
75
+ ruby-progressbar (1.13.0)
76
+ simplecov (0.22.0)
77
+ docile (~> 1.1)
78
+ simplecov-html (~> 0.11)
79
+ simplecov_json_formatter (~> 0.1)
80
+ simplecov-cobertura (2.1.0)
81
+ rexml
82
+ simplecov (~> 0.19)
83
+ simplecov-html (0.12.3)
84
+ simplecov_json_formatter (0.1.4)
85
+ unf (0.1.4)
86
+ unf_ext
87
+ unf_ext (0.0.9.1)
88
+ unicode-display_width (2.5.0)
89
+ webmock (3.19.1)
90
+ addressable (>= 2.8.0)
91
+ crack (>= 0.3.2)
92
+ hashdiff (>= 0.4.0, < 2.0.0)
93
+ yard (0.9.34)
94
+
95
+ PLATFORMS
96
+ arm64-darwin-23
97
+ x86_64-linux
98
+
99
+ DEPENDENCIES
100
+ bundler (~> 2.2, >= 2.2.32)
101
+ crowdin-api!
102
+ pry (~> 0.14.1)
103
+ rake (~> 13.0, >= 13.0.6)
104
+ rspec (~> 3.10)
105
+ rubocop (~> 1.23)
106
+ simplecov (~> 0.22)
107
+ simplecov-cobertura (~> 2.1)
108
+ webmock (~> 3.14)
109
+ yard (~> 0.9.28)
110
+
111
+ BUNDLED WITH
112
+ 2.4.22
data/README.md CHANGED
@@ -1,4 +1,10 @@
1
- [<p align='center'><img src='https://support.crowdin.com/assets/logos/crowdin-dark-symbol.png' data-canonical-src='https://support.crowdin.com/assets/logos/crowdin-dark-symbol.png' width='150' height='150' align='center'/></p>](https://crowdin.com)
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://support.crowdin.com/assets/logos/symbol/png/crowdin-symbol-cWhite.png">
4
+ <source media="(prefers-color-scheme: light)" srcset="https://support.crowdin.com/assets/logos/symbol/png/crowdin-symbol-cDark.png">
5
+ <img width="150" height="150" src="https://support.crowdin.com/assets/logos/symbol/png/crowdin-symbol-cDark.png">
6
+ </picture>
7
+ </p>
2
8
 
3
9
  # Crowdin Ruby client
4
10
 
@@ -15,10 +21,8 @@ Crowdin API is a full-featured RESTful API that helps you to integrate localizat
15
21
  [![Gem](https://img.shields.io/gem/v/crowdin-api?logo=ruby&cacheSeconds=1800)](https://rubygems.org/gems/crowdin-api)
16
22
  [![Gem](https://img.shields.io/gem/dt/crowdin-api?cacheSeconds=1800)](https://rubygems.org/gems/crowdin-api)
17
23
  [![Gem](https://img.shields.io/gem/dtv/crowdin-api?cacheSeconds=1800)](https://rubygems.org/gems/crowdin-api)
18
-
19
24
  [![Test and Lint](https://github.com/crowdin/crowdin-api-client-ruby/actions/workflows/test-and-lint.yml/badge.svg)](https://github.com/crowdin/crowdin-api-client-ruby/actions/workflows/test-and-lint.yml)
20
25
  [![codecov](https://codecov.io/gh/crowdin/crowdin-api-client-ruby/branch/main/graph/badge.svg?token=OJsyJwQbFM)](https://codecov.io/gh/crowdin/crowdin-api-client-ruby)
21
- [![GitHub issues](https://img.shields.io/github/issues/crowdin/crowdin-api-client-ruby?cacheSeconds=1800)](https://github.com/crowdin/crowdin-api-client-ruby/issues)
22
26
  [![GitHub](https://img.shields.io/github/license/crowdin/crowdin-api-client-ruby?cacheSeconds=1800)](https://github.com/crowdin/crowdin-api-client-ruby/blob/main/LICENSE)
23
27
 
24
28
  </div>
@@ -31,7 +35,7 @@ Crowdin API is a full-featured RESTful API that helps you to integrate localizat
31
35
  Add this line to your application's Gemfile:
32
36
 
33
37
  ```gemfile
34
- gem 'crowdin-api', '~> 1.6.0'
38
+ gem 'crowdin-api', '~> 1.8.0'
35
39
  ```
36
40
 
37
41
  And then execute:
data/crowdin-api.gemspec CHANGED
@@ -20,13 +20,14 @@ Gem::Specification.new do |gem|
20
20
  gem.required_ruby_version = '>= 2.4'
21
21
 
22
22
  gem.add_runtime_dependency 'open-uri', '>= 0.1.0', '< 0.2.0'
23
- gem.add_runtime_dependency 'rest-client', '>= 2.0.0', '< 2.1.0'
23
+ gem.add_runtime_dependency 'rest-client', '>= 2.0.0', '< 2.2.0'
24
24
 
25
25
  gem.add_development_dependency 'bundler', '~> 2.2', '>= 2.2.32'
26
- gem.add_development_dependency 'codecov', '~> 0.6.0'
27
26
  gem.add_development_dependency 'pry', '~> 0.14.1'
28
27
  gem.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
29
28
  gem.add_development_dependency 'rspec', '~> 3.10'
30
29
  gem.add_development_dependency 'rubocop', '~> 1.23'
30
+ gem.add_development_dependency 'simplecov', '~> 0.22'
31
+ gem.add_development_dependency 'simplecov-cobertura', '~> 2.1'
31
32
  gem.add_development_dependency 'webmock', '~> 3.14'
32
33
  end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crowdin
4
+ module ApiResources
5
+ module Applications
6
+ # * {https://developer.crowdin.com/api/v2/#operation/api.projects.applications.api.get API Documentation}
7
+ # * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.applications.api.get API Documentation}
8
+ def get_application_data(application_identifier = nil, path = nil)
9
+ application_identifier || raise_parameter_is_required_error(:application_identifier)
10
+ application_identifier || raise_parameter_is_required_error(:path)
11
+
12
+ request = Web::Request.new(
13
+ connection,
14
+ :get,
15
+ "#{config.target_api_url}/applications/#{application_identifier}/api/#{path}"
16
+ )
17
+ Web::SendRequest.new(request).perform
18
+ end
19
+
20
+ # * {https://developer.crowdin.com/api/v2/#operation/api.projects.applications.api.put API Documentation}
21
+ # * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.applications.api.put API Documentation}
22
+ def update_or_restore_application_data(query = {}, application_identifier = nil, path = nil)
23
+ application_identifier || raise_parameter_is_required_error(:application_identifier)
24
+ application_identifier || raise_parameter_is_required_error(:path)
25
+
26
+ request = Web::Request.new(
27
+ connection,
28
+ :put,
29
+ "#{config.target_api_url}/applications/#{application_identifier}/api/#{path}",
30
+ { params: query }
31
+ )
32
+ Web::SendRequest.new(request).perform
33
+ end
34
+
35
+ # * {https://developer.crowdin.com/api/v2/#operation/api.projects.applications.api.put API Documentation}
36
+ # * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.applications.api.put API Documentation}
37
+ def add_application_data(query = {}, application_identifier = nil, path = nil)
38
+ application_identifier || raise_parameter_is_required_error(:application_identifier)
39
+ application_identifier || raise_parameter_is_required_error(:path)
40
+
41
+ request = Web::Request.new(
42
+ connection,
43
+ :post,
44
+ "#{config.target_api_url}/applications/#{application_identifier}/api/#{path}",
45
+ { params: query }
46
+ )
47
+ Web::SendRequest.new(request).perform
48
+ end
49
+
50
+ # * {https://developer.crowdin.com/api/v2/#operation/api.projects.applications.api.delete API Documentation}
51
+ # * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.applications.api.delete API Documentation}
52
+ def delete_application_data(query = {}, application_identifier = nil, path = nil)
53
+ application_identifier || raise_parameter_is_required_error(:application_identifier)
54
+ application_identifier || raise_parameter_is_required_error(:path)
55
+
56
+ request = Web::Request.new(
57
+ connection,
58
+ :delete,
59
+ "#{config.target_api_url}/applications/#{application_identifier}/api/#{path}",
60
+ { params: query }
61
+ )
62
+ Web::SendRequest.new(request).perform
63
+ end
64
+
65
+ # * {https://developer.crowdin.com/api/v2/#operation/api.projects.applications.api.patch API Documentation}
66
+ # * {https://developer.crowdin.com/enterprise/api/v2/#operation/api.projects.applications.api.patch API Documentation}
67
+ def edit_application_data(query = {}, application_identifier = nil, path = nil)
68
+ application_identifier || raise_parameter_is_required_error(:application_identifier)
69
+ application_identifier || raise_parameter_is_required_error(:path)
70
+
71
+ request = Web::Request.new(
72
+ connection,
73
+ :patch,
74
+ "#{config.target_api_url}/applications/#{application_identifier}/api/#{path}",
75
+ { params: query }
76
+ )
77
+ Web::SendRequest.new(request).perform
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Crowdin
4
+ module ApiResources
5
+ module Notifications
6
+ def send_notification_to_authenticated_user(query = {})
7
+ %i[message].each do |param|
8
+ query[param] || raise_parameter_is_required_error(param)
9
+ end
10
+
11
+ request = Web::Request.new(
12
+ connection,
13
+ :post,
14
+ "#{config.target_api_url}/notify",
15
+ { params: query }
16
+ )
17
+ Web::SendRequest.new(request).perform
18
+ end
19
+
20
+ def send_notification_to_organization_members(query = {})
21
+ enterprise_mode? || raise_only_for_enterprise_mode_error
22
+
23
+ %i[message].each do |param|
24
+ query[param] || raise_parameter_is_required_error(param)
25
+ end
26
+
27
+ request = Web::Request.new(
28
+ connection,
29
+ :post,
30
+ "#{config.target_api_url}/notify",
31
+ { params: query }
32
+ )
33
+ Web::SendRequest.new(request).perform
34
+ end
35
+
36
+ def send_notifications_to_project_members(query = {}, project_id = config.project_id)
37
+ project_id || raise_project_id_is_required_error
38
+
39
+ %i[message].each do |param|
40
+ query[param] || raise_parameter_is_required_error(param)
41
+ end
42
+
43
+ request = Web::Request.new(
44
+ connection,
45
+ :post,
46
+ "#{config.target_api_url}/projects/#{project_id}/notify",
47
+ { params: query }
48
+ )
49
+ Web::SendRequest.new(request).perform
50
+ end
51
+ end
52
+ end
53
+ end
@@ -22,7 +22,7 @@ module Crowdin
22
22
  def add_storage(file = nil)
23
23
  file || raise_parameter_is_required_error(:file)
24
24
 
25
- file = file.is_a?(File) ? file : File.open(file, 'r')
25
+ file = File.open(file, 'r')
26
26
  headers = { 'Content-Type' => 'application/octet-stream', 'Crowdin-API-FileName' => File.basename(file) }
27
27
 
28
28
  request = Web::Request.new(
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Crowdin
4
4
  class Client
5
- VERSION = '1.6.0'
5
+ VERSION = '1.8.0'
6
6
  end
7
7
  end
@@ -44,7 +44,7 @@ module Crowdin
44
44
  end
45
45
 
46
46
  def fetch_response_data(doc)
47
- if doc['data'].is_a?(Hash) && doc['data']['url'] && doc['data']['url'].include?('response-content-disposition')
47
+ if @file_destination && doc['data'].is_a?(Hash) && doc['data']['url']
48
48
  download_file(doc['data']['url'])
49
49
  else
50
50
  doc
@@ -53,8 +53,7 @@ module Crowdin
53
53
 
54
54
  def download_file(url)
55
55
  download = URI.parse(url).open
56
- destination = @file_destination || download.meta['content-disposition']
57
- .match(/filename=("?)(.+)\1/)[2]
56
+ destination = @file_destination
58
57
 
59
58
  IO.copy_stream(download, destination)
60
59
 
data/lib/crowdin-api.rb CHANGED
@@ -5,7 +5,8 @@ module Crowdin
5
5
  API_RESOURCES_MODULES = %i[Storages Languages Projects Workflows SourceFiles Translations SourceStrings
6
6
  StringTranslations StringComments Screenshots Glossaries TranslationMemory
7
7
  MachineTranslationEngines Reports Tasks Users Teams Vendors Webhooks
8
- Dictionaries Distributions Labels TranslationStatus Bundles].freeze
8
+ Dictionaries Distributions Labels TranslationStatus Bundles Notifications
9
+ Applications].freeze
9
10
 
10
11
  # Error Raisers modules
11
12
  ERROR_RAISERS_MODULES = %i[ApiErrorsRaiser ClientErrorsRaiser].freeze
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Crowdin::ApiResources::Applications do
4
+ let(:application_identifier) { 'identifier' }
5
+ let(:path) { 'application_path' }
6
+ describe 'Default endpoints' do
7
+ describe '#get_application_data' do
8
+ it 'when request are valid', :default do
9
+ stub_request(:get, "https://api.crowdin.com/#{target_api_url}/applications/#{application_identifier}/api/#{path}")
10
+ get_application_data = @crowdin.get_application_data(application_identifier, path)
11
+ expect(get_application_data).to eq(200)
12
+ end
13
+ end
14
+
15
+ describe '#update_or_restore_application_data' do
16
+ it 'when request are valid', :default do
17
+ stub_request(:put, "https://api.crowdin.com/#{target_api_url}/applications/#{application_identifier}/api/#{path}")
18
+ get_application_data = @crowdin.update_or_restore_application_data({}, application_identifier, path)
19
+ expect(get_application_data).to eq(200)
20
+ end
21
+ end
22
+
23
+ describe '#add_application_data' do
24
+ it 'when request are valid', :default do
25
+ stub_request(:post, "https://api.crowdin.com/#{target_api_url}/applications/#{application_identifier}/api/#{path}")
26
+ get_application_data = @crowdin.add_application_data({}, application_identifier, path)
27
+ expect(get_application_data).to eq(200)
28
+ end
29
+ end
30
+
31
+ describe '#delete_application_data' do
32
+ it 'when request are valid', :default do
33
+ stub_request(:delete, "https://api.crowdin.com/#{target_api_url}/applications/#{application_identifier}/api/#{path}")
34
+ get_application_data = @crowdin.delete_application_data({}, application_identifier, path)
35
+ expect(get_application_data).to eq(200)
36
+ end
37
+ end
38
+
39
+ describe '#edit_application_data' do
40
+ it 'when request are valid', :default do
41
+ stub_request(:patch, "https://api.crowdin.com/#{target_api_url}/applications/#{application_identifier}/api/#{path}")
42
+ get_application_data = @crowdin.edit_application_data({}, application_identifier, path)
43
+ expect(get_application_data).to eq(200)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe Crowdin::ApiResources::Notifications do
4
+ describe 'Default endpoints' do
5
+ describe '#send_notification_to_authenticated_user' do
6
+ it 'when request are valid', :default do
7
+ stub_request(:post, "https://api.crowdin.com/#{target_api_url}/notify")
8
+ .with(body: { 'message' => 'New notification message' })
9
+ query = { message: 'New notification message' }
10
+ response = @crowdin.send_notification_to_authenticated_user(query)
11
+ expect(response).to eq(200)
12
+ end
13
+
14
+ it 'raises ArgumentError when request is missing required query parameter', :default do
15
+ expect do
16
+ @crowdin.send_notification_to_authenticated_user({})
17
+ end.to raise_error(ArgumentError, ':message is required')
18
+ end
19
+ end
20
+
21
+ describe '#send_notifications_to_project_members' do
22
+ let(:project_id) { 1 }
23
+
24
+ it 'when request are valid', :default do
25
+ stub_request(:post, "https://api.crowdin.com/#{target_api_url}/projects/#{project_id}/notify")
26
+ .with(body: { 'message' => 'New notification message' })
27
+ query = { message: 'New notification message' }
28
+ response = @crowdin.send_notifications_to_project_members(query, project_id)
29
+ expect(response).to eq(200)
30
+ end
31
+
32
+ it 'raises ArgumentError when request is missing required query parameter', :default do
33
+ expect do
34
+ @crowdin.send_notifications_to_project_members({}, project_id)
35
+ end.to raise_error(ArgumentError, ':message is required')
36
+ end
37
+
38
+ it 'raises ArgumentError when request is missing project_id parameter', :default do
39
+ query = { message: 'New notification message' }
40
+ expect do
41
+ @crowdin.send_notifications_to_project_members(query, nil)
42
+ end.to raise_error(ArgumentError, ':project_id is required in parameters or while Client initialization')
43
+ end
44
+ end
45
+ end
46
+
47
+ describe 'Enterprise endpoints' do
48
+ describe '#send_notification_to_organization_members' do
49
+ it 'when request are valid', :enterprise do
50
+ stub_request(:post, "https://domain.api.crowdin.com/#{target_api_url}/notify")
51
+ .with(body: { 'message' => 'New notification message' })
52
+ query = { message: 'New notification message' }
53
+ response = @crowdin.send_notification_to_organization_members(query)
54
+ expect(response).to eq(200)
55
+ end
56
+
57
+ it 'raises ArgumentError when request is missing required query parameter', :enterprise do
58
+ expect do
59
+ @crowdin.send_notification_to_organization_members({})
60
+ end.to raise_error(ArgumentError, ':message is required')
61
+ end
62
+ end
63
+ end
64
+ end
@@ -11,10 +11,26 @@ describe Crowdin::ApiResources::Storages do
11
11
  end
12
12
 
13
13
  describe '#add_storage' do
14
- it 'when request are valid', :default do
14
+ subject(:add_storage) { @crowdin.add_storage(file) }
15
+
16
+ let(:file) { 'README.md' }
17
+
18
+ it 'uploads the file to the storage', :default do
19
+ expected_response = 'expected_response'
20
+
15
21
  stub_request(:post, "https://api.crowdin.com/#{target_api_url}/storages")
16
- add_storage = @crowdin.add_storage('README.md')
17
- expect(add_storage).to eq(200)
22
+ .with(
23
+ body: File.read(file),
24
+ headers: {
25
+ 'Content-Type' => 'application/octet-stream',
26
+ 'Crowdin-API-FileName' => File.basename(file)
27
+ }
28
+ )
29
+ .to_return(
30
+ body: JSON.dump(expected_response)
31
+ )
32
+
33
+ is_expected.to eq(expected_response)
18
34
  end
19
35
  end
20
36
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'simplecov'
4
- require 'codecov'
4
+ require 'simplecov-cobertura'
5
5
 
6
6
  SimpleCov.start
7
- SimpleCov.formatter = SimpleCov::Formatter::Codecov
7
+ SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
8
8
 
9
9
  require 'webmock/rspec'
10
10
  require 'crowdin-api'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crowdin-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crowdin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-15 00:00:00.000000000 Z
11
+ date: 2024-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: open-uri
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: 2.0.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 2.1.0
42
+ version: 2.2.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: 2.0.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 2.1.0
52
+ version: 2.2.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: bundler
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -70,20 +70,6 @@ dependencies:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 2.2.32
73
- - !ruby/object:Gem::Dependency
74
- name: codecov
75
- requirement: !ruby/object:Gem::Requirement
76
- requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: 0.6.0
80
- type: :development
81
- prerelease: false
82
- version_requirements: !ruby/object:Gem::Requirement
83
- requirements:
84
- - - "~>"
85
- - !ruby/object:Gem::Version
86
- version: 0.6.0
87
73
  - !ruby/object:Gem::Dependency
88
74
  name: pry
89
75
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +132,34 @@ dependencies:
146
132
  - - "~>"
147
133
  - !ruby/object:Gem::Version
148
134
  version: '1.23'
135
+ - !ruby/object:Gem::Dependency
136
+ name: simplecov
137
+ requirement: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '0.22'
142
+ type: :development
143
+ prerelease: false
144
+ version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - "~>"
147
+ - !ruby/object:Gem::Version
148
+ version: '0.22'
149
+ - !ruby/object:Gem::Dependency
150
+ name: simplecov-cobertura
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '2.1'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '2.1'
149
163
  - !ruby/object:Gem::Dependency
150
164
  name: webmock
151
165
  requirement: !ruby/object:Gem::Requirement
@@ -169,23 +183,29 @@ executables:
169
183
  extensions: []
170
184
  extra_rdoc_files: []
171
185
  files:
186
+ - ".github/dependabot.yml"
172
187
  - ".github/workflows/build-and-publish.yml"
188
+ - ".github/workflows/dependency-analysis.yml"
173
189
  - ".github/workflows/docs.yml"
174
190
  - ".github/workflows/lint-pr-title.yml"
191
+ - ".github/workflows/release.yml"
175
192
  - ".github/workflows/test-and-lint.yml"
176
193
  - ".gitignore"
194
+ - ".release-it.json"
177
195
  - ".rspec"
178
196
  - ".rubocop.yml"
179
197
  - ".rubocop_todo.yml"
180
198
  - CODE_OF_CONDUCT.md
181
199
  - CONTRIBUTING.md
182
200
  - Gemfile
201
+ - Gemfile.lock
183
202
  - LICENSE
184
203
  - README.md
185
204
  - Rakefile
186
205
  - bin/crowdin-console
187
206
  - crowdin-api.gemspec
188
207
  - lib/crowdin-api.rb
208
+ - lib/crowdin-api/api_resources/applications.rb
189
209
  - lib/crowdin-api/api_resources/bundles.rb
190
210
  - lib/crowdin-api/api_resources/dictionaries.rb
191
211
  - lib/crowdin-api/api_resources/distributions.rb
@@ -193,6 +213,7 @@ files:
193
213
  - lib/crowdin-api/api_resources/labels.rb
194
214
  - lib/crowdin-api/api_resources/languages.rb
195
215
  - lib/crowdin-api/api_resources/machine_translation_engines.rb
216
+ - lib/crowdin-api/api_resources/notifications.rb
196
217
  - lib/crowdin-api/api_resources/projects.rb
197
218
  - lib/crowdin-api/api_resources/reports.rb
198
219
  - lib/crowdin-api/api_resources/screenshots.rb
@@ -218,6 +239,7 @@ files:
218
239
  - lib/crowdin-api/core/fetch_all_extensions.rb
219
240
  - lib/crowdin-api/core/request.rb
220
241
  - lib/crowdin-api/core/send_request.rb
242
+ - spec/api_resources/applications_spec.rb
221
243
  - spec/api_resources/bundles_spec.rb
222
244
  - spec/api_resources/dictionaries_spec.rb
223
245
  - spec/api_resources/distributions_spec.rb
@@ -225,6 +247,7 @@ files:
225
247
  - spec/api_resources/labels_spec.rb
226
248
  - spec/api_resources/languages_spec.rb
227
249
  - spec/api_resources/machine_translation_engines_spec.rb
250
+ - spec/api_resources/notifications_spec.rb
228
251
  - spec/api_resources/projects_spec.rb
229
252
  - spec/api_resources/reports_spec.rb
230
253
  - spec/api_resources/screenshots_spec.rb
@@ -263,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
286
  - !ruby/object:Gem::Version
264
287
  version: '0'
265
288
  requirements: []
266
- rubygems_version: 3.0.3.1
289
+ rubygems_version: 3.5.3
267
290
  signing_key:
268
291
  specification_version: 4
269
292
  summary: Ruby Client for the Crowdin API