ferver 1.2.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d2f0cc442e5c638817dbd7465cac6033cbafa38
4
- data.tar.gz: 3344fc4b12b37de5ec6e08da1694c093172a6bbe
3
+ metadata.gz: e42a62e59a7371617918ea1c1a52702b6765ade1
4
+ data.tar.gz: 7144fe5b0a7167319a4f1837980f55796fabb554
5
5
  SHA512:
6
- metadata.gz: 98f244dec47ab5c2dd7cd9d1ac687115763a63872622d03dd602d002125d38169210af42d66ad1eb3b8bd53d0edb72e068cf2cd7a7363debd62be2f57ce7f1b1
7
- data.tar.gz: a111d09816eefba4e1da78e7e5af7d7172d6526d5cb14988dca5b4d6d8d4f27c54a4005963b937ec4d10bead859cc9c536e2f20015342fc55f10b3fa7cf0c11a
6
+ metadata.gz: 1d3ee2dfde1b61732967fc3cd2011702dec256256ae73dd3110c956588fdbb39f954b44c3dc0f5798c04597309d8f306d3f72caa8fabc49a731ba864ab17cc04
7
+ data.tar.gz: 7c658dfd826f29d134eb31fe0eb56a3973e5860c72446826cf3a7674e91063681a518a5adc1db1fb44b9940c19d27984773f5fd5258706cff0083118faecca79
data/CHANGELOG.md ADDED
@@ -0,0 +1,87 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ ## 1.2.1 - 2014-11-14 - XX
5
+
6
+ ### Added
7
+
8
+ - State minimum Ruby version
9
+
10
+ ### Deprecated
11
+ - Nothing.
12
+
13
+ ### Removed
14
+ - Nothing.
15
+
16
+
17
+ ## 1.2.0 - 2014-06-15 - 72dc58b
18
+
19
+ ### Added
20
+ - Use named command line arguments.
21
+ - `Rake s` alias of `Rake server`.
22
+ - Testing on `Ruby 2.1.1`.
23
+
24
+ ### Deprecated
25
+ - Nothing.
26
+
27
+ ### Removed
28
+ - Nothing.
29
+
30
+ ### Fixed
31
+ - Code refactoring.
32
+
33
+ ## 1.1.0 - 2014-03-18 - 59d6ddf
34
+
35
+ ### Added
36
+ - Run **Sinatra** in production mode when started from `bin/`.
37
+
38
+ ### Deprecated
39
+ - Nothing.
40
+
41
+ ### Removed
42
+ - Nothing.
43
+
44
+ ### Fixed
45
+ - #7 : Crash when directory does not exist.
46
+
47
+ ## 1.0.0 - 2014-03-08 - 0522648
48
+
49
+ ### Added
50
+ - Redesign `Ferver` into a **Rubygem**.
51
+
52
+ ### Deprecated
53
+ - Nothing.
54
+
55
+ ### Removed
56
+ - Nothing.
57
+
58
+ ### Fixed
59
+ - Nothing.
60
+
61
+ ## 1.0.0-beta - 2014-01-31 - 8f27a55
62
+
63
+ ### Added
64
+ - Nothing.
65
+
66
+ ### Deprecated
67
+ - Nothing.
68
+
69
+ ### Removed
70
+ - Nothing.
71
+
72
+ ### Fixed
73
+ - Negotiate `content-type` vai HTTP Accept request header.
74
+
75
+ ## 0.9.0-beta - 2014-01-28 - 09a7504
76
+
77
+ ### Added
78
+ - Initial release.
79
+
80
+ ### Deprecated
81
+ - Nothing.
82
+
83
+ ### Removed
84
+ - Nothing.
85
+
86
+ ### Fixed
87
+ - Nothing.
data/README.md CHANGED
@@ -75,7 +75,7 @@ curl -i -H "Accept: application/json" http://localhost:4567/files
75
75
 
76
76
  #### Download a file
77
77
 
78
- Files are available via their index in the list, e.g. `http://localhost:4567/files/:id`
78
+ Files are available via their zero based index in the list, e.g. `http://localhost:4567/files/:id`
79
79
 
80
80
  For example to download file appearing third in the list displayed earlier, request `http://localhost:4567/files/2`
81
81
 
data/ferver.gemspec CHANGED
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = %q(Ferver is a super, simple ruby gem to serve files over http; useful as a basic file server to quickly share files on your local network.)
13
13
  spec.homepage = 'https://github.com/rob-murray/ferver'
