script 0.0.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +37 -0
- data/README.md +68 -20
- data/lib/script.rb +18 -2
- data/lib/script/engine.rb +19 -0
- data/lib/script/step.rb +10 -0
- data/lib/script/version.rb +2 -2
- data/script.gemspec +1 -0
- data/scripts/gh-md-toc +189 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2dfd5efe6e5e7710e5d007dc9d46719bd6bc0edf
|
4
|
+
data.tar.gz: 0788cf8cc9e1d05310cb6e081b75124ade1889ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 561c94cffb4cd771696370f588219e8a33c3e2eb52adf093eb9f63610237de733c258ba524addd3bb1e51e73571a28e6d1669a49a91d92ab96cc3bc7ed2bf1f9
|
7
|
+
data.tar.gz: 0b1632aa572f972228dd530f705e2a11ae86842d25f7386724ee82e9d39ffb06aad86c2a847dcf89cb37074d69f59facda65d4ceadeb7e693f5af70b2234fcf0
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
script (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
byebug (9.0.6)
|
10
|
+
diff-lcs (1.3)
|
11
|
+
rake (10.4.2)
|
12
|
+
rspec (3.7.0)
|
13
|
+
rspec-core (~> 3.7.0)
|
14
|
+
rspec-expectations (~> 3.7.0)
|
15
|
+
rspec-mocks (~> 3.7.0)
|
16
|
+
rspec-core (3.7.0)
|
17
|
+
rspec-support (~> 3.7.0)
|
18
|
+
rspec-expectations (3.7.0)
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
20
|
+
rspec-support (~> 3.7.0)
|
21
|
+
rspec-mocks (3.7.0)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.7.0)
|
24
|
+
rspec-support (3.7.0)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
bundler (~> 1.16)
|
31
|
+
byebug
|
32
|
+
rake (~> 10.0)
|
33
|
+
rspec (~> 3.0)
|
34
|
+
script!
|
35
|
+
|
36
|
+
BUNDLED WITH
|
37
|
+
1.16.0
|
data/README.md
CHANGED
@@ -1,43 +1,91 @@
|
|
1
|
-
# Script
|
1
|
+
# Script<img width="40" align="left" src="https://cdn.codementor.io/assets/topic/category_header/ruby-on-rails-bc9ab2af8d92eb4e7eb3211d548a09ad.png">
|
2
2
|
|
3
|
-
|
3
|
+
The Script is everything you need to make the most of Ruby as fabulous scripting language.
|
4
4
|
|
5
|
-
|
5
|
+
* [Script](#script)
|
6
|
+
* [Setup](#setup)
|
7
|
+
* [Usage](#usage)
|
8
|
+
* [Contributing](#contributing)
|
9
|
+
* [License](#license)
|
10
|
+
* [Code of Conduct](#code-of-conduct)
|
6
11
|
|
7
|
-
##
|
12
|
+
## Setup
|
8
13
|
|
9
|
-
|
14
|
+
Install gem:
|
10
15
|
|
11
|
-
```
|
12
|
-
gem
|
16
|
+
```
|
17
|
+
gem install script
|
13
18
|
```
|
14
19
|
|
15
|
-
And
|
20
|
+
And require it in your script file:
|
16
21
|
|
17
|
-
|
22
|
+
```
|
23
|
+
require 'script'
|
24
|
+
```
|
18
25
|
|
19
|
-
|
26
|
+
## Usage
|
20
27
|
|
21
|
-
|
28
|
+
### Steps
|
22
29
|
|
23
|
-
|
30
|
+
Reason about the step as a logical group of commands. Lets take for instance, the deploy script which builds a docker image, pushes it to Dockerhub and eventually creates the deployment on Kubernetes.
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
#!/usr/local/bin/ruby
|
34
|
+
|
35
|
+
require "script"
|
36
|
+
|
37
|
+
deploy = Script.new
|
38
|
+
|
39
|
+
deploy.step("Setup tools") do
|
40
|
+
|
41
|
+
`sudo apt-get install -y google-cloud-sdk kubectl`
|
42
|
+
`gcloud auth activate-service-account $GCLOUD_SERVICE_ACCOUNT_NAME`
|
43
|
+
`gcloud config set project dummy-project`
|
44
|
+
`gcloud container clusters get-credentials default --zone us-east`
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
deploy.step("Deploy docker image") do
|
24
49
|
|
25
|
-
|
50
|
+
`docker pull dummy`
|
51
|
+
`docker build --cache-from dummy -t dummy`
|
52
|
+
`docker build -t scripter/script .`
|
53
|
+
`docker push dummy`
|
54
|
+
|
55
|
+
end
|
26
56
|
|
27
|
-
|
57
|
+
deploy.step("Deploy to Kubernetes cluster") do
|
28
58
|
|
29
|
-
|
59
|
+
`kubectl apply -f k8s.yml --record`
|
60
|
+
|
61
|
+
end
|
30
62
|
|
31
|
-
|
63
|
+
# Finally, run the script
|
64
|
+
|
65
|
+
deploy.run
|
66
|
+
```
|
67
|
+
|
68
|
+
The steps are run in order in which they are registered.
|
32
69
|
|
33
70
|
## Contributing
|
34
71
|
|
35
|
-
|
72
|
+
```
|
73
|
+
# Clone the repo
|
74
|
+
git clone git@github.com:bmarkons/script.git
|
36
75
|
|
37
|
-
|
76
|
+
# Install
|
77
|
+
bundle install
|
38
78
|
|
39
|
-
|
79
|
+
# Run tests
|
80
|
+
bundle exec rspec
|
81
|
+
```
|
82
|
+
|
83
|
+
Pull requests are always welcome. In case you notice any bug or simply want to propose an improvement, please feel free to open an issue.
|
40
84
|
|
41
85
|
## Code of Conduct
|
42
86
|
|
43
|
-
|
87
|
+
Please [be nice](https://github.com/bmarkons/script/blob/master/CODE_OF_CONDUCT.md).
|
88
|
+
|
89
|
+
## License
|
90
|
+
|
91
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/script.rb
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
require "script/version"
|
2
|
+
require "script/engine"
|
3
|
+
require "script/step"
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
+
class Script
|
6
|
+
def initialize
|
7
|
+
@engine = Script::Engine.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def engine
|
11
|
+
@engine
|
12
|
+
end
|
13
|
+
|
14
|
+
def step(headline, &block)
|
15
|
+
@engine.register_step(headline, block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
@engine.run
|
20
|
+
end
|
5
21
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Script::Engine
|
2
|
+
def initialize
|
3
|
+
@steps = []
|
4
|
+
end
|
5
|
+
|
6
|
+
def steps
|
7
|
+
@steps
|
8
|
+
end
|
9
|
+
|
10
|
+
def register_step(headline, block)
|
11
|
+
@steps << Script::Step.new(headline, block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
@steps.each do |step|
|
16
|
+
step.run
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/script/step.rb
ADDED
data/lib/script/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0.
|
1
|
+
class Script
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
end
|
data/script.gemspec
CHANGED
data/scripts/gh-md-toc
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
#
|
4
|
+
# Steps:
|
5
|
+
#
|
6
|
+
# 1. Download corresponding html file for some README.md:
|
7
|
+
# curl -s $1
|
8
|
+
#
|
9
|
+
# 2. Discard rows where no substring 'user-content-' (github's markup):
|
10
|
+
# awk '/user-content-/ { ...
|
11
|
+
#
|
12
|
+
# 3.1 Get last number in each row like ' ... </span></a>sitemap.js</h1'.
|
13
|
+
# It's a level of the current header:
|
14
|
+
# substr($0, length($0), 1)
|
15
|
+
#
|
16
|
+
# 3.2 Get level from 3.1 and insert corresponding number of spaces before '*':
|
17
|
+
# sprintf("%*s", substr($0, length($0), 1)*3, " ")
|
18
|
+
#
|
19
|
+
# 4. Find head's text and insert it inside "* [ ... ]":
|
20
|
+
# substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)
|
21
|
+
#
|
22
|
+
# 5. Find anchor and insert it inside "(...)":
|
23
|
+
# substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8)
|
24
|
+
#
|
25
|
+
|
26
|
+
gh_toc_version="0.4.9"
|
27
|
+
|
28
|
+
gh_user_agent="gh-md-toc v$gh_toc_version"
|
29
|
+
|
30
|
+
#
|
31
|
+
# Download rendered into html README.md by its url.
|
32
|
+
#
|
33
|
+
#
|
34
|
+
gh_toc_load() {
|
35
|
+
local gh_url=$1
|
36
|
+
|
37
|
+
if type curl &>/dev/null; then
|
38
|
+
curl --user-agent "$gh_user_agent" -s "$gh_url"
|
39
|
+
elif type wget &>/dev/null; then
|
40
|
+
wget --user-agent="$gh_user_agent" -qO- "$gh_url"
|
41
|
+
else
|
42
|
+
echo "Please, install 'curl' or 'wget' and try again."
|
43
|
+
exit 1
|
44
|
+
fi
|
45
|
+
}
|
46
|
+
|
47
|
+
#
|
48
|
+
# Converts local md file into html by GitHub
|
49
|
+
#
|
50
|
+
# ➥ curl -X POST --data '{"text": "Hello world github/linguist#1 **cool**, and #1!"}' https://api.github.com/markdown
|
51
|
+
# <p>Hello world github/linguist#1 <strong>cool</strong>, and #1!</p>'"
|
52
|
+
gh_toc_md2html() {
|
53
|
+
local gh_file_md=$1
|
54
|
+
URL=https://api.github.com/markdown/raw
|
55
|
+
TOKEN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt"
|
56
|
+
if [ -f "$TOKEN" ]; then
|
57
|
+
URL="$URL?access_token=$(cat $TOKEN)"
|
58
|
+
fi
|
59
|
+
curl -s --user-agent "$gh_user_agent" \
|
60
|
+
--data-binary @"$gh_file_md" -H "Content-Type:text/plain" \
|
61
|
+
$URL
|
62
|
+
}
|
63
|
+
|
64
|
+
#
|
65
|
+
# Is passed string url
|
66
|
+
#
|
67
|
+
gh_is_url() {
|
68
|
+
case $1 in
|
69
|
+
https* | http*)
|
70
|
+
echo "yes";;
|
71
|
+
*)
|
72
|
+
echo "no";;
|
73
|
+
esac
|
74
|
+
}
|
75
|
+
|
76
|
+
#
|
77
|
+
# TOC generator
|
78
|
+
#
|
79
|
+
gh_toc(){
|
80
|
+
local gh_src=$1
|
81
|
+
local gh_src_copy=$1
|
82
|
+
local gh_ttl_docs=$2
|
83
|
+
|
84
|
+
if [ "$gh_src" = "" ]; then
|
85
|
+
echo "Please, enter URL or local path for a README.md"
|
86
|
+
exit 1
|
87
|
+
fi
|
88
|
+
|
89
|
+
|
90
|
+
# Show "TOC" string only if working with one document
|
91
|
+
if [ "$gh_ttl_docs" = "1" ]; then
|
92
|
+
|
93
|
+
echo "Table of Contents"
|
94
|
+
echo "================="
|
95
|
+
echo ""
|
96
|
+
gh_src_copy=""
|
97
|
+
|
98
|
+
fi
|
99
|
+
|
100
|
+
if [ "$(gh_is_url "$gh_src")" == "yes" ]; then
|
101
|
+
gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy"
|
102
|
+
else
|
103
|
+
gh_toc_md2html "$gh_src" | gh_toc_grab "$gh_src_copy"
|
104
|
+
fi
|
105
|
+
}
|
106
|
+
|
107
|
+
#
|
108
|
+
# Grabber of the TOC from rendered html
|
109
|
+
#
|
110
|
+
# $1 — a source url of document.
|
111
|
+
# It's need if TOC is generated for multiple documents.
|
112
|
+
#
|
113
|
+
gh_toc_grab() {
|
114
|
+
# if closed <h[1-6]> is on the new line, then move it on the prev line
|
115
|
+
# for example:
|
116
|
+
# was: The command <code>foo1</code>
|
117
|
+
# </h1>
|
118
|
+
# became: The command <code>foo1</code></h1>
|
119
|
+
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n<\/h/<\/h/g' |
|
120
|
+
# find strings that corresponds to template
|
121
|
+
grep -E -o '<a.*id="user-content-[^"]*".*</h[1-6]' |
|
122
|
+
# remove code tags
|
123
|
+
sed 's/<code>//' | sed 's/<\/code>//' |
|
124
|
+
# now all rows are like:
|
125
|
+
# <a id="user-content-..." href="..."><span ...></span></a> ... </h1
|
126
|
+
# format result line
|
127
|
+
# * $0 — whole string
|
128
|
+
echo -e "$(awk -v "gh_url=$1" '{
|
129
|
+
print sprintf("%*s", substr($0, length($0), 1)*3, " ") "* [" substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)"](" gh_url substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8) ")"}' | sed 'y/+/ /; s/%/\\x/g')"
|
130
|
+
}
|
131
|
+
|
132
|
+
#
|
133
|
+
# Returns filename only from full path or url
|
134
|
+
#
|
135
|
+
gh_toc_get_filename() {
|
136
|
+
echo "${1##*/}"
|
137
|
+
}
|
138
|
+
|
139
|
+
#
|
140
|
+
# Options hendlers
|
141
|
+
#
|
142
|
+
gh_toc_app() {
|
143
|
+
local app_name="gh-md-toc"
|
144
|
+
|
145
|
+
if [ "$1" = '--help' ] || [ $# -eq 0 ] ; then
|
146
|
+
echo "GitHub TOC generator ($app_name): $gh_toc_version"
|
147
|
+
echo ""
|
148
|
+
echo "Usage:"
|
149
|
+
echo " $app_name src [src] Create TOC for a README file (url or local path)"
|
150
|
+
echo " $app_name - Create TOC for markdown from STDIN"
|
151
|
+
echo " $app_name --help Show help"
|
152
|
+
echo " $app_name --version Show version"
|
153
|
+
return
|
154
|
+
fi
|
155
|
+
|
156
|
+
if [ "$1" = '--version' ]; then
|
157
|
+
echo "$gh_toc_version"
|
158
|
+
return
|
159
|
+
fi
|
160
|
+
|
161
|
+
if [ "$1" = "-" ]; then
|
162
|
+
if [ -z "$TMPDIR" ]; then
|
163
|
+
TMPDIR="/tmp"
|
164
|
+
elif [ -n "$TMPDIR" -a ! -d "$TMPDIR" ]; then
|
165
|
+
mkdir -p "$TMPDIR"
|
166
|
+
fi
|
167
|
+
local gh_tmp_md
|
168
|
+
gh_tmp_md=$(mktemp $TMPDIR/tmp.XXXXXX)
|
169
|
+
while read input; do
|
170
|
+
echo "$input" >> "$gh_tmp_md"
|
171
|
+
done
|
172
|
+
gh_toc_md2html "$gh_tmp_md" | gh_toc_grab ""
|
173
|
+
return
|
174
|
+
fi
|
175
|
+
|
176
|
+
for md in "$@"
|
177
|
+
do
|
178
|
+
echo ""
|
179
|
+
gh_toc "$md" "$#"
|
180
|
+
done
|
181
|
+
|
182
|
+
echo ""
|
183
|
+
echo "Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)"
|
184
|
+
}
|
185
|
+
|
186
|
+
#
|
187
|
+
# Entry point
|
188
|
+
#
|
189
|
+
gh_toc_app "$@"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: script
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bmarkons
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-12-
|
11
|
+
date: 2017-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: '"Gives you a hand with composing neat Ruby scripts."'
|
56
70
|
email:
|
57
71
|
- mamaveb@gmail.com
|
@@ -64,14 +78,18 @@ files:
|
|
64
78
|
- ".travis.yml"
|
65
79
|
- CODE_OF_CONDUCT.md
|
66
80
|
- Gemfile
|
81
|
+
- Gemfile.lock
|
67
82
|
- LICENSE.txt
|
68
83
|
- README.md
|
69
84
|
- Rakefile
|
70
85
|
- bin/console
|
71
86
|
- bin/setup
|
72
87
|
- lib/script.rb
|
88
|
+
- lib/script/engine.rb
|
89
|
+
- lib/script/step.rb
|
73
90
|
- lib/script/version.rb
|
74
91
|
- script.gemspec
|
92
|
+
- scripts/gh-md-toc
|
75
93
|
homepage: https://github.com/bmarkons/script
|
76
94
|
licenses:
|
77
95
|
- MIT
|