uricp 0.0.1

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 (47) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +16 -0
  4. data/README.md +31 -0
  5. data/README.rdoc +23 -0
  6. data/Rakefile +66 -0
  7. data/bin/segment_upload +66 -0
  8. data/bin/uricp +103 -0
  9. data/features/auth_download.feature +106 -0
  10. data/features/cacheable_from_uri.feature +71 -0
  11. data/features/documented_options.feature +73 -0
  12. data/features/remote_upload.feature +49 -0
  13. data/features/segmented_upload.feature +27 -0
  14. data/features/segmented_upload_options.feature +65 -0
  15. data/features/step_definitions/orbit_steps.rb +194 -0
  16. data/features/step_definitions/uricp_steps.rb +34 -0
  17. data/features/support/env.rb +20 -0
  18. data/features/userid_download.feature +21 -0
  19. data/lib/segment_upload.rb +38 -0
  20. data/lib/uricp/curl_primitives.rb +45 -0
  21. data/lib/uricp/orbit_auth.rb +59 -0
  22. data/lib/uricp/segmenter.rb +88 -0
  23. data/lib/uricp/strategy/cache_common.rb +48 -0
  24. data/lib/uricp/strategy/cached_get.rb +48 -0
  25. data/lib/uricp/strategy/cleaner.rb +28 -0
  26. data/lib/uricp/strategy/common.rb +108 -0
  27. data/lib/uricp/strategy/local_convert.rb +36 -0
  28. data/lib/uricp/strategy/local_convert_common.rb +29 -0
  29. data/lib/uricp/strategy/local_link.rb +31 -0
  30. data/lib/uricp/strategy/piped_cache.rb +40 -0
  31. data/lib/uricp/strategy/piped_cache_convert.rb +45 -0
  32. data/lib/uricp/strategy/piped_compress.rb +30 -0
  33. data/lib/uricp/strategy/piped_decompress.rb +35 -0
  34. data/lib/uricp/strategy/piped_local_compress.rb +30 -0
  35. data/lib/uricp/strategy/piped_local_get.rb +29 -0
  36. data/lib/uricp/strategy/piped_local_put.rb +29 -0
  37. data/lib/uricp/strategy/piped_remote_get.rb +38 -0
  38. data/lib/uricp/strategy/pruner.rb +22 -0
  39. data/lib/uricp/strategy/remote_put.rb +47 -0
  40. data/lib/uricp/strategy/segmented_remote_put.rb +52 -0
  41. data/lib/uricp/strategy/sweeper.rb +28 -0
  42. data/lib/uricp/uri_strategy.rb +47 -0
  43. data/lib/uricp/version.rb +4 -0
  44. data/lib/uricp.rb +56 -0
  45. data/spec/something_spec.rb +5 -0
  46. data/uricp.gemspec +32 -0
  47. metadata +281 -0
