worochi 0.0.14 → 0.0.15

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +82 -24
  3. data/lib/worochi/agent/#example.rb +6 -0
  4. data/lib/worochi/agent/dropbox.rb +6 -8
  5. data/lib/worochi/agent/github.rb +7 -2
  6. data/lib/worochi/agent/google_drive.rb +272 -0
  7. data/lib/worochi/agent.rb +23 -2
  8. data/lib/worochi/config/google_drive.yml +3 -1
  9. data/lib/worochi/item.rb +42 -1
  10. data/lib/worochi/oauth.rb +16 -8
  11. data/lib/worochi/version.rb +1 -1
  12. data/lib/worochi.rb +1 -0
  13. data/spec/cassettes/Worochi_Agent_GoogleDrive/_delete/deletes_a_file.yml +4248 -0
  14. data/spec/cassettes/Worochi_Agent_GoogleDrive/_delete/raises_error_on_bad_token.yml +7889 -0
  15. data/spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/retrieves_the_item_ID.yml +4148 -0
  16. data/spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/returns_the_root_ID.yml +3889 -0
  17. data/spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/creates_a_new_folder_to_root.yml +4753 -0
  18. data/spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/uploads_a_file.yml +4492 -0
  19. data/spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/creates_new_directories_as_needed.yml +5961 -0
  20. data/spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/pushes_a_single_item.yml +3887 -0
  21. data/spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/raises_error_on_bad_token.yml +7833 -0
  22. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_default_options/has_the_required_options.yml +3889 -0
  23. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/accepts_a_different_relative_path.yml +4294 -0
  24. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/contains_file1.yml +4236 -0
  25. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/does_not_contain_folder1.yml +4236 -0
  26. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/raises_error_on_invalid_path.yml +4236 -0
  27. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/contains_folder1_and_file1.yml +4583 -0
  28. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/shows_detailed_listing_including_the_required_fields.yml +4236 -0
  29. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/accepts_a_different_relative_path.yml +4294 -0
  30. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/contains_folder1.yml +4236 -0
  31. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/does_not_contain_file1.yml +4236 -0
  32. data/spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_init_client/returns_the_client.yml +7775 -0
  33. data/spec/cassettes/Worochi_Item/_content_type/detects_the_MIME_type.yml +105 -0
  34. data/spec/cassettes/Worochi_Item/_content_type/falls_back_to_file_name_when_ruby-filemagic_is_not_loaded.yml +105 -0
  35. data/spec/spec_helper.rb +5 -0
  36. data/spec/support/shared_exampes_for_agents.rb +2 -2
  37. data/spec/worochi/agent/github_spec.rb +6 -0
  38. data/spec/worochi/agent/google_drive_spec.rb +79 -0
  39. data/spec/worochi/agent_spec.rb +13 -1
  40. data/spec/worochi/item_spec.rb +18 -0
  41. data/spec/worochi/oauth_spec.rb +1 -1
  42. data/worochi.gemspec +4 -0
  43. metadata +104 -1
