fragmenter 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 492790d602b011f85a9c59b2e7730e897b50b4c2
4
- data.tar.gz: 15ce8668a07766801e7d1fbfa946e0a51f8481f2
3
+ metadata.gz: 47da89395cc7747e68ee8637b95d00521d6f178c
4
+ data.tar.gz: 57ed043a01301542570ad439ff58cb599826a06c
5
5
  SHA512:
6
- metadata.gz: 5c5961781e29d00c847b1683e87f50daf5bff5998db3eb92c0acc61065c9a8a657c4a178b695f2002ae3fcc99a81db81e8047f5679403d058554ebb3d9e213f3
7
- data.tar.gz: afe3e60454e3b2e304cd351562befcad35168fddc5d0624c4ca4c4284b174a0c318323bdecf09c6e631fb9d6f92b483ba77322bffd6e9099baea8073a3d8eb4e
6
+ metadata.gz: 328381ad1ca0c4eb144f83f47ac337dc4b9ee42d140572cf348550ebb345bc008f4526e2d71d8b63ce07699d814441c3f6540eacbd71bcce7d8d4d49aac8d2d2
7
+ data.tar.gz: a3958527cc97cd7855442975843fdaa9dced8648bf1f96dadaa4ad9796d314d7e7ff6b001cbef8db90ecc626a2ec333c6082b58b60710908e0ad79282971cca0
data/.travis.yml CHANGED
@@ -2,6 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
+ - 2.1.0
5
6
  services:
6
7
  - redis-server
7
8
  script: bundle exec rspec spec
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 1.0.1
2
+
3
+ * Create a new uploader instance per request, avoiding unexpected caching
4
+ behavior.
5
+
1
6
  # 1.0.0
2
7
 
3
8
  * Provide a convenience IO wrapper for rebuilt data with `Wrapper#to_io`.
data/README.md CHANGED
@@ -20,13 +20,25 @@ pieces is the simplest workaround.
20
20
 
21
21
  Fragments are intended to be rather small, anywhere from 10-50k depending on
22
22
  the underlying data size. There is a balance between connection overhead from
23
- repeated server calls, being connection error tollerant, and not blocking the
23
+ repeated server calls, being connection error tolerant, and not blocking the
24
24
  server from handling other connections.
25
25
 
26
+ ## Heroku
27
+
28
+ Due to the way the service queues requests we do **not** recommend using
29
+ Fragmenter for apps on Heroku. Fragmenter is designed to make uploads from slow
30
+ mobile clients easier and fault tolerant. Heroku kills all requests after 30
31
+ seconds from the point where the request started, not from the point where it
32
+ was handed to your application. Fragmenting uploads uses a fair number of
33
+ additional requests and can cause rampant timeout errors (H12 on Heroku).
34
+
35
+ That isn't to say that Fragmenter just doesn't work on Heroku, it is just
36
+ sub-optimal—particularly when compared to a properly configured Nginx proxy.
37
+
26
38
  ## Requirements
27
39
 
28
- Fragmenter is tested on Ruby 2.0, but any ruby implementation with 1.9 syntax
29
- should be supported.
40
+ Fragmenter is tested on Ruby 1.9.3, 2.0, and 2.1. However, any ruby
41
+ implementation with 1.9 syntax will be supported.
30
42
 
31
43
  Redis 2.0 or greater is required and version 2.6 is recommended.
32
44
 
data/fragmenter.gemspec CHANGED
@@ -23,6 +23,6 @@ Gem::Specification.new do |gem|
23
23
 
24
24
  gem.add_dependency 'redis', '~> 3.0.0'
25
25
  gem.add_development_dependency 'rspec', '~> 2.14.0'
26
+ gem.add_development_dependency 'rack', '~> 1.5.2'
26
27
  gem.add_development_dependency 'rack-test', '~> 0.6.2'
27
- gem.add_development_dependency 'sinatra', '~> 1.4.3'
28
28
  end
@@ -6,8 +6,10 @@ module Fragmenter
6
6
  end
7
7
 
8
8
  def update
9
+ uploader = request_uploader
10
+
9
11
  if uploader.store
10
- render json: fragmenter.as_json, status: update_status
12
+ render json: fragmenter.as_json, status: update_status(uploader)
11
13
  else