14
14
  spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 1.9.3'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
data/lib/ferver.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative 'ferver/app'
2
+ require_relative 'ferver/controller'
2
3
  require_relative 'ferver/configuration'
3
4
  require_relative 'ferver/directory_not_found_error'
4
5
  require_relative 'ferver/file_id_request'
@@ -6,8 +7,6 @@ require_relative 'ferver/file_list'
6
7
  require_relative 'ferver/version'
7
8
 
8
9
  module Ferver
9
- autoload :App, 'ferver/app'
10
-
11
10
  # By default, serve files from current location when the gem is called.
12
11
  DEFAULT_FILE_SERVER_DIR_PATH = './'
13
12
 
data/lib/ferver/app.rb CHANGED
@@ -1,67 +1,15 @@
1
1
  require 'sinatra'
2
2
  require 'sinatra/base'
3
- require 'json'
4
- require_relative './directory_not_found_error'
5
- require_relative './configuration'
3
+ require_relative './controller'
6
4
 
7
5
  module Ferver
8
- class App < Sinatra::Base
6
+ class App < Sinatra::Application
9
7
  set :app_file, __FILE__
10
8
 
11
- before do
12
- @ferver_list = FileList.new(current_ferver_path)
9
+ configure do
10
+ set :views, './views'
13
11
  end
14
12
 
15
- error Ferver::DirectoryNotFoundError do
16
- halt 500, "Ferver: Directory '#{current_ferver_path}' not found."
17
- end
18
-
19
- # redirect to file list
20
- get '/' do
21
- redirect to('/files')
22
- end
23
-
24
- # list files
25
- get '/files' do
26
- if request.preferred_type.to_s == 'application/json'
27
- content_type :json
28
-
29
- ferver_list.all.to_json
30
- else
31
- erb :index, locals: { file_list: ferver_list.all,
32
- ferver_path: File.expand_path(current_ferver_path),
33
- file_count: ferver_list.size }
34
- end
35
- end
36
-
37
- # download file
38
- get '/files/:id' do
39
- halt(400, 'Bad request') unless valid_file_request?
40
-
41
- if ferver_list.file_id_is_valid?(file_id_request.value)
42
- file_name = ferver_list.file_by_id(file_id_request.value)
43
- file = FileList.path_for_file(current_ferver_path, file_name)
44
-
45
- send_file(file, disposition: 'attachment', filename: File.basename(file))
46
- else
47
- status 404
48
- end
49
- end
50
-
51
- private
52
-
53
- attr_reader :ferver_list
54
-
55
- def file_id_request
56
- @file_id_request ||= FileIdRequest.new(params[:id])
57
- end
58
-
59
- def valid_file_request?
60
- file_id_request.valid?
61
- end
62
-
63
- def current_ferver_path
64
- Ferver.configuration.directory_path
65
- end
13
+ use Controller
66
14
  end
67
15
  end
@@ -0,0 +1,65 @@
1
+ require 'sinatra'
2
+ require 'sinatra/base'
3
+ require 'json'
4
+ require_relative './directory_not_found_error'
5
+ require_relative './configuration'
6
+
7
+ module Ferver
8
+ class Controller < Sinatra::Base
9
+ before do
10
+ @ferver_list = FileList.new(current_ferver_path)
11
+ end
12
+
13
+ error Ferver::DirectoryNotFoundError do
14
+ halt 500, "Ferver: Directory '#{current_ferver_path}' not found."
15
+ end
16
+
17
+ # redirect to file list
18
+ get '/' do
19
+ redirect to('/files')
20
+ end
21
+
22
+ # list files
23
+ get '/files' do
24
+ if request.preferred_type.to_s == 'application/json'
25
+ content_type :json
26
+
27
+ ferver_list.all.to_json
28
+ else
29
+ erb :index, locals: { file_list: ferver_list.all,
30
+ ferver_path: File.expand_path(current_ferver_path),
31
+ file_count: ferver_list.size }
32
+ end
33
+ end
34
+
35
+ # download file
36
+ get '/files/:id' do
37
+ halt(400, 'Bad request') unless valid_file_request?
38
+
39
+ if ferver_list.file_id_valid?(file_id_request.value)
40
+ file_name = ferver_list.file_by_id(file_id_request.value)
41
+ file = FileList.path_for_file(current_ferver_path, file_name)
42
+
43
+ send_file(file, disposition: 'attachment', filename: File.basename(file))
44
+ else
45
+ status 404
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ attr_reader :ferver_list
52
+
53
+ def file_id_request
54
+ @file_id_request ||= FileIdRequest.new(params[:id])
55
+ end
56
+
57
+ def valid_file_request?
58
+ file_id_request.valid?
59
+ end
60
+
61
+ def current_ferver_path
62
+ Ferver.configuration.directory_path
63
+ end
64
+ end
65
+ end
@@ -5,9 +5,10 @@ require 'forwardable'
5
5
  module Ferver