@@ -0,0 +1,47 @@
1
+ require 'uri'
2
+
3
+ module Uricp
4
+
5
+ class UriStrategy
6
+
7
+ include Methadone::CLILogging
8
+
9
+ def self.choose_strategy(options)
10
+ current = options.reject {|k,v| k.is_a? Symbol}
11
+ strategy_list = []
12
+ while STRATEGIES.detect {|klass| @strategy = klass.new(current).appropriate? }
13
+ debug "#{self.name}: Selected strategy #{@strategy.class.name}"
14
+ strategy_list << @strategy
15
+ current = @strategy.proposed_options
16
+ end
17
+ raise Uricp::UnsupportedURLtype, "Unsupported transfer from #{options['from_uri']} to #{options['to_uri']}" if incomplete_strategy?(strategy_list)
18
+ strategy_list
19
+ end
20
+
21
+ def self.incomplete_strategy?(list)
22
+ list.empty?
23
+ end
24
+
25
+ private
26
+
27
+ #This is an ordered list from the most specific to the most general
28
+ STRATEGIES = [
29
+ Strategy::CachedGet,
30
+ Strategy::PipedRemoteGet,
31
+ Strategy::PipedCacheConvert,
32
+ Strategy::PipedCache,
33
+ Strategy::PipedDecompress,
34
+ Strategy::LocalConvert,
35
+ Strategy::LocalLink,
36
+ Strategy::PipedCompress,
37
+ Strategy::SegmentedRemotePut,
38
+ Strategy::RemotePut,
39
+ Strategy::PipedLocalCompress,
40
+ Strategy::PipedLocalGet,
41
+ Strategy::PipedLocalPut,
42
+ Strategy::Cleaner,
43
+ Strategy::Sweeper,
44
+ ]
45
+
46
+ end
47
+ end
@@ -0,0 +1,4 @@
1
+ module Uricp
2
+ VERSION = "0.0.1"
3
+ DEFAULT_SEGMENT_SIZE = "5 GiB"
4
+ end
data/lib/uricp.rb ADDED
@@ -0,0 +1,56 @@
1
+ require 'uricp/version'
2
+ require 'uricp/curl_primitives'
3
+ require 'uricp/strategy/common'
4
+ require 'uricp/strategy/cache_common'
5
+ require 'uricp/strategy/local_convert_common'
6
+ require 'uricp/strategy/local_convert'
7
+ require 'uricp/strategy/local_link'
8
+ require 'uricp/strategy/piped_cache'
9
+ require 'uricp/strategy/piped_cache_convert'
10
+ require 'uricp/strategy/piped_local_get'
11
+ require 'uricp/strategy/piped_local_put'
12
+ require 'uricp/strategy/piped_remote_get'
13
+ require 'uricp/strategy/piped_compress'
14
+ require 'uricp/strategy/piped_decompress'
15
+ require 'uricp/strategy/piped_local_compress'
16
+ require 'uricp/strategy/segmented_remote_put'
17
+ require 'uricp/strategy/remote_put'
18
+ require 'uricp/strategy/cached_get'
19
+ require 'uricp/strategy/sweeper'
20
+ require 'uricp/strategy/cleaner'
21
+ require 'uricp/uri_strategy'
22
+ require 'uricp/orbit_auth'
23
+
24
+ module Uricp
25
+
26
+ UnsupportedURLtype = Class.new(ArgumentError)
27
+ MissingCache = Class.new(ArgumentError)
28
+
29
+ end
30
+
31
+ require 'tempfile'
32
+ class Dir
33
+ module Tmpname
34
+ unless respond_to? :make_tmpname
35
+
36
+ module_function
37
+ def make_tmpname(prefix_suffix, n)
38
+ case prefix_suffix
39
+ when String
40
+ prefix = prefix_suffix
41
+ suffix = ""
42
+ when Array
43
+ prefix = prefix_suffix[0]
44
+ suffix = prefix_suffix[1]
45
+ else
46
+ raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
47
+ end
48
+ t = Time.now.strftime("%Y%m%d")
49
+ path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
50
+ path << "-#{n}" if n
51
+ path << suffix
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,5 @@
1
+ describe "TestSomething" do
2
+ it "should be true" do
3
+ true.should == true
4
+ end
5
+ end
data/uricp.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'uricp/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "uricp"
8
+ spec.version = Uricp::VERSION
9
+ spec.authors = ["Neil Wilson"]
10
+ spec.email = ["neil@aldur.co.uk"]
11
+ spec.summary = %q{Copy one URL to another with optional cacheing}
12
+ spec.description = %q{Copy one URL to another with optional cacheing}
13
+ spec.homepage = ""
14
+ spec.license = "gplv3"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency('rdoc')
24
+ spec.add_development_dependency('aruba')
25
+ spec.add_development_dependency('rake')
26
+ spec.add_dependency('methadone', '~> 1.8.0')
27
+ spec.add_dependency('open4', '~> 1.3.0')
28
+ spec.add_dependency('filesize', '= 0.0.2')
29
+ spec.add_dependency('sendfile', '~> 1.2.0')
30
+ spec.add_development_dependency('rspec', '~> 2.99')
31
+ spec.add_development_dependency('inifile', '~> 3.0')
32
+ end
metadata ADDED
@@ -0,0 +1,281 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uricp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Neil Wilson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-01-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.7'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.7'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '10.0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '10.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: aruba
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rake
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: methadone
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.8.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.8.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: open4
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 1.3.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 1.3.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: filesize
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - '='
132
+ - !ruby/object:Gem::Version
133
+ version: 0.0.2
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - '='
140
+ - !ruby/object:Gem::Version
141
+ version: 0.0.2
142
+ - !ruby/object:Gem::Dependency
143
+ name: sendfile
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 1.2.0
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 1.2.0
158
+ - !ruby/object:Gem::Dependency
159
+ name: rspec
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: '2.99'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: '2.99'
174
+ - !ruby/object:Gem::Dependency
175
+ name: inifile
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: '3.0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: '3.0'
190
+ description: Copy one URL to another with optional cacheing
191
+ email:
192
+ - neil@aldur.co.uk
193
+ executables:
194
+ - segment_upload
195
+ - uricp
196
+ extensions: []
197
+ extra_rdoc_files: []
198
+ files:
199
+ - .gitignore
200
+ - Gemfile
201
+ - LICENSE.txt
202
+ - README.md
203
+ - README.rdoc
204
+ - Rakefile
205
+ - bin/segment_upload
206
+ - bin/uricp
207
+ - features/auth_download.feature
208
+ - features/cacheable_from_uri.feature
209
+ - features/documented_options.feature
210
+ - features/remote_upload.feature
211
+ - features/segmented_upload.feature
212
+ - features/segmented_upload_options.feature
213
+ - features/step_definitions/orbit_steps.rb
214
+ - features/step_definitions/uricp_steps.rb
215
+ - features/support/env.rb
216
+ - features/userid_download.feature
217
+ - lib/segment_upload.rb
218
+ - lib/uricp.rb
219
+ - lib/uricp/curl_primitives.rb
220
+ - lib/uricp/orbit_auth.rb
221
+ - lib/uricp/segmenter.rb
222
+ - lib/uricp/strategy/cache_common.rb
223
+ - lib/uricp/strategy/cached_get.rb
224
+ - lib/uricp/strategy/cleaner.rb
225
+ - lib/uricp/strategy/common.rb
226
+ - lib/uricp/strategy/local_convert.rb
227
+ - lib/uricp/strategy/local_convert_common.rb
228
+ - lib/uricp/strategy/local_link.rb
229
+ - lib/uricp/strategy/piped_cache.rb
230
+ - lib/uricp/strategy/piped_cache_convert.rb
231
+ - lib/uricp/strategy/piped_compress.rb
232
+ - lib/uricp/strategy/piped_decompress.rb
233
+ - lib/uricp/strategy/piped_local_compress.rb
234
+ - lib/uricp/strategy/piped_local_get.rb
235
+ - lib/uricp/strategy/piped_local_put.rb
236
+ - lib/uricp/strategy/piped_remote_get.rb
237
+ - lib/uricp/strategy/pruner.rb
238
+ - lib/uricp/strategy/remote_put.rb
239
+ - lib/uricp/strategy/segmented_remote_put.rb
240
+ - lib/uricp/strategy/sweeper.rb
241
+ - lib/uricp/uri_strategy.rb
242
+ - lib/uricp/version.rb
243
+ - spec/something_spec.rb
244
+ - uricp.gemspec
245
+ homepage: ''
246
+ licenses:
247
+ - gplv3
248
+ post_install_message:
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ none: false
254
+ requirements:
255
+ - - ! '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ required_rubygems_version: !ruby/object:Gem::Requirement
259
+ none: false
260
+ requirements:
261
+ - - ! '>='
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ requirements: []
265
+ rubyforge_project:
266
+ rubygems_version: 1.8.23
267
+ signing_key:
268
+ specification_version: 3
269
+ summary: Copy one URL to another with optional cacheing
270
+ test_files:
271
+ - features/auth_download.feature
272
+ - features/cacheable_from_uri.feature
273
+ - features/documented_options.feature
274
+ - features/remote_upload.feature
275
+ - features/segmented_upload.feature
276
+ - features/segmented_upload_options.feature
277
+ - features/step_definitions/orbit_steps.rb
278
+ - features/step_definitions/uricp_steps.rb
279
+ - features/support/env.rb
280
+ - features/userid_download.feature
281
+ - spec/something_spec.rb