cloud_encrypted_sync_filesystem_adapter 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.
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