mpm 0.1.1
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.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +106 -0
- data/LICENSE.txt +20 -0
- data/README.md +65 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/bin/mpm +11 -0
- data/lib/mpm.rb +138 -0
- data/lib/mpm/cli.rb +128 -0
- data/lib/mpm/pm/extension.rb +24 -0
- data/lib/mpm/pm/provisioner.rb +132 -0
- data/lib/pm_provisioners/apt.rb +50 -0
- data/lib/pm_provisioners/brew.rb +40 -0
- data/lib/pm_provisioners/brew/cask.rb +25 -0
- data/lib/pm_provisioners/extensions/npm.rb +30 -0
- data/lib/pm_provisioners/extensions/pip.rb +36 -0
- data/lib/pm_provisioners/ruby-gems/ruby-gems.rb +33 -0
- data/mpm.gemspec +100 -0
- data/ofe.json +16 -0
- data/run +1 -0
- data/test/helper.rb +34 -0
- data/test/test_package.rb +7 -0
- metadata +252 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
module PM
|
|
3
|
+
|
|
4
|
+
# --------------------------------------------
|
|
5
|
+
# CLASS->EXTENSION ---------------------------
|
|
6
|
+
# --------------------------------------------
|
|
7
|
+
class Extension
|
|
8
|
+
|
|
9
|
+
# ------------------------------------------
|
|
10
|
+
# ATTRIBUTES -------------------------------
|
|
11
|
+
# ------------------------------------------
|
|
12
|
+
attr_accessor *%i(
|
|
13
|
+
name
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
# ------------------------------------------
|
|
17
|
+
# INITIALIZE -------------------------------
|
|
18
|
+
# ------------------------------------------
|
|
19
|
+
def initialize(name, &definition)
|
|
20
|
+
self.name = name
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
module PM
|
|
3
|
+
|
|
4
|
+
# --------------------------------------------
|
|
5
|
+
# CLASS->PROVISIONER -------------------------
|
|
6
|
+
# --------------------------------------------
|
|
7
|
+
class Provisioner
|
|
8
|
+
|
|
9
|
+
# ------------------------------------------
|
|
10
|
+
# CONSTANTS --------------------------------
|
|
11
|
+
# ------------------------------------------
|
|
12
|
+
DEFINITION_DSL_METHODS = %i(
|
|
13
|
+
install
|
|
14
|
+
uninstall
|
|
15
|
+
search
|
|
16
|
+
search_installed
|
|
17
|
+
list
|
|
18
|
+
update
|
|
19
|
+
info
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# ------------------------------------------
|
|
23
|
+
# ATTRIBUTES -------------------------------
|
|
24
|
+
# ------------------------------------------
|
|
25
|
+
attr_accessor *%i(
|
|
26
|
+
executable
|
|
27
|
+
os
|
|
28
|
+
definition
|
|
29
|
+
definitions_commands
|
|
30
|
+
extensions
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# ------------------------------------------
|
|
34
|
+
# INITIALIZE -------------------------------
|
|
35
|
+
# ------------------------------------------
|
|
36
|
+
def initialize(executable, os, &definition)
|
|
37
|
+
self.executable = executable
|
|
38
|
+
self.os = os
|
|
39
|
+
self.definition = definition
|
|
40
|
+
|
|
41
|
+
self.definitions_commands = Set.new
|
|
42
|
+
self.extensions = Set.new
|
|
43
|
+
|
|
44
|
+
# Evaluate the block/DSL
|
|
45
|
+
self.instance_eval &self.definition
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# ------------------------------------------
|
|
49
|
+
# DSL --------------------------------------
|
|
50
|
+
# ------------------------------------------
|
|
51
|
+
DEFINITION_DSL_METHODS.each do |name|
|
|
52
|
+
define_method name do |&definition|
|
|
53
|
+
self.definitions_commands.add({
|
|
54
|
+
method_name: name,
|
|
55
|
+
definition: definition
|
|
56
|
+
})
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def extension(name, &definition)
|
|
61
|
+
new_extension = ::MPM::PM::Extension.new name, &definition
|
|
62
|
+
self.extensions.add new_extension
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# ------------------------------------------
|
|
66
|
+
# COMMAND->RETREIVAL -----------------------
|
|
67
|
+
# ------------------------------------------
|
|
68
|
+
def find_command(command_name)
|
|
69
|
+
self.definitions_commands.find do |definition_command|
|
|
70
|
+
definition_command[:method_name] == command_name.to_sym
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# ------------------------------------------
|
|
75
|
+
# COMMAND->EXECUTION -----------------------
|
|
76
|
+
# ------------------------------------------
|
|
77
|
+
def exec_command(command_name, *arguments)
|
|
78
|
+
command = find_command command_name
|
|
79
|
+
|
|
80
|
+
executable = ::MPM.pm_provisioner.executable
|
|
81
|
+
|
|
82
|
+
# TEMPORARY: FIX:
|
|
83
|
+
if executable == "apt-get"
|
|
84
|
+
executable = "apt-cache" if [:search, :info].member? command_name.to_sym
|
|
85
|
+
executable = "dpkg" if command_name.to_sym == :list
|
|
86
|
+
executable = "dpkg-query" if command_name.to_sym == :search_installed
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Execute the command from the executable and the definition.
|
|
90
|
+
command = [executable].concat(command[:definition].call(*arguments))
|
|
91
|
+
|
|
92
|
+
# TEMPORARY: FIX:
|
|
93
|
+
command.unshift("sudo") if executable == "apt-get"
|
|
94
|
+
|
|
95
|
+
final_command = command.join(" ")
|
|
96
|
+
|
|
97
|
+
puts ""
|
|
98
|
+
|
|
99
|
+
puts [
|
|
100
|
+
"---->",
|
|
101
|
+
"[mpm]".colorize(:green),
|
|
102
|
+
":".bold,
|
|
103
|
+
final_command.colorize(:light_black)
|
|
104
|
+
].join(" ")
|
|
105
|
+
|
|
106
|
+
puts ""
|
|
107
|
+
|
|
108
|
+
system final_command
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# ------------------------------------------
|
|
112
|
+
# PM-PROVISIONERS->DEFINITION --------------
|
|
113
|
+
# ------------------------------------------
|
|
114
|
+
def self.define(executable, os, &definition)
|
|
115
|
+
::MPM.pm_provisioners.add Provisioner.new(executable, os, &definition)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# ------------------------------------------
|
|
119
|
+
# PM-PROVISIONERS->RETRIEVAL ---------------
|
|
120
|
+
# ------------------------------------------
|
|
121
|
+
def self.get
|
|
122
|
+
pm_executable = ::MPM::Utility.get_pm_executable
|
|
123
|
+
|
|
124
|
+
::MPM.pm_provisioners.find do |pm_provisioner|
|
|
125
|
+
pm_provisioner.executable == pm_executable
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# ==============================================
|
|
2
|
+
# DEFINE->PM-PROVISIONER->APT ==================
|
|
3
|
+
# ==============================================
|
|
4
|
+
# FIX: It's not really apt-get since search is apt-cache... It's just "apt".
|
|
5
|
+
PM::Provisioner.define "apt-get", :linux do
|
|
6
|
+
install do |*packages|
|
|
7
|
+
#sudo true
|
|
8
|
+
["install", *packages]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
uninstall do |*packages|
|
|
12
|
+
#sudo true
|
|
13
|
+
# FIX: What about --purge?
|
|
14
|
+
["remove", *packages]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
search do |package|
|
|
18
|
+
#executable "apt-cache"
|
|
19
|
+
["search", package]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
search_installed do |package|
|
|
23
|
+
|
|
24
|
+
#executable "dpkg-query"
|
|
25
|
+
|
|
26
|
+
# http://www.cyberciti.biz/faq/find-out-if-package-is-installed-in-linux/
|
|
27
|
+
#
|
|
28
|
+
# dpkg-query --list cowsay
|
|
29
|
+
# dpkg-query --list cow*
|
|
30
|
+
#
|
|
31
|
+
#::MPM.pm_provisioner.exec_command :installed
|
|
32
|
+
["--list", package]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
list do
|
|
37
|
+
#executable "dpkg"
|
|
38
|
+
["-l"]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
update do
|
|
42
|
+
["update"]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
info do |package|
|
|
46
|
+
#executable cpt-cache
|
|
47
|
+
["show", package]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ----------------------------------------------
|
|
2
|
+
# DEFINE->PM-PROVISIONER->BREW -----------------
|
|
3
|
+
# ----------------------------------------------
|
|
4
|
+
PM::Provisioner.define "brew", :osx do
|
|
5
|
+
install do |*packages|
|
|
6
|
+
["install", *packages]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
uninstall do |*packages|
|
|
10
|
+
["uninstall", *packages]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
search do |package|
|
|
14
|
+
["search", package]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
search_installed do |package|
|
|
18
|
+
#executable "apt-cache"
|
|
19
|
+
["search", package, "|", "grep", "-i", package]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
list do
|
|
23
|
+
["list"]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
update do
|
|
27
|
+
["update"]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
info do |package|
|
|
31
|
+
["info", package]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Dir.glob(File.expand_path(File.join(File.dirname(__FILE__), "lib/pm_provisioners/brew", "*.rb"))).each do |file|
|
|
37
|
+
#load file
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
if Utility.get_os == :osx
|
|
3
|
+
class BrewCask < Thor
|
|
4
|
+
desc "uninstall...", "uninstall......"
|
|
5
|
+
def uninstall(*packages)
|
|
6
|
+
system "brew cask uninstall #{packages.join(" ")}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "install...", "install......"
|
|
10
|
+
def install(*packages)
|
|
11
|
+
system "brew cask install #{packages.join(" ")}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
desc "list...", "list......"
|
|
15
|
+
def list(*packages)
|
|
16
|
+
system "brew cask list"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class CLI < Thor
|
|
21
|
+
desc "/cask COMMAND...ARGS", "Meta wrapper for 'brew cask'."
|
|
22
|
+
subcommand "/cask", BrewCask
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
class NPM < Thor
|
|
3
|
+
desc "uninstall...", "uninstall......"
|
|
4
|
+
def uninstall(*packages)
|
|
5
|
+
system "npm uninstall #{packages.join(" ")}"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# FIX: How to handle "npm install -g <package>"
|
|
9
|
+
|
|
10
|
+
desc "install...", "install......"
|
|
11
|
+
def install(*packages)
|
|
12
|
+
system "npm install #{packages.join(" ")}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "list...", "list......"
|
|
16
|
+
def list(*packages)
|
|
17
|
+
system "npm list"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "search...", "search......"
|
|
21
|
+
def search(*packages)
|
|
22
|
+
system "npm search"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class CLI < Thor
|
|
27
|
+
desc "/npm COMMAND...ARGS", "Meta wrapper for 'npm'."
|
|
28
|
+
subcommand "/npm", NPM
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
class Pip < Thor
|
|
3
|
+
|
|
4
|
+
# FIX: IMPORTANT: Dependency on sudo -H is great.
|
|
5
|
+
|
|
6
|
+
desc "uninstall...", "uninstall......"
|
|
7
|
+
def uninstall(*packages)
|
|
8
|
+
system "sudo -H pip uninstall #{packages.join(" ")}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc "install...", "install......"
|
|
12
|
+
def install(*packages)
|
|
13
|
+
system "sudo -H pip install #{packages.join(" ")}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "list...", "list......"
|
|
17
|
+
def list(*packages)
|
|
18
|
+
system "sudo -H pip list"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "search...", "search......"
|
|
22
|
+
def search(query)
|
|
23
|
+
system "pip search #{query}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
desc "upgrade...", "upgrade......"
|
|
27
|
+
def upgrade()
|
|
28
|
+
system "sudo -H pip install --upgrade pip"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class CLI < Thor
|
|
33
|
+
desc "/pip COMMAND...ARGS", "Meta wrapper for 'pip'."
|
|
34
|
+
subcommand "/pip", Pip
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module MPM
|
|
2
|
+
class RubyGems < Thor
|
|
3
|
+
desc "uninstall...", "uninstall......"
|
|
4
|
+
def uninstall(*packages)
|
|
5
|
+
system "gem uninstall #{packages.join(" ")}"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
desc "install...", "install......"
|
|
9
|
+
def install(*packages)
|
|
10
|
+
system "gem install #{packages.join(" ")}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc "list...", "list......"
|
|
14
|
+
def list(*packages)
|
|
15
|
+
system "gem list"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
desc "search...", "search......"
|
|
19
|
+
def search(query)
|
|
20
|
+
system "gem search #{query}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
desc "update...", "update......"
|
|
24
|
+
def update(*packages)
|
|
25
|
+
system "gem update #{packages.join(" ")}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class CLI < Thor
|
|
30
|
+
desc "/gem COMMAND...ARGS", "Meta wrapper for 'gem'."
|
|
31
|
+
subcommand "/gem", RubyGems
|
|
32
|
+
end
|
|
33
|
+
end
|
data/mpm.gemspec
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
# stub: mpm 0.1.1 ruby lib
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "mpm".freeze
|
|
9
|
+
s.version = "0.1.1"
|
|
10
|
+
|
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
12
|
+
s.require_paths = ["lib".freeze]
|
|
13
|
+
s.authors = ["Erik Nomitch".freeze]
|
|
14
|
+
s.date = "2016-10-06"
|
|
15
|
+
s.description = "A meta package manager to unify interaction with multiple package managers across various platforms.".freeze
|
|
16
|
+
s.email = "erik@nomitch.com".freeze
|
|
17
|
+
s.executables = ["mpm".freeze]
|
|
18
|
+
s.extra_rdoc_files = [
|
|
19
|
+
"LICENSE.txt",
|
|
20
|
+
"README.md"
|
|
21
|
+
]
|
|
22
|
+
s.files = [
|
|
23
|
+
".document",
|
|
24
|
+
"Gemfile",
|
|
25
|
+
"Gemfile.lock",
|
|
26
|
+
"LICENSE.txt",
|
|
27
|
+
"README.md",
|
|
28
|
+
"Rakefile",
|
|
29
|
+
"VERSION",
|
|
30
|
+
"bin/mpm",
|
|
31
|
+
"lib/mpm.rb",
|
|
32
|
+
"lib/mpm/cli.rb",
|
|
33
|
+
"lib/mpm/pm/extension.rb",
|
|
34
|
+
"lib/mpm/pm/provisioner.rb",
|
|
35
|
+
"lib/pm_provisioners/apt.rb",
|
|
36
|
+
"lib/pm_provisioners/brew.rb",
|
|
37
|
+
"lib/pm_provisioners/brew/cask.rb",
|
|
38
|
+
"lib/pm_provisioners/extensions/npm.rb",
|
|
39
|
+
"lib/pm_provisioners/extensions/pip.rb",
|
|
40
|
+
"lib/pm_provisioners/ruby-gems/ruby-gems.rb",
|
|
41
|
+
"mpm.gemspec",
|
|
42
|
+
"ofe.json",
|
|
43
|
+
"run",
|
|
44
|
+
"test/helper.rb",
|
|
45
|
+
"test/test_package.rb"
|
|
46
|
+
]
|
|
47
|
+
s.homepage = "http://github.com/eriknomitch/mpm".freeze
|
|
48
|
+
s.licenses = ["MIT".freeze]
|
|
49
|
+
s.rubygems_version = "2.6.6".freeze
|
|
50
|
+
s.summary = "A meta package manager".freeze
|
|
51
|
+
|
|
52
|
+
if s.respond_to? :specification_version then
|
|
53
|
+
s.specification_version = 4
|
|
54
|
+
|
|
55
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
56
|
+
s.add_runtime_dependency(%q<activesupport>.freeze, ["~> 4.2"])
|
|
57
|
+
s.add_runtime_dependency(%q<thor>.freeze, ["~> 0.19"])
|
|
58
|
+
s.add_runtime_dependency(%q<awesome_print>.freeze, ["~> 1.6"])
|
|
59
|
+
s.add_runtime_dependency(%q<os>.freeze, ["~> 0.9"])
|
|
60
|
+
s.add_runtime_dependency(%q<os-name>.freeze, ["~> 0.0"])
|
|
61
|
+
s.add_runtime_dependency(%q<recursive-open-struct>.freeze, ["~> 0"])
|
|
62
|
+
s.add_runtime_dependency(%q<colorize>.freeze, ["~> 0"])
|
|
63
|
+
s.add_development_dependency(%q<shoulda>.freeze, ["~> 3.5"])
|
|
64
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
65
|
+
s.add_development_dependency(%q<bundler>.freeze, ["= 1.12.0"])
|
|
66
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
|
67
|
+
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0"])
|
|
68
|
+
s.add_development_dependency(%q<pry>.freeze, ["~> 0"])
|
|
69
|
+
else
|
|
70
|
+
s.add_dependency(%q<activesupport>.freeze, ["~> 4.2"])
|
|
71
|
+
s.add_dependency(%q<thor>.freeze, ["~> 0.19"])
|
|
72
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.6"])
|
|
73
|
+
s.add_dependency(%q<os>.freeze, ["~> 0.9"])
|
|
74
|
+
s.add_dependency(%q<os-name>.freeze, ["~> 0.0"])
|
|
75
|
+
s.add_dependency(%q<recursive-open-struct>.freeze, ["~> 0"])
|
|
76
|
+
s.add_dependency(%q<colorize>.freeze, ["~> 0"])
|
|
77
|
+
s.add_dependency(%q<shoulda>.freeze, ["~> 3.5"])
|
|
78
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
79
|
+
s.add_dependency(%q<bundler>.freeze, ["= 1.12.0"])
|
|
80
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
|
81
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0"])
|
|
82
|
+
s.add_dependency(%q<pry>.freeze, ["~> 0"])
|
|
83
|
+
end
|
|
84
|
+
else
|
|
85
|
+
s.add_dependency(%q<activesupport>.freeze, ["~> 4.2"])
|
|
86
|
+
s.add_dependency(%q<thor>.freeze, ["~> 0.19"])
|
|
87
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.6"])
|
|
88
|
+
s.add_dependency(%q<os>.freeze, ["~> 0.9"])
|
|
89
|
+
s.add_dependency(%q<os-name>.freeze, ["~> 0.0"])
|
|
90
|
+
s.add_dependency(%q<recursive-open-struct>.freeze, ["~> 0"])
|
|
91
|
+
s.add_dependency(%q<colorize>.freeze, ["~> 0"])
|
|
92
|
+
s.add_dependency(%q<shoulda>.freeze, ["~> 3.5"])
|
|
93
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
94
|
+
s.add_dependency(%q<bundler>.freeze, ["= 1.12.0"])
|
|
95
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
|
96
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0"])
|
|
97
|
+
s.add_dependency(%q<pry>.freeze, ["~> 0"])
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|