transifex-interface-ruby 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. checksums.yaml +6 -14
  2. data/.gitignore +17 -17
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -4
  5. data/LICENSE.txt +22 -22
  6. data/README.md +517 -513
  7. data/Rakefile +1 -1
  8. data/lib/transifex.rb +84 -87
  9. data/lib/transifex/crud_requests.rb +43 -33
  10. data/lib/transifex/errors.rb +4 -4
  11. data/lib/transifex/project_components/language.rb +1 -1
  12. data/lib/transifex/project_components/language_components/coordinators.rb +4 -6
  13. data/lib/transifex/project_components/language_components/reviewers.rb +5 -8
  14. data/lib/transifex/project_components/language_components/translators.rb +6 -9
  15. data/lib/transifex/project_components/languages.rb +1 -1
  16. data/lib/transifex/resource.rb +1 -1
  17. data/lib/transifex/resource_components/content.rb +1 -1
  18. data/lib/transifex/resource_components/source.rb +1 -1
  19. data/lib/transifex/resource_components/stats.rb +1 -1
  20. data/lib/transifex/resource_components/translation.rb +1 -1
  21. data/lib/transifex/resource_components/translation_components/string.rb +1 -1
  22. data/lib/transifex/resource_components/translation_components/strings.rb +1 -1
  23. data/lib/transifex/resources.rb +1 -1
  24. data/lib/transifex/version.rb +3 -3
  25. data/spec/cassettes/fetch_formats.yml +121 -0
  26. data/spec/cassettes/language/fetch_language_info.yml +58 -0
  27. data/spec/cassettes/language/fetch_languages_info.yml +58 -0
  28. data/spec/cassettes/project/components/create_language.yml +95 -0
  29. data/spec/cassettes/project/components/create_language_non_existing_coordinator.yml +48 -0
  30. data/spec/cassettes/project/components/create_language_without_coordinator.yml +48 -0
  31. data/spec/cassettes/project/components/fetch_languages.yml +53 -0
  32. data/spec/cassettes/project/delete_project.yml +108 -0
  33. data/spec/cassettes/project/fetch_private_project_info.yml +59 -0
  34. data/spec/cassettes/project/fetch_with_details_private_project_info.yml +66 -0
  35. data/spec/cassettes/project/language/delete_language.yml +140 -0
  36. data/spec/cassettes/project/language/fetch_coordinators.yml +56 -0
  37. data/spec/cassettes/project/language/fetch_language_info.yml +52 -0
  38. data/spec/cassettes/project/language/fetch_reviewers.yml +56 -0
  39. data/spec/cassettes/project/language/fetch_translators.yml +54 -0
  40. data/spec/cassettes/project/language/fetch_with_details_language_info.yml +54 -0
  41. data/spec/cassettes/project/language/update_coordinators.yml +104 -0
  42. data/spec/cassettes/project/language/update_language.yml +100 -0
  43. data/spec/cassettes/project/language/update_non_existing_coordinator.yml +48 -0
  44. data/spec/cassettes/project/language/update_non_existing_language.yml +49 -0
  45. data/spec/cassettes/project/language/update_non_existing_reviewer.yml +101 -0
  46. data/spec/cassettes/project/language/update_non_existing_translator.yml +101 -0
  47. data/spec/cassettes/project/language/update_reviewers.yml +157 -0
  48. data/spec/cassettes/project/language/update_translators.yml +157 -0
  49. data/spec/cassettes/project/update_non_existing_attribute_private_project.yml +54 -0
  50. data/spec/cassettes/project/update_private_project.yml +120 -0
  51. data/spec/cassettes/project/update_with_missing_params_private_project.yml +54 -0
  52. data/spec/cassettes/projects/create_private_project.yml +111 -0
  53. data/spec/cassettes/projects/create_public_project.yml +111 -0
  54. data/spec/cassettes/projects/create_used_slug_project.yml +55 -0
  55. data/spec/cassettes/projects/fetch_projects.yml +61 -0
  56. data/spec/cassettes/resource/delete_not_existing_resource.yml +55 -0
  57. data/spec/cassettes/resource/delete_resource.yml +160 -0
  58. data/spec/cassettes/resource/fetch_all_languages_stats.yml +66 -0
  59. data/spec/cassettes/resource/fetch_content_as_file.yml +56 -0
  60. data/spec/cassettes/resource/fetch_content_as_hash.yml +58 -0
  61. data/spec/cassettes/resource/fetch_language_stats.yml +61 -0
  62. data/spec/cassettes/resource/fetch_not_existing_resource.yml +55 -0
  63. data/spec/cassettes/resource/fetch_resource_info.yml +59 -0
  64. data/spec/cassettes/resource/fetch_source_string_metadata.yml +52 -0
  65. data/spec/cassettes/resource/fetch_translations.yml +57 -0
  66. data/spec/cassettes/resource/fetch_updated_resource_info.yml +60 -0
  67. data/spec/cassettes/resource/fetch_updated_source_string_metadata.yml +52 -0
  68. data/spec/cassettes/resource/fetch_with_details_resource_info.yml +65 -0
  69. data/spec/cassettes/resource/fetch_with_file_and_mode_translations.yml +56 -0
  70. data/spec/cassettes/resource/fetch_with_file_translations.yml +56 -0
  71. data/spec/cassettes/resource/update_content_json.yml +115 -0
  72. data/spec/cassettes/resource/update_content_with_wrong_mimetype.yml +59 -0
  73. data/spec/cassettes/resource/update_content_yml.yml +114 -0
  74. data/spec/cassettes/resource/update_not_existing_resource.yml +55 -0
  75. data/spec/cassettes/resource/update_resource_info.yml +114 -0
  76. data/spec/cassettes/resource/update_source_language.yml +54 -0
  77. data/spec/cassettes/resource/update_source_string_metadata.yml +100 -0
  78. data/spec/cassettes/resource/update_translation_for_language.yml +62 -0
  79. data/spec/cassettes/resources/create_from_file.yml +55 -0
  80. data/spec/cassettes/resources/create_from_string.yml +54 -0
  81. data/spec/cassettes/resources/fetch_as_array.yml +62 -0
  82. data/spec/cassettes/resources/non_existing_project.yml +55 -0
  83. data/spec/cassettes/translation/fetch_string.yml +55 -0
  84. data/spec/cassettes/translation/fetch_strings.yml +54 -0
  85. data/spec/cassettes/translation/fetch_with_details_and_context_strings.yml +51 -0
  86. data/spec/cassettes/translation/fetch_with_details_and_key_strings.yml +56 -0
  87. data/spec/cassettes/translation/fetch_with_details_strings.yml +56 -0
  88. data/spec/cassettes/translation/update_multiple_translation_strings.yml +107 -0
  89. data/spec/cassettes/translation/update_single_translation_strings.yml +104 -0
  90. data/spec/cassettes/translation/update_string.yml +104 -0
  91. data/spec/lib/transifex/coordinators_spec.rb +22 -16
  92. data/spec/lib/transifex/formats_spec.rb +8 -8
  93. data/spec/lib/transifex/language_spec.rb +9 -10
  94. data/spec/lib/transifex/languages_spec.rb +8 -8
  95. data/spec/lib/transifex/project_language_spec.rb +41 -28
  96. data/spec/lib/transifex/project_languages_spec.rb +34 -18
  97. data/spec/lib/transifex/project_spec.rb +46 -73
  98. data/spec/lib/transifex/projects_spec.rb +72 -37
  99. data/spec/lib/transifex/resource_content_spec.rb +41 -24
  100. data/spec/lib/transifex/resource_source_spec.rb +21 -19
  101. data/spec/lib/transifex/resource_spec.rb +69 -41
  102. data/spec/lib/transifex/resources_spec.rb +42 -34
  103. data/spec/lib/transifex/reviewers_spec.rb +23 -17
  104. data/spec/lib/transifex/stats_spec.rb +20 -24
  105. data/spec/lib/transifex/translation_spec.rb +60 -38
  106. data/spec/lib/transifex/translation_string_spec.rb +26 -20
  107. data/spec/lib/transifex/translation_strings_spec.rb +65 -43
  108. data/spec/lib/transifex/translators_spec.rb +23 -17
  109. data/spec/lib/transifex_spec.rb +15 -0
  110. data/spec/lib/yaml/eo.yml +3 -0
  111. data/spec/spec_helper.rb +19 -83
  112. data/spec/support/client_helper.rb +8 -0
  113. data/spec/support/content_helper.rb +346 -0
  114. data/transifex-interface-ruby.gemspec +28 -25
  115. metadata +198 -21
  116. data/spec/lib/transifex/configuration_spec.rb +0 -17
  117. data/spec/lib/yaml/resource_translation_default_content_test.yml +0 -4
  118. data/spec/lib/yaml/resource_translation_reviewed_content_test.yml +0 -9
