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