file_transfer_mixin 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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format nested
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@file_transfer_mixin
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in file_transfer_mixin.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,35 @@
1
+ == FileTransferMixin ==
2
+ FileTransferMixin is a module that you can include in a library. It will support various mechanisms long-term, but
3
+ for now is focused on SFTP servers.
4
+
5
+ - sftp_send(key, remote_location, local_file_path)
6
+ - sftp_fetch(key, remote_path, local_path)
7
+
8
+ - It expects an ENV variable named FILE_TRANSFER_MIXIN_CONFIG_PATH to be set.
9
+ - It expects a yml configuration file in FILE_TRANSFER_MIXIN_CONFIG_PATH that looks like the following:
10
+
11
+ sftp:
12
+ some_key:
13
+ server: sftp.matrix.com
14
+ username: neo
15
+ password: the_one
16
+
17
+ Then in a class, you would deal with it thusly:
18
+
19
+ class SomeClass
20
+ include FileTransferMixin
21
+
22
+ # Some method that uploads a file
23
+ def some_method
24
+ sftp_send(:some_key, remote_path, local_path)
25
+ end
26
+
27
+ # Some method that fetches a file
28
+ def fetch_method
29
+ sftp_fetch(:some_key, remote_path, local_path)
30
+ end
31
+ end
32
+
33
+ == Motivation ==
34
+ We have quite a few libraries that interact with remote SFTP servers, and inevitably they share massive swathes of code
35
+ that should be unnecessary. This intends to be a mixin to make the easy things extremely easy.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "file_transfer_mixin/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "file_transfer_mixin"
7
+ s.version = FileTransferMixin::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Josh Adams"]
10
+ s.email = ["josh@isotope11.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{A mixin to include in various libraries to allow you to easily send/retrieve files from remote servers.}
13
+
14
+ s.rubyforge_project = "file_transfer_mixin"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'net-sftp', '~> 2.0.5'
22
+ s.add_dependency 'enviro', '~> 0.0.4'
23
+ s.add_development_dependency "bundler", ">= 1.0.0.rc.6"
24
+ s.add_development_dependency "rspec", "~> 2.4.0"
25
+ s.add_development_dependency "ruby-debug19"
26
+ end
@@ -0,0 +1,38 @@
1
+ module FileTransferMixin
2
+ module InstanceMethods
3
+ extend Forwardable
4
+
5
+ def_delegators :file_transfer_mixin_sftp_instance, :sftp_send, :sftp_fetch
6
+
7
+ private
8
+ def file_transfer_mixin_sftp_instance
9
+ ::FileTransferMixin::Interfaces::SFTP.new
10
+ end
11
+ end
12
+
13
+ module Interfaces
14
+ class SFTP
15
+ def configuration
16
+ FileTransferMixin.configuration.sftp
17
+ end
18
+
19
+ def sftp_block(key, &block)
20
+ Net::SFTP.start(configuration[key][:server], configuration[key][:username], :password => configuration[key][:password]) do |sftp|
21
+ yield(sftp)
22
+ end
23
+ end
24
+
25
+ def sftp_send(key, remote_path, local_path)
26
+ sftp_block(key) do |sftp|
27
+ sftp.upload!(local_path, remote_path)
28
+ end
29
+ end
30
+
31
+ def sftp_fetch(key, remote_path, local_path)
32
+ sftp_block(key) do |sftp|
33
+ sftp.download!(remote_path, local_path)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ require 'file_transfer_mixin/interfaces/sftp'
2
+
3
+ module FileTransferMixin
4
+ module Interfaces
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module FileTransferMixin
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'enviro'
2
+ require 'net/sftp'
3
+ require 'forwardable'
4
+
5
+ require 'file_transfer_mixin/interfaces'
6
+
7
+ module FileTransferMixin
8
+ include ::Enviro::Environate
9
+ configuration_path_env :file_transfer_mixin_config_path
10
+
11
+ module InstanceMethods
12
+ end
13
+
14
+ def self.included(base)
15
+ base.send :include, InstanceMethods
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe FileTransferMixin do
4
+ before(:each) do
5
+ Object.send(:remove_const, :TestFileTransferMixin) if defined?(TestFileTransferMixin)
6
+
7
+ ENV['FILE_TRANSFER_MIXIN_CONFIG_PATH'] = '/tmp/file_transfer_mixin_enviro_config.yml'
8
+
9
+ config = {
10
+ :development => {
11
+ },
12
+ :test => {
13
+ },
14
+ :production => {
15
+ },
16
+ }
17
+ File.open(ENV['FILE_TRANSFER_MIXIN_CONFIG_PATH'], 'w') do |f|
18
+ f.write(YAML.dump(config))
19
+ end
20
+
21
+ class TestFileTransferMixin
22
+ include FileTransferMixin
23
+ end
24
+ end
25
+
26
+ it "should be valid" do
27
+ FileTransferMixin.should be_a(Module)
28
+ end
29
+
30
+ it "should know where to find its configuration file" do
31
+ FileTransferMixin.configuration_path.should == ENV['FILE_TRANSFER_MIXIN_CONFIG_PATH']
32
+ end
33
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe ::FileTransferMixin::Interfaces::SFTP do
4
+ before(:each) do
5
+ Object.send(:remove_const, :TestFileTransferMixin) if defined?(TestFileTransferMixin)
6
+ ENV['FILE_TRANSFER_MIXIN_CONFIG_PATH'] = '/tmp/file_transfer_mixin_enviro_config.yml'
7
+ ENV['ENVY_ENV'] = 'development'
8
+
9
+ @config = {
10
+ :development => {
11
+ :sftp => {
12
+ :some_key => {
13
+ :server => '127.0.0.1',
14
+ :username => 'user',
15
+ :password => 'pass',
16
+ }
17
+ }
18
+ },
19
+ :test => {
20
+ },
21
+ :production => {
22
+ },
23
+ }
24
+ File.open(ENV['FILE_TRANSFER_MIXIN_CONFIG_PATH'], 'w') do |f|
25
+ f.write(YAML.dump(@config))
26
+ end
27
+
28
+ class TestFileTransferMixin
29
+ include FileTransferMixin
30
+ end
31
+
32
+ sftp_mock = mock('sftp')
33
+ sftp_mock.stub!(:upload!).and_return(true)
34
+ sftp_mock.stub!(:download!).and_return(true)
35
+ Net::SFTP.stub(:start).and_return(sftp_mock)
36
+ end
37
+
38
+ it "should know its parent configuration key" do
39
+ subject.configuration.should == @config[:development][:sftp]
40
+ end
41
+
42
+ it "should be able to find the server, username, and password for a given key" do
43
+ subject.configuration[:some_key][:server].should == '127.0.0.1'
44
+ subject.configuration[:some_key][:username].should == 'user'
45
+ subject.configuration[:some_key][:password].should == 'pass'
46
+ end
47
+
48
+ it "should respond to sftp_send" do
49
+ lambda{ TestFileTransferMixin.new.sftp_send(:some_key, 'path', 'file_path') }.should_not raise_error
50
+ end
51
+
52
+ it "should respond to sftp_fetch" do
53
+ lambda{ TestFileTransferMixin.new.sftp_fetch(:some_key, 'path', 'file_path') }.should_not raise_error
54
+ end
55
+ end
@@ -0,0 +1,14 @@
1
+ require 'bundler/setup'
2
+ Bundler.require :default, :test
3
+
4
+ require "rspec"
5
+
6
+ RSpec.configure do |config|
7
+ # Remove this line if you don't want RSpec's should and should_not
8
+ # methods or matchers
9
+ require 'rspec/expectations'
10
+ config.include RSpec::Matchers
11
+
12
+ # == Mock Framework
13
+ config.mock_with :rspec
14
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: file_transfer_mixin
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Josh Adams
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-03-04 00:00:00 -06:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: net-sftp
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 2
30
+ - 0
31
+ - 5
32
+ version: 2.0.5
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: enviro
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 0
46
+ - 4
47
+ version: 0.0.4
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: bundler
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 1
60
+ - 0
61
+ - 0
62
+ - rc
63
+ - 6
64
+ version: 1.0.0.rc.6
65
+ type: :development
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: rspec
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 2
77
+ - 4
78
+ - 0
79
+ version: 2.4.0
80
+ type: :development
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: ruby-debug19
84
+ prerelease: false
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ type: :development
94
+ version_requirements: *id005
95
+ description:
96
+ email:
97
+ - josh@isotope11.com
98
+ executables: []
99
+
100
+ extensions: []
101
+
102
+ extra_rdoc_files: []
103
+
104
+ files:
105
+ - .gitignore
106
+ - .rspec
107
+ - .rvmrc
108
+ - Gemfile
109
+ - README
110
+ - Rakefile
111
+ - file_transfer_mixin.gemspec
112
+ - lib/file_transfer_mixin.rb
113
+ - lib/file_transfer_mixin/interfaces.rb
114
+ - lib/file_transfer_mixin/interfaces/sftp.rb
115
+ - lib/file_transfer_mixin/version.rb
116
+ - spec/lib/file_transfer_mixin_spec.rb
117
+ - spec/lib/interfaces/sftp_spec.rb
118
+ - spec/spec_helper.rb
119
+ has_rdoc: true
120
+ homepage: ""
121
+ licenses: []
122
+
123
+ post_install_message:
124
+ rdoc_options: []
125
+
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ requirements: []
145
+
146
+ rubyforge_project: file_transfer_mixin
147
+ rubygems_version: 1.3.7
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: A mixin to include in various libraries to allow you to easily send/retrieve files from remote servers.
151
+ test_files: []
152
+