jackfs 0.0.4 → 0.1.0
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 +7 -0
- data/.gitignore +1 -0
- data/Manifest +0 -2
- data/README.md +6 -13
- data/Rakefile +1 -0
- data/jackfs.gemspec +3 -2
- data/lib/jackfs/file_store.rb +0 -2
- data/lib/jackfs/version.rb +1 -1
- data/spec/adapters/db_adapter_spec.rb +10 -10
- data/spec/adapters/file_adapter_spec.rb +6 -6
- metadata +60 -69
- data/lib/jackfs/adapters/s3_adapter.rb +0 -72
- data/spec/adapters/s3_adapter_spec.rb +0 -61
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1adb2ee202121672a4c032527c8b110bc22816bf
|
4
|
+
data.tar.gz: 489f57250cfd03e51e8652fb0e721d884cbc7152
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5b66beb56388bd7e149ad15fa5b5dc42e3b731b60963fca05de3688fb6d74e2c7d96716d5aafa764136651487b89b37c1b568b9991aa1da64c0e5c37d0ae36c3
|
7
|
+
data.tar.gz: 06bb0db9aa6ba017ca6d4d76e90a05d5bcdc8fc70c898e7fad55a6330f63d6ad350a90b0ddd9f2bdbf2171a9123230acb1495b34c1dc19a87f679398eeec35df
|
data/.gitignore
CHANGED
data/Manifest
CHANGED
@@ -5,11 +5,9 @@ Rakefile
|
|
5
5
|
init.rb
|
6
6
|
lib/jackfs/file_store.rb
|
7
7
|
lib/jackfs/adapters/db_adapter.rb
|
8
|
-
lib/jackfs/adapters/s3_adapter.rb
|
9
8
|
lib/jackfs/adapters/file_adapter.rb
|
10
9
|
spec/adapters/db_adapter_spec.rb
|
11
10
|
spec/adapters/file_adapter_spec.rb
|
12
|
-
spec/adapters/s3_adapter_spec.rb
|
13
11
|
|
14
12
|
jackfs.gemspec
|
15
13
|
spec/jackfs.rb
|
data/README.md
CHANGED
@@ -3,14 +3,14 @@
|
|
3
3
|
Is a rails 3 file store plugin, that allows you to create a simple file store system
|
4
4
|
that can point to disk, s3, or database based on your configuration file.
|
5
5
|
|
6
|
-
This allows you to implement the storage using a simple api. The plugin is
|
6
|
+
This allows you to implement the storage using a simple api. The plugin is
|
7
7
|
adapter driven, so you can create additional adapters to use for this Jackfs
|
8
8
|
system.
|
9
9
|
|
10
10
|
## Install
|
11
11
|
|
12
12
|
rails plugin install git://github.com/jackhq/jackfs.git
|
13
|
-
|
13
|
+
|
14
14
|
## Configure
|
15
15
|
|
16
16
|
* If File Adapter your config/filestore.yml would look like this
|
@@ -18,25 +18,18 @@ system.
|
|
18
18
|
production:
|
19
19
|
location: tmp
|
20
20
|
adapter: file
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
|
23
23
|
* If Db Adapter your config/filestore.yml would look like this
|
24
24
|
|
25
25
|
production:
|
26
26
|
connection: sqlite://production.db
|
27
27
|
adapter: db
|
28
28
|
table_name: jackfs
|
29
|
-
|
30
|
-
** It is important to note that it uses the sequel toolkit to connect to the database. The connection setting must be a valid sequel toolkit connection string.
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
production:
|
35
|
-
adapter: s3
|
36
|
-
bucket: jackhq
|
37
|
-
access_key: ACCESS KEY
|
38
|
-
secret_key: SECRET KEY
|
30
|
+
** It is important to note that it uses the sequel toolkit to connect to the database. The connection setting must be a valid sequel toolkit connection string.
|
39
31
|
|
32
|
+
S3 adapter removed in this version.
|
40
33
|
---
|
41
34
|
|
42
35
|
# Report any problems to team@jackrussellsoftware.com
|
data/Rakefile
CHANGED
data/jackfs.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_runtime_dependency '
|
23
|
-
s.add_runtime_dependency '
|
22
|
+
s.add_runtime_dependency 'sqlite3', '>= 1.0.0'
|
23
|
+
s.add_runtime_dependency 'sequel', '>= 4.0.0'
|
24
|
+
s.add_development_dependency 'rspec', '>= 3.0'
|
24
25
|
end
|
data/lib/jackfs/file_store.rb
CHANGED
@@ -5,7 +5,6 @@ rescue LoadError
|
|
5
5
|
end
|
6
6
|
|
7
7
|
require File.dirname(__FILE__) + '/adapters/file_adapter'
|
8
|
-
require File.dirname(__FILE__) + '/adapters/s3_adapter'
|
9
8
|
require File.dirname(__FILE__) + '/adapters/db_adapter'
|
10
9
|
|
11
10
|
module Jackfs
|
@@ -39,7 +38,6 @@ module Jackfs
|
|
39
38
|
def load_adapter
|
40
39
|
adapter_type = YAML.load_file(File.join(@app_root,CONFIG_FILE))[@app_env.to_s]["adapter"].to_sym
|
41
40
|
case adapter_type
|
42
|
-
when :s3 then Jackfs::S3Adapter.new(@app_root, @app_env)
|
43
41
|
when :db then Jackfs::DbAdapter.new(@app_root, @app_env)
|
44
42
|
else Jackfs::FileAdapter.new(@app_root, @app_env)
|
45
43
|
end
|
data/lib/jackfs/version.rb
CHANGED
@@ -9,12 +9,12 @@ describe "Jackfs Db Adapter" do
|
|
9
9
|
"connection" => 'sqlite://test.db',
|
10
10
|
"table_name" => 'jackfs'
|
11
11
|
})
|
12
|
-
|
12
|
+
|
13
13
|
root = File.dirname(__FILE__) + '/..'
|
14
14
|
@dba = Jackfs::DbAdapter.new(root, :test)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
|
18
18
|
it "should save a file to a configured database name" do
|
19
19
|
@dba.connection.should == 'sqlite://test.db'
|
20
20
|
end
|
@@ -27,25 +27,25 @@ describe "Jackfs Db Adapter" do
|
|
27
27
|
it "should save the file in db using the given name" do
|
28
28
|
@dba.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should eq("COOLBEANS")
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "should allow connection string with odd characters" do
|
32
32
|
@dba.connection = "sqlite://root:abc!#%@test.db"
|
33
33
|
@dba.uri_escape(@dba.connection).should eq("sqlite://root:abc!%23%25@test.db")
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it "should throw an error when connection string is bad URI" do
|
37
|
-
URI.stub
|
37
|
+
URI.stub(:escape).and_raise(Exception)
|
38
38
|
$stdout.should_receive(:puts).with('Error encountered when parsing sqlite://test.db - Exception')
|
39
|
-
@dba.uri_escape(@dba.connection)
|
39
|
+
@dba.uri_escape(@dba.connection)
|
40
40
|
end
|
41
41
|
|
42
42
|
# it "should get a file from a configured from db" do
|
43
43
|
# f = File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r')
|
44
44
|
# @dba.store(f, "COOLBEANS")
|
45
45
|
# orig = File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r')
|
46
|
-
#
|
47
|
-
# @dba.get("COOLBEANS").read.length.should == orig.read.length
|
46
|
+
#
|
47
|
+
# @dba.get("COOLBEANS").read.length.should == orig.read.length
|
48
48
|
# end
|
49
|
-
|
50
|
-
|
49
|
+
|
50
|
+
|
51
51
|
end
|
@@ -8,22 +8,22 @@ describe "Jackfs File Adapter" do
|
|
8
8
|
"location" => 'tmp'
|
9
9
|
})
|
10
10
|
root = File.dirname(__FILE__) + '/..'
|
11
|
-
|
11
|
+
|
12
12
|
@fa = Jackfs::FileAdapter.new(root, :test)
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "should save a file to a configured location" do
|
16
|
-
Jackfs::FileAdapter.should
|
16
|
+
Jackfs::FileAdapter.should be_truthy
|
17
17
|
@fa.location.should == "tmp"
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "should save the file in the location using the given name" do
|
21
|
-
@fa.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should ==
|
21
|
+
@fa.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should == "COOLBEANS"
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should get a file from a configured location" do
|
25
25
|
f = File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r')
|
26
|
-
@fa.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should ==
|
26
|
+
@fa.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should == "COOLBEANS"
|
27
27
|
orig = File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r')
|
28
28
|
@fa.get("COOLBEANS").read.length.should == orig.read.length
|
29
29
|
end
|
metadata
CHANGED
@@ -1,61 +1,65 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: jackfs
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 4
|
10
|
-
version: 0.0.4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jack Russell Software
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
11
|
+
date: 2017-01-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sqlite3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
26
17
|
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.0.0
|
32
20
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: aws-s3
|
36
21
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
40
24
|
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sequel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.0.0
|
46
34
|
type: :runtime
|
47
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
48
55
|
description: This is an description for the fs gem we use
|
49
|
-
email:
|
56
|
+
email:
|
50
57
|
- team@jackrussellsoftware.com
|
51
58
|
executables: []
|
52
|
-
|
53
59
|
extensions: []
|
54
|
-
|
55
60
|
extra_rdoc_files: []
|
56
|
-
|
57
|
-
|
58
|
-
- .gitignore
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
59
63
|
- CHANGELOG
|
60
64
|
- Gemfile
|
61
65
|
- Manifest
|
@@ -66,51 +70,38 @@ files:
|
|
66
70
|
- lib/jackfs.rb
|
67
71
|
- lib/jackfs/adapters/db_adapter.rb
|
68
72
|
- lib/jackfs/adapters/file_adapter.rb
|
69
|
-
- lib/jackfs/adapters/s3_adapter.rb
|
70
73
|
- lib/jackfs/errors.rb
|
71
74
|
- lib/jackfs/file_store.rb
|
72
75
|
- lib/jackfs/version.rb
|
73
76
|
- spec/adapters/db_adapter_spec.rb
|
74
77
|
- spec/adapters/file_adapter_spec.rb
|
75
|
-
- spec/adapters/s3_adapter_spec.rb
|
76
78
|
- spec/fixtures/test.pdf
|
77
79
|
- spec/spec_helper.rb
|
78
|
-
homepage:
|
80
|
+
homepage: ''
|
79
81
|
licenses: []
|
80
|
-
|
82
|
+
metadata: {}
|
81
83
|
post_install_message:
|
82
84
|
rdoc_options: []
|
83
|
-
|
84
|
-
require_paths:
|
85
|
+
require_paths:
|
85
86
|
- lib
|
86
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
-
|
88
|
-
requirements:
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
89
|
- - ">="
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
version: "0"
|
95
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
|
-
requirements:
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
98
94
|
- - ">="
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
|
101
|
-
segments:
|
102
|
-
- 0
|
103
|
-
version: "0"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
104
97
|
requirements: []
|
105
|
-
|
106
98
|
rubyforge_project: jackfs
|
107
|
-
rubygems_version:
|
99
|
+
rubygems_version: 2.6.6
|
108
100
|
signing_key:
|
109
|
-
specification_version:
|
101
|
+
specification_version: 4
|
110
102
|
summary: This is a fs gem we use
|
111
|
-
test_files:
|
103
|
+
test_files:
|
112
104
|
- spec/adapters/db_adapter_spec.rb
|
113
105
|
- spec/adapters/file_adapter_spec.rb
|
114
|
-
- spec/adapters/s3_adapter_spec.rb
|
115
106
|
- spec/fixtures/test.pdf
|
116
107
|
- spec/spec_helper.rb
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'aws/s3'
|
5
|
-
rescue LoadError
|
6
|
-
puts 'aws-s3 gem is required to use file store'
|
7
|
-
end
|
8
|
-
|
9
|
-
module Jackfs
|
10
|
-
class S3Adapter
|
11
|
-
|
12
|
-
TEMP_PATH = File.join('tmp','fs_cache')
|
13
|
-
|
14
|
-
attr_accessor :access_key, :secret_key, :bucket, :app_root, :app_env
|
15
|
-
|
16
|
-
def initialize(app_root, app_env)
|
17
|
-
@app_root = app_root
|
18
|
-
@app_env = app_env
|
19
|
-
|
20
|
-
FileUtils.mkdir_p(full_temp_path)
|
21
|
-
|
22
|
-
yml = YAML.load_file(config_file)[@app_env.to_s]
|
23
|
-
@access_key = yml["access_key"]
|
24
|
-
@secret_key = yml["secret_key"]
|
25
|
-
@bucket = yml["bucket"]
|
26
|
-
|
27
|
-
# Clean up temp files
|
28
|
-
FileUtils.remove_file(File.join(full_temp_path,'/*'), true)
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def store(f, name)
|
33
|
-
find_or_create_bucket
|
34
|
-
AWS::S3::S3Object.store(name, f, @bucket)
|
35
|
-
name
|
36
|
-
end
|
37
|
-
|
38
|
-
def get(name)
|
39
|
-
unique_name = UUIDTools::UUID.random_create.to_s
|
40
|
-
# Write Body to generated tmp file
|
41
|
-
open(File.join(full_temp_path, unique_name), 'wb') do |file|
|
42
|
-
AWS::S3::S3Object.stream(name, @bucket) do |chunk|
|
43
|
-
file.write chunk
|
44
|
-
end
|
45
|
-
end
|
46
|
-
# Open and return Temp File
|
47
|
-
open(File.join(full_temp_path,unique_name), 'rb')
|
48
|
-
end
|
49
|
-
|
50
|
-
def establish_connection
|
51
|
-
AWS::S3::Base.establish_connection!(
|
52
|
-
:access_key_id => @access_key,
|
53
|
-
:secret_access_key => @secret_key
|
54
|
-
)
|
55
|
-
end
|
56
|
-
|
57
|
-
def find_or_create_bucket
|
58
|
-
establish_connection
|
59
|
-
AWS::S3::Bucket.create(@bucket) unless bucket = AWS::S3::Bucket.find(@bucket)
|
60
|
-
true
|
61
|
-
end
|
62
|
-
|
63
|
-
def full_temp_path
|
64
|
-
File.join(@app_root, TEMP_PATH)
|
65
|
-
end
|
66
|
-
|
67
|
-
def config_file
|
68
|
-
File.join(@app_root, Jackfs::FileStore::CONFIG_FILE)
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
3
|
-
|
4
|
-
|
5
|
-
describe "JackFS S3 Adapter" do
|
6
|
-
before(:each) do
|
7
|
-
root = File.dirname(__FILE__) + '/..'
|
8
|
-
YAML.should_receive(:load_file).and_return("test" => {
|
9
|
-
"adapter" => "s3",
|
10
|
-
"bucket" => 'jackhq',
|
11
|
-
"access_key" => ENV['AMAZON_ACCESS_KEY_ID'],
|
12
|
-
"secret_key" => ENV['AMAZON_SECRET_ACCESS_KEY']
|
13
|
-
})
|
14
|
-
|
15
|
-
@s3a = Jackfs::S3Adapter.new(root, :test)
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should save a file to a configured access key" do
|
20
|
-
@s3a.access_key.should == ENV['AMAZON_ACCESS_KEY_ID']
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should save a file to a configured secret key" do
|
24
|
-
@s3a.secret_key.should == ENV['AMAZON_SECRET_ACCESS_KEY']
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should save a file to a configured secret key" do
|
28
|
-
@s3a.bucket.should == "jackhq"
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should establish a connection to s3" do
|
32
|
-
AWS::S3::Base.stub!(:establish_connection!).and_return(true)
|
33
|
-
@s3a.establish_connection.should == true
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should create a bucket if a bucket does not exist" do
|
37
|
-
AWS::S3::Bucket.should_receive(:find).and_return(false)
|
38
|
-
AWS::S3::Bucket.should_receive(:create).and_return(true)
|
39
|
-
@s3a.find_or_create_bucket.should be_true
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should find a bucket if a bucket does exist" do
|
44
|
-
AWS::S3::Bucket.should_receive(:find).and_return(true)
|
45
|
-
@s3a.find_or_create_bucket.should be_true
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should save the file in s3 using the given name" do
|
49
|
-
@s3a.should_receive(:find_or_create_bucket).and_return(true)
|
50
|
-
AWS::S3::S3Object.should_receive(:store).and_return(true)
|
51
|
-
@s3a.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should == true
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should get a file from a configured from s3" do
|
55
|
-
f = File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r')
|
56
|
-
#AWS::S3::S3Object.should_receive(:stream).and_return(f)
|
57
|
-
@s3a.store(File.open(File.dirname(__FILE__) + '/../fixtures/test.pdf', 'r'),"COOLBEANS").should == true
|
58
|
-
@s3a.get("COOLBEANS").read.length.should == f.read.length
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|