tx-ruby 0.0.1

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 +7 -0
  2. data/lib/tx-ruby.rb +87 -0
  3. data/lib/tx-ruby/crud_requests.rb +99 -0
  4. data/lib/tx-ruby/errors.rb +25 -0
  5. data/lib/tx-ruby/formats.rb +9 -0
  6. data/lib/tx-ruby/json.rb +23 -0
  7. data/lib/tx-ruby/language.rb +13 -0
  8. data/lib/tx-ruby/languages.rb +13 -0
  9. data/lib/tx-ruby/project.rb +38 -0
  10. data/lib/tx-ruby/project_components/language.rb +39 -0
  11. data/lib/tx-ruby/project_components/language_components/coordinators.rb +29 -0
  12. data/lib/tx-ruby/project_components/language_components/reviewers.rb +33 -0
  13. data/lib/tx-ruby/project_components/language_components/translators.rb +33 -0
  14. data/lib/tx-ruby/project_components/languages.rb +21 -0
  15. data/lib/tx-ruby/projects.rb +22 -0
  16. data/lib/tx-ruby/resource.rb +41 -0
  17. data/lib/tx-ruby/resource_components/content.rb +54 -0
  18. data/lib/tx-ruby/resource_components/source.rb +23 -0
  19. data/lib/tx-ruby/resource_components/stats.rb +26 -0
  20. data/lib/tx-ruby/resource_components/translation.rb +59 -0
  21. data/lib/tx-ruby/resource_components/translation_components/string.rb +29 -0
  22. data/lib/tx-ruby/resource_components/translation_components/strings.rb +39 -0
  23. data/lib/tx-ruby/resource_components/translation_components/utilities.rb +22 -0
  24. data/lib/tx-ruby/resources.rb +19 -0
  25. data/lib/tx-ruby/version.rb +3 -0
  26. data/spec/lib/transifex/configuration_spec.rb +17 -0
  27. data/spec/lib/transifex/coordinators_spec.rb +32 -0
  28. data/spec/lib/transifex/formats_spec.rb +13 -0
  29. data/spec/lib/transifex/language_spec.rb +19 -0
  30. data/spec/lib/transifex/languages_spec.rb +13 -0
  31. data/spec/lib/transifex/project_language_spec.rb +49 -0
  32. data/spec/lib/transifex/project_languages_spec.rb +35 -0
  33. data/spec/lib/transifex/project_spec.rb +91 -0
  34. data/spec/lib/transifex/projects_spec.rb +48 -0
  35. data/spec/lib/transifex/resource_content_spec.rb +40 -0
  36. data/spec/lib/transifex/resource_source_spec.rb +30 -0
  37. data/spec/lib/transifex/resource_spec.rb +66 -0
  38. data/spec/lib/transifex/resources_spec.rb +50 -0
  39. data/spec/lib/transifex/reviewers_spec.rb +32 -0
  40. data/spec/lib/transifex/stats_spec.rb +34 -0
  41. data/spec/lib/transifex/translation_spec.rb +53 -0
  42. data/spec/lib/transifex/translation_string_spec.rb +33 -0
  43. data/spec/lib/transifex/translation_strings_spec.rb +57 -0
  44. data/spec/lib/transifex/translators_spec.rb +32 -0
  45. data/spec/lib/yaml/en.yml +26 -0
  46. data/spec/lib/yaml/fr.yml +4 -0
  47. data/spec/lib/yaml/resource_content_test.yml +27 -0
  48. data/spec/lib/yaml/resource_translation_default_content_test.yml +4 -0
  49. data/spec/lib/yaml/resource_translation_reviewed_content_test.yml +9 -0
  50. data/spec/spec_helper.rb +96 -0
  51. metadata +94 -0
