adyen-admin 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. data/CHANGES.md +3 -0
  2. data/VERSION +1 -1
  3. data/lib/adyen-admin/skin.rb +1 -1
  4. data/spec/adyen-admin/skin_spec.rb +6 -0
  5. data/spec/fixtures/cassettes/Adyen_Admin_Client/_get/raises_authenticated_error_when_not_logged_in.yml +9 -9
  6. data/spec/fixtures/cassettes/Adyen_Admin_Client/_login/passes_with_correct_username_password.yml +35 -35
  7. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all/freezes_local_skins.yml +3 -3
  8. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all/returns_the_skins.yml +3 -3
  9. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/returns_the_skins.yml +3 -3
  10. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/sets_local_path.yml +244 -244
  11. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/gets_the_file.yml +5520 -229
  12. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/is_a_zipfile.yml +5566 -0
  13. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_no_skin.yml +3 -3
  14. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_the_skin.yml +3 -3
  15. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_test_url/returns_url_to_test.yml +17 -17
  16. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_upload/valid_set/increases_version.yml +95 -95
  17. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_version/returns_live_value.yml +3 -3
  18. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_version/returns_test_value.yml +3 -3
  19. data/spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_version/returns_uploaded_value.yml +4 -4
  20. data/spec/fixtures/cassettes/login.yml +35 -35
  21. metadata +17 -15
@@ -29,7 +29,7 @@ http_interactions:
29
29
  message: OK
30
30
  headers:
31
31
  Date:
32
- - Wed, 11 Apr 2012 17:34:15 GMT
32
+ - Thu, 12 Apr 2012 15:12:34 GMT
33
33
  Server:
34
34
  - Apache
35
35
  Cache-Control:
@@ -41,7 +41,7 @@ http_interactions:
41
41
  X-Frame-Options:
42
42
  - SAMEORIGIN
43
43
  Set-Cookie:
44
- - JSESSIONID=1D0B7A619081F69F796D939EBA17D64B.test5e; Path=/ca/; Secure; HttpOnly
44
+ - JSESSIONID=05604B768AE0272CA4D88A13177B0E42.test5e; Path=/ca/; Secure; HttpOnly
45
45
  Content-Language:
46
46
  - en-GB
47
47
  Keep-Alive:
@@ -66,15 +66,15 @@ http_interactions:
66
66
  <meta http-equiv="imagetoolbar" content="no" />
67
67
  <meta content="TRUE" name="MSSmartTagsPreventParsing" />
68
68
 
69
- <link rel="shortcut icon" href="/ca/img/adyen/favicon.ico;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" type="image/ico"/>
69
+ <link rel="shortcut icon" href="/ca/img/adyen/favicon.ico;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" type="image/ico"/>
70
70
 
71
- <script type="text/javascript" src="/ca/js/functions.js;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e"></script>
72
- <script src="/ca/js/prototype.js;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" type="text/javascript"></script>
73
- <script src="/ca/js/scriptaculous.js;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" type="text/javascript"></script>
71
+ <script type="text/javascript" src="/ca/js/functions.js;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e"></script>
72
+ <script src="/ca/js/prototype.js;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" type="text/javascript"></script>
73
+ <script src="/ca/js/scriptaculous.js;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" type="text/javascript"></script>
74
74
 
75
- <link rel="stylesheet" type="text/css" href="/ca/css/adyen/style.css;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" />
75
+ <link rel="stylesheet" type="text/css" href="/ca/css/adyen/style.css;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" />
76
76
  <!--[if lt IE 7]>
77
- <link rel="stylesheet" type="text/css" href="/ca/css/adyen/style_ie6.css;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" />
77
+ <link rel="stylesheet" type="text/css" href="/ca/css/adyen/style_ie6.css;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" />
78
78
  <![endif]-->
79
79
 
80
80
 
@@ -84,9 +84,9 @@ http_interactions:
84
84
  <div id="topbar"><div class="iefillerdiv"></div></div>
85
85
  <div id="middlebarcontainer">
86
86
  <div id="middlebar">
87
- <a href="/ca/ca/overview/default.shtml;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e"><img id="mainlogo" src="/ca/img/adyen.png;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="Logo"/>
88
- <img id="testsystemwarning" src="/ca/img/adyen_test.png;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="test"/></a>
89
- <img id="maintagline" src="/ca/img/adyen_tagline.png;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="Complex Finance, Online Insight" />
87
+ <a href="/ca/ca/overview/default.shtml;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e"><img id="mainlogo" src="/ca/img/adyen.png;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="Logo"/>
88
+ <img id="testsystemwarning" src="/ca/img/adyen_test.png;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="test"/></a>
89
+ <img id="maintagline" src="/ca/img/adyen_tagline.png;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="Complex Finance, Online Insight" />
90
90
  </div>
