cloud_encrypted_sync_filesystem_adapter 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ coverage/*
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'http://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cloud_encrypted_sync_filesystem_adapter (0.1.0)
5
+ cloud_encrypted_sync
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activesupport (3.2.3)
11
+ i18n (~> 0.6)
12
+ multi_json (~> 1.0)
13
+ cloud_encrypted_sync (0.3.1)
14
+ fakefs (0.4.1)
15
+ i18n (0.6.0)
16
+ metaclass (0.0.1)
17
+ mocha (0.11.4)
18
+ metaclass (~> 0.0.1)
19
+ multi_json (1.3.4)
20
+ rake (0.9.2.2)
21
+ simplecov (0.6.4)
22
+ multi_json (~> 1.0)
23
+ simplecov-html (~> 0.5.3)
24
+ simplecov-html (0.5.3)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ activesupport
31
+ cloud_encrypted_sync_filesystem_adapter!
32
+ fakefs
33
+ mocha
34
+ rake
35
+ simplecov
data/README.md ADDED
@@ -0,0 +1,16 @@
1
+ CloudEncryptedSync Filesystem Adapter
2
+ =====================================
3
+
4
+ A simple filesystem adapter for the CloudEncryptedSync gem.
5
+
6
+ This gem is meant primarily to serve as a demo. Instead of syncing files
7
+ to a remote cloud service, this adapter writes the ecrypted files to another
8
+ folder on your local filesystem.
9
+
10
+ In addition to arguments required by CES, you must also pass
11
+ `--storage-path /some/local/path` which tells CES where to write the encrypted
12
+ files to.
13
+
14
+ In theory, this should work just fine with a NFS mounted folder as well, but
15
+ this has not been tested and is not officially supported.
16
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake/testtask'
2
+
3
+ task :default => :test
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.pattern = 'test/**/*_test.rb'
9
+ t.verbose = true
10
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../lib/version', __FILE__)
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "cloud_encrypted_sync_filesystem_adapter"
5
+ s.version = CloudEncryptedSyncFilesystemAdapter::VERSION
6
+ s.platform = Gem::Platform::RUBY
7
+ s.authors = ["Jonathan S. Garvin"]
8
+ s.email = ["jon@5valleys.com"]
9
+ s.homepage = "https://github.com/jsgarvin/cloud_encrypted_sync_filesystem_adapter"
10
+ s.summary = %q{Filesystem adapter plugin for CloudEncryptedSync gem.}
11
+ s.description = %q{Filesystem adapter plugin for CloudEncryptedSync gem.}
12
+
13
+ s.add_dependency('cloud_encrypted_sync')
14
+
15
+ s.add_development_dependency('rake')
16
+ s.add_development_dependency('mocha')
17
+ s.add_development_dependency('fakefs')
18
+ s.add_development_dependency('simplecov')
19
+ s.add_development_dependency('activesupport')
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- test/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
@@ -0,0 +1,55 @@
1
+ module CloudEncryptedSync
2
+ module Adapters
3
+ class Filesystem < Template
4
+ attr_accessor :storage_path
5
+
6
+ def parse_command_line_options(parser)
7
+ parser.on('--storage-path PATH', 'Path to folder where encrypted files are/will be stored.') do |storage|
8
+ self.storage_path = storage
9
+ end
10
+ end
11
+
12
+ def write(data, key)
13
+ File.open(storage_path_to(key),'w') { |file| file.write(data) }
14
+ end
15
+
16
+ def read(key)
17
+ if key_exists?(key)
18
+ File.read(storage_path_to(key))
19
+ else
20
+ raise Errors::NoSuchKey.new(key)
21
+ end
22
+ end
23
+
24
+ def delete(key)
25
+ if key_exists?(key)
26
+ File.delete(storage_path_to(key))
27
+ else
28
+ raise Errors::NoSuchKey.new(key)
29
+ end
30
+ end
31
+
32
+ def key_exists?(key)
33
+ File.exist?(storage_path_to(key))
34
+ end
35
+
36
+ #######
37
+ private
38
+ #######
39
+
40
+ def storage_path_to(key)
41
+ "#{expanded_and_created_storage_path}/#{key}"
42
+ end
43
+
44
+ def expanded_and_created_storage_path
45
+ FileUtils.mkdir_p(expanded_storage_path)
46
+ return expanded_storage_path
47
+ end
48
+
49
+ def expanded_storage_path
50
+ File.expand_path(storage_path)
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,2 @@
1
+ require 'fileutils'
2
+ require File.expand_path('../adapters/filesystem', __FILE__)
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module CloudEncryptedSyncFilesystemAdapter
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'simplecov'
4
+ require 'fakefs/safe'
5
+ require 'active_support/test_case'
6
+ require 'test/unit'
7
+
8
+ SimpleCov.start
9
+
10
+ require 'cloud_encrypted_sync'
11
+ require 'cloud_encrypted_sync_filesystem_adapter'
12
+
13
+ module CloudEncryptedSyncFilesystemAdapter
14
+ class ActiveSupport::TestCase
15
+
16
+ setup :initialize_fake_fs
17
+ teardown :deactivate_fake_fs
18
+
19
+ #######
20
+ private
21
+ #######
22
+
23
+ def initialize_fake_fs
24
+ FakeFS.activate!
25
+ FakeFS::FileSystem.clear
26
+ end
27
+
28
+ def deactivate_fake_fs
29
+ FakeFS.deactivate!
30
+ end
31
+
32
+ end
33
+ end
34
+ require 'mocha'
@@ -0,0 +1,118 @@
1
+ require 'test_helper'
2
+
3
+ module CloudEncryptedSyncFilesystemAdapter
4
+ class AdapterTest < ActiveSupport::TestCase
5
+
6
+ def setup
7
+ stub_configuration
8
+ end
9
+
10
+ def teardown
11
+ unstub_configuration
12
+ end
13
+
14
+ # This is just a basic example (that will fail until you update it).
15
+ test 'should parse command line options' do
16
+ unstub_configuration
17
+ Object.send(:remove_const,:ARGV)
18
+ ::ARGV = '--storage-path /some/path'.split(/\s/)
19
+ @option_parser = OptionParser.new do |parser|
20
+ adapter.parse_command_line_options(parser)
21
+ end
22
+ @option_parser.parse!
23
+ assert_equal('/some/path',CloudEncryptedSync::Adapters::Filesystem.instance.send(:storage_path))
24
+ stub_configuration #just so that teardown unstub doesn't throw errors
25
+ end
26
+
27
+ test 'should write readable data to cloud and then delete it' do
28
+
29
+ test_data = 'testdata'
30
+ test_key = 'testkey'
31
+
32
+ assert !adapter.key_exists?(test_key)
33
+
34
+ assert_difference('number_of_files_in_storage') do
35
+ adapter.write(test_data,test_key)
36
+ end
37
+ assert adapter.key_exists?(test_key)
38
+
39
+ assert_equal(test_data,adapter.read(test_key))
40
+
41
+ assert_difference('number_of_files_in_storage',-1) do
42
+ adapter.delete(test_key)
43
+ end
44
+ assert !adapter.key_exists?(test_key)
45
+
46
+ end
47
+
48
+ # Your adapter should be written in such a way that this test passes as is.
49
+ test 'should raise NoSuchKey error' do
50
+ assert_raises(CloudEncryptedSync::Errors::NoSuchKey) { adapter.read('nonexistentkey') }
51
+ end
52
+
53
+ test 'should return false for non existent keys' do
54
+ refute adapter.key_exists?('nonexistentkey')
55
+ end
56
+
57
+ test 'should return true to existent keys' do
58
+ key = 'foobar'
59
+ File.open(storage_path_to(key),'w') { |file| file.write('Hello, World!') }
60
+ assert adapter.key_exists?(key)
61
+ end
62
+
63
+ test 'should write to storage' do
64
+ key = 'foobar'
65
+ refute adapter.key_exists?(key)
66
+ assert_difference('number_of_files_in_storage') do
67
+ adapter.write('this is my handle, this is my spout',key)
68
+ end
69
+ assert adapter.key_exists?(key)
70
+ end
71
+
72
+ test 'should read file from storage' do
73
+ key = 'foobar'
74
+ data = 'Hello, World!'
75
+ File.open(storage_path_to(key),'w') { |file| file.write(data) }
76
+ assert_equal(data,adapter.read(key))
77
+ end
78
+
79
+ test 'should delete file from storage' do
80
+ key = 'foobar'
81
+ data = 'Hello, World!'
82
+ File.open(storage_path_to(key),'w') { |file| file.write(data) }
83
+ assert_difference('number_of_files_in_storage',-1) do
84
+ adapter.delete(key)
85
+ end
86
+ end
87
+
88
+ #######
89
+ private
90
+ #######
91
+
92
+ def number_of_files_in_storage
93
+ Dir["#{full_storage_path}/*"].length
94
+ end
95
+
96
+ def storage_path_to(key)
97
+ adapter.send(:storage_path_to,key)
98
+ end
99
+
100
+ def full_storage_path
101
+ adapter.send(:expanded_storage_path)
102
+ end
103
+
104
+ def adapter
105
+ CloudEncryptedSync::Adapters::Filesystem.instance
106
+ end
107
+
108
+ # Setup test configuration values here as if they were passed in as command line arguments
109
+ def stub_configuration
110
+ CloudEncryptedSync::Adapters::Filesystem.any_instance.stubs(:storage_path).returns(File.expand_path('../test_storage_folder', __FILE__))
111
+ end
112
+
113
+ # Remove stubbed settings here that were stubbed in above method.
114
+ def unstub_configuration
115
+ CloudEncryptedSync::Adapters::Filesystem.any_instance.unstub(:storage_path)
116
+ end
117
+ end
118
+ end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloud_encrypted_sync_filesystem_adapter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jonathan S. Garvin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cloud_encrypted_sync
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
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: rake
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: mocha
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
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: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: fakefs
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
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: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
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: activesupport
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
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: Filesystem adapter plugin for CloudEncryptedSync gem.
111
+ email:
112
+ - jon@5valleys.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - Gemfile
119
+ - Gemfile.lock
120
+ - README.md
121
+ - Rakefile
122
+ - cloud_encrypted_sync_filesystem_adapter.gemspec
123
+ - lib/adapters/filesystem.rb
124
+ - lib/cloud_encrypted_sync_filesystem_adapter.rb
125
+ - lib/version.rb
126
+ - test/test_helper.rb
127
+ - test/unit/adapter_test.rb
128
+ homepage: https://github.com/jsgarvin/cloud_encrypted_sync_filesystem_adapter
129
+ licenses: []
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 1.8.24
149
+ signing_key:
150
+ specification_version: 3
151
+ summary: Filesystem adapter plugin for CloudEncryptedSync gem.
152
+ test_files:
153
+ - test/test_helper.rb
154
+ - test/unit/adapter_test.rb