@@ -0,0 +1,105 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://soraven.com/blog/wp-content/uploads/2013/06/sr3.gif
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Thu, 22 Aug 2013 00:13:39 GMT
23
+ Server:
24
+ - Apache
25
+ Last-Modified:
26
+ - Sat, 15 Jun 2013 08:47:57 GMT
27
+ Accept-Ranges:
28
+ - bytes
29
+ Content-Length:
30
+ - '2985'
31
+ Content-Type:
32
+ - image/gif
33
+ body:
34
+ encoding: ASCII-8BIT
35
+ string: !binary |-
36
+ R0lGODlhlgCWANU0AAAAAP///w8PD8DAwICAgBAQEPDw8EBAQKCgoDAwMGBg
37
+ YNDQ0ODg4CAgIHBwcFBQUJCQkLCwsMnJyfPz8/n5+Xh4eBISEo2NjSQkJIeH
38
+ h9vb22ZmZjk5OZaWlicnJx4eHi0tLQkJCQYGBqKiovz8/KWlpZmZmYqKisPD
39
+ w/b29pOTk2lpad7e3jY2NoSEhAMDAzMzM9jY2GNjY11dXf///wAAAAAAAAAA
40
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFj
41
+ a2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi
42
+ Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0
43
+ az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAy
44
+ LzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0
45
+ dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8
46
+ cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6
47
+ Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8v
48
+ bnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDov
49
+ L25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1w
50
+ OkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHht
51
+ cE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0UwNDQ4NzRENTk4MTFFMkFCNDFB
52
+ MDcyODNBREQxOUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0UwNDQ4
53
+ NzVENTk4MTFFMkFCNDFBMDcyODNBREQxOUUiPiA8eG1wTU06RGVyaXZlZEZy
54
+ b20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRTA0NDg3MkQ1OTgxMUUy
55
+ QUI0MUEwNzI4M0FERDE5RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoz
56
+ RTA0NDg3M0Q1OTgxMUUyQUI0MUEwNzI4M0FERDE5RSIvPiA8L3JkZjpEZXNj
57
+ cmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVu
58
+ ZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb
59
+ 2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+u
60
+ rayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KB
61
+ gH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVU
62
+ U1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgn
63
+ JiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEA
64
+ ADQALAAAAACWAJYAAAb/QJpwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+Cw
65
+ eEwum7ks06YFArjf8Lh8Tq/b7/j8HdTamFhjExAJeoWGh4iJeQkQE14UGRaK
66
+ k5SVlnIWGRRbEh6Xn6Cheh4SWSUhoqmqqyEjVxWrsbKgFSRUsLO5uokVUyW7
67
+ wMF5JVESqMLIyW8ipU4UGMrRyRibTRnS2MIZTROS2d+5Fo5LF+DmsxdMhOfs
68
+ qQlLGu3yohpKHfP4lx1KMvn+kwqUcPhH8BAHJR8KKszzQYmAhRDrCHAYsWKc
69
+ iUkeWtyIEYnGjRU7HvkIEqJIIyRLKjxZJKVKgiyJuHzpL+aQmTTx2RSCM6e8
70
+ /500evpkB1TopAIKEAwIwLRpgAEQHhQYWqioqAcRnGrdiuAAVTxWPx1YsLXs
71
+ 1gFeLS01y7apgQFQCRxoICtspQIQ2uplGmEqpbV7AwdggECBKruTGpAV3JbB
72
+ OkWAGQc2QMDvJ8SJEhiQvNcwZM6SDTwAhfmQZtB7CXxGzRjBZYqKCixm3dY1
73
+ osi09Q6wPKl0oay59do2hDs42wGWfOd5YLzzoeLNy0KopBwPg+h6PeuBjl3r
74
+ 6N6wDynorvcxHu7kmRrgfai6HeDpy0YohD6+akXu68Q3u4C9nfrprYdfeIUc
75
+ IFlhByTowGx79UXcfmw5MGBGiBAgmAFpxXHAdcLdBv8hfxN6VOFk5sVRAAK1
76
+ JQIgU/cBkOCLDkDAIWN0IZLfHCjuNd0dOW61o4ep3fHAjM7ZSOB2gWVoR49N
77
+ aQekXi3WIZtgPxpyoxx57fUdHkw6+WRbUdbRwGZ7IWckhYdYuNdwd0wZgJdf
78
+ shVmHWrqxUAiV8bBXGA14pGAY2oFNicdCQiG55F5NCBYf8GsGMCgdBh6poiI
79
+ MNgWo7s4CukckraHaB4OMIZpLpoW0qmVn+JRgGSjylJqoqdWlSqXkgE6y6t4
80
+ jLeXAYeiiUgBZF5YYiq43kHkcb1SmkionMEZSrF1MJnipCP9BdqmgQZpxwGO
81
+ MiUhtShRAixobD4r6BsFvHj/AAEIHLtXn6j6qshpnLX6SbfY3ZlstZUYCJqt
82
+ oOAb3bfgtnSJrpyJZu6HWgm4b7gHs0Zwtgw3he0deeaBMGflTiJwcAz4J6u8
83
+ lhwQrGS7UVzxsPEq+wm99cKrYsVMOdsyv6EkYKmw1lZs880Qi+Jmwiwj+aEB
84
+ PwNtsConomZA0ed9uADUnpIsSp2hUV3Hx4wZMHFys36iwMmLinwH17tWJkrG
85
+ k/wJmpkPdncxeFYzvbO29JHX8Wt1ryItn3FD+TdbSpIWdirMMgZ3HpqOKdji
86
+ hvcdy8ZJ5h0k1nptGbnLuzxAdlvzGQ0lAOMGpm8obIMC815my/Eq5W19Dbbk
87
+ s+wZ/1jScODqrlkO8815MIl3yPi5bvhLvO84J3P3VguIDmbuNG6e/CQOYIiI
88
+ 7Xo5LycchQq2d4jTI5LAWpDr8XlZrUOPtxuDm6X1yL8bgrnsUe9VOB3QKvo4
89
+ 8kEfsuFWBpBZ/fRyvzlACwCYa0sBCyaTX7UvAM0zxPm2ssA4HLB0ezkdJVI3
90
+ NuHlwXjZG9763hC87MwufnRoQLe+Z6LdlUV7ZoGUCwGYvjxkbIJmcZCUlsc8
91
+ GJYFUtgb3QYPB4cHmoUBmoPD/7znw61sqlsBHCLt4qA/zjBALjDioVlw94YD
92
+ vgGEHnzY0vSQQJrVsIvHwxFj3icRIsKhADPcT+hEKMQUKv+ObiisQxArVkHX
93
+ pXEOZTRLH+2QOgAYkTzl+88f5YBBO4Gvf3oYGsPYiMYRzqGEbeHiHAoJgNXt
94
+ h36KtOQc4uiU3sEvfHoAY3pYuLVFzmGP26taHnMFoQg+x5UGvJAAMebGOpgs
95
+ PTq8pSjnoEq2sHKTvayDzrpTJWHWkVaCoaQbOGmiLIFskGfD5RyqWCalNfAS
96
+ DYAPaChzxmwOkw6BLAs230DNFEIAh2VZgALKmZN22iEBBIjA3d4CgXl+BSzJ
97
+ /Gcy7CnQWRC0oLE4KEIPE9CF7kKhDkVdQyNq0IlSNKEWvShDp6jRh2a0oxLl
98
+ KEgrKtKRYrSkJt0oEhKS0mQ0JAmsA2kpMg6SBE3KVBQzsMdNhbGPJMRjp8CI
99
+ wRKkCVRKvIMcRc1FOpbQjaTGQhzWcOoqttGEZ0hVFNR4ggREcNVPMCMKI+jq
100
+ JVwhBVyIVRG9mAIJVnDWRKzAFlU4wQvaqocXnCALKIAGXe2AARRsIQUuMEpX
101
+ BeCCFHjBABdow14BAIILGGAMGlDBBmDgiaR6AAYbUEE9zsDZznr2s6ANrWhH
102
+ S9rSmva0qE2tarEQBAA7
103
+ http_version:
104
+ recorded_at: Thu, 22 Aug 2013 00:13:39 GMT
105
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,105 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://soraven.com/blog/wp-content/uploads/2013/06/sr3.gif
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Thu, 22 Aug 2013 00:13:41 GMT
23
+ Server:
24
+ - Apache
25
+ Last-Modified:
26
+ - Sat, 15 Jun 2013 08:47:57 GMT
27
+ Accept-Ranges:
28
+ - bytes
29
+ Content-Length:
30
+ - '2985'
31
+ Content-Type:
32
+ - image/gif
33
+ body:
34
+ encoding: ASCII-8BIT
35
+ string: !binary |-
36
+ R0lGODlhlgCWANU0AAAAAP///w8PD8DAwICAgBAQEPDw8EBAQKCgoDAwMGBg
37
+ YNDQ0ODg4CAgIHBwcFBQUJCQkLCwsMnJyfPz8/n5+Xh4eBISEo2NjSQkJIeH
38
+ h9vb22ZmZjk5OZaWlicnJx4eHi0tLQkJCQYGBqKiovz8/KWlpZmZmYqKisPD
39
+ w/b29pOTk2lpad7e3jY2NoSEhAMDAzMzM9jY2GNjY11dXf///wAAAAAAAAAA
40
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFj
41
+ a2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQi
42
+ Pz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0
43
+ az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAy
44
+ LzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0
45
+ dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8
46
+ cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6
47
+ Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8v
48
+ bnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDov
49
+ L25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1w
50
+ OkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHht
51
+ cE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0UwNDQ4NzRENTk4MTFFMkFCNDFB
52
+ MDcyODNBREQxOUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0UwNDQ4
53
+ NzVENTk4MTFFMkFCNDFBMDcyODNBREQxOUUiPiA8eG1wTU06RGVyaXZlZEZy
54
+ b20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozRTA0NDg3MkQ1OTgxMUUy
55
+ QUI0MUEwNzI4M0FERDE5RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoz
56
+ RTA0NDg3M0Q1OTgxMUUyQUI0MUEwNzI4M0FERDE5RSIvPiA8L3JkZjpEZXNj
57
+ cmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVu
58
+ ZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb
59
+ 2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+u
60
+ rayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KB
61
+ gH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVU
62
+ U1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgn
63
+ JiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEA
64
+ ADQALAAAAACWAJYAAAb/QJpwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+Cw
65
+ eEwum7ks06YFArjf8Lh8Tq/b7/j8HdTamFhjExAJeoWGh4iJeQkQE14UGRaK
66
+ k5SVlnIWGRRbEh6Xn6Cheh4SWSUhoqmqqyEjVxWrsbKgFSRUsLO5uokVUyW7
67
+ wMF5JVESqMLIyW8ipU4UGMrRyRibTRnS2MIZTROS2d+5Fo5LF+DmsxdMhOfs
68
+ qQlLGu3yohpKHfP4lx1KMvn+kwqUcPhH8BAHJR8KKszzQYmAhRDrCHAYsWKc
69
+ iUkeWtyIEYnGjRU7HvkIEqJIIyRLKjxZJKVKgiyJuHzpL+aQmTTx2RSCM6e8
70
+ /500evpkB1TopAIKEAwIwLRpgAEQHhQYWqioqAcRnGrdiuAAVTxWPx1YsLXs
71
+ 1gFeLS01y7apgQFQCRxoICtspQIQ2uplGmEqpbV7AwdggECBKruTGpAV3JbB
72
+ OkWAGQc2QMDvJ8SJEhiQvNcwZM6SDTwAhfmQZtB7CXxGzRjBZYqKCixm3dY1
73
+ osi09Q6wPKl0oay59do2hDs42wGWfOd5YLzzoeLNy0KopBwPg+h6PeuBjl3r
74
+ 6N6wDynorvcxHu7kmRrgfai6HeDpy0YohD6+akXu68Q3u4C9nfrprYdfeIUc
75
+ IFlhByTowGx79UXcfmw5MGBGiBAgmAFpxXHAdcLdBv8hfxN6VOFk5sVRAAK1
76
+ JQIgU/cBkOCLDkDAIWN0IZLfHCjuNd0dOW61o4ep3fHAjM7ZSOB2gWVoR49N
77
+ aQekXi3WIZtgPxpyoxx57fUdHkw6+WRbUdbRwGZ7IWckhYdYuNdwd0wZgJdf
78
+ shVmHWrqxUAiV8bBXGA14pGAY2oFNicdCQiG55F5NCBYf8GsGMCgdBh6poiI
79
+ MNgWo7s4CukckraHaB4OMIZpLpoW0qmVn+JRgGSjylJqoqdWlSqXkgE6y6t4
80
+ jLeXAYeiiUgBZF5YYiq43kHkcb1SmkionMEZSrF1MJnipCP9BdqmgQZpxwGO
81
+ MiUhtShRAixobD4r6BsFvHj/AAEIHLtXn6j6qshpnLX6SbfY3ZlstZUYCJqt
82
+ oOAb3bfgtnSJrpyJZu6HWgm4b7gHs0Zwtgw3he0deeaBMGflTiJwcAz4J6u8
83
+ lhwQrGS7UVzxsPEq+wm99cKrYsVMOdsyv6EkYKmw1lZs880Qi+Jmwiwj+aEB
84
+ PwNtsConomZA0ed9uADUnpIsSp2hUV3Hx4wZMHFys36iwMmLinwH17tWJkrG
85
+ k/wJmpkPdncxeFYzvbO29JHX8Wt1ryItn3FD+TdbSpIWdirMMgZ3HpqOKdji
86
+ hvcdy8ZJ5h0k1nptGbnLuzxAdlvzGQ0lAOMGpm8obIMC815my/Eq5W19Dbbk
87
+ s+wZ/1jScODqrlkO8815MIl3yPi5bvhLvO84J3P3VguIDmbuNG6e/CQOYIiI
88
+ 7Xo5LycchQq2d4jTI5LAWpDr8XlZrUOPtxuDm6X1yL8bgrnsUe9VOB3QKvo4
89
+ 8kEfsuFWBpBZ/fRyvzlACwCYa0sBCyaTX7UvAM0zxPm2ssA4HLB0ezkdJVI3
90
+ NuHlwXjZG9763hC87MwufnRoQLe+Z6LdlUV7ZoGUCwGYvjxkbIJmcZCUlsc8
91
+ GJYFUtgb3QYPB4cHmoUBmoPD/7znw61sqlsBHCLt4qA/zjBALjDioVlw94YD
92
+ vgGEHnzY0vSQQJrVsIvHwxFj3icRIsKhADPcT+hEKMQUKv+ObiisQxArVkHX
93
+ pXEOZTRLH+2QOgAYkTzl+88f5YBBO4Gvf3oYGsPYiMYRzqGEbeHiHAoJgNXt
94
+ h36KtOQc4uiU3sEvfHoAY3pYuLVFzmGP26taHnMFoQg+x5UGvJAAMebGOpgs
95
+ PTq8pSjnoEq2sHKTvayDzrpTJWHWkVaCoaQbOGmiLIFskGfD5RyqWCalNfAS
96
+ DYAPaChzxmwOkw6BLAs230DNFEIAh2VZgALKmZN22iEBBIjA3d4CgXl+BSzJ
97
+ /Gcy7CnQWRC0oLE4KEIPE9CF7kKhDkVdQyNq0IlSNKEWvShDp6jRh2a0oxLl
98
+ KEgrKtKRYrSkJt0oEhKS0mQ0JAmsA2kpMg6SBE3KVBQzsMdNhbGPJMRjp8CI
99
+ wRKkCVRKvIMcRc1FOpbQjaTGQhzWcOoqttGEZ0hVFNR4ggREcNVPMCMKI+jq
100
+ JVwhBVyIVRG9mAIJVnDWRKzAFlU4wQvaqocXnCALKIAGXe2AARRsIQUuMEpX
101
+ BeCCFHjBABdow14BAIILGGAMGlDBBmDgiaR6AAYbUEE9zsDZznr2s6ANrWhH
102
+ S9rSmva0qE2tarEQBAA7
103
+ http_version:
104
+ recorded_at: Thu, 22 Aug 2013 00:13:42 GMT
105
+ recorded_with: VCR 2.5.0
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,8 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
8
  SimpleCov.start
