mgem 0.0.1 → 0.0.2
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/bin/mgem +26 -3
- data/lib/mgem.rb +36 -12
- metadata +2 -2
data/bin/mgem
CHANGED
@@ -51,17 +51,40 @@ elsif ARGV[0] == 'rm'
|
|
51
51
|
elsif ARGV[0] == 'search'
|
52
52
|
puts "Search result for '#{ARGV[1]}':"
|
53
53
|
gems.search(ARGV[1]).each {|gem| info_proc.call(gem) }
|
54
|
+
elsif ARGV[0] == 'update'
|
55
|
+
puts 'Update list of GEMs...'
|
56
|
+
gems.update!
|
57
|
+
puts 'DONE!'
|
58
|
+
elsif ARGV[0] == 'config'
|
59
|
+
puts <<__CONFIG__
|
60
|
+
MRuby::Build.new do |conf|
|
61
|
+
conf.cc = ENV['CC'] || 'gcc'
|
62
|
+
conf.ld = ENV['LD'] || 'gcc'
|
63
|
+
conf.ar = ENV['AR'] || 'ar'
|
64
|
+
|
65
|
+
conf.cflags << (ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration))
|
66
|
+
conf.ldflags << (ENV['LDFLAGS'] || %w(-lm))
|
67
|
+
|
68
|
+
#{
|
69
|
+
gems.active.map do |g|
|
70
|
+
" conf.gem :git => \'#{g.repository}\'"
|
71
|
+
end.join("\n")
|
72
|
+
}
|
73
|
+
end
|
74
|
+
__CONFIG__
|
54
75
|
else
|
55
76
|
puts <<INFO
|
56
|
-
mgem is a library manager for mruby
|
77
|
+
mgem (Version #{MGEM_VERSION}) is a library manager for mruby
|
57
78
|
|
58
79
|
Usage:
|
59
80
|
mgem size How many GEMs are available?
|
60
81
|
mgem list [active] List GEMs
|
61
82
|
mgem info *pattern* Show detail information about a GEM
|
62
|
-
mgem add *name* Activate a GEM
|
63
|
-
mgem rm *name* De-Activate a GEM
|
83
|
+
mgem add *name* Activate a GEM
|
84
|
+
mgem rm *name* De-Activate a GEM
|
64
85
|
mgem search *pattern* Search for GEMs
|
86
|
+
mgem config Generate a mruby build config including all active GEMs
|
87
|
+
mgem update Update the list of GEMs
|
65
88
|
|
66
89
|
Website:
|
67
90
|
https://github.com/bovi/mgem
|
data/lib/mgem.rb
CHANGED
@@ -1,17 +1,34 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
MGEM_VERSION = '0.0.2'
|
5
|
+
|
6
|
+
MGEM_DIR = '.mgem'
|
7
|
+
GEMS_ACTIVE = 'GEMS_ACTIVE.lst'
|
8
|
+
GEMS_LIST = 'mgem-list'
|
9
|
+
GEMS_REPO = 'https://github.com/bovi/mgem-list.git'
|
2
10
|
|
3
11
|
def load_gems
|
4
12
|
config = {}
|
5
|
-
|
13
|
+
config[:mgem_dir] = [ENV["HOME"], MGEM_DIR].join File::SEPARATOR
|
14
|
+
config[:mgem_active] = [config[:mgem_dir], GEMS_ACTIVE].join File::SEPARATOR
|
15
|
+
config[:mgem_list] = [config[:mgem_dir], GEMS_LIST].join File::SEPARATOR
|
6
16
|
|
7
|
-
config
|
8
|
-
config[:gems_dir] = "#{config[:mgem_root]}/gems"
|
9
|
-
config[:gems_active] = "#{ENV['HOME']}/mrbgems/GEMS.active"
|
10
|
-
config[:gems_build_dir] = "#{ENV['HOME']}/mrbgems/g"
|
17
|
+
initialize_mgem_list(config)
|
11
18
|
|
12
19
|
MrbgemList.new(config)
|
13
20
|
end
|
14
21
|
|
22
|
+
def initialize_mgem_list(config = {})
|
23
|
+
unless File.exists? config[:mgem_list]
|
24
|
+
`git clone #{GEMS_REPO} #{config[:mgem_list]}`
|
25
|
+
end
|
26
|
+
|
27
|
+
unless File.exists? config[:mgem_active]
|
28
|
+
FileUtils.touch config[:mgem_active]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
15
32
|
class MrbgemData
|
16
33
|
def initialize(gem_data)
|
17
34
|
@gem_data = gem_data
|
@@ -20,7 +37,7 @@ class MrbgemData
|
|
20
37
|
def search(pattern, *fields)
|
21
38
|
fields.flatten!
|
22
39
|
if fields == []
|
23
|
-
fields = [:name, :description
|
40
|
+
fields = [:name, :description]
|
24
41
|
elsif not fields.respond_to? :each
|
25
42
|
fields = [fields]
|
26
43
|
end
|
@@ -51,7 +68,7 @@ end
|
|
51
68
|
class MrbgemList
|
52
69
|
def initialize(config)
|
53
70
|
@config = config
|
54
|
-
@gems =
|
71
|
+
@gems = get_gems(@config[:mgem_list])
|
55
72
|
end
|
56
73
|
|
57
74
|
def each(&block)
|
@@ -65,7 +82,7 @@ class MrbgemList
|
|
65
82
|
end
|
66
83
|
|
67
84
|
def active
|
68
|
-
f = File.open(@config[:
|
85
|
+
f = File.open(@config[:mgem_active], 'r+')
|
69
86
|
active_gems = f.each_line.map {|g| File.basename(g.chomp)}
|
70
87
|
@gems.select {|g| active_gems.include? g.name}
|
71
88
|
end
|
@@ -94,6 +111,12 @@ class MrbgemList
|
|
94
111
|
end
|
95
112
|
end
|
96
113
|
|
114
|
+
def update!
|
115
|
+
git_dir = [@config[:mgem_list], '.git'].join File::SEPARATOR
|
116
|
+
`git --git-dir=#{git_dir} fetch`
|
117
|
+
`git --git-dir=#{git_dir} merge origin/master`
|
118
|
+
end
|
119
|
+
|
97
120
|
private
|
98
121
|
|
99
122
|
def check_gem(gem_name)
|
@@ -109,19 +132,20 @@ class MrbgemList
|
|
109
132
|
end
|
110
133
|
|
111
134
|
def save_active_gems(active_gem_list)
|
112
|
-
File.open(@config[:
|
135
|
+
File.open(@config[:mgem_active], 'w+') do |f|
|
113
136
|
active_gem_list.flatten.uniq.each do |mrbgem|
|
114
|
-
f.puts
|
137
|
+
f.puts mrbgem.name
|
115
138
|
end
|
116
139
|
end
|
117
140
|
end
|
118
141
|
|
119
|
-
def
|
142
|
+
def get_gems(gem_dir)
|
120
143
|
gems = []
|
121
144
|
Dir.foreach(gem_dir) do |filename|
|
122
145
|
next unless filename =~ /\.gem$/
|
123
146
|
|
124
|
-
|
147
|
+
yaml_gems = YAML.load_file([gem_dir, filename].join(File::SEPARATOR))
|
148
|
+
gems << MrbgemData.new(yaml_gems)
|
125
149
|
end
|
126
150
|
gems
|
127
151
|
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: mgem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Daniel Bovensiepen
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: mgem helps you search and find GEMs specifically written for mruby. It also supports by creating a mruby build configuration.
|
15
15
|
email: daniel@bovensiepen.net
|