apache_upload_merger 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea995b05557c1680e8ba7cb1cde93aa53450f576
4
+ data.tar.gz: 07fb98df77c5e5f17fbd2fe3210ba3738ca45aaf
5
+ SHA512:
6
+ metadata.gz: 934b7fa5cb575a44af96a732af7d31e1e2fd2a991559d9c09afc348b449df840f474972f746d380512d1f8b584c395b6f3a208917b63e37a11fd7c683a19bb92
7
+ data.tar.gz: d7cb11bf89f4f7af812ee9ee47d906028bbcb86a6037c43c30539b3b5f1e06d7a07e3e08dbba707cc587994b765c00126bb36ae2a88b12f850efcbb708ba72e9
data/ChangeLog CHANGED
@@ -1,3 +1,5 @@
1
+ # markup: rd
2
+
1
3
  = Revision history for apache_upload_merger
2
4
 
3
5
  == 0.0.1 [2010-02-22]
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to apache_upload_merger version 0.0.2
5
+ This documentation refers to apache_upload_merger version 0.0.3
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -31,19 +31,22 @@ Place the following snippet in your Apache config:
31
31
  == LINKS
32
32
 
33
33
  <b></b>
34
- Documentation:: <http://blackwinter.github.com/apache_upload_merger>
35
- Source code:: <http://github.com/blackwinter/apache_upload_merger>
34
+ Documentation:: http://blackwinter.github.com/apache_upload_merger
35
+ Source code:: http://github.com/blackwinter/apache_upload_merger
36
+ RubyGem:: http://rubygems.org/gems/apache_upload_merger
36
37
 
37
38
 
38
39
  == AUTHORS
39
40
 
40
- * Jens Wille <mailto:jens.wille@uni-koeln.de>
41
+ * Jens Wille <mailto:jens.wille@gmail.com>
41
42
 
42
43
 
43
44
  == LICENSE AND COPYRIGHT
44
45
 
45
- Copyright (C) 2010 University of Cologne,
46
- Albertus-Magnus-Platz, 50932 Cologne, Germany
46
+ Copyright (C) 2010-2012 University of Cologne,
47
+ Albertus-Magnus-Platz, 50923 Cologne, Germany
48
+
49
+ Copyright (C) 2013 Jens Wille
47
50
 
48
51
  apache_upload_merger is free software: you can redistribute it and/or modify it under
49
52
  the terms of the GNU General Public License as published by the Free Software
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require %q{lib/apache/upload_merger/version}
1
+ require File.expand_path(%q{../lib/apache/upload_merger/version}, __FILE__)
2
2
 
3
3
  begin
4
4
  require 'hen'
@@ -8,14 +8,13 @@ begin
8
8
  :name => %q{apache_upload_merger},
9
9
  :version => Apache::UploadMerger::VERSION,
10
10
  :summary => %q{Apache module providing upload merging functionality.},
11
- :homepage => 'http://github.com/blackwinter/apache_upload_merger',
12
- :files => FileList['lib/**/*.rb'].to_a,
13
- :extra_files => FileList['[A-Z]*'].to_a,
11
+ :author => %q{Jens Wille},
12
+ :email => %q{jens.wille@gmail.com},
13
+ :license => %q{AGPL-3.0},
14
+ :homepage => :blackwinter,
14
15
  :dependencies => %w[]
15
16
  }
16
17
  }}
17
- rescue LoadError
18
- abort "Please install the 'hen' gem first."
18
+ rescue LoadError => err
19
+ abort "Please install the `hen' gem first. (#{err})"
19
20
  end
20
-
21
- ### Place your custom Rake tasks here.
@@ -4,12 +4,14 @@
4
4
  # apache_upload_merger -- Apache module providing upload merging #
5
5
  # functionality #
6
6
  # #
7
- # Copyright (C) 2010 University of Cologne, #
8
- # Albertus-Magnus-Platz, #
9
- # 50932 Cologne, Germany #
7
+ # Copyright (C) 2010-2012 University of Cologne, #
8
+ # Albertus-Magnus-Platz, #
9
+ # 50923 Cologne, Germany #
10
+ # #
11
+ # Copyright (C) 2013 Jens Wille #
10
12
  # #
11
13
  # Authors: #
12
- # Jens Wille <jens.wille@uni-koeln.de> #
14
+ # Jens Wille <jens.wille@gmail.com> #
13
15
  # #
14
16
  # apache_upload_merger is free software: you can redistribute it and/or #
15
17
  # modify it under the terms of the GNU General Public License as published by #
@@ -34,17 +36,26 @@ module Apache
34
36
 
35
37
  class UploadMerger
36
38
 
37
- MERGE_SIZE = 32 * 1024 * 1024
39
+ DEFAULT_MERGE_THRESHOLD = 32 * 1024 * 1024
38
40
 
39
- MODE = Fcntl::O_CREAT|Fcntl::O_WRONLY|Fcntl::O_EXCL
41
+ CREATE_MODE = Fcntl::O_CREAT|Fcntl::O_WRONLY|Fcntl::O_EXCL
40
42
 
41
43
  # Creates a new RubyHandler instance for the Apache web server. It
42
44
  # is to be installed as a custom 404 ErrorDocument handler.
43
45
  #
44
46
  # The argument +map+ contains key/value pairs of URL prefixes and
45
47
  # upload base directories.
46
- def initialize(map = {})
47
- @map = {}
48
+ #
49
+ # +strategy+ determines how merging happens:
50
+ #
51
+ # <tt>:symlink</tt>:: Files are symlinked
52
+ # <tt>:copy</tt>:: Files are copied
53
+ # <tt>Integer</tt>:: Files whose size is below that threshold are
54
+ # copied, others are symlinked (default)
55
+ def initialize(map = {}, strategy = DEFAULT_MERGE_THRESHOLD)
56
+ @map, @strategy = {}, strategy
57
+
58
+ define_merger
48
59
 
