windirs 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5ede397df9f93b22c6abf35efad482d3e8de646b
4
+ data.tar.gz: 548078b8a4861930c60b3706dbd620ca19b8a3ae
5
+ SHA512:
6
+ metadata.gz: 0505406cf265dcec147cf39f1fced36ada1521faf799f507d091c197592476aafa67f6c6ddfd83c2d96a5ce35c71e271cb05e404a5e7566740884dc8a2db5263
7
+ data.tar.gz: 258965dfa43e982f8411bbe927033e1444c02e22c2d5651029f40819c09c8cc1ecc69e7b4d45381b16d94b488192200b1b055665e8dc7e036b3628619267de21
@@ -0,0 +1,35 @@
1
+ windirs
2
+ ---------
3
+ A ruby gem to convert between Unix, Windows, and Cygwin paths.
4
+
5
+ Installation
6
+ ---------
7
+ `gem install windirs`
8
+
9
+ or, if you want the latest and the greatest,
10
+
11
+ git clone https://github.com/windirs
12
+ cd windirs
13
+ rake install
14
+
15
+ (use `sudo` as necessary)
16
+
17
+ Runtime Requirements
18
+ ---------
19
+ ruby
20
+
21
+ Build Requirements
22
+ ---------
23
+ rake
24
+
25
+ Inspiration and History
26
+ ---------
27
+
28
+
29
+ License
30
+ ---------
31
+ © 2014 Noah Birnel
32
+ MIT license
33
+
34
+ [![Build Status](https://travis-ci.org/nbirnel/windirs.png?branch=master)](https://travis-ci.org/nbirnel/windirs)
35
+ [![Code Climate](https://codeclimate.com/github/nbirnel/windirs.png)](https://codeclimate.com/github/nbirnel/windirs)
@@ -0,0 +1,126 @@
1
+ ##
2
+ # Classes for representing directory paths in various formats.
3
+
4
+ module Windirs
5
+
6
+ ##
7
+ # Represents a directory path, either absolute or relative.
8
+ #
9
+ # This Class is meant to be used when you are uncertain where your
10
+ # program will be running.
11
+ #
12
+ # For instance,
13
+ # if you want to make windows shortcuts with win32-shortcut
14
+ # http://rubygems.org/gems/win32-shortcut
15
+ # you will need a windows style path.
16
+ # But if you don't know the location until run-time,
17
+ # and you are uncertain if you are running in Cygwin or native Ruby,
18
+ # you could use:
19
+ # s.path = Windirs::Path.new(Dir.pwd).windows
20
+ #
21
+ # BUGS
22
+ # ----------------
23
+ # Does not dereference Cygwin mount points to Windows drives.
24
+ # This is arguably not a bug,
25
+ # but a feature not yet implemented.
26
+ #
27
+ # Ditto for dereferencing Windows network mounts to UNC paths.
28
+ #
29
+
30
+
31
+ class Path
32
+
33
+ ##
34
+ # Create a new Path from +path+.
35
+ #
36
+ # > winpath = Windirs::Path.new 'C:\Users\noah\Desktop'
37
+ # > nixpath = Windirs::Path.new '/bin/ls'
38
+ # > cygpath = Windirs::Path.new '/cygdrive/c/Users/noah/Desktop'
39
+ #
40
+ # You probably don't need to know the rest of this:
41
+ # +cygdrive_prefix+ defaults to '/cygdrive/',
42
+ # and is used to extract drive letters from Cygwin-ish looking paths.
43
+ # If you know will not be using Cygwin paths,
44
+ # you may wish to assign this to ''.
45
+ # If your cygdrive path prefix is something else,
46
+ # you should assign this appropriately.
47
+ # See
48
+ # http://cygwin.com/cygwin-ug-net/using.html#cygdrive
49
+ # for details.
50
+ # Note that we are using a trailing slash,
51
+ # unlike the Cygwin documentation.
52
+ #
53
+
54
+ def initialize path, cygdrive_prefix = '/cygdrive/'
55
+ dirs = '(?<dirs>.*)$'
56
+ windrive = '((?<drive>[A-Z]):)'
57
+ cygdrive = "(#{cygdrive_prefix}(?<drive>[a-z]))"
58
+ drive = "(#{windrive}|#{cygdrive})?"
59
+ path_re = Regexp.new('^' + drive + dirs)
60
+
61
+ if path_re =~ path
62
+ m = Regexp.last_match
63
+ @drive = m[:drive]
64
+ @dirs = m[:dirs]
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Return a Cygwin style path String.
70
+ # See Windirs.Path.initialize documentation
71
+ # for more info on +cygdrive_prefix+.
72
+ #
73
+ # > winpath.cygwin
74
+ # => "/cygdrive/c/Users/noah/Desktop"
75
+
76
+ def cygwin cygdrive_prefix = '/cygdrive/'
77
+ fpath('/', cygdrive_prefix){|drive| "#{@drive.downcase}"}
78
+ end
79
+
80
+ ##
81
+ # Return a *nix (Linux, Mac OS X, *BSD) style path String.
82
+ # +prefix+ will be used if a drive was detected in Path,
83
+ # but this is unlikely to be useful.
84
+ # You may want to assign it for certain Samba situations,
85
+ # but I have little opinion or knowledge on that.
86
+ #
87
+ # > winpath.nix
88
+ # => "/c/Users/noah/Desktop"
89
+
90
+ def nix prefix = '/'
91
+ fpath('/', prefix){|drive| "#{@drive.downcase}"}
92
+ end
93
+
94
+ ##
95
+ # Return a Ruby on Windows style path String.
96
+ #
97
+ # > winpath.rubywin
98
+ # => "C:/Users/noah/Desktop"
99
+
100
+ def rubywin
101
+ fpath('/'){ |drive| "#{@drive.upcase}:"}
102
+ end
103
+
104
+ ##
105
+ # Return a Windows style path String.
106
+ #
107
+ # > cygpath.windows
108
+ # => "C:\\Users\\noah\\Desktop"
109
+ # > puts cygpath.windows
110
+ # "C:\Users\noah\Desktop"
111
+ # => nil
112
+
113
+ def windows
114
+ fpath('\\'){ |drive| "#{@drive.upcase}:"}
115
+ end
116
+
117
+ private
118
+
119
+ def fpath del='/', prefix=''
120
+ drive = @drive ? "#{prefix}#{yield(@drive)}" : nil
121
+ "#{drive}#{@dirs}".gsub(/[\/\\\\]/, del)
122
+ end
123
+
124
+ end
125
+
126
+ end
@@ -0,0 +1,66 @@
1
+ require "#{File.dirname(__FILE__)}/../lib/windirs"
2
+
3
+ describe Windirs do
4
+
5
+ before do
6
+ @relatives = {
7
+ :windows => '.\\somedir\\file',
8
+ :cygwin => './somedir/file',
9
+ :rubywin => './somedir/file',
10
+ :nix => './somedir/file',
11
+ }
12
+ @rpaths = Hash.new
13
+ @relatives.map{|k, v| @rpaths[k] = Windirs::Path.new(v)}
14
+
15
+ @drives = {
16
+ :cygwin => '/cygdrive/c/Users/joe/Desktop',
17
+ :windows => 'C:\Users\joe\Desktop',
18
+ :rubywin => 'C:/Users/joe/Desktop',
19
+ }
20
+ @dpaths = Hash.new
21
+ @drives.map{|k, v| @dpaths[k] = Windirs::Path.new(v)}
22
+
23
+ @uncs = {
24
+ :windows => '\\\\windomain\\somedir\\file',
25
+ :cygwin => '//windomain/somedir/file',
26
+ :rubywin => '//windomain/somedir/file',
27
+ :nix => '//windomain/somedir/file',
28
+ }
29
+ @upaths = Hash.new
30
+ @uncs.map{|k, v| @upaths[k] = Windirs::Path.new(v)}
31
+
32
+ end
33
+
34
+ describe Windirs::Path do
35
+
36
+ it 'converts any drive to any drive' do
37
+ @drives.keys.repeated_permutation(2).each do |from, to|
38
+ puts "converts from #{from} to #{to}"
39
+ @dpaths[from].method(to).call.should eq @drives[to]
40
+ end
41
+ end
42
+
43
+ it 'fakes a drive letter to *nix' do
44
+ @drives.keys.each do |from|
45
+ puts "fake drive letter from #{from} to *nix"
46
+ @dpaths[from].nix.should eq '/c/Users/joe/Desktop'
47
+ end
48
+ end
49
+
50
+ it 'converts any unc to any unc' do
51
+ @uncs.keys.repeated_permutation(2).each do |from, to|
52
+ puts "converts from #{from} to #{to}"
53
+ @upaths[from].method(to).call.should eq @uncs[to]
54
+ end
55
+ end
56
+
57
+ it 'converts relative paths' do
58
+ @relatives.keys.repeated_permutation(2).each do |from, to|
59
+ puts "converts from #{from} to #{to}"
60
+ @rpaths[from].method(to).call.should eq @relatives[to]
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'windirs'
3
+ s.version = '0.0.0'
4
+ s.date = '2014-03-21'
5
+ s.summary = "translate between Cygwin, Windows, and Unix file paths"
6
+ s.description = "#{s.summary}"
7
+ s.authors = ['Noah Birnel']
8
+ s.email = 'nbirnel@gmail.com'
9
+ s.homepage = 'http://github.com/nbirnel/windirs'
10
+ s.files = ['README.md', 'windirs.gemspec', 'lib/windirs.rb', 'spec/windirs_spec.rb']
11
+ s.has_rdoc = true
12
+ s.license = 'MIT'
13
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: windirs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Noah Birnel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-21 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: translate between Cygwin, Windows, and Unix file paths
14
+ email: nbirnel@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - windirs.gemspec
21
+ - lib/windirs.rb
22
+ - spec/windirs_spec.rb
23
+ homepage: http://github.com/nbirnel/windirs
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.0.7
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: translate between Cygwin, Windows, and Unix file paths
47
+ test_files: []