borrower 0.2.1 → 0.3.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/lib/borrower/content.rb +90 -0
- data/lib/borrower/manifest.rb +2 -1
- data/lib/borrower/merge.rb +1 -1
- data/lib/borrower/public_api.rb +3 -3
- data/lib/borrower/version.rb +1 -1
- data/lib/borrower.rb +2 -3
- data/spec/borrower/merge_spec.rb +1 -1
- data/spec/borrower/transport_spec.rb +36 -36
- metadata +3 -4
- data/lib/borrower/path.rb +0 -79
- data/lib/borrower/transport.rb +0 -35
@@ -0,0 +1,90 @@
|
|
1
|
+
module Borrower
|
2
|
+
class Content
|
3
|
+
class << self
|
4
|
+
|
5
|
+
# take the contents of the file at the path
|
6
|
+
# @param [String] path
|
7
|
+
# @return [String] the contents
|
8
|
+
def get path
|
9
|
+
path = Borrower.find(path)
|
10
|
+
obj = Item.new( path )
|
11
|
+
|
12
|
+
if obj.remote? && obj.exists?
|
13
|
+
return obj.body
|
14
|
+
else
|
15
|
+
return IO.read(path)
|
16
|
+
end
|
17
|
+
|
18
|
+
raise "nothing exists at the provided path '#{path}'"
|
19
|
+
end
|
20
|
+
|
21
|
+
def put content, destination, args
|
22
|
+
FileUtils.mkdir_p( File.dirname(destination) )
|
23
|
+
File.open( destination, 'w', internal_encoding: content.encoding ) do |file|
|
24
|
+
content = Borrower.merge(content) if args[0].fetch(:merge) { false }
|
25
|
+
file.write content
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
class Item
|
32
|
+
def initialize path
|
33
|
+
@path = path
|
34
|
+
end
|
35
|
+
|
36
|
+
def remote?
|
37
|
+
@_remote ||= is_remote?
|
38
|
+
end
|
39
|
+
|
40
|
+
def exists?
|
41
|
+
if remote?
|
42
|
+
return ( fetch_from_remote(@path).msg.include? "OK" )
|
43
|
+
else
|
44
|
+
return File.exists? @path
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def body
|
49
|
+
@_response.body
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def is_remote?
|
55
|
+
if @path.match /http[s]?:\/\//
|
56
|
+
return true
|
57
|
+
end
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
def fetch_from_remote path, limit=10
|
62
|
+
return @_response unless @_response.nil?
|
63
|
+
|
64
|
+
raise Error, 'HTTP redirect too deep' if limit == 0
|
65
|
+
response = get_response(path)
|
66
|
+
|
67
|
+
case response
|
68
|
+
when Net::HTTPSuccess then @_response = response
|
69
|
+
when Net::HTTPRedirection then fetch_from_remote(response['location'], limit-1 )
|
70
|
+
else
|
71
|
+
@_response = response
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_response path
|
76
|
+
uri = URI.parse(path)
|
77
|
+
request = Net::HTTP.new(uri.host, uri.port)
|
78
|
+
|
79
|
+
if uri.scheme == "https"
|
80
|
+
request.use_ssl = true
|
81
|
+
request.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
82
|
+
request.ssl_version = :SSLv3
|
83
|
+
end
|
84
|
+
|
85
|
+
return request.get(uri.request_uri)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/borrower/manifest.rb
CHANGED
@@ -18,7 +18,8 @@ module Borrower
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def find file
|
21
|
-
|
21
|
+
obj = Content::Item.new(file)
|
22
|
+
return file if obj.remote? || obj.exists?
|
22
23
|
|
23
24
|
path = check_for_file_in_manifest_files(file) || false
|
24
25
|
return path if path
|
data/lib/borrower/merge.rb
CHANGED
data/lib/borrower/public_api.rb
CHANGED
@@ -8,7 +8,7 @@ module Borrower
|
|
8
8
|
# @param [String] from the path to the file
|
9
9
|
# @return [String] contents of the file
|
10
10
|
def take from
|
11
|
-
|
11
|
+
Borrower::Content.get from
|
12
12
|
end
|
13
13
|
|
14
14
|
# write the content to a destination file
|
@@ -16,8 +16,8 @@ module Borrower
|
|
16
16
|
# @param [String] content content for the file
|
17
17
|
# @param [String] to path to write contents to
|
18
18
|
# @return [Void]
|
19
|
-
def put content, to
|
20
|
-
|
19
|
+
def put content, to, *args
|
20
|
+
Borrower::Content.put content, to, args
|
21
21
|
end
|
22
22
|
|
23
23
|
# parse through the content and merge
|
data/lib/borrower/version.rb
CHANGED
data/lib/borrower.rb
CHANGED
@@ -6,10 +6,9 @@ require "uri"
|
|
6
6
|
|
7
7
|
# borrower
|
8
8
|
require 'borrower/version'
|
9
|
+
require 'borrower/content'
|
9
10
|
require 'borrower/manifest'
|
10
11
|
require 'borrower/merge'
|
11
|
-
require 'borrower/path'
|
12
|
-
require 'borrower/transport'
|
13
12
|
require 'borrower/public_api'
|
14
13
|
|
15
14
|
module Borrower::DSL
|
@@ -31,7 +30,7 @@ module Borrower::DSL
|
|
31
30
|
# @return [Void]
|
32
31
|
def borrow path, args
|
33
32
|
destination = args.delete(:to) { raise ArgumentError, "missing 'to:' argument" }
|
34
|
-
Borrower
|
33
|
+
Borrower.put Borrower.take(path), destination , args
|
35
34
|
end
|
36
35
|
|
37
36
|
end
|
data/spec/borrower/merge_spec.rb
CHANGED
@@ -34,7 +34,7 @@ describe "moving files with a merge" do
|
|
34
34
|
m.file 'woo.txt', File.join( TMP, 'woo.txt' )
|
35
35
|
end
|
36
36
|
|
37
|
-
Borrower.merge(Borrower
|
37
|
+
Borrower.merge( Borrower.take(Borrower.find("multiple.txt"))).should == <<-output
|
38
38
|
hello I'm merged text
|
39
39
|
woo
|
40
40
|
|
@@ -1,48 +1,48 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'borrower/transport'
|
1
|
+
# require 'spec_helper'
|
2
|
+
# require 'borrower/transport'
|
3
3
|
|
4
|
-
describe Borrower::Transport do
|
5
|
-
|
4
|
+
# describe Borrower::Transport do
|
5
|
+
# include Borrower::Transport
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# before :each do
|
8
|
+
# given_file "file.txt", "Hi I'm a file"
|
9
|
+
# end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
# after :each do
|
12
|
+
# cleanup_tmp
|
13
|
+
# end
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
# let (:local_file) { File.join( TMP, 'file.txt' ) }
|
16
|
+
# let (:destination_path) { File.join( TMP, 'destination/file.txt' ) }
|
17
17
|
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
# describe "#take" do
|
20
|
+
# it "returns the correct contents" do
|
21
|
+
# take( local_file ).should == "Hi I'm a file"
|
22
|
+
# end
|
23
|
+
# end
|
24
24
|
|
25
|
-
|
25
|
+
# describe "#put" do
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
# it "puts a string to a file" do
|
28
|
+
# put "hello", destination_path
|
29
|
+
# take( destination_path ).should == "hello"
|
30
|
+
# end
|
31
|
+
# end
|
32
32
|
|
33
|
-
|
33
|
+
# describe "#move" do
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
# it "moves the file" do
|
36
|
+
# move( local_file, destination_path )
|
37
|
+
# take( destination_path ).should == "Hi I'm a file"
|
38
|
+
# end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
40
|
+
# it "overwrites an existing file" do
|
41
|
+
# put "hello", destination_path
|
42
|
+
# take( destination_path ).should == "hello" # just to make sure it was written to begin with
|
43
|
+
# move( local_file, destination_path )
|
44
|
+
# take( destination_path ).should == "Hi I'm a file"
|
45
|
+
# end
|
46
|
+
# end
|
47
47
|
|
48
|
-
end
|
48
|
+
# end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: borrower
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-ssh
|
@@ -35,11 +35,10 @@ executables: []
|
|
35
35
|
extensions: []
|
36
36
|
extra_rdoc_files: []
|
37
37
|
files:
|
38
|
+
- lib/borrower/content.rb
|
38
39
|
- lib/borrower/manifest.rb
|
39
40
|
- lib/borrower/merge.rb
|
40
|
-
- lib/borrower/path.rb
|
41
41
|
- lib/borrower/public_api.rb
|
42
|
-
- lib/borrower/transport.rb
|
43
42
|
- lib/borrower/version.rb
|
44
43
|
- lib/borrower.rb
|
45
44
|
- spec/borrower/manifest_spec.rb
|
data/lib/borrower/path.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
module Borrower
|
2
|
-
module Path
|
3
|
-
class << self
|
4
|
-
|
5
|
-
# take the contents of the file at the path
|
6
|
-
# @param path [String]
|
7
|
-
# @return [String] the contents
|
8
|
-
def contents path
|
9
|
-
path = Borrower.find(path)
|
10
|
-
|
11
|
-
if remote?(path) && exists?(path)
|
12
|
-
return fetch_from_remote(path).body
|
13
|
-
else
|
14
|
-
return IO.read(path)
|
15
|
-
end
|
16
|
-
|
17
|
-
raise "nothing exists at the provided path '#{path}'"
|
18
|
-
end
|
19
|
-
|
20
|
-
# check if the file exists for borrowing
|
21
|
-
# @param path [String]
|
22
|
-
# @return [Boolean]
|
23
|
-
def exists? path
|
24
|
-
if remote? path
|
25
|
-
return ( fetch_from_remote(path).msg.include? "OK" )
|
26
|
-
else
|
27
|
-
return File.exists? path
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# check if the path is remote or local
|
32
|
-
# @param path [String]
|
33
|
-
# @return [Boolean]
|
34
|
-
def remote? path
|
35
|
-
pattern = /http[s]?:\/\//
|
36
|
-
if path.match(pattern)
|
37
|
-
return true
|
38
|
-
end
|
39
|
-
|
40
|
-
return false
|
41
|
-
end
|
42
|
-
|
43
|
-
# get the contents of a remote file, handling redirection
|
44
|
-
# and ssh protocols
|
45
|
-
# @param path [String]
|
46
|
-
# @param limit [Integer] (optional)
|
47
|
-
# @return [String]
|
48
|
-
def fetch_from_remote path, limit=10
|
49
|
-
raise Error, 'HTTP redirect too deep' if limit == 0
|
50
|
-
response = get_response(path)
|
51
|
-
|
52
|
-
case response
|
53
|
-
when Net::HTTPSuccess then response
|
54
|
-
when Net::HTTPRedirection then fetch_from_remote(response['location'], limit-1 )
|
55
|
-
else
|
56
|
-
response
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# build a Net::HTTP request object and
|
61
|
-
# returns the response
|
62
|
-
# @param path[String]
|
63
|
-
# @return [Net::HTTPResponse]
|
64
|
-
def get_response path
|
65
|
-
uri = URI.parse(path)
|
66
|
-
request = Net::HTTP.new(uri.host, uri.port)
|
67
|
-
|
68
|
-
if uri.scheme == "https"
|
69
|
-
request.use_ssl = true
|
70
|
-
request.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
71
|
-
request.ssl_version = :SSLv3
|
72
|
-
end
|
73
|
-
|
74
|
-
return request.get(uri.request_uri)
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
data/lib/borrower/transport.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module Borrower
|
2
|
-
module Transport
|
3
|
-
|
4
|
-
# routes a file from -> to
|
5
|
-
# @param [String] from
|
6
|
-
# @param [String] to
|
7
|
-
# @param [Hash] args
|
8
|
-
def move from, to, args={}
|
9
|
-
content = take(from)
|
10
|
-
content = Borrower.merge(content) if args[:merge]
|
11
|
-
put( content, to )
|
12
|
-
end
|
13
|
-
|
14
|
-
# handles taking a file
|
15
|
-
# @param [String] from
|
16
|
-
# @return [String]
|
17
|
-
def take from
|
18
|
-
Path.contents(from)
|
19
|
-
end
|
20
|
-
|
21
|
-
# puts a file somewhere
|
22
|
-
# @param [String] content
|
23
|
-
# @param [String] to
|
24
|
-
def put content, to
|
25
|
-
FileUtils.mkdir_p( File.dirname(to) )
|
26
|
-
File.open( to, 'w', internal_encoding: content.encoding ) do |file|
|
27
|
-
file.write content
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
module_function :move
|
32
|
-
module_function :take
|
33
|
-
module_function :put
|
34
|
-
end
|
35
|
-
end
|