raval 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.
@@ -0,0 +1,71 @@
1
+ # coding: utf-8
2
+
3
+ require "spec_helper"
4
+ require "ostruct"
5
+
6
+
7
+ def a_valid_directory
8
+ OpenStruct.new(:directory => true,
9
+ :permissions => "r--r--r--",
10
+ :owner => "auser",
11
+ :group => "agroup",
12
+ :size => 0,
13
+ :time => Time.mktime(2012,10,10,10,10),
14
+ :name => "files")
15
+ end
16
+
17
+ def a_valid_file
18
+ OpenStruct.new(:directory => false,
19
+ :permissions => "r--r--r--",
20
+ :owner => "auser",
21
+ :group => "agroup",
22
+ :size => 1024,
23
+ :time => Time.mktime(2012,10,10,10,10),
24
+ :name => "one.txt")
25
+ end
26
+ describe Raval::ListFormatter, "initialisation" do
27
+ context "with a directory and a file" do
28
+ let!(:files) { [a_valid_directory, a_valid_file] }
29
+
30
+ it "should initialise without error" do
31
+ lambda {
32
+ Raval::ListFormatter.new(files)
33
+ }.should_not raise_error(ArgumentError)
34
+ end
35
+ end
36
+ context "with a string" do
37
+ let!(:files) { ["foo"] }
38
+
39
+ it "should raise an exception" do
40
+ lambda {
41
+ Raval::ListFormatter.new(files)
42
+ }.should raise_error(ArgumentError)
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ describe Raval::ListFormatter, "#short" do
49
+ context "with a directory and a file" do
50
+ let!(:files) { [a_valid_directory, a_valid_file] }
51
+ subject { Raval::ListFormatter.new(files)}
52
+
53
+ it "should return an array of the names" do
54
+ subject.short.should == ["files","one.txt"]
55
+ end
56
+ end
57
+ end
58
+
59
+ describe Raval::ListFormatter, "#detailed" do
60
+ context "with a directory and a file" do
61
+ let!(:files) { [a_valid_directory, a_valid_file] }
62
+ subject { Raval::ListFormatter.new(files)}
63
+
64
+ it "should return an array of the names" do
65
+ subject.detailed.should == [
66
+ "dr--r--r-- 1 auser agroup 0 Oct 10 10:10 files",
67
+ "-r--r--r-- 1 auser agroup 1024 Oct 10 10:10 one.txt",
68
+ ]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,16 @@
1
+ # coding: utf-8
2
+
3
+ require "rubygems"
4
+ require "bundler"
5
+ Bundler.setup
6
+
7
+ require 'raval'
8
+
9
+
10
+ # Requires supporting ruby files with custom matchers and macros, etc,
11
+ # in spec/support/ and its subdirectories.
12
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }
13
+
14
+ #RSpec.configure do |config|
15
+ # config.include ReaderSpecHelper
16
+ #end
@@ -0,0 +1,88 @@
1
+ # coding: utf-8
2
+
3
+ # a super simple driver that is used in our specs
4
+
5
+ require 'ostruct'
6
+ require 'stringio'
7
+
8
+ class TestDriver
9
+ FILE_ONE = "This is the first file available for download.\n\nBy James"
10
+ FILE_TWO = "This is the file number two.\n\n2009-03-21"
11
+
12
+ def change_dir(path)
13
+ path == "/" || path == "/files"
14
+ end
15
+
16
+ def dir_contents(path)
17
+ case path
18
+ when "/" then
19
+ [ dir_item("files"), file_item("one.txt", FILE_ONE.bytesize) ]
20
+ when "/files" then
21
+ [ file_item("two.txt", FILE_TWO.bytesize) ]
22
+ else
23
+ []
24
+ end
25
+ end
26
+
27
+ def authenticate(user, pass)
28
+ user == "test" && pass == "1234"
29
+ end
30
+
31
+ def bytes(path)
32
+ case path
33
+ when "/one.txt" then FILE_ONE.bytesize
34
+ when "/files/two.txt" then FILE_TWO.bytesize
35
+ else
36
+ false
37
+ end
38
+ end
39
+
40
+ def modified_time(path)
41
+ case path
42
+ when "/one.txt" then Time.mktime(2012,10,10,10,10)
43
+ when "/files/two.txt" then Time.mktime(2012,11,11,11,11)
44
+ else
45
+ false
46
+ end
47
+ end
48
+
49
+ def get_file(path)
50
+ case path
51
+ when "/one.txt" then StringIO.new(FILE_ONE)
52
+ when "/files/two.txt" then StringIO.new(FILE_TWO)
53
+ else
54
+ false
55
+ end
56
+ end
57
+
58
+ def put_file(path, tmp_path)
59
+ File.size(tmp_path)
60
+ end
61
+
62
+ def delete_file(path)
63
+ path == "/four.txt"
64
+ end
65
+
66
+ def delete_dir(path)
67
+ path == "/four"
68
+ end
69
+
70
+ def rename(from, to)
71
+ from == "/one.txt"
72
+ end
73
+
74
+ def make_dir(path)
75
+ path == "/four"
76
+ end
77
+
78
+ private
79
+
80
+ def dir_item(name)
81
+ OpenStruct.new(:name => name, :directory => true, :size => 0)
82
+ end
83
+
84
+ def file_item(name, bytes)
85
+ OpenStruct.new(:name => name, :directory => false, :size => bytes)
86
+ end
87
+
88
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: raval
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Healy
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
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: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '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: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.6'
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: '2.6'
62
+ - !ruby/object:Gem::Dependency
63
+ name: cane
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 2.2.3
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: 2.2.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: morecane
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: celluloid-io
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '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: '0'
110
+ description: Build a custom FTP daemon backed by a datastore of your choice
111
+ email:
112
+ - jamed@yob.id.au
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - README.markdown
117
+ - MIT-LICENSE
118
+ files:
119
+ - examples/fog.rb
120
+ - examples/fake.rb
121
+ - lib/raval.rb
122
+ - lib/raval/app.rb
123
+ - lib/raval/list_formatter.rb
124
+ - lib/raval/handler.rb
125
+ - lib/raval/passive_socket.rb
126
+ - lib/raval/connection.rb
127
+ - lib/raval/server.rb
128
+ - lib/raval/active_socket.rb
129
+ - spec/handler_spec.rb
130
+ - spec/list_formatter_spec.rb
131
+ - spec/support/test_driver.rb
132
+ - spec/spec_helper.rb
133
+ - Gemfile
134
+ - README.markdown
135
+ - MIT-LICENSE
136
+ homepage: http://github.com/yob/raval
137
+ licenses: []
138
+ post_install_message:
139
+ rdoc_options:
140
+ - --title
141
+ - raval FTPd Documentation
142
+ - --main
143
+ - README.markdown
144
+ - -q
145
+ require_paths:
146
+ - lib
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.9.2
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ requirements: []
160
+ rubyforge_project:
161
+ rubygems_version: 1.8.23
162
+ signing_key:
163
+ specification_version: 3
164
+ summary: A threaded FTP daemon (ftpd) framework
165
+ test_files: []