91
91
  </div>
92
92
  <div id="bottombar"><div id="bottombar2"></div></div>
@@ -101,9 +101,9 @@ http_interactions:
101
101
  </div>
102
102
 
103
103
  <div style="text-align: left; margin-top: 5px">
104
- <!--a class="icon" href="/ca/ca/overview/default.shtml;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" title="Home"><img src="/ca/img/home.gif;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="Home"/></a-->
105
- <a class="icon" href="/ca/ca/overview/default.shtml;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e"><img src="/ca/img/home.png;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="Home"/> home</a><br/>
106
- <a class="icon" href="/ca/logoff.shtml;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" title="Sign Off"><img src="/ca/img/exit.png;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e" alt="Sign Off"/> sign off</a>
104
+ <!--a class="icon" href="/ca/ca/overview/default.shtml;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" title="Home"><img src="/ca/img/home.gif;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="Home"/></a-->
105
+ <a class="icon" href="/ca/ca/overview/default.shtml;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e"><img src="/ca/img/home.png;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="Home"/> home</a><br/>
106
+ <a class="icon" href="/ca/logoff.shtml;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" title="Sign Off"><img src="/ca/img/exit.png;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e" alt="Sign Off"/> sign off</a>
107
107
  </div>
108
108
  </div>
109
109
  </div>
@@ -193,13 +193,13 @@ http_interactions:
193
193
 
194
194
  <tr>
195
195
  <td colspan="2"><br />
196
- <input type="hidden" name="j_formHash" value="479guXjYUVnxMGCdCgTGeMMLzWsdsU=" />
196
+ <input type="hidden" name="j_formHash" value="668z/duldmmIf5285obqDvQnR1g7zc=" />
197
197
  <input type="submit" class="button" value="Submit" /></td>
198
198
  </tr>
199
199
  </table>
200
200
  </form>
201
201
  <br/>
202
- <a href="/ca/forgotPassword.shtml;jsessionid=1D0B7A619081F69F796D939EBA17D64B.test5e">Forgot your password?</a>
202
+ <a href="/ca/forgotPassword.shtml;jsessionid=05604B768AE0272CA4D88A13177B0E42.test5e">Forgot your password?</a>
203
203
  </div>
204
204
 
205
205
  <div class="bbarl">
@@ -218,13 +218,13 @@ http_interactions:
218
218
  </html>
219
219
 
220
220
  http_version:
221
- recorded_at: Wed, 11 Apr 2012 17:34:15 GMT
221
+ recorded_at: Thu, 12 Apr 2012 15:12:33 GMT
222
222
  - request:
223
223
  method: post
224
224
  uri: https://ca-test.adyen.com/ca/ca/config/j_security_check
225
225
  body:
226
226
  encoding: UTF-8
227
- string: j_account=SoundCloud&j_username=skinadmin&j_password=12312311&j_formHash=479guXjYUVnxMGCdCgTGeMMLzWsdsU%3D
227
+ string: j_account=SoundCloud&j_username=skinadmin&j_password=12312311&j_formHash=668z%2FduldmmIf5285obqDvQnR1g7zc%3D
228
228
  headers:
229
229
  Accept:
230
230
  - "*/*"
@@ -237,7 +237,7 @@ http_interactions:
237
237
  Accept-Language:
238
238
  - en-us,en;q=0.5
239
239
  Cookie:
240
- - JSESSIONID=1D0B7A619081F69F796D939EBA17D64B.test5e
240
+ - JSESSIONID=05604B768AE0272CA4D88A13177B0E42.test5e
241
241
  Host:
242
242
  - ca-test.adyen.com
243
243
  Referer:
@@ -256,7 +256,7 @@ http_interactions:
256
256
  Content-Type:
257
257
  - application/x-www-form-urlencoded
258
258
  Content-Length:
259
- - "106"
259
+ - "108"
260
260
  Connection:
261
261
  - keep-alive
262
262
  Keep-Alive:
@@ -267,11 +267,11 @@ http_interactions:
267
267
  message: Moved Temporarily
268
268
  headers:
269
269
  Date:
270
- - Wed, 11 Apr 2012 17:34:16 GMT
270
+ - Thu, 12 Apr 2012 15:12:34 GMT
271
271
  Server:
272
272
  - Apache
273
273
  Set-Cookie:
274
- - JSESSIONID=90A4E71B7C6A54FEF7409AB3B2BFB7D4.test5e; Path=/ca/; Secure; HttpOnly
274
+ - JSESSIONID=8C3D2F4728B757CCE97F3C32698E9008.test5e; Path=/ca/; Secure; HttpOnly
275
275
  Location:
276
276
  - https://ca-test.adyen.com/ca/
277
277
  Content-Length:
@@ -286,7 +286,7 @@ http_interactions:
286
286
  encoding: US-ASCII
287
287
  string: ""
288
288
  http_version:
289
- recorded_at: Wed, 11 Apr 2012 17:34:16 GMT
289
+ recorded_at: Thu, 12 Apr 2012 15:12:34 GMT
290
290
  - request:
291
291
  method: get
292
292
  uri: https://ca-test.adyen.com/ca/
@@ -305,7 +305,7 @@ http_interactions:
305
305
  Accept-Language:
306
306
  - en-us,en;q=0.5
307
307
  Cookie:
308
- - JSESSIONID=90A4E71B7C6A54FEF7409AB3B2BFB7D4.test5e
308
+ - JSESSIONID=8C3D2F4728B757CCE97F3C32698E9008.test5e
309
309
  Host:
310
310
  - ca-test.adyen.com
311
311
  Referer:
@@ -320,7 +320,7 @@ http_interactions:
320
320
  message: Moved Temporarily
321
321
  headers:
322
322
  Date:
323
- - Wed, 11 Apr 2012 17:34:16 GMT
323
+ - Thu, 12 Apr 2012 15:12:34 GMT
324
324
  Server:
325
325
  - Apache
326
326
  Location:
@@ -339,7 +339,7 @@ http_interactions:
339
339
  encoding: US-ASCII
340
340
  string: ""
341
341
  http_version:
342
- recorded_at: Wed, 11 Apr 2012 17:34:16 GMT
342
+ recorded_at: Thu, 12 Apr 2012 15:12:34 GMT
343
343
  - request:
344
344
  method: get
345
345
  uri: https://ca-test.adyen.com/ca/ca/overview/default.shtml
@@ -358,7 +358,7 @@ http_interactions:
358
358
  Accept-Language:
359
359
  - en-us,en;q=0.5
360
360
  Cookie:
361
- - JSESSIONID=90A4E71B7C6A54FEF7409AB3B2BFB7D4.test5e
361
+ - JSESSIONID=8C3D2F4728B757CCE97F3C32698E9008.test5e
362
362
  Host:
363
363
  - ca-test.adyen.com
364
364
  Referer:
@@ -373,7 +373,7 @@ http_interactions:
373
373
  message: OK
374
374
  headers:
375
375
  Date:
376
- - Wed, 11 Apr 2012 17:34:16 GMT
376
+ - Thu, 12 Apr 2012 15:12:34 GMT
377
377
  Server:
378
378
  - Apache
379
379
  Cache-Control:
@@ -501,7 +501,7 @@ http_interactions:
501
501
 
502
502
 
503
503
 
504
- <div style="float: right; text-align: right; font-size: 0.8em;"><h1 title="Page Generation Time">2012-04-11 19:34:16 CEST</h1>
504
+ <div style="float: right; text-align: right; font-size: 0.8em;"><h1 title="Page Generation Time">2012-04-12 17:12:34 CEST</h1>
505
505
  <span class="topright">
506
506
  <a href="/ca/ca/overview/default.shtml?configure=true" title="Configure this page">
507
507
  <img src="/ca/img/icons/layout_edit.png" alt="Edit Layout" /> Customise this page </a>
@@ -524,7 +524,7 @@ http_interactions:
524
524
  <div class="content">
525
525
  You are logged in under the SoundCloud
526
526
  Company account.<br />
527
- Your last login was on <b>2012-04-11 19:34:15 CEST</b>.
527
+ Your last login was on <b>2012-04-12 17:12:33 CEST</b>.
528
528
  </div>
529
529
  </div>
530
530
  <div id="system_messages" class="block">
@@ -564,7 +564,7 @@ http_interactions:
564
564
  <script type="text/javascript">
565
565
  var chart1 = new FusionCharts("/ca/Charts/AngularGauge.swf", "sampleChart", "180", "110", "0", "0","#FFFFFF","noScale","EN");