6
6
  class FileList
7
7
  extend Forwardable
8
- def_delegators :@files, :size, :each
9
8
  include Enumerable
10
9
 
10
+ def_delegators :@files, :size, :each
11
+
11
12
  # Create a new instance with a path
12
13
  #
13
14
  def initialize(path)
@@ -27,7 +28,7 @@ module Ferver
27
28
 
28
29
  # Is the file id a valid id for Ferver to serve
29
30
  #
30
- def file_id_is_valid?(file_id)
31
+ def file_id_valid?(file_id)
31
32
  file_id < files.size
32
33
  end
33
34
 
@@ -1,3 +1,3 @@
1
1
  module Ferver
2
- VERSION = '1.2.0'
2
+ VERSION = '1.2.1'
3
3
  end
data/spec/ferver_spec.rb CHANGED
@@ -149,7 +149,7 @@ describe 'ferver' do
149
149
 
150
150
  context 'when requesting a file out of range' do
151
151
  before do
152
- allow(file_list).to receive(:file_id_is_valid?).with(3).and_return(false)
152
+ allow(file_list).to receive(:file_id_valid?).with(3).and_return(false)
153
153
  get '/files/3'
154
154
  end
155
155
 
@@ -116,12 +116,12 @@ describe Ferver::FileList do
116
116
  context 'when requesting valid file_id' do
117
117
  # TODO: possible to redesign this
118
118
 
119
- it '#file_id_is_valid? should return true for first file' do
120
- expect(subject.file_id_is_valid?(0)).to be_truthy
119
+ it '#file_id_valid? should return true for first file' do
120
+ expect(subject.file_id_valid?(0)).to be_truthy
121
121
  end
122
122
 
123
- it '#file_id_is_valid? should return true for second file' do
124
- expect(subject.file_id_is_valid?(1)).to be_truthy
123
+ it '#file_id_valid? should return true for second file' do
124
+ expect(subject.file_id_valid?(1)).to be_truthy
125
125
  end
126
126
 
127
127
  it '#file_by_id should return the correct file for the first file' do
@@ -135,7 +135,7 @@ describe Ferver::FileList do
135
135
 
136
136
  context 'when requesting invalid file_id' do
137
137
  it 'should return false for invalid file_id' do
138
- expect(subject.file_id_is_valid?(2)).to be_falsey
138
+ expect(subject.file_id_valid?(2)).to be_falsey
139
139
  end
140
140
 
141
141
  it 'should raise_error if file_by_id is called' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ferver
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Murray
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-15 00:00:00.000000000 Z
11
+ date: 2014-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -149,6 +149,7 @@ files:
149
149
  - ".rspec"
150
150
  - ".ruby-version"
151
151
  - ".travis.yml"
152
+ - CHANGELOG.md
152
153
  - Gemfile
153
154
  - LICENSE
154
155
  - README.md
@@ -158,6 +159,7 @@ files:
158
159
  - lib/ferver.rb
159
160
  - lib/ferver/app.rb
160
161
  - lib/ferver/configuration.rb
162
+ - lib/ferver/controller.rb
161
163
  - lib/ferver/directory_not_found_error.rb
162
164
  - lib/ferver/file_id_request.rb
163
165
  - lib/ferver/file_list.rb
@@ -180,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
182
  requirements:
181
183
  - - ">="
182
184
  - !ruby/object:Gem::Version
183
- version: '0'
185
+ version: 1.9.3
184
186
  required_rubygems_version: !ruby/object:Gem::Requirement
185
187
  requirements:
186
188
  - - ">="
@@ -188,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
190
  version: '0'
189
191
  requirements: []
190
192
  rubyforge_project:
191
- rubygems_version: 2.2.2
193
+ rubygems_version: 2.4.4
192
194
  signing_key:
193
195
  specification_version: 4
194
196
  summary: A simple web app to serve files over HTTP.