txgh 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +202 -0
  3. data/README.md +64 -0
  4. data/lib/ext/zipline/output_stream.rb +62 -0
  5. data/lib/txgh.rb +53 -0
  6. data/lib/txgh/app.rb +135 -0
  7. data/lib/txgh/category_support.rb +31 -0
  8. data/lib/txgh/config.rb +11 -0
  9. data/lib/txgh/config/config_pair.rb +36 -0
  10. data/lib/txgh/config/key_manager.rb +54 -0
  11. data/lib/txgh/config/provider_instance.rb +20 -0
  12. data/lib/txgh/config/provider_support.rb +26 -0
  13. data/lib/txgh/config/providers.rb +9 -0
  14. data/lib/txgh/config/providers/file_provider.rb +19 -0
  15. data/lib/txgh/config/providers/git_provider.rb +58 -0
  16. data/lib/txgh/config/providers/raw_provider.rb +19 -0
  17. data/lib/txgh/config/tx_config.rb +77 -0
  18. data/lib/txgh/config/tx_manager.rb +15 -0
  19. data/lib/txgh/diff_calculator.rb +90 -0
  20. data/lib/txgh/empty_resource_contents.rb +43 -0
  21. data/lib/txgh/errors.rb +9 -0
  22. data/lib/txgh/github_api.rb +83 -0
  23. data/lib/txgh/github_repo.rb +88 -0
  24. data/lib/txgh/github_request_auth.rb +28 -0
  25. data/lib/txgh/handlers.rb +12 -0
  26. data/lib/txgh/handlers/download_handler.rb +84 -0
  27. data/lib/txgh/handlers/github.rb +10 -0
  28. data/lib/txgh/handlers/github/delete_handler.rb +65 -0
  29. data/lib/txgh/handlers/github/handler.rb +20 -0
  30. data/lib/txgh/handlers/github/push_handler.rb +108 -0
  31. data/lib/txgh/handlers/github/request_handler.rb +106 -0
  32. data/lib/txgh/handlers/response.rb +17 -0
  33. data/lib/txgh/handlers/stream_response.rb +39 -0
  34. data/lib/txgh/handlers/tgz_stream_response.rb +41 -0
  35. data/lib/txgh/handlers/transifex.rb +8 -0
  36. data/lib/txgh/handlers/transifex/hook_handler.rb +77 -0
  37. data/lib/txgh/handlers/transifex/request_handler.rb +78 -0
  38. data/lib/txgh/handlers/triggers.rb +9 -0
  39. data/lib/txgh/handlers/triggers/handler.rb +66 -0
  40. data/lib/txgh/handlers/triggers/pull_handler.rb +29 -0
  41. data/lib/txgh/handlers/triggers/push_handler.rb +21 -0
  42. data/lib/txgh/handlers/zip_stream_response.rb +21 -0
  43. data/lib/txgh/merge_calculator.rb +74 -0
  44. data/lib/txgh/parse_config.rb +24 -0
  45. data/lib/txgh/resource_committer.rb +39 -0
  46. data/lib/txgh/resource_contents.rb +118 -0
  47. data/lib/txgh/resource_downloader.rb +141 -0
  48. data/lib/txgh/resource_updater.rb +104 -0
  49. data/lib/txgh/response_helpers.rb +30 -0
  50. data/lib/txgh/transifex_api.rb +165 -0
  51. data/lib/txgh/transifex_project.rb +37 -0
  52. data/lib/txgh/transifex_request_auth.rb +53 -0
  53. data/lib/txgh/tx_branch_resource.rb +59 -0
  54. data/lib/txgh/tx_logger.rb +12 -0
  55. data/lib/txgh/tx_resource.rb +66 -0
  56. data/lib/txgh/utils.rb +44 -0
  57. data/lib/txgh/version.rb +3 -0
  58. data/spec/app_spec.rb +346 -0
  59. data/spec/category_support_spec.rb +43 -0
  60. data/spec/config/config_pair_spec.rb +47 -0
  61. data/spec/config/key_manager_spec.rb +48 -0
  62. data/spec/config/provider_instance_spec.rb +30 -0
  63. data/spec/config/provider_support_spec.rb +55 -0
  64. data/spec/config/tx_config_spec.rb +49 -0
  65. data/spec/config/tx_manager_spec.rb +57 -0
  66. data/spec/diff_calculator_spec.rb +90 -0
  67. data/spec/github_api_spec.rb +148 -0
  68. data/spec/github_repo_spec.rb +178 -0
  69. data/spec/github_request_auth_spec.rb +39 -0
  70. data/spec/handlers/download_handler_spec.rb +81 -0
  71. data/spec/handlers/github/delete_handler_spec.rb +71 -0
  72. data/spec/handlers/github/push_handler_spec.rb +76 -0
  73. data/spec/handlers/tgz_stream_response_spec.rb +59 -0
  74. data/spec/handlers/transifex/hook_handler_spec.rb +115 -0
  75. data/spec/handlers/zip_stream_response_spec.rb +58 -0
  76. data/spec/helpers/github_payload_builder.rb +141 -0
  77. data/spec/helpers/integration_setup.rb +47 -0
  78. data/spec/helpers/nil_logger.rb +10 -0
  79. data/spec/helpers/standard_txgh_setup.rb +92 -0
  80. data/spec/helpers/test_provider.rb +12 -0
  81. data/spec/integration/cassettes/github_l10n_hook_endpoint.yml +536 -0
  82. data/spec/integration/cassettes/pull.yml +47 -0
  83. data/spec/integration/cassettes/push.yml +544 -0
  84. data/spec/integration/cassettes/transifex_hook_endpoint.yml +560 -0
  85. data/spec/integration/config/tx.config +10 -0
  86. data/spec/integration/hooks_spec.rb +158 -0
  87. data/spec/integration/payloads/github_postbody.json +161 -0
  88. data/spec/integration/payloads/github_postbody_l10n.json +136 -0
  89. data/spec/integration/payloads/github_postbody_release.json +136 -0
  90. data/spec/integration/triggers_spec.rb +45 -0
  91. data/spec/merge_calculator_spec.rb +112 -0
  92. data/spec/parse_config_spec.rb +52 -0
  93. data/spec/resource_committer_spec.rb +42 -0
  94. data/spec/resource_contents_spec.rb +212 -0
  95. data/spec/resource_downloader_spec.rb +205 -0
  96. data/spec/resource_updater_spec.rb +147 -0
  97. data/spec/spec_helper.rb +32 -0
  98. data/spec/transifex_api_spec.rb +345 -0
  99. data/spec/transifex_project_spec.rb +45 -0
  100. data/spec/transifex_request_auth_spec.rb +39 -0
  101. data/spec/tx_branch_resource_spec.rb +99 -0
  102. data/spec/tx_resource_spec.rb +47 -0
  103. data/spec/utils_spec.rb +58 -0
  104. data/txgh.gemspec +29 -0
  105. metadata +296 -0
