nu 0.1.17 → 0.1.18
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nu +0 -0
- data/lib/nu/cli.rb +47 -39
- data/lib/nu/gem_tools.rb +29 -0
- data/lib/nu/lib_tools.rb +22 -0
- data/lib/nu/loader.rb +69 -80
- data/lib/nu/project.rb +59 -60
- metadata +7 -4
data/bin/nu
CHANGED
File without changes
|
data/lib/nu/cli.rb
CHANGED
@@ -4,46 +4,54 @@ require 'yaml'
|
|
4
4
|
|
5
5
|
module Nu
|
6
6
|
class CLI < Thor
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
def initialize(*)
|
10
|
+
super
|
11
|
+
|
12
|
+
@proj = Nu::Project.new
|
13
|
+
end
|
14
|
+
|
15
15
|
desc "install GEMNAME", "installs a gem in the 'pwd'"
|
16
|
-
method_options :location => :string
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
16
|
+
method_options :location => :string, :version => :string
|
17
|
+
|
18
|
+
def install(*names)
|
19
|
+
|
20
|
+
loc = @proj.location
|
21
|
+
cl = options['location']
|
22
|
+
ver = options['version']
|
23
|
+
|
24
|
+
loc = cl unless cl.nil?
|
25
|
+
|
26
|
+
names.each do |n|
|
27
|
+
loader = Nu::Loader.new(n, loc, ver)
|
28
|
+
loader.copy_to_lib
|
27
29
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "uninstall GEM", "remove the specified gem from the lib folder"
|
33
|
+
def uninstall(gem)
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "lib FOLDER", "where do you want to store the gems"
|
38
|
+
def lib(folder)
|
39
|
+
@proj.location= folder
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "uselongnames", "turn the option of name + version number on"
|
43
|
+
def uselongnames
|
44
|
+
@proj.use_long_names
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "useshortnames", "turn the option of name + version number off"
|
48
|
+
def useshortnames
|
49
|
+
@proj.use_short_names
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.source_root
|
53
|
+
File.dirname(__FILE__)
|
54
|
+
end
|
55
|
+
|
48
56
|
end
|
49
57
|
end
|
data/lib/nu/gem_tools.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
module Nu
|
4
|
+
class GemTools
|
5
|
+
|
6
|
+
def self.spec_for(name, requirement=nil)
|
7
|
+
unless requirement.respond_to?('satisfied_by?')
|
8
|
+
requirement = Gem::Requirement.create(requirement)
|
9
|
+
end
|
10
|
+
dependency = Gem::Dependency.new(name,requirement)
|
11
|
+
searcher = Gem::GemPathSearcher.new()
|
12
|
+
all_installed_gems = searcher.init_gemspecs()
|
13
|
+
|
14
|
+
return all_installed_gems.detect {|spec| spec.satisfies_requirement?(dependency)}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.lib_for(name, requirement=nil)
|
18
|
+
gem = spec_for(name, requirement)
|
19
|
+
gem_path = gem.full_gem_path
|
20
|
+
libdir = File.join(gem_path,"lib")
|
21
|
+
unless File.exist?(libdir)
|
22
|
+
libdir = IO.readlines(File.join(gem_path, ".require_paths"))[0].strip
|
23
|
+
libdir = File.expand_path(File.join(gem_path,libdir))
|
24
|
+
end
|
25
|
+
libdir
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/nu/lib_tools.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
module Nu
|
4
|
+
class LibTools
|
5
|
+
|
6
|
+
def self.gemspec_for(name)
|
7
|
+
gems = Gem.source_index.find_name name
|
8
|
+
return gems.last if gems.length > 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.folder_name_for(gem_name, lib, long_name=false)
|
12
|
+
spec = gemspec_for(gem_name)
|
13
|
+
|
14
|
+
if long_name
|
15
|
+
name = spec.full_name
|
16
|
+
else
|
17
|
+
name = spec.name
|
18
|
+
end
|
19
|
+
Dir.pwd + "/#{lib}/#{name}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/nu/loader.rb
CHANGED
@@ -1,103 +1,92 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rubygems/dependency_installer'
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/lib_tools.rb")
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/gem_tools.rb")
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + "/project.rb")
|
3
6
|
|
4
7
|
module Nu
|
5
8
|
class Loader
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
attr :gem_name
|
11
|
+
attr :location
|
12
|
+
attr :version
|
13
|
+
|
14
|
+
def initialize(name, location, version)
|
12
15
|
#improve the crap out of this
|
13
|
-
@
|
14
|
-
|
16
|
+
@gem_name = name
|
17
|
+
@location = location
|
18
|
+
@version = version
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
20
|
+
if !gem_available?
|
21
|
+
puts "Gem #{@gem_name} #{@version} is not installed locally - I am now going to try and install it"
|
22
|
+
begin
|
23
|
+
inst = Gem::DependencyInstaller.new
|
24
|
+
inst.install @gem_name, @version
|
25
|
+
inst.installed_gems.each do |spec|
|
26
|
+
puts "Successfully installed #{spec.full_name}"
|
27
|
+
end
|
28
|
+
rescue Gem::GemNotFoundException => e
|
29
|
+
puts "ERROR: #{e.message}"
|
30
|
+
return #GTFO
|
31
|
+
end
|
29
32
|
else
|
30
33
|
puts "Found Gem"
|
31
34
|
end
|
32
35
|
#TODO: better error handling flow control for above
|
33
|
-
|
34
|
-
|
35
|
-
start_here = get_copy_from()
|
36
|
-
puts "Copy From: #{start_here}"
|
37
|
-
|
38
|
-
to = get_copy_to()
|
39
|
-
puts "Copy To: #{to}"
|
40
|
-
|
41
|
-
FileUtils.copy_entry start_here, to
|
42
|
-
|
43
|
-
process_dependencies
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.get_libdir(name)
|
47
|
-
g = get_gemspec name
|
48
|
-
#puts "GemSpec #{g.full_gem_path}"
|
49
|
-
l = g.full_gem_path
|
50
|
-
d = File.join(l,"lib")
|
51
|
-
#puts d
|
52
|
-
d
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.get_gemspec(name)
|
56
|
-
gems = Gem.source_index.find_name name
|
57
|
-
return gems.last if gems.length > 0
|
58
36
|
end
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
37
|
+
|
38
|
+
def copy_to_lib
|
39
|
+
start_here = copy_source
|
40
|
+
puts "Copy From: #{start_here}"
|
41
|
+
|
42
|
+
to = copy_dest
|
43
|
+
puts "Copy To: #{to}"
|
44
|
+
|
45
|
+
FileUtils.copy_entry start_here, to
|
46
|
+
|
47
|
+
process_dependencies
|
48
|
+
end
|
49
|
+
|
50
|
+
def gemspec
|
51
|
+
Nu::GemTools.spec_for(@gem_name, @version)
|
52
|
+
end
|
53
|
+
|
54
|
+
def gem_available?
|
55
|
+
Gem.available? @gem_name, @version
|
56
|
+
end
|
57
|
+
|
58
|
+
def copy_source
|
59
|
+
Nu::GemTools.lib_for(@gem_name, @version).gsub '{lib}','lib'
|
71
60
|
end
|
72
|
-
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
spec = get_gemspec @gem_to_copy
|
61
|
+
|
62
|
+
def copy_dest
|
63
|
+
proj = Nu::Project.new
|
64
|
+
|
77
65
|
#to be used in copying
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
66
|
+
if proj.should_use_long_names?
|
67
|
+
name = gemspec.full_name
|
68
|
+
else
|
69
|
+
name = gemspec.name
|
70
|
+
end
|
83
71
|
to = Dir.pwd + "/#{@location}/#{name}"
|
84
72
|
if Dir[to] == [] #may need a smarter guy here
|
85
73
|
FileUtils.mkpath to
|
86
74
|
end
|
87
75
|
to
|
88
76
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
77
|
+
|
78
|
+
def process_dependencies
|
79
|
+
gemspec.dependencies.each do |d|
|
80
|
+
if Gem.available? d.name
|
81
|
+
puts "Loading dependency: #{d.name} #{d.requirement}"
|
82
|
+
loader = Loader.new(d.name, @location, d.requirement)
|
83
|
+
loader.copy_to_lib
|
84
|
+
else
|
85
|
+
puts "#{d.name} is not installed locally"
|
86
|
+
puts "please run 'gem install #{d.name}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
102
91
|
end
|
103
92
|
end
|
data/lib/nu/project.rb
CHANGED
@@ -2,74 +2,73 @@ require 'FileUtils'
|
|
2
2
|
|
3
3
|
module Nu
|
4
4
|
class Project
|
5
|
-
|
5
|
+
|
6
6
|
def initialize
|
7
7
|
@config_file = ".nu/options.yaml"
|
8
|
-
|
8
|
+
ensure_default_config
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
#need to meta awesome this
|
11
|
+
# need to meta awesome this
|
14
12
|
def location
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
opts = get_options
|
14
|
+
opts['lib']
|
15
|
+
end
|
16
|
+
|
17
|
+
# need to meta awesome this
|
18
|
+
def location=(name)
|
19
|
+
opts = get_options
|
20
|
+
opts['lib']=name
|
21
|
+
save_file(opts)
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
#need to meta awesome this
|
26
|
+
def should_use_long_names?
|
27
|
+
opts = get_options
|
28
|
+
opts['uselongnames']
|
29
|
+
end
|
30
|
+
|
31
|
+
#need to meta awesome this
|
32
|
+
def use_long_names
|
33
|
+
opts = get_options
|
34
|
+
opts['uselongnames']=true
|
35
|
+
save_file(opts)
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
39
|
+
#need to meta awesome this
|
40
|
+
def use_short_names
|
41
|
+
opts = get_options
|
42
|
+
opts['uselongnames']=false
|
43
|
+
save_file(opts)
|
44
|
+
nil
|
24
45
|
end
|
25
|
-
|
26
|
-
#need to meta awesome this
|
27
|
-
def should_use_long_names?
|
28
|
-
opts = get_options
|
29
|
-
opts['uselongnames']
|
30
|
-
end
|
31
|
-
|
32
|
-
#need to meta awesome this
|
33
|
-
def use_long_names
|
34
|
-
opts = get_options
|
35
|
-
opts['uselongnames']=true
|
36
|
-
save_file(opts)
|
37
|
-
nil
|
38
|
-
end
|
39
|
-
#need to meta awesome this
|
40
|
-
def use_short_names
|
41
|
-
opts = get_options
|
42
|
-
opts['uselongnames']=false
|
43
|
-
save_file(opts)
|
44
|
-
nil
|
45
|
-
end
|
46
|
-
|
47
|
-
|
46
|
+
|
48
47
|
def add_file(name, content)
|
49
48
|
FileUtils.mkdir_p(File.dirname(name))
|
50
49
|
File.open(name, 'w'){|f| f.write(content)}
|
51
50
|
end
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
51
|
+
|
52
|
+
private
|
53
|
+
def ensure_default_config
|
54
|
+
if File.exist? @config_file
|
55
|
+
return
|
56
|
+
end
|
57
|
+
|
58
|
+
save_file( {'lib'=>'lib','uselongnames'=>false} )
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_options
|
62
|
+
YAML.load_file @config_file
|
63
|
+
end
|
64
|
+
|
65
|
+
def save_file(opts)
|
66
|
+
content = YAML::dump(opts)
|
67
|
+
File.delete @config_file if File.exist? @config_file
|
68
|
+
dir_name = File.dirname(@config_file)
|
69
|
+
FileUtils.mkdir_p(dir_name) unless File.exist? dir_name
|
70
|
+
File.open(@config_file, 'w') {|f| f.write(content) }
|
71
|
+
end
|
72
|
+
|
74
73
|
end
|
75
|
-
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 18
|
10
|
+
version: 0.1.18
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dru Sellers
|
14
14
|
- Chris Patterson
|
15
15
|
- Rob Reynold
|
16
|
+
- Travis Smith
|
16
17
|
autorequire:
|
17
18
|
bindir: bin
|
18
19
|
cert_chain: []
|
19
20
|
|
20
|
-
date: 2010-
|
21
|
+
date: 2010-08-25 00:00:00 -05:00
|
21
22
|
default_executable:
|
22
23
|
dependencies:
|
23
24
|
- !ruby/object:Gem::Dependency
|
@@ -49,6 +50,8 @@ files:
|
|
49
50
|
- bin/nu
|
50
51
|
- lib/nu/cli.rb
|
51
52
|
- lib/nu/config.rb
|
53
|
+
- lib/nu/gem_tools.rb
|
54
|
+
- lib/nu/lib_tools.rb
|
52
55
|
- lib/nu/loader.rb
|
53
56
|
- lib/nu/project.rb
|
54
57
|
- lib/nu.rb
|