9
9
 
10
10
  require 'worochi'
11
+ require 'filemagic'
12
+ require 'awesome_print'
11
13
  require 'digest'
12
14
  require 'vcr'
13
15
  require 'webmock/rspec'
@@ -33,6 +35,9 @@ VCR.configure do |c|
33
35
  c.filter_sensitive_data('<DROPBOX_TOKEN>') { ENV['DROPBOX_TEST_TOKEN'] }
34
36
  c.filter_sensitive_data('<DROPBOX_ID>') { ENV['DROPBOX_ID'] }
35
37
  c.filter_sensitive_data('<DROPBOX_SECRET>') { ENV['DROPBOX_SECRET'] }
38
+ c.filter_sensitive_data('<GOOGLE_TOKEN>') { ENV['GOOGLE_TEST_TOKEN'] }
39
+ c.filter_sensitive_data('<GOOGLE_ID>') { ENV['GOOGLE_ID'] }
40
+ c.filter_sensitive_data('<GOOGLE_SECRET>') { ENV['GOOGLE_SECRET'] }
36
41
  end
37
42
 
38
43
  RSpec.configure do |c|
@@ -1,5 +1,5 @@
1
1
  shared_examples_for 'a service agent' do
2
- describe '#default_options' do
2
+ describe '#default_options', :vcr do
3
3
  it 'has the required options' do
