mpm 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
+