@@ -1,32 +1,38 @@
1
- require_relative '../../spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  describe Transifex::ProjectComponents::LanguageComponents::Translators do
4
- before(:all) do
5
- @project = Transifex::Project.new("projet-de-test-1")
6
- end
4
+ let(:project) { Transifex::Project.new("ruby-client") }
7
5
 
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)
6
+ describe "Instantiation" do
7
+ it "raises an error when the project_slug is not provided" do
8
+ expect { Transifex::ProjectComponents::LanguageComponents::Translators.new }
9
+ .to raise_error(Transifex::MissingParametersError)
10
+ .with_message("The following attributes are missing: project_slug")
11
11
  end
12
12
  end
13
13
 
14
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")
15
+ it "retrieves the language translators" do
16
+ VCR.use_cassette "project/language/fetch_translators" do
17
+ expect(project.language("en").translators.fetch).to eq({"translators" => []})
18
+ end
20
19
  end
21
20
  end
22
21
 
23
22
  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
23
+ it "updates the translators list" do
24
+ VCR.use_cassette "project/language/update_translators" do
25
+ expect(project.language("en").translators.update(["mupo"])).to eq "OK"
26
+ expect(project.language("en").translators.fetch).to eq({"translators" => ["mupo"]})
27
+ end
26
28
  end