4
4
  (required_keys + [:dir, :service]).each do |key|
5
5
  expect(agent.send(:default_options)).to include(key)
@@ -7,7 +7,7 @@ shared_examples_for 'a service agent' do
7
7
  end
8
8
  end
9
9
 
10
- describe '#init_client' do
10
+ describe '#init_client', :vcr do
11
11
  it 'returns the client' do
12
12
  client = agent.init_client
13
13
  expect(client.class).to be(client_class)
@@ -102,4 +102,10 @@ describe Worochi::Agent::Github do
102
102
  expect(ls).to include('abc.txt')
103
103
  end
104
104
  end
105
+
106
+ describe '#delete' do
107
+ it 'does not allow file deletion' do
108
+ expect{agent.delete('test')}.to raise_error(Worochi::Error)
109
+ end
110
+ end
105
111
  end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe Worochi::Agent::GoogleDrive do
4
+ let(:required_keys) { [] }
5
+ let(:client_class) { Google::APIClient }
6
+ let(:folder_id) { '0B30CGkhrN5qzaUJGbFNDRjl0S2M' }
7
+
8
+ let(:agent) do
9
+ Worochi::Agent::GoogleDrive.new(
10
+ token: ENV['GOOGLE_TEST_TOKEN'],
11
+ dir: '/worochi/test')
12
+ end
13
+
14
+ before do
15
+ agent.clear_cache
16
+ end
17
+
18
+ it_should_behave_like 'a service agent'
19
+
20
+ describe '#get_item_id', :vcr do
21
+ it 'retrieves the item ID' do
22
+ expect(agent.send(:get_item_id, '/worochi/test')).to eq(folder_id)
23
+ # test cache
24
+ expect(agent.send(:get_item_id, '/worochi/test')).to eq(folder_id)
25
+ end
26
+ it 'returns the root ID' do
27
+ expect(agent.send(:get_item_id, '/')).to eq('root')
28
+ end
29
+ end
30
+
31
+ describe '#delete', :vcr do
32
+ it 'deletes a file' do
33
+ agent.send(:insert_file, 'to_delete', 'root')
34
+ expect(agent.delete('/to_delete')).to be(true)
35
+ end
36
+ it 'raises error on bad token' do
37
+ bad_agent = Worochi::Agent::GoogleDrive.new(token: 'badtoken')
38
+ expect{bad_agent.delete('test')}.to raise_error(Worochi::Error)
39
+ end
40
+ end
41
+
42
+ describe '#push_item', :vcr do
43
+ it 'pushes a single item' do
44
+ end
45
+ it 'creates new directories as needed' do
46
+ item = Worochi::Item.open_single(
47
+ source: local.source,
48
+ path:'aaa/bbb/ccc.txt')
49
+ agent.push_item(item)
50
+ expect(agent.folders).to include('aaa')
51
+ expect(agent.folders('aaa')).to include('bbb')
52
+ expect(agent.files('aaa/bbb')).to include('ccc.txt')
53
+ expect(agent.delete('aaa')).to be(true)
54
+ end
55
+
56
+ it 'raises error on bad token' do
57
+ bad_agent = Worochi::Agent::GoogleDrive.new(token: 'badtoken')
58
+ item = Worochi::Item.open_single(local.source)
59
+ expect{bad_agent.push_item(item)}.to raise_error(Worochi::Error)
60
+ end
61
+ end
62
+
63
+ describe '#insert_file', :vcr do
64
+ it 'creates a new folder to root' do
65
+ agent.send(:insert_file, 'worochi_insertion_test', folder_id)
66
+ expect(agent.folders).to include('worochi_insertion_test')
67
+ expect(agent.delete('worochi_insertion_test')).to be(true)
68
+ end
69
+
70
+ it 'uploads a file' do
71
+ item = Worochi::Item.open_single(
72
+ source: local.source,
73
+ path: 'worochi_test.txt')
74
+ agent.send(:insert_file, item, 'root')
75
+ expect(agent.files('/')).to include('worochi_test.txt')
76
+ expect(agent.delete('/worochi_test.txt')).to be(true)
77
+ end
78
+ end
79
+ end
@@ -2,13 +2,25 @@ require 'spec_helper'
2
2
 
