smc-get 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +674 -0
- data/README.rdoc +148 -0
- data/VERSION.txt +1 -0
- data/bin/smc-get +31 -0
- data/config/smc-get.yml +32 -0
- data/lib/smc_get.rb +21 -0
- data/lib/smc_get/cui.rb +289 -0
- data/lib/smc_get/cui_commands/command.rb +81 -0
- data/lib/smc_get/cui_commands/getinfo.rb +91 -0
- data/lib/smc_get/cui_commands/help.rb +64 -0
- data/lib/smc_get/cui_commands/install.rb +91 -0
- data/lib/smc_get/cui_commands/list.rb +80 -0
- data/lib/smc_get/cui_commands/search.rb +109 -0
- data/lib/smc_get/cui_commands/uninstall.rb +78 -0
- data/lib/smc_get/cui_commands/version.rb +57 -0
- data/lib/smc_get/errors.rb +113 -0
- data/lib/smc_get/gui.rb +19 -0
- data/lib/smc_get/package.rb +279 -0
- data/lib/smc_get/smc_get.rb +139 -0
- data/test/test_smc-get-cui.rb +121 -0
- data/test/test_smc-get-lib.rb +170 -0
- metadata +87 -0
@@ -0,0 +1,139 @@
|
|
1
|
+
#Encoding: UTF-8
|
2
|
+
################################################################################
|
3
|
+
# This file is part of smc-get.
|
4
|
+
# Copyright (C) 2010-2011 Entertaining Software, Inc.
|
5
|
+
# Copyright (C) 2011 Marvin Gülker
|
6
|
+
#
|
7
|
+
# This program is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, either version 3 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
################################################################################
|
20
|
+
|
21
|
+
require "pathname"
|
22
|
+
require 'tempfile'
|
23
|
+
require "fileutils"
|
24
|
+
begin
|
25
|
+
require "psych"
|
26
|
+
YAML = Psych
|
27
|
+
rescue LoadError
|
28
|
+
require 'yaml'
|
29
|
+
end
|
30
|
+
require 'uri'
|
31
|
+
require 'net/https'
|
32
|
+
|
33
|
+
require_relative "./errors"
|
34
|
+
require_relative "./package"
|
35
|
+
|
36
|
+
#This is the main module of smc-get and it's namespace.
|
37
|
+
module SmcGet
|
38
|
+
|
39
|
+
#Root directory of the smc-get program and libraries.
|
40
|
+
ROOT_DIR = Pathname.new(__FILE__).dirname.parent.parent
|
41
|
+
#Subdirectory for executable files.
|
42
|
+
BIN_DIR = ROOT_DIR + "bin"
|
43
|
+
#Subdirectory for library files.
|
44
|
+
LIB_DIR = ROOT_DIR + "lib"
|
45
|
+
#Subdirectory for configuration files.
|
46
|
+
CONFIG_DIR = ROOT_DIR + "config"
|
47
|
+
|
48
|
+
#Directory where the package specifications are saved to. Relative to the
|
49
|
+
#data directory in SmcGet.datadir.
|
50
|
+
PACKAGE_SPECS_DIR = "packages".freeze
|
51
|
+
#Directory where a package's music files are saved to. Relative to the
|
52
|
+
#data directory in SmcGet.datadir.
|
53
|
+
PACKAGE_MUSIC_DIR = "music/contrib-music".freeze
|
54
|
+
#Directory where a package's graphics files are saved to. Relative to the
|
55
|
+
#data directory given in SmcGet.datadir
|
56
|
+
PACKAGE_GRAPHICS_DIR = "pixmaps/contrib-graphics".freeze
|
57
|
+
#Directory where a package's level files are saved to. Relative to the
|
58
|
+
#data directory given in SmcGet.datadir.
|
59
|
+
PACKAGE_LEVELS_DIR = "levels".freeze
|
60
|
+
#The name of the file containing the list of all levels in the
|
61
|
+
#repository.
|
62
|
+
PACKAGE_LIST_FILE = "#{PACKAGE_SPECS_DIR}/packages.lst".freeze
|
63
|
+
#The version of smc-get.
|
64
|
+
VERSION = Pathname.new(__FILE__).dirname.expand_path.join("..", "..", "VERSION.txt").read.chomp
|
65
|
+
|
66
|
+
class << self
|
67
|
+
|
68
|
+
#The URL of the repository.
|
69
|
+
attr_reader :repo_url
|
70
|
+
#The directory where SMC is installed.
|
71
|
+
attr_reader :datadir
|
72
|
+
|
73
|
+
@repo_url = nil
|
74
|
+
@datadir = nil
|
75
|
+
|
76
|
+
#Initializes the library. Pass in the URL from which you want
|
77
|
+
#to downloaded packages (most likely Luiji's contributed level
|
78
|
+
#repository at <tt>https://github.com/Luiji/Secret-Maryo-Chronicles-Contributed-Levels/raw/master/</tt>)
|
79
|
+
#and the directory where SMC is installed (something along the lines of
|
80
|
+
#<b>/usr/share/smc</b>). Note you *have* to call this method before
|
81
|
+
#you can make use of the smc-get library; otherwise you'll get bombed
|
82
|
+
#by SmcGet::Errors::LibraryNotInitialized exceptions.
|
83
|
+
#
|
84
|
+
#You may call this method more than once if you want to reinitialize
|
85
|
+
#the library to use other resources.
|
86
|
+
def setup(repo_url, datadir)
|
87
|
+
@repo_url = repo_url
|
88
|
+
@datadir = Pathname.new(datadir)
|
89
|
+
end
|
90
|
+
|
91
|
+
# Download the specified raw file from the repository to the specified
|
92
|
+
# output file. URL should be everything in the URL after
|
93
|
+
# SmcGet.repo_url.
|
94
|
+
# Yields the currently downloaded file and how many percent of that file have
|
95
|
+
# already been downloaded if a block is given.
|
96
|
+
def download(url, output) # :nodoc:
|
97
|
+
Errors::LibraryNotInitialized.throw_if_needed!
|
98
|
+
# Make url friendly.
|
99
|
+
url = URI::Parser.new.escape(url)
|
100
|
+
# Create directories if needed.
|
101
|
+
FileUtils.mkdir_p(File.dirname(output))
|
102
|
+
# Download file.
|
103
|
+
File.open(output, "w") do |outputfile|
|
104
|
+
uri = URI.parse(@repo_url + url)
|
105
|
+
|
106
|
+
request = Net::HTTP.new(uri.host, uri.port)
|
107
|
+
request.use_ssl = true #GitHub uses SSL
|
108
|
+
|
109
|
+
begin
|
110
|
+
request.start do
|
111
|
+
#1. Establish connection
|
112
|
+
request.request_get(uri.path) do |response|
|
113
|
+
raise(Errors::DownloadFailedError.new(url), "ERROR: Received HTTP error code #{response.code}.") unless response.code == "200"
|
114
|
+
#2. Get what size the file is
|
115
|
+
final_size = response.content_length
|
116
|
+
current_size = 0
|
117
|
+
#Ensure the first value the user sees are 0%
|
118
|
+
yield(url, 0) if block_given?
|
119
|
+
#3. Get the actual file in parts and report percent done.
|
120
|
+
response.read_body do |part|
|
121
|
+
outputfile.write(part)
|
122
|
+
|
123
|
+
current_size += part.size
|
124
|
+
percent = (current_size.to_f / final_size.to_f) * 100
|
125
|
+
yield(url, percent) if block_given?
|
126
|
+
end
|
127
|
+
end
|
128
|
+
#Ensure the last value the user sees are 100%
|
129
|
+
yield(url, 100) if block_given?
|
130
|
+
end
|
131
|
+
rescue Timeout::Error
|
132
|
+
raise(Errors::ConnectionTimedOutError.new(url), "ERROR: Connection timed out.")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
################################################################################
|
4
|
+
# This file is part of smc-get.
|
5
|
+
# Copyright (C) 2010-2011 Entertaining Software, Inc.
|
6
|
+
# Copyright (C) 2011 Marvin Gülker
|
7
|
+
#
|
8
|
+
# This program is free software: you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
20
|
+
################################################################################
|
21
|
+
|
22
|
+
require "fileutils"
|
23
|
+
require "test/unit"
|
24
|
+
|
25
|
+
if RUBY_VERSION =~ /^1.9/
|
26
|
+
require_relative "../lib/smc_get/smc_get"
|
27
|
+
else #For 1.8 fans
|
28
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "..", "smc_get")
|
29
|
+
end
|
30
|
+
|
31
|
+
class SmcGetCUITest < Test::Unit::TestCase
|
32
|
+
#Directory from which packages are downloaded for the test.
|
33
|
+
TEST_REPO = "https://github.com/Luiji/Secret-Maryo-Chronicles-Contributed-Levels/raw/master/"
|
34
|
+
#Directory where we will download everything into. It's "testdir" right in this directory.
|
35
|
+
TEST_DIR = File.join(File.expand_path(File.dirname(__FILE__)), "testdir")
|
36
|
+
TEST_PACKAGES_DIR = File.join(TEST_DIR, "packages")
|
37
|
+
TEST_PACKAGES_MUSIC_DIR = File.join(TEST_PACKAGES_DIR, "contrib-music")
|
38
|
+
TEST_PACKAGES_GRAPHICS_DIR = File.join(TEST_PACKAGES_DIR, "contrib-graphics")
|
39
|
+
TEST_PACKAGES_LEVELS_DIR = File.join(TEST_PACKAGES_DIR, "levels")
|
40
|
+
#Test configuration file's location. Inside the test dir, so we're able to
|
41
|
+
#delete it together with everything else.
|
42
|
+
TEST_CONFIG_FILE = File.join(TEST_DIR, "testconf.yml")
|
43
|
+
|
44
|
+
#The configuration file we use for this tests.
|
45
|
+
TEST_CONFIG =<<CONFIG
|
46
|
+
---
|
47
|
+
data_directory: #{TEST_DIR}
|
48
|
+
repo_url: "https://github.com/Luiji/Secret-Maryo-Chronicles-Contributed-Levels/raw/master/"
|
49
|
+
CONFIG
|
50
|
+
|
51
|
+
#List of pacakges to install and inspect wheather they
|
52
|
+
#are correctly installed or not.
|
53
|
+
TEST_PACKAGES = %w[icy-mountain christmas-2010]
|
54
|
+
#To test wheather smc-get does know what to do in case of non-existing packages.
|
55
|
+
TEST_INVALID_PACKAGES = %w[sdhrfg jhjjjj]
|
56
|
+
|
57
|
+
TEST_SEARCH_TERMS = ["icy", "chr.stmas"]
|
58
|
+
TEST_SEARCH_TERMS_NOT_FOUND = ["dfgd", "^icy$"]
|
59
|
+
|
60
|
+
#The command to run smc-get
|
61
|
+
SMC_GET = File.join(File.expand_path(File.dirname(__FILE__)), "..", "bin", "smc-get")
|
62
|
+
|
63
|
+
#Test initialization. Write the config file and ensure the directory we
|
64
|
+
#want to download into is available. Run before EACH test.
|
65
|
+
def setup
|
66
|
+
FileUtils.mkdir_p(TEST_DIR)
|
67
|
+
File.open(TEST_CONFIG_FILE, "w"){|f| f.write(TEST_CONFIG)}
|
68
|
+
end
|
69
|
+
|
70
|
+
#Cleanup afterwards. Delete our testing directory. Run after EACH test.
|
71
|
+
def teardown
|
72
|
+
FileUtils.rm_rf(TEST_DIR)
|
73
|
+
end
|
74
|
+
|
75
|
+
#Executes <tt>smc-get str</tt> and returns true on success, false
|
76
|
+
#otherwise. Ensures the test configuration file is loaded.
|
77
|
+
def smc_get(str)
|
78
|
+
system("#{SMC_GET} -c #{TEST_CONFIG_FILE} #{str}")
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_install
|
82
|
+
TEST_PACKAGES.each do |pkg|
|
83
|
+
smc_get "install #{pkg}"
|
84
|
+
assert(File.file?(File.join(TEST_PACKAGES_DIR, "#{pkg}.yml")), "Package file not found: #{pkg}.yml.")
|
85
|
+
end
|
86
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
87
|
+
assert(!smc_get("install #{pkg}"), "Command completed on invalid packages without error.")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_uninstall
|
92
|
+
TEST_PACKAGES.each do |pkg|
|
93
|
+
assert(!smc_get("uninstall #{pkg}"), "Uninstalled a noninstalled package successfully.")
|
94
|
+
smc_get "install #{pkg}"
|
95
|
+
smc_get "uninstall #{pkg}"
|
96
|
+
assert(!File.exists?(File.join(TEST_PACKAGES_DIR, "#{pkg}.yml")), "Found after uninstalling: #{pkg}.yml")
|
97
|
+
end
|
98
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
99
|
+
assert(!smc_get("uninstall #{pkg}"), "Uninstalled an invalid package successfully.")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_getinfo
|
104
|
+
TEST_PACKAGES.each do |pkg|
|
105
|
+
assert(smc_get("getinfo #{pkg}"), "Couldn't retrieve info for #{pkg}.")
|
106
|
+
end
|
107
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
108
|
+
assert(!smc_get("getinfo #{pkg}"), "Retrieved info for broken package sucessfully.")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_search
|
113
|
+
TEST_SEARCH_TERMS.each do |query|
|
114
|
+
assert(smc_get("search #{query}"), "Did not find packages it ought to find.")
|
115
|
+
end
|
116
|
+
TEST_SEARCH_TERMS_NOT_FOUND.each do |query|
|
117
|
+
assert(!smc_get("search #{query}"), "Did find packages for invalid query.")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
################################################################################
|
4
|
+
# This file is part of smc-get.
|
5
|
+
# Copyright (C) 2010-2011 Entertaining Software, Inc.
|
6
|
+
# Copyright (C) 2011 Marvin Gülker
|
7
|
+
#
|
8
|
+
# This program is free software: you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
20
|
+
################################################################################
|
21
|
+
|
22
|
+
require "fileutils"
|
23
|
+
require "test/unit"
|
24
|
+
|
25
|
+
if RUBY_VERSION =~ /^1.9/
|
26
|
+
require_relative "../lib/smc_get/smc_get"
|
27
|
+
else #For 1.8 fans
|
28
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "..", "smc_get")
|
29
|
+
end
|
30
|
+
|
31
|
+
#Test case for SmcGet. If the tests defined here don't fail, everything
|
32
|
+
#works well.
|
33
|
+
class SmcGetLibraryTest < Test::Unit::TestCase
|
34
|
+
|
35
|
+
#Directory from which packages are downloaded for the test.
|
36
|
+
TEST_REPO = "https://github.com/Luiji/Secret-Maryo-Chronicles-Contributed-Levels/raw/master/"
|
37
|
+
#Directory where we will download everything into. It's "testdir" right in this directory.
|
38
|
+
TEST_DIR = File.join(File.expand_path(File.dirname(__FILE__)), "testdir")
|
39
|
+
TEST_PACKAGES_DIR = File.join(TEST_DIR, "packages")
|
40
|
+
TEST_PACKAGES_MUSIC_DIR = File.join(TEST_PACKAGES_DIR, "contrib-music")
|
41
|
+
TEST_PACKAGES_GRAPHICS_DIR = File.join(TEST_PACKAGES_DIR, "contrib-graphics")
|
42
|
+
TEST_PACKAGES_LEVELS_DIR = File.join(TEST_PACKAGES_DIR, "levels")
|
43
|
+
#Test configuration file's location. Inside the test dir, so we're able to
|
44
|
+
#delete it together with everything else.
|
45
|
+
TEST_CONFIG_FILE = File.join(TEST_DIR, "testconf.yml")
|
46
|
+
|
47
|
+
#The configuration file we use for this tests.
|
48
|
+
TEST_CONFIG =<<CONFIG
|
49
|
+
---
|
50
|
+
data-directory: #{TEST_DIR}
|
51
|
+
CONFIG
|
52
|
+
|
53
|
+
#List of pacakges to install and inspect wheather they
|
54
|
+
#are correctly installed or not.
|
55
|
+
TEST_PACKAGES = %w[icy-mountain christmas-2010]
|
56
|
+
#To test wheather smc-get does know what to do in case of non-existing packages.
|
57
|
+
TEST_INVALID_PACKAGES = %w[sdhrfg jhjjjj]
|
58
|
+
|
59
|
+
TEST_SEARCH_TERMS = ["icy", /icy/]
|
60
|
+
TEST_SEARCH_TERMS_NOT_FOUND = ["dfgd", /^nonexistant$/]
|
61
|
+
|
62
|
+
#Test initialization. Write the config file and ensure the directory we
|
63
|
+
#want to download into is available. Run before EACH test.
|
64
|
+
def setup
|
65
|
+
FileUtils.mkdir_p(TEST_DIR)
|
66
|
+
File.open(TEST_CONFIG_FILE, "w"){|f| f.write(TEST_CONFIG)}
|
67
|
+
SmcGet.setup(TEST_REPO, TEST_DIR)
|
68
|
+
end
|
69
|
+
|
70
|
+
#Cleanup afterwards. Delete our testing directory. Run after EACH test.
|
71
|
+
def teardown
|
72
|
+
FileUtils.rm_rf(TEST_DIR)
|
73
|
+
end
|
74
|
+
|
75
|
+
#Tests the library's install routine.
|
76
|
+
def test_install
|
77
|
+
TEST_PACKAGES.each do |pkg|
|
78
|
+
puts "Test installing #{pkg}"
|
79
|
+
package = SmcGet::Package.new(pkg)
|
80
|
+
package.install
|
81
|
+
|
82
|
+
assert(package.spec_file.file?, "Package config file for #{pkg} not found.")
|
83
|
+
|
84
|
+
pkg_config = YAML.load_file(package.spec_file.to_s)
|
85
|
+
|
86
|
+
Dir.chdir(TEST_DIR) do
|
87
|
+
[%w[levels levels], %w[music music/contrib-music], %w[graphics pixmaps/contrib-graphics]].each do |part, dir|
|
88
|
+
next unless pkg_config.has_key?(part)
|
89
|
+
pkg_config[part].each do |file|
|
90
|
+
assert(File.file?(File.join(dir, file)), "File not found after installing: #{file}.")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
97
|
+
assert_raises(SmcGet::Errors::NoSuchPackageError){SmcGet::Package.new(pkg).install}
|
98
|
+
end
|
99
|
+
assert_equal(TEST_PACKAGES.count, SmcGet::Package.installed_packages.count)
|
100
|
+
end
|
101
|
+
|
102
|
+
#def test_incorrect_install
|
103
|
+
# #Maybe installed twice?
|
104
|
+
#end
|
105
|
+
|
106
|
+
def test_uninstall
|
107
|
+
TEST_PACKAGES.each do |pkg|
|
108
|
+
puts "Test uninstalling #{pkg}"
|
109
|
+
package = SmcGet::Package.new(pkg)
|
110
|
+
package.install #We can't uninstall a package that is not installed
|
111
|
+
|
112
|
+
pkg_config = YAML.load_file(package.spec_file)
|
113
|
+
|
114
|
+
package.uninstall
|
115
|
+
assert(!package.spec_file.exist?, "File found after uninstalling: #{package.spec_file}.")
|
116
|
+
|
117
|
+
Dir.chdir(TEST_DIR) do
|
118
|
+
[%w[levels levels], %w[music music/contrib-music], %w[graphics pixmaps/contrib-graphics]].each do |part, dir|
|
119
|
+
next unless pkg_config.has_key?(part)
|
120
|
+
pkg_config[part].each do |file|
|
121
|
+
assert(!File.exists?(File.join(dir, file)), "File found after uninstalling: #{file}.")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
128
|
+
assert_raises(SmcGet::Errors::NoSuchPackageError){SmcGet::Package.new(pkg).uninstall}
|
129
|
+
end
|
130
|
+
assert_equal(0, SmcGet::Package.installed_packages.count)
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_getinfo
|
134
|
+
TEST_PACKAGES.each do |pkg|
|
135
|
+
puts "Test getting info about #{pkg}"
|
136
|
+
package = SmcGet::Package.new(pkg)
|
137
|
+
package.install #We can't check specs from packages not installed
|
138
|
+
|
139
|
+
pkg_config = YAML.load_file(package.spec_file)
|
140
|
+
|
141
|
+
assert_equal(pkg_config, package.getinfo)
|
142
|
+
end
|
143
|
+
|
144
|
+
TEST_INVALID_PACKAGES.each do |pkg|
|
145
|
+
assert_raises(SmcGet::Errors::NoSuchPackageError){SmcGet::Package.new(pkg).getinfo}
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_search
|
150
|
+
TEST_SEARCH_TERMS.each do |query|
|
151
|
+
ary = SmcGet::Package.search(query)
|
152
|
+
pkg = ary[0]
|
153
|
+
assert_not_equal(0, ary.size)
|
154
|
+
|
155
|
+
pkg.install
|
156
|
+
|
157
|
+
ary = SmcGet::Package.search(query, [:pkgname], true)
|
158
|
+
assert_not_equal(0, ary.size)
|
159
|
+
|
160
|
+
pkg.uninstall
|
161
|
+
|
162
|
+
ary = SmcGet::Package.search(query, [:pkgname], true)
|
163
|
+
assert_equal(0, ary.size)
|
164
|
+
end
|
165
|
+
TEST_SEARCH_TERMS_NOT_FOUND.each do |query|
|
166
|
+
assert_equal(0, SmcGet::Package.search(query).size)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: smc-get
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Luiji Maryo
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-06 00:00:00 -05:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: |
|
18
|
+
smc-get is a apt-get like tool to manage levels that have
|
19
|
+
been uploaded to the Secret Maryo Chronicles contributed
|
20
|
+
levels repository. You can install, remove and list the
|
21
|
+
levels you have installed and search for new ones that
|
22
|
+
are available online.
|
23
|
+
|
24
|
+
email: luiji@users.sourceforge.net
|
25
|
+
executables:
|
26
|
+
- smc-get
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files:
|
30
|
+
- README.rdoc
|
31
|
+
- COPYING
|
32
|
+
files:
|
33
|
+
- bin/smc-get
|
34
|
+
- lib/smc_get/smc_get.rb
|
35
|
+
- lib/smc_get/gui.rb
|
36
|
+
- lib/smc_get/cui_commands/uninstall.rb
|
37
|
+
- lib/smc_get/cui_commands/getinfo.rb
|
38
|
+
- lib/smc_get/cui_commands/command.rb
|
39
|
+
- lib/smc_get/cui_commands/install.rb
|
40
|
+
- lib/smc_get/cui_commands/version.rb
|
41
|
+
- lib/smc_get/cui_commands/list.rb
|
42
|
+
- lib/smc_get/cui_commands/help.rb
|
43
|
+
- lib/smc_get/cui_commands/search.rb
|
44
|
+
- lib/smc_get/cui.rb
|
45
|
+
- lib/smc_get/errors.rb
|
46
|
+
- lib/smc_get/package.rb
|
47
|
+
- lib/smc_get.rb
|
48
|
+
- test/test_smc-get-cui.rb
|
49
|
+
- test/test_smc-get-lib.rb
|
50
|
+
- config/smc-get.yml
|
51
|
+
- COPYING
|
52
|
+
- README.rdoc
|
53
|
+
- VERSION.txt
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: https://github.com/Luiji/smc-get
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options:
|
60
|
+
- -t
|
61
|
+
- smc-get RDocs
|
62
|
+
- -m
|
63
|
+
- README.rdoc
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 1.9.2
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
requirements:
|
79
|
+
- Secret Maryo Chronicles
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 1.5.0
|
82
|
+
signing_key:
|
83
|
+
specification_version: 3
|
84
|
+
summary: Manages Secret Maryo Chronicles levels.
|
85
|
+
test_files:
|
86
|
+
- test/test_smc-get-cui.rb
|
87
|
+
- test/test_smc-get-lib.rb
|