@@ -0,0 +1,12 @@
1
+ class TestProvider
2
+ SCHEME = 'test'
3
+
4
+ class << self
5
+ def supports?(scheme)
6
+ scheme == SCHEME
7
+ end
8
+
9
+ def load
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,536 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.github.com/repos/txgh-bot/txgh-test-resources/git/refs
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"ref":"refs/heads/L10N","sha":"6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed"}'
9
+ headers:
10
+ Accept:
11
+ - application/vnd.github.v3+json
12
+ User-Agent:
13
+ - Octokit Ruby Gem 4.2.0
14
+ Content-Type:
15
+ - application/json
16
+ Authorization:
17
+ - token <GITHUB_TOKEN>
18
+ Accept-Encoding:
19
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
+ response:
21
+ status:
22
+ code: 422
23
+ message: Unprocessable Entity
24
+ headers:
25
+ Server:
26
+ - GitHub.com
27
+ Date:
28
+ - Fri, 12 Feb 2016 19:48:54 GMT
29
+ Content-Type:
30
+ - application/json; charset=utf-8
31
+ Content-Length:
32
+ - '121'
33
+ Status:
34
+ - 422 Unprocessable Entity
35
+ X-Ratelimit-Limit:
36
+ - '5000'
37
+ X-Ratelimit-Remaining:
38
+ - '4993'
39
+ X-Ratelimit-Reset:
40
+ - '1455310132'
41
+ X-Oauth-Scopes:
42
+ - public_repo
43
+ X-Accepted-Oauth-Scopes:
44
+ - ''
45
+ X-Github-Media-Type:
46
+ - github.v3; format=json
47
+ Access-Control-Allow-Credentials:
48
+ - 'true'
49
+ Access-Control-Expose-Headers:
50
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
51
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
52
+ Access-Control-Allow-Origin:
53
+ - "*"
54
+ Content-Security-Policy:
55
+ - default-src 'none'
56
+ Strict-Transport-Security:
57
+ - max-age=31536000; includeSubdomains; preload
58
+ X-Content-Type-Options:
59
+ - nosniff
60
+ X-Frame-Options:
61
+ - deny
62
+ X-Xss-Protection:
63
+ - 1; mode=block
64
+ X-Github-Request-Id:
65
+ - 04358C36:14593:B89F3A4:56BE3726
66
+ body:
67
+ encoding: UTF-8
68
+ string: '{"message":"Reference already exists","documentation_url":"https://developer.github.com/v3/git/refs/#create-a-reference"}'
69
+ http_version:
70
+ recorded_at: Fri, 12 Feb 2016 19:48:54 GMT
71
+ - request:
72
+ method: get
73
+ uri: https://api.github.com/repos/txgh-bot/txgh-test-resources/commits/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed
74
+ body:
75
+ encoding: US-ASCII
76
+ string: ''
77
+ headers:
78
+ Accept:
79
+ - application/vnd.github.v3+json
80
+ User-Agent:
81
+ - Octokit Ruby Gem 4.2.0
82
+ Content-Type:
83
+ - application/json
84
+ Authorization:
85
+ - token <GITHUB_TOKEN>
86
+ Accept-Encoding:
87
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
88
+ response:
89
+ status:
90
+ code: 200
91
+ message: OK
92
+ headers:
93
+ Server:
94
+ - GitHub.com
95
+ Date:
96
+ - Fri, 12 Feb 2016 19:48:55 GMT
97
+ Content-Type:
98
+ - application/json; charset=utf-8
99
+ Transfer-Encoding:
100
+ - chunked
101
+ Status:
102
+ - 200 OK
103
+ X-Ratelimit-Limit:
104
+ - '5000'
105
+ X-Ratelimit-Remaining:
106
+ - '4992'
107
+ X-Ratelimit-Reset:
108
+ - '1455310132'
109
+ Cache-Control:
110
+ - private, max-age=60, s-maxage=60
111
+ Last-Modified:
112
+ - Thu, 19 Nov 2015 20:56:33 GMT
113
+ Etag:
114
+ - W/"7bfdb9dfafc4d11bf47411ec7fee1f31"
115
+ X-Oauth-Scopes:
116
+ - public_repo
117
+ X-Accepted-Oauth-Scopes:
118
+ - ''
119
+ Vary:
120
+ - Accept, Authorization, Cookie, X-GitHub-OTP
121
+ - Accept-Encoding
122
+ X-Github-Media-Type:
123
+ - github.v3; format=json
124
+ Access-Control-Allow-Credentials:
125
+ - 'true'
126
+ Access-Control-Expose-Headers:
127
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
128
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
129
+ Access-Control-Allow-Origin:
130
+ - "*"
131
+ Content-Security-Policy:
132
+ - default-src 'none'
133
+ Strict-Transport-Security:
134
+ - max-age=31536000; includeSubdomains; preload
135
+ X-Content-Type-Options:
136
+ - nosniff
137
+ X-Frame-Options:
138
+ - deny
139
+ X-Xss-Protection:
140
+ - 1; mode=block
141
+ X-Served-By:
142
+ - a51acaae89a7607fd7ee967627be18e4
143
+ X-Github-Request-Id:
144
+ - 04358C36:14592:880AC63:56BE3727
145
+ body:
146
+ encoding: UTF-8
147
+ string: '{"sha":"6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed","commit":{"author":{"name":"Matthew
148
+ Jackowski","email":"mattjjacko@gmail.com","date":"2015-11-19T20:56:33Z"},"committer":{"name":"Matthew
149
+ Jackowski","email":"mattjjacko@gmail.com","date":"2015-11-19T20:56:33Z"},"message":"10","tree":{"sha":"572b0507c4109703788333808a0b0019c0000f50","url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees/572b0507c4109703788333808a0b0019c0000f50"},"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/commits/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed","comment_count":0},"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/commits/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed","html_url":"https://github.com/txgh-bot/txgh-test-resources/commit/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed","comments_url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/commits/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed/comments","author":{"login":"matthewjackowski","id":974299,"avatar_url":"https://avatars.githubusercontent.com/u/974299?v=3","gravatar_id":"","url":"https://api.github.com/users/matthewjackowski","html_url":"https://github.com/matthewjackowski","followers_url":"https://api.github.com/users/matthewjackowski/followers","following_url":"https://api.github.com/users/matthewjackowski/following{/other_user}","gists_url":"https://api.github.com/users/matthewjackowski/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewjackowski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewjackowski/subscriptions","organizations_url":"https://api.github.com/users/matthewjackowski/orgs","repos_url":"https://api.github.com/users/matthewjackowski/repos","events_url":"https://api.github.com/users/matthewjackowski/events{/privacy}","received_events_url":"https://api.github.com/users/matthewjackowski/received_events","type":"User","site_admin":false},"committer":{"login":"matthewjackowski","id":974299,"avatar_url":"https://avatars.githubusercontent.com/u/974299?v=3","gravatar_id":"","url":"https://api.github.com/users/matthewjackowski","html_url":"https://github.com/matthewjackowski","followers_url":"https://api.github.com/users/matthewjackowski/followers","following_url":"https://api.github.com/users/matthewjackowski/following{/other_user}","gists_url":"https://api.github.com/users/matthewjackowski/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewjackowski/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewjackowski/subscriptions","organizations_url":"https://api.github.com/users/matthewjackowski/orgs","repos_url":"https://api.github.com/users/matthewjackowski/repos","events_url":"https://api.github.com/users/matthewjackowski/events{/privacy}","received_events_url":"https://api.github.com/users/matthewjackowski/received_events","type":"User","site_admin":false},"parents":[{"sha":"61e01fc7270052ac327c8938e63d1f1942a44372","url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/commits/61e01fc7270052ac327c8938e63d1f1942a44372","html_url":"https://github.com/txgh-bot/txgh-test-resources/commit/61e01fc7270052ac327c8938e63d1f1942a44372"}],"stats":{"total":2,"additions":2,"deletions":0},"files":[{"sha":"a93e31a00137e0bd23db5bc7720568f8e908b2b6","filename":"sample.po","status":"modified","additions":2,"deletions":0,"changes":2,"blob_url":"https://github.com/txgh-bot/txgh-test-resources/blob/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed/sample.po","raw_url":"https://github.com/txgh-bot/txgh-test-resources/raw/6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed/sample.po","contents_url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/contents/sample.po?ref=6eebc3eee49e8d46f6dbec16fe3360961bfdd8ed","patch":"@@
150
+ -34,3 +34,5 @@ msgid \"Eight\"\n msgstr \"Eight\"\n msgid \"Nine\"\n msgstr
151
+ \"Nine\"\n+msgid \"Ten\"\n+msgstr \"Ten\""}]}'
152
+ http_version:
153
+ recorded_at: Fri, 12 Feb 2016 19:48:55 GMT
154
+ - request:
155
+ method: get
156
+ uri: https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees/572b0507c4109703788333808a0b0019c0000f50?recursive=1
157
+ body:
158
+ encoding: US-ASCII
159
+ string: ''
160
+ headers:
161
+ Accept:
162
+ - application/vnd.github.v3+json
163
+ User-Agent:
164
+ - Octokit Ruby Gem 4.2.0
165
+ Content-Type:
166
+ - application/json
167
+ Authorization:
168
+ - token <GITHUB_TOKEN>
169
+ Accept-Encoding:
170
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
171
+ response:
172
+ status:
173
+ code: 200
174
+ message: OK
175
+ headers:
176
+ Server:
177
+ - GitHub.com
178
+ Date:
179
+ - Fri, 12 Feb 2016 19:48:55 GMT
180
+ Content-Type:
181
+ - application/json; charset=utf-8
182
+ Transfer-Encoding:
183
+ - chunked
184
+ Status:
185
+ - 200 OK
186
+ X-Ratelimit-Limit:
187
+ - '5000'
188
+ X-Ratelimit-Remaining:
189
+ - '4991'
190
+ X-Ratelimit-Reset:
191
+ - '1455310132'
192
+ Cache-Control:
193
+ - private, max-age=60, s-maxage=60
194
+ Last-Modified:
195
+ - Mon, 11 Jan 2016 23:45:43 GMT
196
+ Etag:
197
+ - W/"07cd463077f05587402e4f0815c49053"
198
+ X-Oauth-Scopes:
199
+ - public_repo
200
+ X-Accepted-Oauth-Scopes:
201
+ - ''
202
+ Vary:
203
+ - Accept, Authorization, Cookie, X-GitHub-OTP
204
+ - Accept-Encoding
205
+ X-Github-Media-Type:
206
+ - github.v3; format=json
207
+ Access-Control-Allow-Credentials:
208
+ - 'true'
209
+ Access-Control-Expose-Headers:
210
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
211
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
212
+ Access-Control-Allow-Origin:
213
+ - "*"
214
+ Content-Security-Policy:
215
+ - default-src 'none'
216
+ Strict-Transport-Security:
217
+ - max-age=31536000; includeSubdomains; preload
218
+ X-Content-Type-Options:
219
+ - nosniff
220
+ X-Frame-Options:
221
+ - deny
222
+ X-Xss-Protection:
223
+ - 1; mode=block
224
+ X-Served-By:
225
+ - 065b43cd9674091fec48a221b420fbb3
226
+ X-Github-Request-Id:
227
+ - 04358C36:14594:ED05BBF:56BE3727
228
+ body:
229
+ encoding: UTF-8
230
+ string: '{"sha":"572b0507c4109703788333808a0b0019c0000f50","url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees/572b0507c4109703788333808a0b0019c0000f50","tree":[{"path":"README.md","mode":"100644","type":"blob","sha":"cee445fa5bceaeb83c8d443b28f1647c2feff565","size":53,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/cee445fa5bceaeb83c8d443b28f1647c2feff565"},{"path":"sample.po","mode":"100644","type":"blob","sha":"a93e31a00137e0bd23db5bc7720568f8e908b2b6","size":855,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/a93e31a00137e0bd23db5bc7720568f8e908b2b6"},{"path":"translations","mode":"040000","type":"tree","sha":"5b5d383f4f107ff4d53c8fa4ce1166b63d1a4458","url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees/5b5d383f4f107ff4d53c8fa4ce1166b63d1a4458"},{"path":"translations/el_GR","mode":"040000","type":"tree","sha":"396520f008766ce17de7b254cdfd3d7b4eda6b44","url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/trees/396520f008766ce17de7b254cdfd3d7b4eda6b44"},{"path":"translations/el_GR/sample.po","mode":"100644","type":"blob","sha":"98f5f909182137fd6416b4e672a85c013fef7a3a","size":1181,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/98f5f909182137fd6416b4e672a85c013fef7a3a"},{"path":"translations/el_GR/test.txt","mode":"100644","type":"blob","sha":"f16628a67170414c9d346279f2595e77a1c3cf0f","size":28,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/f16628a67170414c9d346279f2595e77a1c3cf0f"},{"path":"translations/test.txt","mode":"100644","type":"blob","sha":"f16628a67170414c9d346279f2595e77a1c3cf0f","size":28,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/f16628a67170414c9d346279f2595e77a1c3cf0f"}],"truncated":false}'
231
+ http_version:
232
+ recorded_at: Fri, 12 Feb 2016 19:48:55 GMT
233
+ - request:
234
+ method: get
235
+ uri: https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/a93e31a00137e0bd23db5bc7720568f8e908b2b6
236
+ body:
237
+ encoding: US-ASCII
238
+ string: ''
239
+ headers:
240
+ Accept:
241
+ - application/vnd.github.v3+json
242
+ User-Agent:
243
+ - Octokit Ruby Gem 4.2.0
244
+ Content-Type:
245
+ - application/json
246
+ Authorization:
247
+ - token <GITHUB_TOKEN>
248
+ Accept-Encoding:
249
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
250
+ response:
251
+ status:
252
+ code: 200
253
+ message: OK
254
+ headers:
255
+ Server:
256
+ - GitHub.com
257
+ Date:
258
+ - Fri, 12 Feb 2016 19:48:56 GMT
259
+ Content-Type:
260
+ - application/json; charset=utf-8
261
+ Transfer-Encoding:
262
+ - chunked
263
+ Status:
264
+ - 200 OK
265
+ X-Ratelimit-Limit:
266
+ - '5000'
267
+ X-Ratelimit-Remaining:
268
+ - '4990'
269
+ X-Ratelimit-Reset:
270
+ - '1455310132'
271
+ Cache-Control:
272
+ - private, max-age=60, s-maxage=60
273
+ Etag:
274
+ - W/"dbb7c82142b789308c5d1aae70171c46"
275
+ X-Oauth-Scopes:
276
+ - public_repo
277
+ X-Accepted-Oauth-Scopes:
278
+ - ''
279
+ Vary:
280
+ - Accept, Authorization, Cookie, X-GitHub-OTP
281
+ - Accept-Encoding
282
+ X-Github-Media-Type:
283
+ - github.v3; format=json
284
+ Access-Control-Allow-Credentials:
285
+ - 'true'
286
+ Access-Control-Expose-Headers:
287
+ - ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
288
+ X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
289
+ Access-Control-Allow-Origin:
290
+ - "*"
291
+ Content-Security-Policy:
292
+ - default-src 'none'
293
+ Strict-Transport-Security:
294
+ - max-age=31536000; includeSubdomains; preload
295
+ X-Content-Type-Options:
296
+ - nosniff
297
+ X-Frame-Options:
298
+ - deny
299
+ X-Xss-Protection:
300
+ - 1; mode=block
301
+ X-Served-By:
302
+ - a51acaae89a7607fd7ee967627be18e4
303
+ X-Github-Request-Id:
304
+ - 04358C36:14595:117D11BE:56BE3727
305
+ body:
306
+ encoding: UTF-8
307
+ string: '{"sha":"a93e31a00137e0bd23db5bc7720568f8e908b2b6","size":855,"url":"https://api.github.com/repos/txgh-bot/txgh-test-resources/git/blobs/a93e31a00137e0bd23db5bc7720568f8e908b2b6","content":"IyBUcmFuc2xhdGlvbiBmaWxlIGZvciBUcmFuc2lmZXguCiMgQ29weXJpZ2h0\nIChDKSAyMDA3LTIwMTAgSW5kaWZleCBMdGQuCiMgVGhpcyBmaWxlIGlzIGRp\nc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFRyYW5z\naWZleCBwYWNrYWdlLgojCiMgVHJhbnNsYXRvcnM6Cm1zZ2lkICIiCm1zZ3N0\nciAiIgoiUHJvamVjdC1JZC1WZXJzaW9uOiBUcmFuc2lmZXhcbiIKIlJlcG9y\ndC1Nc2dpZC1CdWdzLVRvOiBcbiIKIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1\nLTAyLTE3IDIwOjEwKzAwMDBcbiIKIlBPLVJldmlzaW9uLURhdGU6IDIwMTMt\nMTAtMjIgMTA6NTcrMDAwMFxuIgoiTGFzdC1UcmFuc2xhdG9yOiBJbGlhcy1E\naW1pdHJpb3MgVnJhY2huaXNcbiIKIkxhbmd1YWdlLVRlYW06IExBTkdVQUdF\nIDxMTEBsaS5vcmc+XG4iCiJMYW5ndWFnZTogZW5cbiIKIk1JTUUtVmVyc2lv\nbjogMS4wXG4iCiJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9\nVVRGLThcbiIKIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIK\nIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xu\nIgptc2dpZCAiT25lIgptc2dzdHIgIk9uZSIKbXNnaWQgIlR3byIKbXNnc3Ry\nICJUd28iCm1zZ2lkICJUaHJlZSIKbXNnc3RyICJUaHJlZSIKbXNnaWQgIkZv\ndXIiCm1zZ3N0ciAiRm91ciIKbXNnaWQgIkZpdmUiCm1zZ3N0ciAiRml2ZSIK\nbXNnaWQgIlNpeCIKbXNnc3RyICJTaXgiCm1zZ2lkICJTZXZlbiIKbXNnc3Ry\nICJTZXZlbiIKbXNnaWQgIkVpZ2h0Igptc2dzdHIgIkVpZ2h0Igptc2dpZCAi\nTmluZSIKbXNnc3RyICJOaW5lIgptc2dpZCAiVGVuIgptc2dzdHIgIlRlbiIK\n","encoding":"base64"}'
308
+ http_version:
309
+ recorded_at: Fri, 12 Feb 2016 19:48:56 GMT
310
+ - request:
311
+ method: get
312
+ uri: https://txgh.bot:<TRANSIFEX_PASSWORD>@www.transifex.com/api/2/project/test-project-88/resource/samplepo/
313
+ body:
314
+ encoding: US-ASCII
315
+ string: ''
316
+ headers:
317
+ User-Agent:
318
+ - Faraday v0.9.2
319
+ Accept:
320
+ - application/json
321
+ Accept-Encoding:
322
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
323
+ response:
324
+ status:
325
+ code: 200
326
+ message: OK
327
+ headers:
328
+ Server:
329
+ - nginx
330
+ Vary:
331
+ - Accept-Encoding
332
+ - Authorization, Host, Accept-Language, Cookie
333
+ Cache-Control:
334
+ - max-age=0
335
+ Content-Type:
336
+ - application/json; charset=utf-8
337
+ Date:
338
+ - Fri, 12 Feb 2016 19:48:56 GMT
339
+ Expires:
340
+ - Fri, 12 Feb 2016 19:48:56 GMT
341
+ Transfer-Encoding:
342
+ - chunked
343
+ Content-Language:
344
+ - en
345
+ X-Content-Type-Options:
346
+ - nosniff
347
+ Connection:
348
+ - keep-alive
349
+ Set-Cookie:
350
+ - X-Mapping-fjhppofk=7BA9C65DD9CD0F1A96194A82BFB61D00; path=/
351
+ Last-Modified:
352
+ - Fri, 12 Feb 2016 19:48:56 GMT
353
+ X-Frame-Options:
354
+ - SAMEORIGIN
355
+ body:
356
+ encoding: UTF-8
357
+ string: "{\n \"source_language_code\": \"en\", \n \"name\": \"sample.po\",
358
+ \n \"i18n_type\": \"PO\", \n \"priority\": \"0\", \n \"slug\": \"samplepo\",
359
+ \n \"categories\": [\n \"branch:refs/tags/L10N\", \n \"author:Txgh
360
+ Bot\"\n ]\n}"
361
+ http_version:
362
+ recorded_at: Fri, 12 Feb 2016 19:48:56 GMT
363
+ - request:
364
+ method: get
365
+ uri: https://txgh.bot:<TRANSIFEX_PASSWORD>@www.transifex.com/api/2/project/test-project-88/resource/samplepo/
366
+ body:
367
+ encoding: US-ASCII
368
+ string: ''
369
+ headers:
370
+ User-Agent:
371
+ - Faraday v0.9.2
372
+ Accept:
373
+ - application/json
374
+ Accept-Encoding:
375
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
376
+ response:
377
+ status:
378
+ code: 200
379
+ message: OK
380
+ headers:
381
+ Server:
382
+ - nginx
383
+ Vary:
384
+ - Accept-Encoding
385
+ - Authorization, Host, Accept-Language, Cookie
386
+ Cache-Control:
387
+ - max-age=0
388
+ Content-Type:
389
+ - application/json; charset=utf-8
390
+ Date:
391
+ - Fri, 12 Feb 2016 19:48:57 GMT
392
+ Expires:
393
+ - Fri, 12 Feb 2016 19:48:57 GMT
394
+ Transfer-Encoding:
395
+ - chunked
396
+ Content-Language:
397
+ - en
398
+ X-Content-Type-Options:
399
+ - nosniff
400
+ Connection:
401
+ - keep-alive
402
+ Set-Cookie:
403
+ - X-Mapping-fjhppofk=C7ADAD16FC9FAF25B589211B926C5FF5; path=/
404
+ Last-Modified:
405
+ - Fri, 12 Feb 2016 19:48:57 GMT
406
+ X-Frame-Options:
407
+ - SAMEORIGIN
408
+ body:
409
+ encoding: UTF-8
410
+ string: "{\n \"source_language_code\": \"en\", \n \"name\": \"sample.po\",
411
+ \n \"i18n_type\": \"PO\", \n \"priority\": \"0\", \n \"slug\": \"samplepo\",
412
+ \n \"categories\": [\n \"branch:refs/tags/L10N\", \n \"author:Txgh
413
+ Bot\"\n ]\n}"
414
+ http_version:
415
+ recorded_at: Fri, 12 Feb 2016 19:48:57 GMT
416
+ - request:
417
+ method: put
418
+ uri: https://txgh.bot:<TRANSIFEX_PASSWORD>@www.transifex.com/api/2/project/test-project-88/resource/samplepo/
419
+ body:
420
+ encoding: UTF-8
421
+ string: '{"categories":["branch:refs/tags/L10N","author:Txgh Bot"]}'
422
+ headers:
423
+ User-Agent:
424
+ - Faraday v0.9.2
425
+ Accept:
426
+ - application/json
427
+ Content-Type:
428
+ - application/json
429
+ Accept-Encoding:
430
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
431
+ response:
432
+ status:
433
+ code: 200
434
+ message: OK
435
+ headers:
436
+ Server:
437
+ - nginx
438
+ Vary:
439
+ - Accept-Encoding
440
+ - Authorization, Host, Accept-Language, Cookie
441
+ Cache-Control:
442
+ - max-age=0
443
+ Content-Type:
444
+ - text/plain
445
+ Date:
446
+ - Fri, 12 Feb 2016 19:48:57 GMT
447
+ Expires:
448
+ - Fri, 12 Feb 2016 19:48:57 GMT
449
+ Transfer-Encoding:
450
+ - chunked
451
+ Content-Language:
452
+ - en
453
+ X-Content-Type-Options:
454
+ - nosniff
455
+ Connection:
456
+ - keep-alive
457
+ Set-Cookie:
458
+ - X-Mapping-fjhppofk=EB51E54611BEFDE531C59D8E5F7EF32B; path=/
459
+ Last-Modified:
460
+ - Fri, 12 Feb 2016 19:48:57 GMT
461
+ X-Frame-Options:
462
+ - SAMEORIGIN
463
+ body:
464
+ encoding: UTF-8
465
+ string: OK
466
+ http_version:
467
+ recorded_at: Fri, 12 Feb 2016 19:48:58 GMT
468
+ - request:
469
+ method: put
470
+ uri: https://txgh.bot:<TRANSIFEX_PASSWORD>@www.transifex.com/api/2/project/test-project-88/resource/samplepo/content/
471
+ body:
472
+ encoding: UTF-8
473
+ string: "-------------RubyMultipartPost\r\nContent-Disposition: form-data; name=\"content\";
474
+ filename=\"sample.po\"\r\nContent-Length: 855\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding:
475
+ binary\r\n\r\n# Translation file for Transifex.\n# Copyright (C) 2007-2010
476
+ Indifex Ltd.\n# This file is distributed under the same license as the Transifex
477
+ package.\n#\n# Translators:\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version:
478
+ Transifex\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2015-02-17
479
+ 20:10+0000\\n\"\n\"PO-Revision-Date: 2013-10-22 10:57+0000\\n\"\n\"Last-Translator:
480
+ Ilias-Dimitrios Vrachnis\\n\"\n\"Language-Team: LANGUAGE <LL@li.org>\\n\"\n\"Language:
481
+ en\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding:
482
+ 8bit\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\nmsgid \"One\"\nmsgstr
483
+ \"One\"\nmsgid \"Two\"\nmsgstr \"Two\"\nmsgid \"Three\"\nmsgstr \"Three\"\nmsgid
484
+ \"Four\"\nmsgstr \"Four\"\nmsgid \"Five\"\nmsgstr \"Five\"\nmsgid \"Six\"\nmsgstr
485
+ \"Six\"\nmsgid \"Seven\"\nmsgstr \"Seven\"\nmsgid \"Eight\"\nmsgstr \"Eight\"\nmsgid
486
+ \"Nine\"\nmsgstr \"Nine\"\nmsgid \"Ten\"\nmsgstr \"Ten\"\n\r\n-------------RubyMultipartPost--\r\n\r\n"
487
+ headers:
488
+ User-Agent:
489
+ - Faraday v0.9.2
490
+ Accept:
491
+ - application/json
492
+ Content-Type:
493
+ - multipart/form-data; boundary=-----------RubyMultipartPost
494
+ Content-Length:
495
+ - '1093'
496
+ Accept-Encoding:
497
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
498
+ response:
499
+ status:
500
+ code: 200
501
+ message: OK
502
+ headers:
503
+ Server:
504
+ - nginx
505
+ Vary:
506
+ - Accept-Encoding
507
+ - Authorization, Host, Accept-Language, Cookie
508
+ Cache-Control:
509
+ - max-age=0
510
+ Content-Type:
511
+ - application/json; charset=utf-8
512
+ Date:
513
+ - Fri, 12 Feb 2016 19:48:58 GMT
514
+ Expires:
515
+ - Fri, 12 Feb 2016 19:48:58 GMT
516
+ Transfer-Encoding:
517
+ - chunked
518
+ Content-Language:
519
+ - en
520
+ X-Content-Type-Options:
521
+ - nosniff
522
+ Connection:
523
+ - keep-alive
524
+ Set-Cookie:
525
+ - X-Mapping-fjhppofk=B8558B7BB369B761FC4CE03884ACF0F5; path=/
526
+ Last-Modified:
527
+ - Fri, 12 Feb 2016 19:48:58 GMT
528
+ X-Frame-Options:
529
+ - SAMEORIGIN
530
+ body:
531
+ encoding: UTF-8
532
+ string: "{\n \"strings_added\": 0, \n \"strings_updated\": 0, \n \"strings_delete\":
533
+ 0, \n \"redirect\": \"/txgh-test/test-project-88/samplepo/\"\n}"
534
+ http_version:
535
+ recorded_at: Fri, 12 Feb 2016 19:48:59 GMT
536
+ recorded_with: VCR 3.0.1