3
3
  class Worochi
4
4
  describe Agent do
5
- let(:agent) { Agent.new({ service: :github, token: '' }) }
5
+ let(:agent) { Agent.new({ service: :github, token: '', dir: '/folder' }) }
6
6
  describe '.new' do
7
7
  it 'initializes the right child class' do
8
8
  expect(agent.class).to be(Agent::Github)
9
9
  end
10
10
  end
11
11
 
12
+ describe '.full_path' do
13
+ let(:item) { Item.open_single(local.source) }
14
+ it 'accepts relative paths' do
15
+ item.path = 'test'
16
+ expect(agent.send(:full_path, item.path)).to eq('/folder/test')
17
+ end
18
+ it 'accepts absolute paths' do
19
+ item.path = '/test'
20
+ expect(agent.send(:full_path, item.path)).to eq('/test')
21
+ end
22
+ end
23
+
12
24
  describe '#name' do
13
25
  it 'returns the display name for the agent' do
14
26
  expect(agent.name).to eq('GitHub')
@@ -98,4 +98,22 @@ describe Worochi::Item do
98
98
  expect(item.read.size).to eq(local.file_size)
99
99
  end
100
100
  end
101
+
102
+ describe '#content_type', :vcr do
103
+ it 'detects the MIME type' do
104
+ item = Worochi::Item.open_single(local.source)
105
+ expect(item.content_type).to eq('text/plain')
106
+ item = Worochi::Item.open_single(remote.source)
107
+ expect(item.content_type).to eq('image/gif')
108
+ end
109
+ it 'falls back to file name when ruby-filemagic is not loaded' do
110
+ temp = FileMagic
111
+ Object.send(:remove_const, :FileMagic)
112
+ item = Worochi::Item.open_single(local.source)
113
+ expect(item.content_type).to eq('application/octet-stream')
114
+ item = Worochi::Item.open_single(remote.source)
115
+ expect(item.content_type).to eq('image/gif')
116
+ FileMagic = temp
117
+ end
118
+ end
101
119
  end
