inventory 0.1.0 → 0.2.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/README +6 -0
- data/Rakefile +13 -0
- data/lib/inventory.rb +107 -0
- data/lib/inventory/rake/tasks.rb +26 -0
- data/lib/inventory/rake/tasks/check.rb +4 -0
- data/lib/inventory/rake/tasks/clean.rb +35 -0
- data/lib/inventory/rake/tasks/gem.rb +154 -0
- data/lib/inventory/rake/tasks/inventory.rb +27 -0
- data/lib/inventory/version.rb +17 -0
- data/test/unit/inventory.rb +4 -0
- data/test/unit/inventory/rake/tasks.rb +4 -0
- data/test/unit/inventory/rake/tasks/check.rb +4 -0
- data/test/unit/inventory/rake/tasks/clean.rb +4 -0
- data/test/unit/inventory/rake/tasks/gem.rb +4 -0
- data/test/unit/inventory/rake/tasks/inventory.rb +4 -0
- data/test/unit/inventory/version.rb +4 -0
- metadata +23 -5
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require 'lookout/rake/tasks'
|
5
|
+
require 'inventory/rake/tasks'
|
6
|
+
require 'inventory/version'
|
7
|
+
|
8
|
+
Inventory::Rake::Tasks.define Inventory::Version, :gem => proc{ |_, s|
|
9
|
+
s.author = 'Nikolai Weibull'
|
10
|
+
s.email = 'now@bitwi.se'
|
11
|
+
s.homepage = 'https://github.com/now/inventory'
|
12
|
+
}
|
13
|
+
Lookout::Rake::Tasks::Test.new
|
data/lib/inventory.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class Inventory
|
4
|
+
def initialize(major, minor, patch,
|
5
|
+
path = (m = /\A(.*):\d+(?::in .*)?\z/.match(caller.first) and m[1]),
|
6
|
+
&block)
|
7
|
+
@major, @minor, @patch = major, minor, patch
|
8
|
+
raise ArgumentError, 'default value of path argument could not be calculated' unless path
|
9
|
+
@path = path
|
10
|
+
@srcdir, _, @package_require = File.dirname(File.expand_path(path)).rpartition('/lib/')
|
11
|
+
raise ArgumentError,
|
12
|
+
'path is not of the form PATH/lib/PACKAGE/version.rb: %s' % path if
|
13
|
+
@path.empty?
|
14
|
+
instance_exec(&block) if block
|
15
|
+
end
|
16
|
+
|
17
|
+
def package
|
18
|
+
package_require.gsub('/', '-')
|
19
|
+
end
|
20
|
+
|
21
|
+
def version_require
|
22
|
+
File.join(package_require, 'version')
|
23
|
+
end
|
24
|
+
|
25
|
+
def lib_directories
|
26
|
+
%w'lib'
|
27
|
+
end
|
28
|
+
|
29
|
+
def load
|
30
|
+
requires.each do |requirement|
|
31
|
+
require requirement
|
32
|
+
end
|
33
|
+
loads.each do |load|
|
34
|
+
Kernel.load File.expand_path('lib/%s' % load, srcdir)
|
35
|
+
end
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def requires
|
40
|
+
[]
|
41
|
+
end
|
42
|
+
|
43
|
+
def loads
|
44
|
+
libs
|
45
|
+
end
|
46
|
+
|
47
|
+
def libs
|
48
|
+
[]
|
49
|
+
end
|
50
|
+
|
51
|
+
def additional_libs
|
52
|
+
[package_require, version_require].map{ |e| '%s.rb' % e }
|
53
|
+
end
|
54
|
+
|
55
|
+
def all_libs
|
56
|
+
libs + additional_libs
|
57
|
+
end
|
58
|
+
|
59
|
+
def lib_files
|
60
|
+
all_libs.map{ |e| 'lib/%s' % e }
|
61
|
+
end
|
62
|
+
|
63
|
+
def unit_tests
|
64
|
+
all_libs
|
65
|
+
end
|
66
|
+
|
67
|
+
def additional_unit_tests
|
68
|
+
[]
|
69
|
+
end
|
70
|
+
|
71
|
+
def all_unit_tests
|
72
|
+
unit_tests + additional_unit_tests
|
73
|
+
end
|
74
|
+
|
75
|
+
def unit_test_files
|
76
|
+
all_unit_tests.map{ |e| 'test/unit/%s' % e }
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_files
|
80
|
+
unit_test_files
|
81
|
+
end
|
82
|
+
|
83
|
+
def additional_files
|
84
|
+
%w'
|
85
|
+
README
|
86
|
+
Rakefile
|
87
|
+
'
|
88
|
+
end
|
89
|
+
|
90
|
+
def files
|
91
|
+
lib_files + test_files + additional_files
|
92
|
+
end
|
93
|
+
|
94
|
+
def to_a
|
95
|
+
files
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_s
|
99
|
+
'%d.%d.%d' % [major, minor, patch]
|
100
|
+
end
|
101
|
+
|
102
|
+
def inspect
|
103
|
+
'#<%s: %s %s>' % [self.class, package, self]
|
104
|
+
end
|
105
|
+
|
106
|
+
attr_reader :major, :minor, :patch, :path, :srcdir, :package_require
|
107
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
|
5
|
+
class Inventory; module Rake end end
|
6
|
+
|
7
|
+
module Inventory::Rake::Tasks
|
8
|
+
%w'check clean gem inventory'.each do |file|
|
9
|
+
load File.expand_path('../tasks/%s.rb' % file, __FILE__)
|
10
|
+
end
|
11
|
+
|
12
|
+
@mostlycleanfiles, @cleanfiles, @distcleanfiles = [], [], []
|
13
|
+
|
14
|
+
class << self
|
15
|
+
attr_accessor :inventory
|
16
|
+
|
17
|
+
attr_reader :mostlycleanfiles, :cleanfiles, :distcleanfiles
|
18
|
+
|
19
|
+
def define(inventory, options = {})
|
20
|
+
self.inventory = inventory
|
21
|
+
Clean.define
|
22
|
+
Inventory.new(:inventory => inventory)
|
23
|
+
Gem.new(:inventory => inventory, &(options.fetch(:gem, proc{ })))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class Inventory::Rake::Tasks::Clean
|
4
|
+
include Rake::DSL
|
5
|
+
|
6
|
+
class << self
|
7
|
+
include Rake::DSL
|
8
|
+
|
9
|
+
def define
|
10
|
+
desc 'Delete targets built by rake that are often rebuilt'
|
11
|
+
new :mostlyclean, Inventory::Rake::Tasks.mostlycleanfiles
|
12
|
+
|
13
|
+
desc 'Delete targets built by rake'
|
14
|
+
new :clean, Inventory::Rake::Tasks.cleanfiles
|
15
|
+
task :clean => :mostlyclean
|
16
|
+
|
17
|
+
desc 'Delete targets built by extconf.rb'
|
18
|
+
new :distclean, Inventory::Rake::Tasks.distcleanfiles
|
19
|
+
task :distclean => :clean
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(name, files = [])
|
24
|
+
@name, @files = name, files
|
25
|
+
define
|
26
|
+
end
|
27
|
+
|
28
|
+
def define
|
29
|
+
task name do
|
30
|
+
rm files, :force => true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
attr_accessor :name, :files
|
35
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class Inventory::Rake::Tasks::Gem
|
4
|
+
include Rake::DSL
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
self.inventory = options.fetch(:inventory, Inventory::Rake::Tasks.inventory)
|
8
|
+
self.specification = options.fetch(:specification,
|
9
|
+
Gem::Specification.new{ |s|
|
10
|
+
next unless @inventory
|
11
|
+
|
12
|
+
s.name = @inventory.package
|
13
|
+
s.version = @inventory.to_s # TODO: We could probably skip #to_s
|
14
|
+
|
15
|
+
s.description = IO.read('README')
|
16
|
+
s.summary = s.description[/^.*?\./].lstrip
|
17
|
+
|
18
|
+
s.files = @inventory.files # TODO: We can skip #files and rely on #to_a
|
19
|
+
|
20
|
+
s.require_paths = @inventory.lib_directories
|
21
|
+
})
|
22
|
+
yield self, @specification if block_given?
|
23
|
+
define
|
24
|
+
end
|
25
|
+
|
26
|
+
def define
|
27
|
+
desc 'Create specifications' unless Rake::Task.task_defined? :spec
|
28
|
+
task :spec => :'gem:spec'
|
29
|
+
|
30
|
+
gemspec = '%s.gemspec' % @specification.name
|
31
|
+
Inventory::Rake::Tasks.cleanfiles << gemspec
|
32
|
+
|
33
|
+
desc 'Create gem specification' unless Rake::Task.task_defined? :'gem:spec'
|
34
|
+
task :'gem:spec' => gemspec
|
35
|
+
|
36
|
+
file gemspec => %w'Rakefile README' + [@inventory.path] do |t|
|
37
|
+
tmp = '%s.tmp' % t.name
|
38
|
+
rm([t.name, tmp], :force => true)
|
39
|
+
puts 'gem specification --ruby %s > %s' %
|
40
|
+
[@specification.name, tmp] if verbose
|
41
|
+
File.open(tmp, 'wb') do |f|
|
42
|
+
f.write @specification.to_ruby
|
43
|
+
end
|
44
|
+
chmod File.stat(tmp).mode & ~0222, tmp
|
45
|
+
mv tmp, t.name
|
46
|
+
end
|
47
|
+
|
48
|
+
desc 'Create files for distribution' unless Rake::Task.task_defined? :dist
|
49
|
+
task :dist => :'gem:dist'
|
50
|
+
|
51
|
+
desc 'Create %s for distribution' % @specification.file_name
|
52
|
+
task :'gem:dist' => [:'inventory:check', @specification.file_name]
|
53
|
+
file @specification.file_name => @specification.files do
|
54
|
+
require 'rubygems' unless defined? Gem
|
55
|
+
puts 'gem build %s' % gemspec if verbose
|
56
|
+
Gem::Builder.new(@specification).build
|
57
|
+
end
|
58
|
+
|
59
|
+
desc 'Check files before distribution' unless
|
60
|
+
Rake::Task.task_defined? :'dist:check'
|
61
|
+
task :'dist:check' => [:dist, :'gem:dist:check']
|
62
|
+
|
63
|
+
desc 'Check %s before distribution' % @specification.file_name
|
64
|
+
task :'gem:dist:check' => :'gem:dist' do
|
65
|
+
require 'rubygems' unless defined? Gem
|
66
|
+
require 'rubygems/installer' unless defined? Gem::Installer
|
67
|
+
checkdir = @specification.full_name
|
68
|
+
puts 'gem unpack %s --target %s' %
|
69
|
+
[@specification.file_name, checkdir] if verbose
|
70
|
+
Gem::Installer.new(@specification.file_name, :unpack => true).
|
71
|
+
unpack File.expand_path(checkdir)
|
72
|
+
chdir checkdir do
|
73
|
+
sh '%s %sinventory:check check' %
|
74
|
+
[Rake.application.name, Rake.application.options.silent ? '-s ' : '']
|
75
|
+
end
|
76
|
+
rm_r checkdir
|
77
|
+
end
|
78
|
+
|
79
|
+
desc 'Install distribution files on the local system' unless
|
80
|
+
Rake::Task.task_defined? :install
|
81
|
+
task :install => :'gem:install'
|
82
|
+
|
83
|
+
desc 'Install %s and its dependencies in ruby gem directory' %
|
84
|
+
@specification.file_name
|
85
|
+
task :'gem:install' => :'gem:dist' do |t|
|
86
|
+
require 'rubygems' unless defined? Gem
|
87
|
+
require 'rubygems/dependency_installer' unless defined? Gem::DependencyInstaller
|
88
|
+
puts 'gem install %s' % @specification.file_name if verbose
|
89
|
+
Gem::DependencyInstaller.new.install @specification.file_name
|
90
|
+
end
|
91
|
+
|
92
|
+
desc 'Install distribution files for the current user' unless
|
93
|
+
Rake::Task.task_defined? :'install:user'
|
94
|
+
task :'install:user' => :'gem:install:user'
|
95
|
+
|
96
|
+
desc 'Install %s and its dependencies in user gem directory' %
|
97
|
+
@specification.file_name
|
98
|
+
task :'gem:install:user' => :'gem:dist' do
|
99
|
+
require 'rubygems' unless defined? Gem
|
100
|
+
require 'rubygems/dependency_installer' unless defined? Gem::DependencyInstaller
|
101
|
+
puts 'gem install --user-install --bindir %s %s' %
|
102
|
+
[Gem.bindir(Gem.user_dir), @specification.file_name] if verbose
|
103
|
+
Gem::DependencyInstaller.
|
104
|
+
new(:user_install => true,
|
105
|
+
:bindir => Gem.bindir(Gem.user_dir)).
|
106
|
+
install @specification.file_name
|
107
|
+
end
|
108
|
+
|
109
|
+
desc 'Delete all files installed on the local system' unless
|
110
|
+
Rake::Task.task_defined? :uninstall
|
111
|
+
task :uninstall => :'gem:uninstall'
|
112
|
+
|
113
|
+
desc 'Uninstall %s from ruby gem directory' % @specification.file_name
|
114
|
+
task :'gem:uninstall' do
|
115
|
+
require 'rubygems' unless defined? Gem
|
116
|
+
# TODO: I have absolutely no idea why this is needed, but it is.
|
117
|
+
require 'rubygems/user_interaction' unless defined? Gem::UserInteraction
|
118
|
+
require 'rubygems/uninstaller' unless defined? Gem::Uninstaller
|
119
|
+
puts 'gem uninstall --executables %s' % @specification.name if verbose
|
120
|
+
Gem::Uninstaller.new(@specification.name,
|
121
|
+
:executables => true,
|
122
|
+
:version => @specification.version).uninstall
|
123
|
+
end
|
124
|
+
|
125
|
+
desc 'Delete all files installed for current user' unless
|
126
|
+
Rake::Task.task_defined? :'uninstall:user'
|
127
|
+
task :'uninstall:user' => :'gem:uninstall:user'
|
128
|
+
|
129
|
+
desc 'Uninstall %s from user gem directory' % @specification.file_name
|
130
|
+
task :'gem:uninstall:user' do
|
131
|
+
require 'rubygems' unless defined? Gem
|
132
|
+
# TODO: I have absolutely no idea why this is needed, but it is.
|
133
|
+
require 'rubygems/user_interaction' unless defined? Gem::UserInteraction
|
134
|
+
require 'rubygems/uninstaller' unless defined? Gem::Uninstaller
|
135
|
+
puts 'gem uninstall --executables --install-dir %s %s' %
|
136
|
+
[Gem.user_dir, @specification.name] if verbose
|
137
|
+
Gem::Uninstaller.new(@specification.name,
|
138
|
+
:executables => true,
|
139
|
+
:install_dir => Gem.user_dir,
|
140
|
+
:version => @specification.version).uninstall
|
141
|
+
end
|
142
|
+
|
143
|
+
desc 'Push distribution files to distribution hubs' unless
|
144
|
+
Rake::Task.task_defined? :push
|
145
|
+
task :push => :'gem:push'
|
146
|
+
|
147
|
+
desc 'Push %s to rubygems.org' % @specification.file_name
|
148
|
+
task :'gem:push' => :'gem:dist:check' do
|
149
|
+
sh 'gem push -%s-verbose %s' % [verbose ? '' : '-no', @specification.file_name]
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
attr_writer :inventory, :specification
|
154
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
class Inventory::Rake::Tasks::Inventory
|
4
|
+
include Rake::DSL
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
self.inventory = options.fetch(:inventory, Inventory::Rake::Tasks.inventory)
|
8
|
+
yield self if block_given?
|
9
|
+
define
|
10
|
+
end
|
11
|
+
|
12
|
+
def define
|
13
|
+
desc 'Check that the inventory is correct'
|
14
|
+
task :'inventory:check' do
|
15
|
+
# TODO: Use directories from Inventory instead of hard-coding lib and
|
16
|
+
# test/unit. We want to check ext too?
|
17
|
+
diff = ((Dir['{lib,test/unit}/**/*.rb'] -
|
18
|
+
@inventory.lib_files -
|
19
|
+
@inventory.unit_test_files).map{ |e| 'file not listed in inventory: %s' % e } +
|
20
|
+
@inventory.files.reject{ |e| File.exist? e }.map{ |e| 'file listed in inventory does not exist: %s' % e })
|
21
|
+
fail diff.join("\n") unless diff.empty?
|
22
|
+
# TODO: puts 'inventory checks out' if verbose
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_writer :inventory
|
27
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'inventory'
|
4
|
+
|
5
|
+
class Inventory
|
6
|
+
Version = Inventory.new(0, 2, 2){
|
7
|
+
def additional_libs
|
8
|
+
super + %w'
|
9
|
+
inventory/rake/tasks.rb
|
10
|
+
inventory/rake/tasks/check.rb
|
11
|
+
inventory/rake/tasks/clean.rb
|
12
|
+
inventory/rake/tasks/gem.rb
|
13
|
+
inventory/rake/tasks/inventory.rb
|
14
|
+
'
|
15
|
+
end
|
16
|
+
}
|
17
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inventory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,14 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: Inventory allows
|
14
|
+
description: ! " Inventory\n\n Inventory allows
|
15
|
+
you to create inventories of your Ruby projects. These\n inventories can then
|
16
|
+
be used to load the project, create gem specifications\n and gems, run unit tests,
|
17
|
+
and verify that the project’s content is what you\n think it is.\n"
|
15
18
|
email: now@bitwi.se
|
16
19
|
executables: []
|
17
20
|
extensions: []
|
18
21
|
extra_rdoc_files: []
|
19
|
-
files:
|
22
|
+
files:
|
23
|
+
- lib/inventory.rb
|
24
|
+
- lib/inventory/version.rb
|
25
|
+
- lib/inventory/rake/tasks.rb
|
26
|
+
- lib/inventory/rake/tasks/check.rb
|
27
|
+
- lib/inventory/rake/tasks/clean.rb
|
28
|
+
- lib/inventory/rake/tasks/gem.rb
|
29
|
+
- lib/inventory/rake/tasks/inventory.rb
|
30
|
+
- test/unit/inventory.rb
|
31
|
+
- test/unit/inventory/version.rb
|
32
|
+
- test/unit/inventory/rake/tasks.rb
|
33
|
+
- test/unit/inventory/rake/tasks/check.rb
|
34
|
+
- test/unit/inventory/rake/tasks/clean.rb
|
35
|
+
- test/unit/inventory/rake/tasks/gem.rb
|
36
|
+
- test/unit/inventory/rake/tasks/inventory.rb
|
37
|
+
- README
|
38
|
+
- Rakefile
|
20
39
|
homepage: https://github.com/now/inventory
|
21
40
|
licenses: []
|
22
41
|
post_install_message:
|
@@ -42,4 +61,3 @@ signing_key:
|
|
42
61
|
specification_version: 3
|
43
62
|
summary: Inventory allows you to create inventories of your Ruby projects.
|
44
63
|
test_files: []
|
45
|
-
has_rdoc:
|