27
29
 
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
+ it "raises an error if the translator doesn't exist" do
31
+ VCR.use_cassette "project/language/update_non_existing_translator" do
32
+ expect { project.language("en").translators.update(["not_existing_translator"]) }
33
+ .to raise_error(Transifex::TransifexError)
34
+ .with_message("Users not_existing_translator do not exist.")
35
+ end
30
36
  end
31
37
  end
32
- end
38
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe Transifex do
4
+ describe ".configure" do
5
+ it "sets the client configuration to access the project" do
6
+ Transifex.configure do |c|
7
+ c.client_login = "client_login"
8
+ c.client_secret = "client_secret"
9
+ end
10
+
11
+ expect(Transifex.configuration.client_login).to eq("client_login")
12
+ expect(Transifex.configuration.client_secret).to eq("client_secret")
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ eo:
2
+ test_string: "test string"
3
+ yet_another_string: "yet another string"
@@ -3,94 +3,30 @@ Bundler.setup
3
3
 
4
4
  require_relative '../lib/transifex'
5
5
 
6
- def reset_transifex_configuration
7
- Transifex.configure do |c|
8
- c.client_login = 'frederic.grais@gmail.com'
9
- c.client_secret = 'futur123'
10
- end
11
- end
12
-
13
- def get_yaml_source_trad_file_path(locale)
14
- File.dirname(__FILE__) + "/lib/yaml/" + locale + ".yml"
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir[File.expand_path(File.join(File.dirname(__FILE__), 'support', '**', '*.rb'))].each { |f| require f }
9
+
10
+ require "webmock/rspec"
11
+ require "vcr"
12
+
13
+ VCR.configure do |c|
14
+ c.configure_rspec_metadata!
15
+ c.cassette_library_dir = "spec/cassettes"
16
+ c.default_cassette_options = {record: :once}
17
+ c.hook_into :webmock
15
18
  end