12
14
  render json: {
13
15
  message: 'Upload of part failed.', errors: uploader.errors
@@ -31,8 +33,8 @@ module Fragmenter
31
33
  [Fragmenter::Validators::ChecksumValidator]
32
34
  end
33
35
 
34
- def uploader
35
- @uploader ||= Fragmenter::Services::Uploader.new(
36
+ def request_uploader
37
+ Fragmenter::Services::Uploader.new(
36
38
  Fragmenter::Request.new(
37
39
  resource: resource,
38
40
  fragmenter: fragmenter,
@@ -42,7 +44,7 @@ module Fragmenter
42
44
  )
43
45
  end
44
46
 
45
- def update_status
47
+ def update_status(uploader)
46
48
  uploader.complete? ? 202 : 200
47
49
  end
48
50
  end
@@ -1,3 +1,3 @@
1
1
  module Fragmenter
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -6,7 +6,7 @@ describe Fragmenter::Rails::Controller do
6
6
  include Fragmenter::Rails::Controller
7
7
  end
8
8
 
9
- Resource = Struct.new(:id) do
9
+ resource_class = Struct.new(:id) do
10
10
  def fragmenter
11
11
  @fragmenter ||= Fragmenter::Wrapper.new(self)
12
12
  end
@@ -14,7 +14,7 @@ describe Fragmenter::Rails::Controller do
14
14
 
15
15
  describe '#show' do
16
16
  it 'renders the JSON representation of the associated fragmenter' do
17
- resource = Resource.new(100)
17
+ resource = resource_class.new(100)
18
18
  controller = UploadController.new(resource)
19
19
 
20
20
  controller.stub(:render)
@@ -30,7 +30,7 @@ describe Fragmenter::Rails::Controller do
30
30
 
31
31
  describe '#destroy' do
32
32
  it 'commands the fragmenter to clean' do
33
- resource = Resource.new(100)
33
+ resource = resource_class.new(100)
34
34
  controller = UploadController.new(resource)
35
35
 
36
36
  controller.stub(:render)
@@ -48,12 +48,11 @@ describe Fragmenter::Rails::Controller do
48
48
 
49
49
  describe '#update' do
50
50
  it 'stores the request body' do
51
- resource = Resource.new(100)
51
+ resource = resource_class.new(100)
52
52
  controller = UploadController.new(resource)
53
53
  uploader = double(:uploader, store: true, complete?: false)
54
54
 
55
- controller.stub(:render)
56
- controller.stub(uploader: uploader)
55
+ controller.stub(render: true, request_uploader: uploader)
57
56
 
58
57
  controller.update
59
58
 
@@ -65,12 +64,11 @@ describe Fragmenter::Rails::Controller do
65
64
  end
66
65
 
67
66
  it 'renders error messages if storage fails' do
68
- resource = Resource.new(100)
67
+ resource = resource_class.new(100)
69
68
  controller = UploadController.new(resource)
70
69
  uploader = double(:uploader, store: false, errors: [], complete?: false)
71
70
 
72
- controller.stub(:render)
73
- controller.stub(uploader: uploader)
71
+ controller.stub(render: true, request_uploader: uploader)
74
72
 
75
73
  controller.update
76
74
 
@@ -7,17 +7,14 @@ require 'support/uploads_app'
7
7
  describe 'Uploading Fragments' do
8
8
  include Rack::Test::Methods
9
9
 
10
- let(:app) { UploadsApp }
11
10
  let(:resource) { Resource.new(200) }
11
+ let(:app) { UploadsApp.new(resource) }
12
12
 
13
13
  around do |example|
14
- UploadsApp.resource = resource
15
- Fragmenter.logger = Logger.new('/dev/null')
16
-
14
+ resource.fragmenter.clean!
15
+ Fragmenter.logger = Logger.new('/dev/null')
17
16
  example.run
18
-
19
- Fragmenter.logger = nil
20
- UploadsApp.resource = nil
17
+ Fragmenter.logger = nil
21
18
  end
22
19
 
23
20
  it 'Lists uploaded fragments' do
@@ -1,30 +1,37 @@
1
1
  require 'fragmenter/rails/controller'
2
- require 'sinatra/base'
2
+ require 'rack/request'
3
+ require 'rack/response'
3
4
 
4
- class UploadsApp < Sinatra::Base
5
+ class UploadsApp
5
6
  include Fragmenter::Rails::Controller
6
7
 
7
- class << self
8
- attr_accessor :resource
9
- end
8
+ attr_reader :request, :resource
10
9
 
11
- get('/') { show }
12
- put('/') { update }
13
- delete('/') { destroy }
10
+ def initialize(resource)
11
+ @resource = resource
12
+ end
14
13
 
15
- private
14
+ def call(env)
15
+ @request = Rack::Request.new(env)
16
16
 
17
- def resource
18
- self.class.resource
17
+ case request.request_method
18
+ when 'GET' then show
19
+ when 'PUT' then update
20
+ when 'DELETE' then destroy
21
+ end
19
22
  end
20
23
 
24
+ private
25
+
21
26
  def render(options)
22
27
  body = if options[:json]
23
28
  JSON.dump(options[:json])
24
29
  else
25
- nil
30
+ ''
26
31
  end
27
32
 
28
- [options[:status], body]
33
+ Rack::Response.new(body, options[:status], {}).finish do
34
+ @uploader = nil
35
+ end
29
36
  end
30
37
  end
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fragmenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Parker Selbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-25 00:00:00.000000000 Z
11
+ date: 2014-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.14.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.14.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rack-test
42
+ name: rack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.6.2
47
+ version: 1.5.2
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.6.2
54
+ version: 1.5.2
55
55
  - !ruby/object:Gem::Dependency
56
- name: sinatra
56
+ name: rack-test
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.4.3
61
+ version: 0.6.2
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.4.3
68
+ version: 0.6.2
69
69
  description: Fragmentize and rebuild data
70
70
  email:
71
71
  - parker@sorentwo.com
@@ -73,9 +73,9 @@ executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
- - .gitignore
77
- - .rspec
78
- - .travis.yml
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
79
  - CHANGELOG.md
80
80
  - Gemfile
81
81
  - LICENSE.txt
@@ -123,17 +123,17 @@ require_paths:
123
123
  - lib
124
124
  required_ruby_version: !ruby/object:Gem::Requirement
125
125
  requirements:
126
- - - '>='
126
+ - - ">="
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - '>='
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.0.0
136
+ rubygems_version: 2.2.0
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: Multipart upload support backed by Redis. Fragmenter handles storing multiple