gsm-sources-manager 1.0.0.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +17 -0
- data/.gitignore +52 -0
- data/.rubocop.yml +1156 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +35 -0
- data/LICENSE +21 -0
- data/README.md +69 -0
- data/Rakefile +24 -0
- data/docs/.gitignore +1 -0
- data/docs/_config.yml +1 -0
- data/docs/_data/changelog.yml +3 -0
- data/docs/_data/index.yml +87 -0
- data/docs/_layouts/default.html +43 -0
- data/docs/css/style.css +177 -0
- data/docs/image/gsm.png +0 -0
- data/docs/index.html +97 -0
- data/exe/gsm +139 -0
- data/gsm.gemspec +29 -0
- data/lib/gsm.rb +6 -0
- data/lib/gsm/bundle.rb +14 -0
- data/lib/gsm/gem.rb +178 -0
- data/lib/gsm/util.rb +4 -0
- data/lib/gsm/version.rb +3 -0
- data/test/conf/good.yml +6 -0
- data/test/conf/multiple.yml +6 -0
- data/test/helper.rb +18 -0
- data/test/test_bundle.rb +17 -0
- data/test/test_gem.rb +198 -0
- data/test/test_version.rb +9 -0
- metadata +137 -0
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gsm-sources-manager (1.0.0.alpha2)
|
5
|
+
mercenary (~> 0.3.6)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
codeclimate-test-reporter (0.6.0)
|
11
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
12
|
+
docile (1.1.5)
|
13
|
+
json (2.0.2)
|
14
|
+
mercenary (0.3.6)
|
15
|
+
minitest (5.9.1)
|
16
|
+
rake (11.3.0)
|
17
|
+
shoulda-context (1.2.1)
|
18
|
+
simplecov (0.12.0)
|
19
|
+
docile (~> 1.1.0)
|
20
|
+
json (>= 1.8, < 3)
|
21
|
+
simplecov-html (~> 0.10.0)
|
22
|
+
simplecov-html (0.10.0)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
codeclimate-test-reporter
|
29
|
+
gsm-sources-manager!
|
30
|
+
minitest
|
31
|
+
rake
|
32
|
+
shoulda-context
|
33
|
+
|
34
|
+
BUNDLED WITH
|
35
|
+
1.13.2
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2016 David Zhang
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# GSM Sources Manager for Ruby Gems
|
2
|
+
|
3
|
+
![](https://img.shields.io/badge/license-MIT-blue.svg)
|
4
|
+
[![](https://api.travis-ci.org/crispgm/gsm.svg)](https://travis-ci.org/crispgm/gsm)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/crispgm/gsm/badges/gpa.svg)](https://codeclimate.com/github/crispgm/gsm)
|
6
|
+
[![Test Coverage](https://codeclimate.com/github/crispgm/gsm/badges/coverage.svg)](https://codeclimate.com/github/crispgm/gsm/coverage)
|
7
|
+
[![Join the chat at https://gitter.im/crispgm/gsm](https://badges.gitter.im/crispgm/gsm.svg)](https://gitter.im/crispgm/gsm?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
|
+
[![BADGINATOR](https://badginator.herokuapp.com/crispgm/gsm.svg)](https://github.com/defunctzombie/badginator)
|
9
|
+
|
10
|
+
GSM is a simple sources manager for RubyGems. GSM means GSM Sources Manager as a recursive acronym or simply Gem Sources Manager.
|
11
|
+
|
12
|
+
In Ruby development, we always need alternative RubyGems source in special networks. e.g. In China Mainland, you know. GSM helps get your gem sources managed.
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
### Install with RubyGems
|
17
|
+
|
18
|
+
```
|
19
|
+
$ gem install gsm-sources-manager
|
20
|
+
$ gsm --version
|
21
|
+
```
|
22
|
+
|
23
|
+
### Or, you may install manually
|
24
|
+
|
25
|
+
```
|
26
|
+
$ git clone https://github.com/crispgm/gsm.git
|
27
|
+
$ bundle install
|
28
|
+
$ bundle exec exe/gsm --version
|
29
|
+
```
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
```
|
34
|
+
Usage:
|
35
|
+
|
36
|
+
gsm <subcommand> [options]
|
37
|
+
|
38
|
+
Options:
|
39
|
+
-h, --help Show this message
|
40
|
+
-v, --version Print the name and version
|
41
|
+
-t, --trace Show the full backtrace when an error occurs
|
42
|
+
|
43
|
+
Subcommands:
|
44
|
+
list List all sources
|
45
|
+
use Use source
|
46
|
+
add Add source
|
47
|
+
del Delete source
|
48
|
+
reset Reset all sources
|
49
|
+
mirror Mirror source for Bundler
|
50
|
+
help Show usage
|
51
|
+
```
|
52
|
+
|
53
|
+
See <https://crispgm.github.io/gsm/#guide> for details.
|
54
|
+
|
55
|
+
## API Reference
|
56
|
+
|
57
|
+
TODO: API Reference of `libgsm`.
|
58
|
+
|
59
|
+
## Sources
|
60
|
+
|
61
|
+
* [RubyGems](https://rubygems.org/)
|
62
|
+
* [RubyChina](https://gems.ruby-china.org/)
|
63
|
+
* [Taobao](https://ruby.taobao.org/)
|
64
|
+
|
65
|
+
## Contributing
|
66
|
+
|
67
|
+
* [GSM Sources Manager](https://github.com/crispgm/gsm) is licensed under [MIT License](/LICENSE).
|
68
|
+
* If there is a bug, you may [file an issue](https://github.com/crispgm/gsm/issues/new) or pull request directly.
|
69
|
+
* Pull requests for contribution is welcomed.
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
task default: %w[test]
|
4
|
+
|
5
|
+
require 'rake/testtask'
|
6
|
+
|
7
|
+
Rake::TestTask.new do |t|
|
8
|
+
t.libs << 'test'
|
9
|
+
t.test_files = FileList['test/test_*.rb']
|
10
|
+
t.verbose = true
|
11
|
+
end
|
12
|
+
|
13
|
+
task :count do
|
14
|
+
files = `git ls-files -z`.split("\x0")
|
15
|
+
shell_cmd = "wc -l "
|
16
|
+
files.grep(%r{^(exe|lib|test)/}).grep(%r{exe|.rb}).each do |f|
|
17
|
+
shell_cmd << f << " \\\n"
|
18
|
+
end
|
19
|
+
begin
|
20
|
+
sh shell_cmd[0..-3]
|
21
|
+
rescue
|
22
|
+
puts "Count Error."
|
23
|
+
end
|
24
|
+
end
|
data/docs/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
/_site/
|
data/docs/_config.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
baseurl: "/gsm"
|
@@ -0,0 +1,87 @@
|
|
1
|
+
install: |
|
2
|
+
## Install with RubyGems
|
3
|
+
|
4
|
+
```shell
|
5
|
+
$ gem install gsm-sources-manager
|
6
|
+
$ gsm --version
|
7
|
+
```
|
8
|
+
|
9
|
+
## Or, you may install manually
|
10
|
+
|
11
|
+
```
|
12
|
+
$ git clone https://github.com/crispgm/gsm.git
|
13
|
+
$ bundle install
|
14
|
+
$ bundle exec exe/gsm --version
|
15
|
+
```
|
16
|
+
guide: |
|
17
|
+
## Getting Started
|
18
|
+
|
19
|
+
Once you have installed and run `gsm` with commands other than `--help` or `--version`, `gsm` will load sources from current `gem sources -l` you set.
|
20
|
+
|
21
|
+
## Commands
|
22
|
+
|
23
|
+
### List
|
24
|
+
|
25
|
+
List sources within `gsm`.
|
26
|
+
|
27
|
+
```
|
28
|
+
$ gsm list
|
29
|
+
```
|
30
|
+
|
31
|
+
### Use
|
32
|
+
|
33
|
+
Use a source with `source_name`.
|
34
|
+
|
35
|
+
```
|
36
|
+
$ gsm use Amethyst
|
37
|
+
```
|
38
|
+
|
39
|
+
### Add
|
40
|
+
|
41
|
+
Use a source with `source_name` and `source_url`.
|
42
|
+
|
43
|
+
`--use`: Use the input source as well. Equivalent to `gsm add` and then `gsm use`.
|
44
|
+
|
45
|
+
```
|
46
|
+
$ gsm add Amethyst https://rubygems.org/
|
47
|
+
```
|
48
|
+
|
49
|
+
### Del
|
50
|
+
|
51
|
+
Delete a source with `source_name`.
|
52
|
+
|
53
|
+
```
|
54
|
+
$ gsm del Amethyst
|
55
|
+
```
|
56
|
+
|
57
|
+
### Reset
|
58
|
+
|
59
|
+
Reset all sources.
|
60
|
+
|
61
|
+
```
|
62
|
+
$ gsm reset
|
63
|
+
```
|
64
|
+
|
65
|
+
### Mirror
|
66
|
+
|
67
|
+
Mirror the source with `bundle`.
|
68
|
+
|
69
|
+
`--reset`: Reset mirror of bundle configuration.
|
70
|
+
|
71
|
+
```
|
72
|
+
$ gsm mirror Amethyst
|
73
|
+
```
|
74
|
+
|
75
|
+
### Help
|
76
|
+
|
77
|
+
Show help info.
|
78
|
+
|
79
|
+
```
|
80
|
+
$ gsm help
|
81
|
+
```
|
82
|
+
contrib: |
|
83
|
+
[GSM Sources Manager](https://github.com/crispgm/gsm) is licensed under MIT License.
|
84
|
+
|
85
|
+
If there is a bug, you may [file an issue](https://github.com/crispgm/gsm/issues/new) or pull request directly.
|
86
|
+
|
87
|
+
Pull requests for contribution is welcomed.
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
6
|
+
<title>Home | GSM Sources Manager</title>
|
7
|
+
<link rel="stylesheet" href="/gsm/css/style.css">
|
8
|
+
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
9
|
+
<script src="https://crispgm.com/script/highlight.pack.js"></script>
|
10
|
+
<link rel="stylesheet" href="https://crispgm.com/css/zenburn.css">
|
11
|
+
<script>hljs.initHighlightingOnLoad();</script>
|
12
|
+
</head>
|
13
|
+
<body>
|
14
|
+
<div id="container">
|
15
|
+
<header id="topbar">
|
16
|
+
<div class="menu">
|
17
|
+
<div class="menu-item">
|
18
|
+
<a href="/gsm/">Home</a>
|
19
|
+
</div>
|
20
|
+
<div class="menu-item">
|
21
|
+
<a href="#install">Install</a>
|
22
|
+
</div>
|
23
|
+
<div class="menu-item">
|
24
|
+
<a href="#guide">Guide</a>
|
25
|
+
</div>
|
26
|
+
<div class="menu-item">
|
27
|
+
<a href="#changelog">Changelog</a>
|
28
|
+
</div>
|
29
|
+
<div class="menu-item">
|
30
|
+
<a href="#contributing">Contributing</a>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<div class="title">
|
34
|
+
GSM Sources Manager
|
35
|
+
</div>
|
36
|
+
</header>
|
37
|
+
{{ content }}
|
38
|
+
<footer>
|
39
|
+
Copyright © 2016, <a href="https://crispgm.com/">David Zhang</a>.
|
40
|
+
</footer>
|
41
|
+
</div>
|
42
|
+
</body>
|
43
|
+
</html>
|
data/docs/css/style.css
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
* {
|
2
|
+
box-sizing: border-box;
|
3
|
+
}
|
4
|
+
html {
|
5
|
+
width: 100%;
|
6
|
+
font-size: 16px;
|
7
|
+
}
|
8
|
+
@media (max-width: 48rem) {
|
9
|
+
html {
|
10
|
+
font-size: 12px;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
body {
|
14
|
+
margin: 0;
|
15
|
+
font-family: "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
|
16
|
+
font-size: 1rem;
|
17
|
+
-webkit-font-smoothing: antialiased;
|
18
|
+
color: #333;
|
19
|
+
background-color: #fbfbfb;
|
20
|
+
word-wrap: break-word;
|
21
|
+
text-align: center;
|
22
|
+
height: 100%;
|
23
|
+
line-height: 1.5rem;
|
24
|
+
}
|
25
|
+
img {
|
26
|
+
border: 0;
|
27
|
+
}
|
28
|
+
a {
|
29
|
+
text-decoration: none;
|
30
|
+
color: #06c;
|
31
|
+
}
|
32
|
+
a:hover {
|
33
|
+
text-decoration: underline;
|
34
|
+
}
|
35
|
+
pre.highlight {
|
36
|
+
border: .05rem solid #aaaaaa;
|
37
|
+
border-radius: .2rem;
|
38
|
+
font-family: Menlo, Monaco, "Source Code Pro", Consolas, Courier;
|
39
|
+
font-size: 1rem;
|
40
|
+
}
|
41
|
+
code.hljs {
|
42
|
+
padding: .8rem;
|
43
|
+
}
|
44
|
+
code.highlighter-rouge {
|
45
|
+
border: .05rem solid #aaaaaa;
|
46
|
+
border-radius: .2rem;
|
47
|
+
padding-left: .2rem;
|
48
|
+
padding-right: .2rem;
|
49
|
+
}
|
50
|
+
#container {
|
51
|
+
margin: 0 auto;
|
52
|
+
max-width: 48rem;
|
53
|
+
text-align: left;
|
54
|
+
}
|
55
|
+
@media (max-width: 48rem) {
|
56
|
+
#container {
|
57
|
+
padding-left: .5rem;
|
58
|
+
padding-right: .5rem;
|
59
|
+
}
|
60
|
+
}
|
61
|
+
#topbar {
|
62
|
+
height: 3rem;
|
63
|
+
padding-top: 1rem;
|
64
|
+
margin-bottom: 5rem;
|
65
|
+
}
|
66
|
+
.title {
|
67
|
+
font-weight: bold;
|
68
|
+
}
|
69
|
+
.menu {
|
70
|
+
float: right;
|
71
|
+
display: flex;
|
72
|
+
}
|
73
|
+
.menu-item {
|
74
|
+
padding-left: 1rem;
|
75
|
+
}
|
76
|
+
@media (max-width: 48rem) {
|
77
|
+
.title {
|
78
|
+
margin-top: 2rem;
|
79
|
+
text-align: center;
|
80
|
+
}
|
81
|
+
.menu {
|
82
|
+
float: none;
|
83
|
+
display: flex;
|
84
|
+
justify-content: space-around;
|
85
|
+
}
|
86
|
+
.menu-item {
|
87
|
+
padding: 0;
|
88
|
+
}
|
89
|
+
}
|
90
|
+
#intro {
|
91
|
+
text-align: center;
|
92
|
+
}
|
93
|
+
#intro-logo {
|
94
|
+
text-align: center;
|
95
|
+
}
|
96
|
+
#intro-logo img {
|
97
|
+
width: 10rem;
|
98
|
+
height: 10rem;
|
99
|
+
}
|
100
|
+
#intro-text {
|
101
|
+
margin-top: 6rem;
|
102
|
+
font-size: 2rem;
|
103
|
+
}
|
104
|
+
#intro-desc {
|
105
|
+
text-align: left;
|
106
|
+
margin-top: 2rem;
|
107
|
+
}
|
108
|
+
#intro-button {
|
109
|
+
margin-top: 5rem;
|
110
|
+
margin-left: auto;
|
111
|
+
margin-right: auto;
|
112
|
+
display: flex;
|
113
|
+
justify-content: center;
|
114
|
+
}
|
115
|
+
#intro-version {
|
116
|
+
margin-top: 1rem;
|
117
|
+
}
|
118
|
+
@media (max-width: 48rem) {
|
119
|
+
#intro-text {
|
120
|
+
margin-top: 3rem;
|
121
|
+
font-size: 1.1rem;
|
122
|
+
}
|
123
|
+
#intro-button {
|
124
|
+
margin-top: 2rem;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
.install-item {
|
128
|
+
padding: 0rem 1rem 0rem 1rem;
|
129
|
+
font-size: 1.5rem;
|
130
|
+
line-height: 2.5rem;
|
131
|
+
color: #000;
|
132
|
+
background-color: #fff;
|
133
|
+
border: .15rem solid #000;
|
134
|
+
border-radius: .5rem;
|
135
|
+
}
|
136
|
+
.install-item:hover {
|
137
|
+
border: .15rem solid #06c;
|
138
|
+
}
|
139
|
+
.install-gsm {
|
140
|
+
margin-right: .5rem;
|
141
|
+
}
|
142
|
+
.install-user-guide {
|
143
|
+
margin-left: .5rem;
|
144
|
+
}
|
145
|
+
.install-item a {
|
146
|
+
color: #000;
|
147
|
+
}
|
148
|
+
.install-item:hover a {
|
149
|
+
color: #06c;
|
150
|
+
text-decoration: none;
|
151
|
+
}
|
152
|
+
.back-top {
|
153
|
+
text-align: center;
|
154
|
+
}
|
155
|
+
#social {
|
156
|
+
text-align: center;
|
157
|
+
margin-top: 1rem;
|
158
|
+
padding-bottom: 1rem;
|
159
|
+
border-bottom: solid #aaa .1rem;
|
160
|
+
}
|
161
|
+
.content {
|
162
|
+
padding-top: 3rem;
|
163
|
+
font-size: 1rem;
|
164
|
+
border-bottom: solid #aaa .1rem;
|
165
|
+
padding-bottom: 1.6rem;
|
166
|
+
}
|
167
|
+
.content-title {
|
168
|
+
text-align: center;
|
169
|
+
font-size: 2rem;
|
170
|
+
padding-bottom: 1rem;
|
171
|
+
}
|
172
|
+
footer {
|
173
|
+
/*text-align: center;*/
|
174
|
+
font-size: 1.2rem;
|
175
|
+
padding-top: 1rem;
|
176
|
+
padding-bottom: 1rem;
|
177
|
+
}
|