@@ -39,7 +39,7 @@ describe Worochi::OAuth do
39
39
  refresh_token: "bbbbb",
40
40
  expires_at: 1376702712
41
41
  }
42
- expect(auth.refresh!(token)).to include(:refresh_token)
42
+ expect{auth.refresh(token)}.to raise_error(Worochi::Error)
43
43
  end
44
44
  end
45
45
  end
data/worochi.gemspec CHANGED
@@ -24,9 +24,12 @@ Gem::Specification.new do |s|
24
24
  s.add_runtime_dependency('hashie')
25
25
  s.add_runtime_dependency('oauth2')
26
26
  s.add_runtime_dependency('aws-sdk')
27
+ s.add_runtime_dependency('mime-types')
27
28
  s.add_runtime_dependency('dropbox-sdk') # Dropbox
29
+ s.add_runtime_dependency('google-api-client') # Google
28
30
  s.add_runtime_dependency('octokit', ['1.25.0']) # GitHub
29
31
 
32
+ s.add_development_dependency('ruby-filemagic')
30
33
  s.add_development_dependency('rspec', ['~> 2.14.1'])
31
34
  s.add_development_dependency('vcr', ['~> 2.5.0'])
32
35
  s.add_development_dependency('webmock', ['~> 1.9.3'])
