kit 0.3.0 → 1.0.0
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/.gitignore +18 -0
- data/.rspec +0 -0
- data/.yardopts +2 -0
- data/CHANGELOG.rdoc +10 -1
- data/Gemfile +2 -0
- data/LICENSE.txt +22 -0
- data/README.rdoc +84 -19
- data/Rakefile +21 -0
- data/kit.gemspec +27 -0
- data/lib/kit.rb +67 -170
- data/lib/kit/db_support.rb +71 -0
- data/lib/kit/models/bit.rb +34 -0
- data/lib/kit/models/group.rb +5 -0
- data/lib/kit/models/permission.rb +6 -0
- data/lib/kit/models/user.rb +6 -0
- data/lib/kit/rake/admin.rb +3 -0
- data/lib/kit/rake/admin/database.rb +28 -0
- data/lib/kit/rake/admin/make.rb +19 -0
- data/lib/kit/rake/admin/manage.rb +8 -0
- data/lib/kit/version.rb +4 -0
- data/spec/bit_spec.rb +57 -0
- data/spec/kit_db_support_spec.rb +110 -0
- data/spec/kit_spec.rb +56 -0
- metadata +108 -19
- data/LICENCE.txt +0 -21
- data/lib/kit/bit.rb +0 -173
- data/lib/kit/db_sqlite3.rb +0 -212
@@ -0,0 +1,71 @@
|
|
1
|
+
module KitDBSupport
|
2
|
+
|
3
|
+
# Create a database.
|
4
|
+
# @raise RuntimeError This will raise an exception if databse exists.
|
5
|
+
# @param [Hash] config ActiveRecord::Base database configuration
|
6
|
+
def self.create! config
|
7
|
+
case config[:adapter]
|
8
|
+
when 'sqlite3'
|
9
|
+
db_file = config[:database]
|
10
|
+
raise RuntimeError, "Database file #{db_file} exists." if File.exists? db_file
|
11
|
+
SQLite3::Database.new config[:database]
|
12
|
+
else
|
13
|
+
raise RuntimeError, "Creating database with adapter #{config[:adapter]} not supported."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# (see #create!)
|
18
|
+
def self.create *args
|
19
|
+
begin
|
20
|
+
create! *args
|
21
|
+
rescue RuntimeError, /^Database file .+ exists.$/
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Destory a database.
|
26
|
+
# @raise RuntimeError This will raise an exception if databse does not exist.
|
27
|
+
# @param (see create!)
|
28
|
+
def self.destroy! config
|
29
|
+
case config[:adapter]
|
30
|
+
when 'sqlite3'
|
31
|
+
db_file = config[:database]
|
32
|
+
raise RuntimeError, "Database file #{db_file} does not exist." unless File.exists? db_file
|
33
|
+
File.unlink db_file
|
34
|
+
else
|
35
|
+
raise RuntimeError, "Destroying database with adapter #{config[:adapter]} not supported."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# (see #destroy)
|
40
|
+
def self.destroy *args
|
41
|
+
begin
|
42
|
+
destroy! *args
|
43
|
+
rescue RuntimeError, /^Database file .+ does not exist.$/
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Establishes an ActiveRecord::Base connection.
|
48
|
+
# @param [Hash] config settings for ActiveRecord::Base
|
49
|
+
def self.connect config
|
50
|
+
ActiveRecord::Base.establish_connection config
|
51
|
+
end
|
52
|
+
|
53
|
+
# Migrate up or down a given number of migrations.
|
54
|
+
# @param [String] path location of migration files
|
55
|
+
# @param [Symbol] direction
|
56
|
+
# @param [Integer] steps
|
57
|
+
def self.migrate path, direction = nil, steps = 1
|
58
|
+
if direction.nil?
|
59
|
+
ActiveRecord::Migrator.migrate(path, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
60
|
+
else
|
61
|
+
ActiveRecord::Migrator.send direction, path, steps
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Migrate to a specfic migration.
|
66
|
+
# @param path (see #migrate)
|
67
|
+
# @param [Integer] version the migration number
|
68
|
+
def self.migrate_to path, version
|
69
|
+
ActiveRecord::Migrator.migrate(path, version)
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Kit::Bit < ActiveRecord::Base
|
2
|
+
|
3
|
+
belongs_to :group
|
4
|
+
has_many :permissions
|
5
|
+
has_many :users, :through => :permissions
|
6
|
+
|
7
|
+
after_initialize do
|
8
|
+
if self.group.nil?
|
9
|
+
self.extend KitActionsDefault
|
10
|
+
else
|
11
|
+
mod = "KitActions#{self.group.name.gsub(' ', '_').camelize}"
|
12
|
+
self.extend Kernel.const_get(mod) if Kernel.const_defined? mod
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Job
|
17
|
+
|
18
|
+
def initialize *args
|
19
|
+
if args[0].is_a? Hash
|
20
|
+
hash = args[0]
|
21
|
+
args = [ hash[:config_file], hash[:bit_id], hash[:action], *hash[:args] ]
|
22
|
+
end
|
23
|
+
@config_file = args[0]
|
24
|
+
@bit_id = args[1]
|
25
|
+
@action = args[2]
|
26
|
+
@args = *args[3..-1]
|
27
|
+
end
|
28
|
+
|
29
|
+
def perform
|
30
|
+
Kit.open @config_file
|
31
|
+
Kit::Bit.find(@bit_id).send(@action, *@args)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
namespace 'db' do
|
2
|
+
|
3
|
+
kit = Kit.new 'config.yml'
|
4
|
+
|
5
|
+
task :create do
|
6
|
+
kit.db_create
|
7
|
+
end
|
8
|
+
|
9
|
+
task :destroy do
|
10
|
+
kit.db_destroy
|
11
|
+
end
|
12
|
+
|
13
|
+
task :reset => [:destroy, :create, :migrate] do
|
14
|
+
end
|
15
|
+
|
16
|
+
task :environment do
|
17
|
+
kit.db_connect
|
18
|
+
end
|
19
|
+
|
20
|
+
task :migrate, [:direction, :steps] => [:create, :environment] do |_, args|
|
21
|
+
args.with_defaults(direction: nil, steps: 1)
|
22
|
+
if args[:direction].nil?
|
23
|
+
kit.db_migrate
|
24
|
+
else
|
25
|
+
kit.db_migrate args[:direction], args[:steps]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
namespace 'mk' do
|
2
|
+
|
3
|
+
def make_class_template file_name, class_line
|
4
|
+
unless File.exists? file_name
|
5
|
+
f = File.new file_name, 'w+'
|
6
|
+
f << class_line
|
7
|
+
f << "\nend"
|
8
|
+
f.close
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
task :migration, :name do |_, args|
|
13
|
+
make_class_template "migrations/#{Time.now.utc.strftime('%Y%m%d%H%M%S')}_#{args[:name]}.rb", "class #{args[:name].camelize} < ActiveRecord::Migration"
|
14
|
+
end
|
15
|
+
|
16
|
+
task :model, :name do |_, args|
|
17
|
+
make_class_template "models/#{args[:name]}.rb", "class Kit::#{args[:name].camelize} < ActiveRecord::Base"
|
18
|
+
end
|
19
|
+
end
|
data/lib/kit/version.rb
ADDED
data/spec/bit_spec.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'kit'
|
2
|
+
|
3
|
+
describe Kit::Bit do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@config_file = File.expand_path '../../test_kit/config.yml', __FILE__
|
7
|
+
Kit.new(@config_file).db_create.db_connect.db_migrate
|
8
|
+
end
|
9
|
+
|
10
|
+
after :all do
|
11
|
+
Kit.new(@config_file).db_destroy
|
12
|
+
end
|
13
|
+
|
14
|
+
before :each do
|
15
|
+
Kit.open @config_file
|
16
|
+
end
|
17
|
+
|
18
|
+
describe Kit::Bit::Job do
|
19
|
+
|
20
|
+
[:args, :hash].each do |type|
|
21
|
+
|
22
|
+
describe ".perform" do
|
23
|
+
|
24
|
+
context "given #{type}" do
|
25
|
+
|
26
|
+
config = File.expand_path '../../test_kit/config.yml', __FILE__
|
27
|
+
if type == :args
|
28
|
+
subject { Kit::Bit::Job.new config, 1, :the_action, :arg_1, :arg_2 }
|
29
|
+
else
|
30
|
+
hash = { config_file: config, bit_id: 1, action: :the_action, args: [:arg_1, :arg_2] }
|
31
|
+
subject { Kit::Bit::Job.new hash }
|
32
|
+
end
|
33
|
+
|
34
|
+
before :each do
|
35
|
+
@bit = mock('Kit::Bit', :id => 1, :the_action => nil)
|
36
|
+
Kit::Bit.stub(:find).and_return(@bit)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "opens the kit" do
|
40
|
+
Kit.should_receive(:open).with(@config_file)
|
41
|
+
subject.perform
|
42
|
+
end
|
43
|
+
|
44
|
+
it "looks for the bit" do
|
45
|
+
Kit::Bit.should_receive(:find).with(1)
|
46
|
+
subject.perform
|
47
|
+
end
|
48
|
+
|
49
|
+
it "runs the action on the bit" do
|
50
|
+
@bit.should_receive(:the_action).with(:arg_1, :arg_2)
|
51
|
+
subject.perform
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'kit'
|
2
|
+
|
3
|
+
describe KitDBSupport do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@config = {}
|
7
|
+
@config[:sqlite3] = { adapter: 'sqlite3', database: 'spec_db.sqlite3' }
|
8
|
+
@sqlite3 = @config[:sqlite3]
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "create!" do
|
12
|
+
|
13
|
+
it "raises error if adapter not supported" do
|
14
|
+
expect { KitDBSupport::create!(:adapter => 'bad_adapter') }.should raise_error RuntimeError, /not supported/
|
15
|
+
end
|
16
|
+
|
17
|
+
context "adapter is sqlite3" do
|
18
|
+
|
19
|
+
it "creates the sqlite3 database file" do
|
20
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(false)
|
21
|
+
SQLite3::Database.should_receive(:new).with(@sqlite3[:database])
|
22
|
+
KitDBSupport::create! @config[:sqlite3]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raises error if sqlite3 database file exists" do
|
26
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(true)
|
27
|
+
expect { KitDBSupport::create! @config[:sqlite3] }.should raise_error RuntimeError, /exists/
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "create" do
|
33
|
+
it "calls create!" do
|
34
|
+
KitDBSupport.should_receive(:create!)
|
35
|
+
KitDBSupport::create
|
36
|
+
end
|
37
|
+
|
38
|
+
it "does not raise error if sqlite3 database file exists" do
|
39
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(true)
|
40
|
+
expect { KitDBSupport::create @config[:sqlite3] }.should_not raise_error RuntimeError, /exists/
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "destroy!" do
|
45
|
+
|
46
|
+
it "raises error if adapter not supported" do
|
47
|
+
expect { KitDBSupport::destroy!(:adapter => 'bad_adapter') }.should raise_error RuntimeError, /not supported/
|
48
|
+
end
|
49
|
+
|
50
|
+
context "adapter is sqlite3" do
|
51
|
+
|
52
|
+
it "unlinks the sqlite3 databasefile " do
|
53
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(true)
|
54
|
+
File.should_receive(:unlink).with( @sqlite3[:database] )
|
55
|
+
KitDBSupport::destroy! @config[:sqlite3]
|
56
|
+
end
|
57
|
+
|
58
|
+
it "raises error if sqlite3 database file does not exist" do
|
59
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(false)
|
60
|
+
expect { KitDBSupport::destroy! @config[:sqlite3] }.should raise_error RuntimeError, /does not exist/
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "destroy" do
|
66
|
+
it "calls destroy!" do
|
67
|
+
KitDBSupport.should_receive(:destroy!)
|
68
|
+
KitDBSupport::destroy
|
69
|
+
end
|
70
|
+
|
71
|
+
it "does not raise error if sqlite3 database file does not exist" do
|
72
|
+
File.stub(:exists?).with(@sqlite3[:database]).and_return(false)
|
73
|
+
expect { KitDBSupport::destroy @config[:sqlite3] }.should_not raise_error RuntimeError, /does not exist/
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "connect" do
|
78
|
+
|
79
|
+
it "makes active record establish a connection" do
|
80
|
+
ActiveRecord::Base.should_receive(:establish_connection).with(@config[:sqlite3])
|
81
|
+
KitDBSupport::connect @config[:sqlite3]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "migrate" do
|
86
|
+
|
87
|
+
it "migrates to latest version when called with no arguments" do
|
88
|
+
ActiveRecord::Migrator.should_receive(:migrate)
|
89
|
+
KitDBSupport::migrate 'migrations'
|
90
|
+
end
|
91
|
+
|
92
|
+
it "migrates one step in a given direction" do
|
93
|
+
ActiveRecord::Migrator.should_receive(:up).with('migrations', 1)
|
94
|
+
KitDBSupport::migrate 'migrations', :up
|
95
|
+
end
|
96
|
+
|
97
|
+
it "migrates many steps in a given direction" do
|
98
|
+
ActiveRecord::Migrator.should_receive(:up).with('migrations', 3)
|
99
|
+
KitDBSupport::migrate 'migrations', :up, 3
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "migrate_to" do
|
104
|
+
|
105
|
+
it "migrates to a specific migration" do
|
106
|
+
ActiveRecord::Migrator.should_receive(:migrate).with('migrations', 001)
|
107
|
+
KitDBSupport::migrate_to 'migrations', 001
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/spec/kit_spec.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'kit'
|
2
|
+
|
3
|
+
describe Kit do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@kit_path = File.expand_path '../../test_kit', __FILE__
|
7
|
+
@config_file = File.expand_path '../../test_kit/config.yml', __FILE__
|
8
|
+
@config = YAML.load File.read("#{@kit_path}/config.yml")
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { Kit.new @config_file }
|
12
|
+
|
13
|
+
describe ".path" do
|
14
|
+
|
15
|
+
it "determines the correct path to the kit" do
|
16
|
+
subject.path.should == @kit_path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".config" do
|
21
|
+
|
22
|
+
it "loads the config file" do
|
23
|
+
subject.config.should == @config
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".open" do
|
28
|
+
|
29
|
+
it "creates a new kit and opens a database connections" do
|
30
|
+
Kit.any_instance.should_receive(:db_connect)
|
31
|
+
Kit.open @config_file
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
db_actions = {}
|
36
|
+
db_actions[:destroy] = [Hash.new]
|
37
|
+
db_actions[:create] = [Hash.new]
|
38
|
+
db_actions[:migrate] = [String.new, Hash.new, 0]
|
39
|
+
db_actions[:migrate_to] = [String.new, 0]
|
40
|
+
|
41
|
+
db_actions.each do |action, args|
|
42
|
+
|
43
|
+
describe ".db_#{action}" do
|
44
|
+
|
45
|
+
it "calls KitDBSupport::#{action}" do
|
46
|
+
KitDBSupport.should_receive(action).with( *( args.map { |x| kind_of(x.class) } ) )
|
47
|
+
subject.send "db_#{action}", *args[1..-1]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "returns the instance of Kit" do
|
51
|
+
KitDBSupport.stub action
|
52
|
+
subject.send("db_#{action}", *args[1..-1]).should equal subject
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,32 +9,119 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
15
|
+
name: activerecord
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
|
26
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sqlite3
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: git
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: Extendable tool to manage site development and more.
|
95
|
+
email:
|
96
|
+
- razorx@evansosenko.com
|
27
97
|
executables: []
|
28
98
|
extensions: []
|
29
99
|
extra_rdoc_files: []
|
30
100
|
files:
|
31
|
-
-
|
32
|
-
-
|
33
|
-
-
|
101
|
+
- .gitignore
|
102
|
+
- .rspec
|
103
|
+
- .yardopts
|
34
104
|
- CHANGELOG.rdoc
|
105
|
+
- Gemfile
|
106
|
+
- LICENSE.txt
|
35
107
|
- README.rdoc
|
36
|
-
-
|
37
|
-
|
108
|
+
- Rakefile
|
109
|
+
- kit.gemspec
|
110
|
+
- lib/kit.rb
|
111
|
+
- lib/kit/db_support.rb
|
112
|
+
- lib/kit/models/bit.rb
|
113
|
+
- lib/kit/models/group.rb
|
114
|
+
- lib/kit/models/permission.rb
|
115
|
+
- lib/kit/models/user.rb
|
116
|
+
- lib/kit/rake/admin.rb
|
117
|
+
- lib/kit/rake/admin/database.rb
|
118
|
+
- lib/kit/rake/admin/make.rb
|
119
|
+
- lib/kit/rake/admin/manage.rb
|
120
|
+
- lib/kit/version.rb
|
121
|
+
- spec/bit_spec.rb
|
122
|
+
- spec/kit_db_support_spec.rb
|
123
|
+
- spec/kit_spec.rb
|
124
|
+
homepage: http://evansosenko.com
|
38
125
|
licenses:
|
39
126
|
- MIT
|
40
127
|
post_install_message:
|
@@ -46,19 +133,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
46
133
|
requirements:
|
47
134
|
- - ! '>='
|
48
135
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
136
|
+
version: '0'
|
50
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
138
|
none: false
|
52
139
|
requirements:
|
53
140
|
- - ! '>='
|
54
141
|
- !ruby/object:Gem::Version
|
55
142
|
version: '0'
|
56
|
-
requirements:
|
57
|
-
- SQLite3
|
143
|
+
requirements: []
|
58
144
|
rubyforge_project:
|
59
|
-
rubygems_version: 1.8.
|
145
|
+
rubygems_version: 1.8.23
|
60
146
|
signing_key:
|
61
147
|
specification_version: 3
|
62
|
-
summary:
|
63
|
-
test_files:
|
148
|
+
summary: Kit is a framework for making simple management tools called kits.
|
149
|
+
test_files:
|
150
|
+
- spec/bit_spec.rb
|
151
|
+
- spec/kit_db_support_spec.rb
|
152
|
+
- spec/kit_spec.rb
|
64
153
|
has_rdoc:
|