49
60
  map.each { |prefix, dir|
50
61
  @map[prefix] = [%r{\A#{prefix}/(.*)}, dir]
@@ -52,20 +63,19 @@ module Apache
52
63
  end
53
64
 
54
65
  # If the current +request+ asked for a resource that's not there,
55
- # it will be copied from one of the appropriate upload directories,
56
- # determined by its URL prefix. Otherwise, the original error will
57
- # be thrown.
66
+ # it will be merged from one of the appropriate upload directories,
67
+ # determined by its URL prefix. If no matching resource could be
68
+ # found, the original error will be thrown.
58
69
  def handler(request)
59
70
  request.add_common_vars # REDIRECT_URL
60
71
 
61
72
  if url = request.subprocess_env['REDIRECT_URL'] and
62
- prefix = request.path_info and
73
+ prefix = request.path_info.untaint and
63
74
  map = @map[prefix] and
64
75
  path = url[map[0], 1].untaint and
65
76
  src = find(map[1], path)
66
77
 
67
- merge(src,
68
- File.join(request.server.document_root, prefix, path).untaint)
78
+ merge(src, File.join(request.server.document_root, prefix, path))
69
79
 
70
80
  request.status = HTTP_OK
71
81
  request.internal_redirect(url)
@@ -86,19 +96,31 @@ module Apache
86
96
  }
87
97
  end
88
98
 
89
- # TODO: optimize the copying case
90
- def merge(src, dest)
99
+ def define_merger
100
+ class << self; self; end.send :alias_method, :merge, case @strategy
101
+ when :symlink, :copy then @strategy
102
+ when Integer then :copy_or_symlink
103
+ else raise ArgumentError, "illegal strategy #{@strategy.inspect}"
104
+ end
105
+ end
106
+
107
+ def copy_or_symlink(src, dest)
91
108
  stat = File.stat(src)
109
+ stat.size > @strategy ? symlink(src, dest) : copy(src, dest, stat)
110
+ end
92
111
 
93
- if stat.size > MERGE_SIZE
94
- File.symlink(src, dest)
95
- else
96
- File.open(src) { |src_|
97
- File.open(dest, MODE, stat.mode) { |dest_|
98
- FileUtils.copy_stream(src_, dest_)
99
- }
112
+ def symlink(src, dest)
113
+ File.symlink(src, dest)
114
+ rescue Errno::EEXIST
115
+ end
116
+
117
+ # TODO: optimize?
118
+ def copy(src, dest, stat = File.stat(src))
119
+ File.open(src) { |src_|
120
+ File.open(dest, CREATE_MODE, stat.mode) { |dest_|
121
+ FileUtils.copy_stream(src_, dest_)
100
122
  }
101
- end
123
+ }
102
124
  rescue Errno::EEXIST
103
125
  end
104
126
 
@@ -6,7 +6,7 @@ module Apache
6
6
 
7
7
  MAJOR = 0
8
8
  MINOR = 0
9
- TINY = 2
9
+ TINY = 3
10
10
 
11
11
  class << self
12
12
 
metadata CHANGED
@@ -1,77 +1,60 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: apache_upload_merger
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Jens Wille
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2010-02-26 00:00:00 +01:00
18
- default_executable:
11
+ date: 2013-12-19 00:00:00.000000000 Z
19
12
  dependencies: []
20
-
21
13
  description: Apache module providing upload merging functionality.
22
- email: jens.wille@uni-koeln.de
14
+ email: jens.wille@gmail.com
23
15
  executables: []
24
-
25
16
  extensions: []
26
-
27
- extra_rdoc_files:
17
+ extra_rdoc_files:
18
+ - README
28
19
  - COPYING
29
20
  - ChangeLog
30
- - README
31
- files:
21
+ files:
32
22
  - lib/apache/upload_merger.rb
33
23
  - lib/apache/upload_merger/version.rb
34
- - README
24
+ - COPYING
35
25
  - ChangeLog
26
+ - README
36
27
  - Rakefile
37
- - COPYING
38
- has_rdoc: true
39
28
  homepage: http://github.com/blackwinter/apache_upload_merger
40
- licenses: []
41
-
29
+ licenses:
30
+ - AGPL-3.0
31
+ metadata: {}
42
32
  post_install_message:
43
- rdoc_options:
44
- - --charset
33
+ rdoc_options:
34
+ - "--title"
35
+ - apache_upload_merger Application documentation (v0.0.3)
36
+ - "--charset"
45
37
  - UTF-8
46
- - --title
47
- - apache_upload_merger Application documentation
48
- - --main
38
+ - "--line-numbers"
39
+ - "--all"
40
+ - "--main"
49
41
  - README
50
- - --line-numbers
51
- - --inline-source
52
- - --all
53
- require_paths:
42
+ require_paths:
54
43
  - lib
55
- required_ruby_version: !ruby/object:Gem::Requirement
56
- requirements:
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
57
46
  - - ">="
58
- - !ruby/object:Gem::Version
59
- segments:
60
- - 0
61
- version: "0"
62
- required_rubygems_version: !ruby/object:Gem::Requirement
63
- requirements:
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
64
51
  - - ">="
65
- - !ruby/object:Gem::Version
66
- segments:
67
- - 0
68
- version: "0"
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
69
54
  requirements: []
70
-
71
55
  rubyforge_project:
72
- rubygems_version: 1.3.6
56
+ rubygems_version: 2.1.11
73
57
  signing_key:
74
- specification_version: 3
58
+ specification_version: 4
75
59
  summary: Apache module providing upload merging functionality.
76
60
  test_files: []
77
-