566
566
  //debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect
567
- chart1.setDataURL("/ca/ca/reports/chartdata/speedometer.shtml?random=1334165656547");
567
+ chart1.setDataURL("/ca/ca/reports/chartdata/speedometer.shtml?random=1334243554703");
568
568
  chart1.render("chart2div");
569
569
  </script> </div>
570
570
  </div>
@@ -601,7 +601,7 @@ http_interactions:
601
601
  <script type="text/javascript">
602
602
  var chart1 = new FusionCharts("/ca/Charts/MSLine.swf", "sampleChart", "374", "180", "0", "1","#FFFFFF","noScale","EN","1","0");
603
603
  //debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect
604
- chart1.setDataURL("/ca/ca/reports/chartdata/chart_weekhistory.shtml?random=1334165656548");
604
+ chart1.setDataURL("/ca/ca/reports/chartdata/chart_weekhistory.shtml?random=1334243554705");
605
605
  chart1.render("chart1div");
606
606
  </script> </div>
607
607
  </div>
@@ -617,7 +617,7 @@ http_interactions:
617
617
  Current system time:
618
618
  </th>
619
619
  <td>
620
- 2012-04-11 19:34:16 CEST
620
+ 2012-04-12 17:12:34 CEST
621
621
  </td>
622
622
  </tr>
623
623
  <tr>
@@ -625,7 +625,7 @@ http_interactions:
625
625
  Backoffice up-to-date till:
626
626
  </th>
627
627
  <td>
628
- <span title="All payments made till this time are listed in the payments list. Newer payments may not be visible yet.">2012-04-11 19:33:28 CEST</span>
628
+ <span title="All payments made till this time are listed in the payments list. Newer payments may not be visible yet.">2012-04-12 17:11:44 CEST</span>
629
629
  </td>
630
630
  </tr>
631
631
  </table> </div>
@@ -657,5 +657,5 @@ http_interactions:
657
657
  </html>
658
658
 
659
659
  http_version:
660
- recorded_at: Wed, 11 Apr 2012 17:34:16 GMT
660
+ recorded_at: Thu, 12 Apr 2012 15:12:34 GMT
661
661
  recorded_with: VCR 2.0.1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adyen-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-12 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
16
- requirement: &70322653878160 !ruby/object:Gem::Requirement
16
+ requirement: &70172623370580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70322653878160
24
+ version_requirements: *70172623370580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rubyzip
27
- requirement: &70322653877680 !ruby/object:Gem::Requirement
27
+ requirement: &70172623370100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70322653877680
35
+ version_requirements: *70172623370100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70322653877100 !ruby/object:Gem::Requirement
38
+ requirement: &70172623369520 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70322653877100
46
+ version_requirements: *70172623369520
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70322653876640 !ruby/object:Gem::Requirement
49
+ requirement: &70172623369060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70322653876640
57
+ version_requirements: *70172623369060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: vcr
60
- requirement: &70322653876180 !ruby/object:Gem::Requirement
60
+ requirement: &70172623368600 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70322653876180
68
+ version_requirements: *70172623368600
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: webmock
71
- requirement: &70322653875720 !ruby/object:Gem::Requirement
71
+ requirement: &70172623368140 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70322653875720
79
+ version_requirements: *70172623368140
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: debugger
82
- requirement: &70322653875260 !ruby/object:Gem::Requirement
82
+ requirement: &70172623367680 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70322653875260
90
+ version_requirements: *70172623367680
91
91
  description: A little Gem to make your life easier when dealing with Adyen skins
92
92
  email:
93
93
  - tobi@soundcloud.com
@@ -116,6 +116,7 @@ files:
116
116
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/returns_the_skins.yml
117
117
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/sets_local_path.yml
118
118
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/gets_the_file.yml
119
+ - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/is_a_zipfile.yml
119
120
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_no_skin.yml
120
121
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_the_skin.yml
121
122
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_test_url/returns_url_to_test.yml
@@ -196,6 +197,7 @@ test_files:
196
197
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/returns_the_skins.yml
197
198
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_all_remote/sets_local_path.yml
198
199
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/gets_the_file.yml
200
+ - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_download/is_a_zipfile.yml
199
201
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_no_skin.yml
200
202
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_find/returns_the_skin.yml
201
203
  - spec/fixtures/cassettes/Adyen_Admin_Skin/authenticated/_test_url/returns_url_to_test.yml