@@ -0,0 +1,34 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe Transifex::ResourceComponents::Stats do
4
+ before(:all) do
5
+ @project = Transifex::Project.new("projet-de-test-1")
6
+ @resource = @project.resource("test")
7
+ end
8
+
9
+ describe "Instanciation" do
10
+ it "should raise an error when no parameters given" do
11
+ expect{ Transifex::ResourceComponents::Stats.new }.to raise_error(ArgumentError)
12
+ end
13
+ end
14
+
15
+ describe "Fetch" do
16
+ it "should retrieve the stats for all languages as a hash" do
17
+ resource_stats = nil
18
+ resource_details = @project.resource("test").fetch_with_details
19
+ resource_available_languages = resource_details["available_languages"].map{|language| language["code"]}
20
+ expect{ resource_stats = @resource.statistics.fetch }.to_not raise_error
21
+ expect(resource_stats).to be_a_kind_of(Hash)
22
+ expect(resource_stats.keys).to match_array(resource_available_languages)
23
+ end
24
+ it "should retrieve the stats for a specific language as a hash" do
25
+ resource_stats = nil
26
+ expect{ resource_stats = @resource.statistics.fetch("en") }.to_not raise_error
27
+ expect(resource_stats).to be_a_kind_of(Hash)
28
+ expect(resource_stats.keys).to contain_exactly("reviewed_percentage", "completed", "untranslated_words", "last_commiter", "reviewed", "translated_entities", "translated_words", "last_update", "untranslated_entities")
29
+ end
30
+ end
31
+
32
+
33
+
34
+ end
@@ -0,0 +1,53 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe Transifex::ResourceComponents::Translation do
4
+ before(:all) do
5
+ @project = Transifex::Project.new("projet-de-test-1")
6
+ @resource = @project.resource("test")
7
+ end
8
+
9
+ describe "Instanciation" do
10
+ it "should raise an error when no parameters given" do
11
+ expect{ Transifex::ResourceComponents::Translation.new }.to raise_error(Transifex::MissingParametersError)
12
+ end
13
+ end
14
+
15
+ describe "Fetch" do
16
+ it "should raise an error if no language code is provided" do
17
+ expect{ resource_stats = @resource.translation.fetch }.to raise_error(Transifex::MissingParametersError)
18
+ end
19
+ it "should retrieve the translation content as a hash" do
20
+ translation_content = nil
21
+ expect{ translation_content = @resource.translation('en').fetch }.to_not raise_error
22
+ expect(translation_content).to be_a_kind_of(Hash)
23
+ expect(translation_content.keys).to contain_exactly("content", "mimetype")
24
+ end
25
+ it "should retrieve the translation content as a file with default mode" do
26
+ translation_content = nil
27
+ path_to_file = File.dirname(__FILE__) + "/../yaml/resource_translation_default_content_test.yml"
28
+ options = {:path_to_file => path_to_file}
29
+ expect{ translation_content = @resource.translation('fr').fetch_with_file(options) }.to_not raise_error
30
+ file_exist = File.file?(path_to_file)
31
+ expect(file_exist).to eq(true)
32
+ end
33
+ it "should retrieve the translation content as a file with a mode" do
34
+ translation_content = nil
35
+ path_to_file = File.dirname(__FILE__) + "/../yaml/resource_translation_reviewed_content_test.yml"
36
+ options = {:path_to_file => path_to_file, :mode => "reviewed"}
37
+ expect{ translation_content = @resource.translation('en').fetch_with_file(options) }.to_not raise_error
38
+ file_exist = File.file?(path_to_file)
39
+ expect(file_exist).to eq(true)
40
+ end
41
+ end
42
+
43
+ describe "Update" do
44
+ it "sould raise an error if try to update source language" do
45
+ options = {:i18n_type => "YAML", :content => get_yaml_source_trad_file_path('en')}
46
+ expect{ translation_content = @resource.translation('en').update(options) }.to raise_error(Transifex::TransifexError)
47
+ end
48
+ it "should not raise an error and update the resource translation" do
49
+ options = {:i18n_type => "YAML", :content => get_yaml_source_trad_file_path('fr')}
50
+ expect{ @resource.translation('fr').update(options) }.to_not raise_error
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,33 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe Transifex::ResourceComponents::TranslationComponents::String do
4
+ before(:all) do
5
+ @project = Transifex::Project.new("projet-de-test-1")
6
+ @resource = @project.resource("test")
7
+ end
8
+
9
+ describe "Instanciation" do
10
+ it "should raise an error when no parameters given" do
11
+ expect{ Transifex::ResourceComponents::TranslationComponents::String.new }.to raise_error(Transifex::MissingParametersError)
12
+ end
13
+ end
14
+
15
+ describe "Fetch" do
16
+ it "should raise an error if no key provided" do
17
+ expect{ retrieved_details = @resource.translation('en').string.fetch }.to raise_error(Transifex::MissingParametersError)
18
+ end
19
+ it "should not raise an error and retrieve the details of the string" do
20
+ retrieved_details = nil
21
+ expect{ retrieved_details = @resource.translation('en').string('routes.mercury_editor').fetch }.to_not raise_error
22
+ expect(retrieved_details).to be_a_kind_of(Hash)
23
+ expect(retrieved_details.keys).to contain_exactly("comment", "context", "tags", "character_limit", "user", "key", "reviewed", "pluralized", "source_string", "translation", "last_update", "occurrences")
24
+ end
25
+ end
26
+
27
+ describe "Update" do
28
+ it "should not raise an error and update the specified translation string" do
29
+ params = {:reviewed => true, :translation => "Pouet"}
30
+ expect{ @resource.translation('fr').string('routes.mercury_editor').update(params) }.to_not raise_error
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,57 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe Transifex::ResourceComponents::TranslationComponents::Strings do
4
+ before(:all) do
5
+ @project = Transifex::Project.new("projet-de-test-1")
6
+ @resource = @project.resource("test")
7
+ end
8
+
9
+ describe "Instanciation" do
10
+ it "should raise an error when no parameters given" do
11
+ expect{ Transifex::ResourceComponents::TranslationComponents::Strings.new }.to raise_error(Transifex::MissingParametersError)
12
+ end
13
+ end
14
+
15
+ describe "Fetch" do
16
+ it "should not raise an error and retrieve the strings of the translation without details" do
17
+ retrieved_strings = nil
18
+ expect{ retrieved_strings = @resource.translation('en').strings.fetch }.to_not raise_error
19
+ expect(retrieved_strings).to be_a_kind_of(Array)
20
+ expect(retrieved_strings.first.keys).to contain_exactly("comment", "context", "key", "reviewed", "pluralized", "source_string", "translation")
21
+ end
22
+ it "should not raise an error and retrieve the strings of the translation with details" do
23
+ retrieved_strings = nil
24
+ expect{ retrieved_strings = @resource.translation('en').strings.fetch_with_details }.to_not raise_error
25
+ expect(retrieved_strings).to be_a_kind_of(Array)
26
+ expect(retrieved_strings.first.keys).to contain_exactly("comment", "context", "tags", "character_limit", "user", "key", "reviewed", "pluralized", "source_string", "translation", "last_update", "occurrences")
27
+ end
28
+ it "should not raise an error and retrieve the strings of the translation with the key" do
29
+ retrieved_strings = nil
30
+ options = {:key => "routes.mercury_editor"}
31
+ expect{ retrieved_strings = @resource.translation('en').strings.fetch_with_details(options) }.to_not raise_error
32
+ expect(retrieved_strings).to be_a_kind_of(Array)
33
+ expect(retrieved_strings.first.keys).to contain_exactly("comment", "context", "tags", "character_limit", "user", "key", "reviewed", "pluralized", "source_string", "translation", "last_update", "occurrences")
34
+ end
35
+ it "should not raise an error and return an empty hash if researched context doesn't exist" do
36
+ retrieved_strings = nil
37
+ options = {:context => "notexist"}
38
+ expect{ retrieved_strings = @resource.translation('en').strings.fetch(options) }.to_not raise_error
39
+ expect(retrieved_strings).to be_a_kind_of(Array)
40
+ empty_array = retrieved_strings.empty?
41
+ expect(empty_array).to eq(true)
42
+ end
43
+ end
44
+
45
+ describe "Update" do
46
+ it "should raise an error if the key parameter is not provided" do
47
+ expect{ @resource.translation('fr').strings.update({:translation => "lol"}) }.to raise_error(Transifex::MissingParametersError)
48
+ end
49
+ it "should not raise an error and update the specified translation string" do
50
+ expect{ @resource.translation('fr').strings.update({:key => "routes.mercury_editor", :translation => "lol"}) }.to_not raise_error
51
+ end
52
+ it "should not raise an error and update multiple translation strings" do
53
+ params = [{:key => "routes.mercury_editor", :context => "", :translation => "lol"}, {:key => "date.abbr_day_names", :translation => "lol"}]
54
+ expect{ @resource.translation('fr').strings.update(params) }.to_not raise_error
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,32 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ describe Transifex::ProjectComponents::LanguageComponents::Translators do
4
+ before(:all) do
5
+ @project = Transifex::Project.new("projet-de-test-1")
6
+ end
7
+
8
+ describe "Instanciation" do
9
+ it "should raise an error when no parameters given" do
10
+ expect{ Transifex::ProjectComponents::LanguageComponents::Translators.new }.to raise_error(Transifex::MissingParametersError)
11
+ end
12
+ end
13
+
14
+ describe "Fetch" do
15
+ it "should not raise an error and retrieve the language's informations" do
16
+ language_coordinators_infos = nil
17
+ expect{ language_coordinators_infos = @project.language('en').translators.fetch }.to_not raise_error
18
+ expect(language_coordinators_infos).to be_a_kind_of(Hash)
19
+ expect(language_coordinators_infos.keys).to contain_exactly("translators")
20
+ end
21
+ end
22
+
23
+ describe "Update" do
24
+ it "should not raise an error and update the coordinators list" do
25
+ expect{ @project.language('en').translators.update(['fredericgrais'])}.to_not raise_error
26
+ end
27
+
28
+ it "should raise an error if the coordinator doesn't exist" do
29
+ expect{ @project.language('en').translators.update(['grgrgef'])}.to raise_error(Transifex::TransifexError)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ en:
2
+ routes:
3
+ mercury_editor: mercury_editor
4
+ date:
5
+ abbr_day_names:
6
+ - Sun
7
+ - Mon
8
+ - Tue
9
+ - Wed
10
+ - Thu
11
+ - Fri
12
+ - Sat
13
+ abbr_month_names:
14
+ -
15
+ - Jan
16
+ - Feb
17
+ - Mar
18
+ - Apr
19
+ - May
20
+ - Jun
21
+ - Jul
22
+ - Aug
23
+ - Sep
24
+ - Oct
25
+ - Nov
26
+ - Dec
@@ -0,0 +1,4 @@
1
+ fr:
2
+ test: coucou
3
+ routes:
4
+ mercury_editor: éditeur mercury
@@ -0,0 +1,27 @@
1
+ ---
2
+ en:
3
+ routes:
4
+ mercury_editor: mercury_editor
5
+ date:
6
+ abbr_day_names:
7
+ - Sun
8
+ - Mon
9
+ - Tue
10
+ - Wed
11
+ - Thu
12
+ - Fri
13
+ - Sat
14
+ abbr_month_names:
15
+ -
16
+ - Jan
17
+ - Feb
18
+ - Mar
19
+ - Apr
20
+ - May
21
+ - Jun
22
+ - Jul
23
+ - Aug
24
+ - Sep
25
+ - Oct
26
+ - Nov
27
+ - Dec
@@ -0,0 +1,4 @@
1
+ ---
2
+ fr:
3
+ routes:
4
+ mercury_editor: éditeur mercury
@@ -0,0 +1,9 @@
1
+ ---
2
+ en:
3
+ routes:
4
+ mercury_editor: ''
5
+ date:
6
+ abbr_day_names:
7
+ - ''
8
+ abbr_month_names:
9
+ - ''
@@ -0,0 +1,96 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require_relative '../lib/transifex'
5
+
6
+ def reset_transifex_configuration
7
+ Transifex.configure do |c|
8
+ c.client_login = ''
9
+ c.client_secret = ''
10
+ end
11
+ end
12
+
13
+ def get_yaml_source_trad_file_path(locale)
14
+ File.dirname(__FILE__) + "/lib/yaml/" + locale + ".yml"
15
+ end
16
+ reset_transifex_configuration
17
+
18
+
19
+ # This file was generated by the `rspec --init` command. Conventionally, all
20
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
21
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
22
+ # file to always be loaded, without a need to explicitly require it in any files.
23
+ #
24
+ # Given that it is always loaded, you are encouraged to keep this file as
25
+ # light-weight as possible. Requiring heavyweight dependencies from this file
26
+ # will add to the boot time of your test suite on EVERY test run, even for an
27
+ # individual file that may not need all of that loaded. Instead, make a
28
+ # separate helper file that requires this one and then use it only in the specs
29
+ # that actually need it.
30
+ #
31
+ # The `.rspec` file also contains a few flags that are not defaults but that
32
+ # users commonly want.
33
+ #
34
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
35
+ RSpec.configure do |config|
36
+ # The settings below are suggested to provide a good initial experience
37
+ # with RSpec, but feel free to customize to your heart's content.
38
+ =begin
39
+ # These two settings work together to allow you to limit a spec run
40
+ # to individual examples or groups you care about by tagging them with
41
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
42
+ # get run.
43
+ config.filter_run :focus
44
+ config.run_all_when_everything_filtered = true
45
+
46
+ # Many RSpec users commonly either run the entire suite or an individual
47
+ # file, and it's useful to allow more verbose output when running an
48
+ # individual spec file.
49
+ if config.files_to_run.one?
50
+ # Use the documentation formatter for detailed output,
51
+ # unless a formatter has already been configured
52
+ # (e.g. via a command-line flag).
53
+ config.default_formatter = 'doc'
54
+ end
55
+
56
+ # Print the 10 slowest examples and example groups at the
57
+ # end of the spec run, to help surface which specs are running
58
+ # particularly slow.
59
+ config.profile_examples = 10
60
+
61
+ # Run specs in random order to surface order dependencies. If you find an
62
+ # order dependency and want to debug it, you can fix the order by providing
63
+ # the seed, which is printed after each run.
64
+ # --seed 1234
65
+ config.order = :random
66
+
67
+ # Seed global randomization in this process using the `--seed` CLI option.
68
+ # Setting this allows you to use `--seed` to deterministically reproduce
69
+ # test failures related to randomization by passing the same `--seed` value
70
+ # as the one that triggered the failure.
71
+ Kernel.srand config.seed
72
+
73
+ # rspec-expectations config goes here. You can use an alternate
74
+ # assertion/expectation library such as wrong or the stdlib/minitest
75
+ # assertions if you prefer.
76
+ config.expect_with :rspec do |expectations|
77
+ # Enable only the newer, non-monkey-patching expect syntax.
78
+ # For more details, see:
79
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
80
+ expectations.syntax = :expect
81
+ end
82
+
83
+ # rspec-mocks config goes here. You can use an alternate test double
84
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
85
+ config.mock_with :rspec do |mocks|
86
+ # Enable only the newer, non-monkey-patching expect syntax.
87
+ # For more details, see:
88
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
89
+ mocks.syntax = :expect
90
+
91
+ # Prevents you from mocking or stubbing a method that does not exist on
92
+ # a real object. This is generally recommended.
93
+ mocks.verify_partial_doubles = true
94
+ end
95
+ =end
96
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tx-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ian Florentino, Fred-grais
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A Transifex API interface written in Ruby
14
+ email:
15
+ - ianflorentino88@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/tx-ruby.rb
21
+ - lib/tx-ruby/crud_requests.rb
22
+ - lib/tx-ruby/errors.rb
23
+ - lib/tx-ruby/formats.rb
24
+ - lib/tx-ruby/json.rb
25
+ - lib/tx-ruby/language.rb
26
+ - lib/tx-ruby/languages.rb
27
+ - lib/tx-ruby/project.rb
28
+ - lib/tx-ruby/project_components/language.rb
29
+ - lib/tx-ruby/project_components/language_components/coordinators.rb
30
+ - lib/tx-ruby/project_components/language_components/reviewers.rb
31
+ - lib/tx-ruby/project_components/language_components/translators.rb
32
+ - lib/tx-ruby/project_components/languages.rb
33
+ - lib/tx-ruby/projects.rb
34
+ - lib/tx-ruby/resource.rb
35
+ - lib/tx-ruby/resource_components/content.rb
36
+ - lib/tx-ruby/resource_components/source.rb
37
+ - lib/tx-ruby/resource_components/stats.rb
38
+ - lib/tx-ruby/resource_components/translation.rb
39
+ - lib/tx-ruby/resource_components/translation_components/string.rb
40
+ - lib/tx-ruby/resource_components/translation_components/strings.rb
41
+ - lib/tx-ruby/resource_components/translation_components/utilities.rb
42
+ - lib/tx-ruby/resources.rb
43
+ - lib/tx-ruby/version.rb
44
+ - spec/lib/transifex/configuration_spec.rb
45
+ - spec/lib/transifex/coordinators_spec.rb
46
+ - spec/lib/transifex/formats_spec.rb
47
+ - spec/lib/transifex/language_spec.rb
48
+ - spec/lib/transifex/languages_spec.rb
49
+ - spec/lib/transifex/project_language_spec.rb
50
+ - spec/lib/transifex/project_languages_spec.rb
51
+ - spec/lib/transifex/project_spec.rb
52
+ - spec/lib/transifex/projects_spec.rb
53
+ - spec/lib/transifex/resource_content_spec.rb
54
+ - spec/lib/transifex/resource_source_spec.rb
55
+ - spec/lib/transifex/resource_spec.rb
56
+ - spec/lib/transifex/resources_spec.rb
57
+ - spec/lib/transifex/reviewers_spec.rb
58
+ - spec/lib/transifex/stats_spec.rb
59
+ - spec/lib/transifex/translation_spec.rb
60
+ - spec/lib/transifex/translation_string_spec.rb
61
+ - spec/lib/transifex/translation_strings_spec.rb
62
+ - spec/lib/transifex/translators_spec.rb
63
+ - spec/lib/yaml/en.yml
64
+ - spec/lib/yaml/fr.yml
65
+ - spec/lib/yaml/resource_content_test.yml
66
+ - spec/lib/yaml/resource_translation_default_content_test.yml
67
+ - spec/lib/yaml/resource_translation_reviewed_content_test.yml
68
+ - spec/spec_helper.rb
69
+ homepage: https://github.com/ianflorentino/tx-ruby
70
+ licenses:
71
+ - MIT
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 2.6.10
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: 'This gem allows you to communicate with the Transifex API to perform every
93
+ possible actions listed in the documentation: http://docs.transifex.com/developer/api/'
94
+ test_files: []