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.
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