16
- reset_transifex_configuration
17
19
 
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
20
  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'
21
+ config.before(:all) do
22
+ reset_transifex_configuration
54
23
  end
55
24
 
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
25
+ config.after(:suite) do # or :each or :all
26
+ File.delete("fetched.yml") if File.exists?("fetched.yml")
27
+ File.delete("translations.yml") if File.exists?("translations.yml")
81
28
  end
82
29
 
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
30
+ config.include ContentHelper
31
+ config.include ClientHelper
96
32
  end
@@ -0,0 +1,8 @@
1
+ module ClientHelper
2
+ def reset_transifex_configuration
3
+ Transifex.configure do |c|
4
+ c.client_login = ''
5
+ c.client_secret = ''
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,346 @@
1
+ module ContentHelper
2
+ def get_yaml_source_trad_file_path(locale)
3
+ "spec/lib/yaml/#{locale}.yml"
4
+ end
5
+
6
+ def resource_content_hash
7
+ {
8
+ "content" => %Q{eo:\n test_string: "test string"\n},
9
+ "mimetype" => "text/plain"
10
+ }
11
+ end
12
+
13
+ def all_project_resources_array
14
+ [
15
+ {
16
+ "source_language_code" => "eo",
17
+ "name" => "JSON file example",
18
+ "i18n_type" => "KEYVALUEJSON",
19
+ "priority" => "0",
20
+ "slug" => "json",
21
+ "categories" => nil
22
+ },
23
+ {
24
+ "source_language_code" => "eo",
25
+ "name" => "test",
26
+ "i18n_type" => "YML",
27
+ "priority" => "0",
28
+ "slug" => "test",
29
+ "categories" => nil
30
+ }
31
+ ]
32
+ end
33
+
34
+ def successful_resource_creation
35
+ [1, 0, 0]
36
+ end
37
+
38
+ def resource_source_string_metadata
39
+ {
40
+ "comment" => "",
41
+ "character_limit" => nil,
42
+ "tags" => nil
43
+ }
44
+ end
45
+
46
+ def updated_resource_source_string_metadata
47
+ {
48
+ "comment" => "my comment",
49
+ "character_limit" => 140,
50
+ "tags" => ["tag1", "tag2"]
51
+ }
52
+ end
53
+
54
+ def basic_resource_info
55
+ {
56
+ "source_language_code" => "eo",
57
+ "name" => "JSON file example",
58
+ "i18n_type" => "KEYVALUEJSON",
59
+ "priority" => "0",
60
+ "slug" => "json",
61
+ "categories" => nil
62
+ }
63
+ end
64
+
65
+ def detailed_resource_info
66
+ {
67
+ "source_language_code" => "eo",
68
+ "name" => "JSON file example",
69
+ "created" => "2017-04-27T13:36:43.747",
70
+ "wordcount"=> 2,
71
+ "i18n_type" => "KEYVALUEJSON",
72
+ "project_slug" => "ruby-client",
73
+ "accept_translations" => true,
74
+ "last_update" => "2017-04-27T13:43:29.019",
75
+ "priority" => "0",
76
+ "available_languages" => [
77
+ {
78
+ "code_aliases" => " ",
79
+ "code" => "en",
80
+ "name" => "English"
81
+ },
82
+ {
83
+ "code_aliases" => " ",
84
+ "code" => "eo",
85
+ "name" => "Esperanto"
86
+ }
87
+ ],
88
+ "total_entities" => 1,
89
+ "slug" => "json",
90
+ "categories" => nil
91
+ }
92
+ end
93
+
94
+ def updated_resource_info
95
+ {
96
+ "source_language_code" => "eo",
97
+ "name" => "updated name",
98
+ "i18n_type" => "YML",
99
+ "priority" => "0",
100
+ "slug" => "test",
101
+ "categories" => ["test1", "test2"]
102
+ }
103
+ end
104
+
105
+ def language_info
106
+ {
107
+ "rtl" => false,
108
+ "pluralequation" => "language.pluralequation",
109
+ "code" => "fr",
110
+ "name" => "French",
111
+ "nplurals" => 2
112
+ }
113
+ end
114
+
115
+ def basic_language_info
116
+ {
117
+ "coordinators" => ["wirido"],
118
+ "translators" => [],
119
+ "reviewers" => []
120
+ }
121
+ end
122
+
123
+ def detailed_language_info
124
+ {
125
+ "coordinators" => ["wirido"],
126
+ "reviewers" => [],
127
+ "total_segments" => 4,
128
+ "untranslated_segments" => 4,
129
+ "translated_words" => 0,
130
+ "reviewed_segments" => 0,
131
+ "translators" => [],
132
+ "translated_segments" => 0
133
+ }
134
+ end
135
+
136
+ def project_languages_info
137
+ [
138
+ {
139
+ "coordinators" => ["nirnaeth"],
140
+ "language_code" => "en",
141
+ "translators" => [],
142
+ "reviewers" => ["wirido"]
143
+ }
144
+ ]
145
+ end
146
+
147
+ def private_project_info
148
+ {
149
+ "description" => "Private Ruby Client",
150
+ "source_language_code" => "eo",
151
+ "slug" => "private-ruby-client",
152
+ "name" => "Private Ruby Client"
153
+ }
154
+ end
155
+
156
+ def detailed_private_project_info
157
+ {
158
+ "archived" => false,
159
+ "auto_join" => false,
160
+ "description" => "Private Ruby Client",
161
+ "fill_up_resources" => false,
162
+ "homepage" => "",
163
+ "last_updated" => nil,
164
+ "long_description" => "",
165
+ "maintainers" => [{"username" => "nirnaeth"}],
166
+ "name" => "Private Ruby Client",
167
+ "organization" => {"slug" => "freego"},
168
+ "private" => true,
169
+ "resources" => [],
170
+ "slug" => "private-ruby-client",
171
+ "source_language_code" => "eo",
172
+ "tags" => "",
173
+ "team" => {"id" => 74153, "name" => "Ruby Client team"},
174
+ "teams" => ["en", "de"],
175
+ "trans_instructions" => ""
176
+ }
177
+ end
178
+
179
+ def public_project_info
180
+ {
181
+ "description" => "Public Ruby Client",
182
+ "source_language_code" => "it",
183
+ "slug" => "public-ruby-client",
184
+ "name" => "Public Ruby Client"
185
+ }
186
+ end
187
+
188
+ def all_projects_info
189
+ [
190
+ {
191
+ "description" => "Private Ruby Client",
192
+ "source_language_code" => "eo",
193
+ "slug" => "private-ruby-client",
194
+ "name" => "Private Ruby Client"
195
+ },
196
+ {
197
+ "description" => "Ruby Client",
198
+ "source_language_code" => "eo",
199
+ "slug" => "ruby-client",
200
+ "name" => "Ruby Client"
201
+ }
202
+ ]
203
+ end
204
+
205
+ def all_languages_stats
206
+ {
207
+ "eo" => {
208
+ "reviewed_percentage" => "0%",
209
+ "completed" => "100%",
210
+ "untranslated_words" => 0,
211
+ "last_commiter" => "nirnaeth",
212
+ "reviewed" => 0,
213
+ "translated_entities" => 1,
214
+ "translated_words" => 2,
215
+ "last_update" => "2017-04-27 14:08:57",
216
+ "untranslated_entities" => 0
217
+ },
218
+ "en" => {
219
+ "reviewed_percentage" => "0%",
220
+ "completed" => "0%",
221
+ "untranslated_words" => 2,
222
+ "last_commiter" => "nirnaeth",
223
+ "reviewed" => 0,
224
+ "translated_entities" => 0,
225
+ "translated_words" => 0,
226
+ "last_update" => "2017-04-27 14:08:57",
227
+ "untranslated_entities" => 1
228
+ }
229
+ }
230
+ end
231
+
232
+ def translation_content
233
+ {
234
+ "content" => "en: {}\n",
235
+ "mimetype" => "text/plain"
236
+ }
237
+ end
238
+
239
+ def file_translation_content
240
+ "---\nen: {}\n"
241
+ end
242
+
243
+ def file_translation_content_with_mode
244
+ "---\nen:\n test_string: ''\n"
245
+ end
246
+
247
+ def updated_translations
248
+ {
249
+ "strings_added" => 0,
250
+ "strings_updated" => 0,
251
+ "strings_delete" => 0,
252
+ "redirect" => "/freego/ruby-client/test/"
253
+ }
254
+ end
255
+
256
+ def string_details
257
+ {
258
+ "comment" => "",
259
+ "context" => "",
260
+ "tags" => nil,
261
+ "character_limit" => nil,
262
+ "reviewed" => false,
263
+ "user" => "",
264
+ "key" => "test_string",
265
+ "source_string" => "test string",
266
+ "translation" => "",
267
+ "last_update" => "",
268
+ "pluralized" => false,
269
+ "occurrences" => nil
270
+ }
271
+ end
272
+
273
+ def language_strings
274
+ [
275
+ {
276
+ "comment" => "",
277
+ "context" => "",
278
+ "key" => "test_string",
279
+ "reviewed" => true,
280
+ "pluralized" => false,
281
+ "source_string" => "test string",
282
+ "translation" => "translated test string"
283
+ }
284
+ ]
285
+ end
286
+
287
+ def language_strings_with_details
288
+ [
289
+ {
290
+ "comment" => "",
291
+ "context" => "",
292
+ "tags" => nil,
293
+ "character_limit" => nil,
294
+ "reviewed" => true,
295
+ "user" => "nirnaeth",
296
+ "key" => "test_string",
297
+ "source_string" => "test string",
298
+ "translation" => "translated test string",
299
+ "last_update" => "2017-05-04T12:22:46.171",
300
+ "pluralized" => false,
301
+ "occurrences" => nil
302
+ }
303
+ ]
304
+ end
305
+
306
+ def multiple_language_strings
307
+ [
308
+ {
309
+ "comment" => "",
310
+ "context" => "",
311
+ "key" => "yet_another_string",
312
+ "reviewed" => false,
313
+ "pluralized" => false,
314
+ "source_string" => "yet another string",
315
+ "translation" => "yet another translation"
316
+ },
317
+ {
318
+ "comment" => "",
319
+ "context" => "",
320
+ "key" => "test_string",
321
+ "reviewed" => false,
322
+ "pluralized" => false,
323
+ "source_string" => "test string",
324
+ "translation" => "multiple translations"
325
+ }
326
+ ]
327
+ end
328
+
329
+ def updated_resource_with_file
330
+ {
331
+ "strings_added" => 1,
332
+ "strings_updated" => 0,
333
+ "strings_delete" => 1,
334
+ "redirect" => "/ruby-client/test/"
335
+ }
336
+ end
337
+
338
+ def updated_resource_with_json
339
+ {
340
+ "strings_added" => 0,
341
+ "strings_updated" => 1,
342
+ "strings_delete" => 0,
343
+ "redirect" => "/ruby-client/json/"
344
+ }
345
+ end
346
+ end