@@ -35,6 +38,7 @@ Gem::Specification.new do |s|
35
38
  s.add_development_dependency('coveralls')
36
39
  s.add_development_dependency('rake')
37
40
  s.add_development_dependency('redcarpet')
41
+ s.add_development_dependency('awesome_print')
38
42
 
39
43
  s.post_install_message = <<-MESSAGE
40
44
  Worochi says, \033[33;1m"RAWRRRRR!!!"\033[0m
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: worochi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raven Jiang
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mime-types
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: dropbox-sdk
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - '>='
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: google-api-client
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: octokit
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +108,20 @@ dependencies:
80
108
  - - '='
81
109
  - !ruby/object:Gem::Version
82
110
  version: 1.25.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: ruby-filemagic
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: rspec
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +234,20 @@ dependencies:
192
234
  - - '>='
193
235
  - !ruby/object:Gem::Version
194
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: awesome_print
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '>='
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '>='
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
195
251
  description: Provides a standard way to interface with Ruby API wrappers provided
196
252
  by various cloud storage services such as Dropbox and Google Drive.
197
253
  email:
@@ -210,6 +266,7 @@ files:
210
266
  - lib/worochi/config.rb
211
267
  - lib/worochi/agent/github.rb
212
268
  - lib/worochi/agent/#example.rb
269
+ - lib/worochi/agent/google_drive.rb
213
270
  - lib/worochi/agent/dropbox.rb
214
271
  - lib/worochi/helper.rb
215
272
  - lib/worochi/item.rb
@@ -229,6 +286,7 @@ files:
229
286
  - spec/worochi/helper/github_helper_spec.rb
230
287
  - spec/worochi/agent/dropbox_spec.rb
231
288
  - spec/worochi/agent/github_spec.rb
289
+ - spec/worochi/agent/google_drive_spec.rb
232
290
  - spec/worochi/config_spec.rb
233
291
  - spec/worochi/agent_spec.rb
234
292
  - spec/worochi/oauth_spec.rb
@@ -270,6 +328,26 @@ files:
270
328
  - spec/cassettes/Worochi_Agent_Github/it_should_behave_like_a_service_agent/_folders/accepts_a_different_relative_path.yml
271
329
  - spec/cassettes/Worochi_Agent_Github/_source_branch/retrieves_the_master_branch_correctly.yml
272
330
  - spec/cassettes/Worochi_Agent_Github/_repos/lists_the_repos.yml
331
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_init_client/returns_the_client.yml
332
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/shows_detailed_listing_including_the_required_fields.yml
333
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/contains_folder1_and_file1.yml
334
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/raises_error_on_invalid_path.yml
335
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/does_not_contain_folder1.yml
336
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/contains_file1.yml
337
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/accepts_a_different_relative_path.yml
338
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_default_options/has_the_required_options.yml
339
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/contains_folder1.yml
340
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/does_not_contain_file1.yml
341
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/accepts_a_different_relative_path.yml
342
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/uploads_a_file.yml
343
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/creates_a_new_folder_to_root.yml
344
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/retrieves_the_item_ID.yml
345
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/returns_the_root_ID.yml
346
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/pushes_a_single_item.yml
347
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/raises_error_on_bad_token.yml
348
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/creates_new_directories_as_needed.yml
349
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_delete/deletes_a_file.yml
350
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_delete/raises_error_on_bad_token.yml
273
351
  - spec/cassettes/Worochi/_push/pushes_with_agents.yml
274
352
  - spec/cassettes/Worochi_Item/_open_single/accepts_a_String.yml
275
353
  - spec/cassettes/Worochi_Item/_open_single/works_with_AWS_S3_paths.yml
@@ -281,6 +359,8 @@ files:
281
359
  - spec/cassettes/Worochi_Item/_open/with_multiple_files/accepts_Hash_parameters.yml
282
360
  - spec/cassettes/Worochi_Item/_open/opens_a_single_file/with_String_parameter.yml
283
361
  - spec/cassettes/Worochi_Item/_open/opens_a_single_file/with_Hash_parameter.yml
362
+ - spec/cassettes/Worochi_Item/_content_type/detects_the_MIME_type.yml
363
+ - spec/cassettes/Worochi_Item/_content_type/falls_back_to_file_name_when_ruby-filemagic_is_not_loaded.yml
284
364
  - spec/cassettes/Worochi_OAuth/_flow_end/rejects_bad_code.yml
285
365
  - spec/cassettes/Worochi_OAuth/_refresh/tries_to_refresh_the_access_token.yml
286
366
  homepage: https://github.com/Pixelapse/worochi
@@ -315,6 +395,7 @@ test_files:
315
395
  - spec/worochi/helper/github_helper_spec.rb
316
396
  - spec/worochi/agent/dropbox_spec.rb
317
397
  - spec/worochi/agent/github_spec.rb
398
+ - spec/worochi/agent/google_drive_spec.rb
318
399
  - spec/worochi/config_spec.rb
319
400
  - spec/worochi/agent_spec.rb
320
401
  - spec/worochi/oauth_spec.rb
@@ -356,6 +437,26 @@ test_files:
356
437
  - spec/cassettes/Worochi_Agent_Github/it_should_behave_like_a_service_agent/_folders/accepts_a_different_relative_path.yml
357
438
  - spec/cassettes/Worochi_Agent_Github/_source_branch/retrieves_the_master_branch_correctly.yml
358
439
  - spec/cassettes/Worochi_Agent_Github/_repos/lists_the_repos.yml
440
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_init_client/returns_the_client.yml
441
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/shows_detailed_listing_including_the_required_fields.yml
442
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files_and_folders/contains_folder1_and_file1.yml
443
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/raises_error_on_invalid_path.yml
444
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/does_not_contain_folder1.yml
445
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/contains_file1.yml
446
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_files/accepts_a_different_relative_path.yml
447
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_default_options/has_the_required_options.yml
448
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/contains_folder1.yml
449
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/does_not_contain_file1.yml
450
+ - spec/cassettes/Worochi_Agent_GoogleDrive/it_should_behave_like_a_service_agent/_folders/accepts_a_different_relative_path.yml
451
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/uploads_a_file.yml
452
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_insert_file/creates_a_new_folder_to_root.yml
453
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/retrieves_the_item_ID.yml
454
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_get_item_id/returns_the_root_ID.yml
455
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/pushes_a_single_item.yml
456
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/raises_error_on_bad_token.yml
457
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_push_item/creates_new_directories_as_needed.yml
458
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_delete/deletes_a_file.yml
459
+ - spec/cassettes/Worochi_Agent_GoogleDrive/_delete/raises_error_on_bad_token.yml
359
460
  - spec/cassettes/Worochi/_push/pushes_with_agents.yml
360
461
  - spec/cassettes/Worochi_Item/_open_single/accepts_a_String.yml
361
462
  - spec/cassettes/Worochi_Item/_open_single/works_with_AWS_S3_paths.yml
@@ -367,6 +468,8 @@ test_files:
367
468
  - spec/cassettes/Worochi_Item/_open/with_multiple_files/accepts_Hash_parameters.yml
368
469
  - spec/cassettes/Worochi_Item/_open/opens_a_single_file/with_String_parameter.yml
369
470
  - spec/cassettes/Worochi_Item/_open/opens_a_single_file/with_Hash_parameter.yml
471
+ - spec/cassettes/Worochi_Item/_content_type/detects_the_MIME_type.yml
472
+ - spec/cassettes/Worochi_Item/_content_type/falls_back_to_file_name_when_ruby-filemagic_is_not_loaded.yml
370
473
  - spec/cassettes/Worochi_OAuth/_flow_end/rejects_bad_code.yml
371
474
  - spec/cassettes/Worochi_OAuth/_refresh/tries_to_refresh_the_access_token.yml
372
475
  has_rdoc: