mgem 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/mgem +26 -3
  2. data/lib/mgem.rb +36 -12
  3. 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 (GEMS.active)
63
- mgem rm *name* De-Activate a GEM (GEMS.active)
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
- mgem_root = "#{File.dirname(__FILE__)}/.."
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[:mgem_root] = "#{File.dirname(__FILE__)}/.."
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, :author, :website]
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 = load_gems(@config[:gems_dir])
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[:gems_active], 'r+')
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[:gems_active], 'w+') do |f|
135
+ File.open(@config[:mgem_active], 'w+') do |f|
113
136
  active_gem_list.flatten.uniq.each do |mrbgem|
114
- f.puts "#{@config[:gems_build_dir]}/#{mrbgem.name}"
137
+ f.puts mrbgem.name
115
138
  end
116
139
  end
117
140
  end
118
141
 
119
- def load_gems(gem_dir)
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
- gems << MrbgemData.new(YAML.load_file("#{gem_dir}/#{filename}"))
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.1
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-03 00:00:00.000000000 Z
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