cryptorecord 0.9.1 → 1.0.0
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/Dockerfile +21 -0
- data/README.md +25 -4
- data/cryptorecord.gemspec +3 -2
- data/exe/openpgpkeysrecord +1 -1
- data/lib/cryptorecord/{openpgpkeys.rb → openpgpkey.rb} +19 -4
- data/lib/cryptorecord/sshfp.rb +17 -3
- data/lib/cryptorecord/tlsa.rb +18 -4
- data/lib/cryptorecord/version.rb +1 -1
- data/lib/cryptorecord.rb +1 -1
- data/scripts/entrypoint.sh +23 -0
- metadata +29 -32
- data/lib/cryptorecord/.yardoc/checksums +0 -0
- data/lib/cryptorecord/.yardoc/complete +0 -0
- data/lib/cryptorecord/.yardoc/object_types +0 -0
- data/lib/cryptorecord/.yardoc/objects/root.dat +0 -0
- data/lib/cryptorecord/.yardoc/proxy_types +0 -0
- data/lib/cryptorecord/doc/_index.html +0 -85
- data/lib/cryptorecord/doc/class_list.html +0 -51
- data/lib/cryptorecord/doc/css/common.css +0 -1
- data/lib/cryptorecord/doc/css/full_list.css +0 -58
- data/lib/cryptorecord/doc/css/style.css +0 -499
- data/lib/cryptorecord/doc/file_list.html +0 -51
- data/lib/cryptorecord/doc/frames.html +0 -17
- data/lib/cryptorecord/doc/index.html +0 -85
- data/lib/cryptorecord/doc/js/app.js +0 -248
- data/lib/cryptorecord/doc/js/full_list.js +0 -216
- data/lib/cryptorecord/doc/js/jquery.js +0 -4
- data/lib/cryptorecord/doc/method_list.html +0 -51
- data/lib/cryptorecord/doc/top-level-namespace.html +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3cb7447e2cd340f1c5f9b0b74720d9debb4a9cc0496d5d9ba842c882a2234fe5
|
4
|
+
data.tar.gz: 3b1087a391b71288d7bafef1e1d1b450cc7fa4d2bfcd57ef8de7c0a1d40096b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56864e65ee0cc253b1bf8895fa5246009d7f5d2e7ff097dc19076b903d86070ea559cf15e90c9cc9f655d954371e4c2db80bbede2fcccb4216ee9ac7fcc1a643
|
7
|
+
data.tar.gz: 50abb4e9a1864c8ce6f4c4edc5e2ad6bcf6fb0cc13e6ba3924a89eca28593aca9cab24e37cd7f6d99176b4f4454b5b8101c60df769cb0d5613773e31a3de41c1
|
data/Dockerfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM ruby:3.0
|
2
|
+
|
3
|
+
ARG UNAME=rubyapp
|
4
|
+
ARG UID=1000
|
5
|
+
ARG GID=1000
|
6
|
+
|
7
|
+
|
8
|
+
RUN groupadd -g $GID -o $UNAME && useradd -u $UID -g $GID -d /app -ms /usr/sbin/nologin $UNAME
|
9
|
+
|
10
|
+
WORKDIR /app
|
11
|
+
|
12
|
+
COPY scripts/entrypoint.sh /entrypoint.sh
|
13
|
+
|
14
|
+
COPY . .
|
15
|
+
RUN bundle install
|
16
|
+
|
17
|
+
VOLUME ["/certs"]
|
18
|
+
|
19
|
+
USER $UNAME
|
20
|
+
|
21
|
+
ENTRYPOINT ["/entrypoint.sh"]
|
data/README.md
CHANGED
@@ -34,6 +34,21 @@ Or install it yourself as:
|
|
34
34
|
|
35
35
|
$ gem install cryptorecord
|
36
36
|
|
37
|
+
## Docker
|
38
|
+
|
39
|
+
### Build Image
|
40
|
+
|
41
|
+
```
|
42
|
+
docker build -t cryptorecord .
|
43
|
+
```
|
44
|
+
|
45
|
+
### Run container
|
46
|
+
|
47
|
+
Lets mount the certificate in /certs and run tlsarecord using this cert:
|
48
|
+
```
|
49
|
+
podman run --rm -v /etc/ssl/certs/ssl-cert-snakeoil.pem:/certs/ssl-cert-snakeoil.pem cryptorecord tlsarecord -f /certs/ssl-cert-snakeoil.pem
|
50
|
+
```
|
51
|
+
|
37
52
|
## Usage
|
38
53
|
|
39
54
|
This gem comes with some example scripts like:
|
@@ -109,14 +124,14 @@ puts sshfp
|
|
109
124
|
|
110
125
|
require 'cryptorecord'
|
111
126
|
|
112
|
-
|
113
|
-
|
114
|
-
puts
|
127
|
+
opk = Cryptorecord::Openpgpkey.new(:uid => "hacky@hacktheplanet.com")
|
128
|
+
opk.read_file("resources/hacky.asc")
|
129
|
+
puts opk
|
115
130
|
|
116
131
|
```
|
117
132
|
## Documentation
|
118
133
|
|
119
|
-
[rubydoc.info](https://www.rubydoc.info/
|
134
|
+
[rubydoc.info](https://www.rubydoc.info/gems/cryptorecord/)
|
120
135
|
|
121
136
|
## Resources
|
122
137
|
|
@@ -131,6 +146,12 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
131
146
|
|
132
147
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
133
148
|
|
149
|
+
## Run tests
|
150
|
+
|
151
|
+
```
|
152
|
+
docker run --rm --entrypoint "rake" cryptorecord
|
153
|
+
```
|
154
|
+
|
134
155
|
## Contributing
|
135
156
|
|
136
157
|
Bug reports and pull requests are welcome on GitHub at https://github.com/whotwagner/cryptorecord. This project is intended to be a safe, welcoming space for collaboration.
|
data/cryptorecord.gemspec
CHANGED
@@ -31,7 +31,8 @@ DESCRIPTION
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
32
|
spec.require_paths = ["lib"]
|
33
33
|
|
34
|
-
spec.add_development_dependency "bundler", "~>
|
35
|
-
spec.add_development_dependency "rake", "
|
34
|
+
spec.add_development_dependency "bundler", "~> 2.2"
|
35
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
36
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
37
|
+
spec.add_dependency 'mail', '>=2.7.0'
|
37
38
|
end
|
data/exe/openpgpkeysrecord
CHANGED
@@ -23,15 +23,17 @@
|
|
23
23
|
module Cryptorecord
|
24
24
|
require 'openssl'
|
25
25
|
require 'mail'
|
26
|
-
# Cryptorecord::
|
26
|
+
# Cryptorecord::Openpgpkey-class generates
|
27
27
|
# openphpkeys-dns-records. Instances must have an
|
28
28
|
# uid. The PGP-Key can be read from file
|
29
29
|
# @!attribute [r] uid
|
30
30
|
# @return [Mail::Address] the userid or nil
|
31
31
|
# @!attribute [r] key
|
32
32
|
# @return [String] the pgp-key as a string
|
33
|
-
|
34
|
-
|
33
|
+
# @!attribute [r] rectype
|
34
|
+
# @return [String] "OPENPGPKEY"
|
35
|
+
class Openpgpkey
|
36
|
+
attr_reader :uid, :key, :rectype
|
35
37
|
|
36
38
|
# This constructor initializes uid and key by calling the setters.
|
37
39
|
# @see uid=
|
@@ -42,6 +44,7 @@ module Cryptorecord
|
|
42
44
|
def initialize(args = {})
|
43
45
|
self.uid = args.fetch(:uid, nil)
|
44
46
|
self.key = args.fetch(:key, nil)
|
47
|
+
@rectype = 'OPENPGPKEY'
|
45
48
|
end
|
46
49
|
|
47
50
|
# This setter takes the argument val to create a Mail::Address-object.
|
@@ -109,11 +112,23 @@ module Cryptorecord
|
|
109
112
|
self.key = data
|
110
113
|
end
|
111
114
|
|
115
|
+
# This method returns the left-hand name of a dns-record
|
116
|
+
# @return [String] left-hand name of a dns-record
|
117
|
+
def left
|
118
|
+
"#{localpart}._openpgpkey.#{domain}."
|
119
|
+
end
|
120
|
+
|
121
|
+
# This method returns the right-hand content of a dns-record
|
122
|
+
# @return [String] right-hand content of a dns-record
|
123
|
+
def right
|
124
|
+
@key.to_s
|
125
|
+
end
|
126
|
+
|
112
127
|
# This method concats the openpgpkey-record
|
113
128
|
#
|
114
129
|
# @return [String] openpgpkey dns-record as defined in rfc7929
|
115
130
|
def to_s
|
116
|
-
"#{
|
131
|
+
"#{left} IN #{@rectype} #{right}"
|
117
132
|
end
|
118
133
|
|
119
134
|
private
|
data/lib/cryptorecord/sshfp.rb
CHANGED
@@ -33,10 +33,12 @@ module Cryptorecord
|
|
33
33
|
# @return [Integer] sha1 = 1, sha256 = 2
|
34
34
|
# @!attribute [r] key
|
35
35
|
# @return [String] the ssh-host-key, without the type and comment
|
36
|
+
# @!attribute [r] rectype
|
37
|
+
# @return [String] "SSHFP"
|
36
38
|
# @!attribute host
|
37
39
|
# @return [String] the fqdn-host
|
38
40
|
class Sshfp
|
39
|
-
attr_reader :cipher, :digest, :key
|
41
|
+
attr_reader :cipher, :digest, :key, :rectype
|
40
42
|
attr_accessor :host
|
41
43
|
|
42
44
|
# This constructor initializes cipher, key, digest, host and keyfile
|
@@ -52,7 +54,7 @@ module Cryptorecord
|
|
52
54
|
self.digest = args.fetch(:digest, 2)
|
53
55
|
@host = args.fetch(:host, 'localhost')
|
54
56
|
keyfile = args.fetch(:keyfile, nil)
|
55
|
-
|
57
|
+
@rectype = 'SSHFP'
|
56
58
|
read_file(keyfile) unless keyfile.nil?
|
57
59
|
end
|
58
60
|
|
@@ -107,13 +109,25 @@ module Cryptorecord
|
|
107
109
|
end
|
108
110
|
end
|
109
111
|
|
112
|
+
# This method returns the left-hand name of a dns-record
|
113
|
+
# @return [String] left-hand name of a dns-record
|
114
|
+
def left
|
115
|
+
"#{@host}."
|
116
|
+
end
|
117
|
+
|
118
|
+
# This method returns the right-hand content of a dns-record
|
119
|
+
# @return [String] right-hand content of a dns-record
|
120
|
+
def right
|
121
|
+
"#{@cipher} #{@digest} #{fingerprint}"
|
122
|
+
end
|
123
|
+
|
110
124
|
# This method concats the sshfp-record
|
111
125
|
#
|
112
126
|
# @return [String] sshfp dns-record as defined in rfc4255
|
113
127
|
# @raise Cryptorecord::KeyError
|
114
128
|
def to_s
|
115
129
|
raise Cryptorecord::KeyError, 'No certificate defined' if @key.nil?
|
116
|
-
"#{
|
130
|
+
"#{left} IN #{@rectype} #{right}"
|
117
131
|
end
|
118
132
|
|
119
133
|
private
|
data/lib/cryptorecord/tlsa.rb
CHANGED
@@ -30,8 +30,10 @@ module Cryptorecord
|
|
30
30
|
# @return [Integer] the match-type
|
31
31
|
# @!attribute [r] usage
|
32
32
|
# @return [Integer] the usage
|
33
|
-
# @!attribute cert
|
33
|
+
# @!attribute [r] cert
|
34
34
|
# @return [String] the x509 certificate
|
35
|
+
# @!attribute [r] rectype
|
36
|
+
# @return [String] "TLSA"
|
35
37
|
# @!attribute host
|
36
38
|
# @return [String] the fqdn for the record
|
37
39
|
# @!attribute proto
|
@@ -39,7 +41,7 @@ module Cryptorecord
|
|
39
41
|
# @!attribute port
|
40
42
|
# @return [String] the network port
|
41
43
|
class Tlsa
|
42
|
-
attr_reader :selector, :mtype, :usage, :cert
|
44
|
+
attr_reader :selector, :mtype, :usage, :cert, :rectype
|
43
45
|
attr_accessor :host, :proto, :port
|
44
46
|
|
45
47
|
# constructor for the tlsa-object
|
@@ -60,6 +62,7 @@ module Cryptorecord
|
|
60
62
|
@port = args.fetch(:port, 443)
|
61
63
|
self.usage = args.fetch(:usage, 3)
|
62
64
|
self.cert = args.fetch(:cert, nil)
|
65
|
+
@rectype = 'TLSA'
|
63
66
|
end
|
64
67
|
|
65
68
|
# This setter initializes the selector
|
@@ -133,12 +136,23 @@ module Cryptorecord
|
|
133
136
|
end
|
134
137
|
end
|
135
138
|
|
139
|
+
# This method returns the left-hand name of a dns-record
|
140
|
+
# @return [String] left-hand name of a dns-record
|
141
|
+
def left
|
142
|
+
"_#{@port}._#{@proto}.#{@host}."
|
143
|
+
end
|
144
|
+
|
145
|
+
# This method returns the right-hand content of a dns-record
|
146
|
+
# @return [String] right-hand content of a dns-record
|
147
|
+
def right
|
148
|
+
"#{@usage} #{@selector} #{@mtype} #{fingerprint}"
|
149
|
+
end
|
150
|
+
|
136
151
|
# This method concats the tlsa-record
|
137
152
|
#
|
138
153
|
# @return [String] tlsa dns-record as defined in rfc6698
|
139
154
|
def to_s
|
140
|
-
"
|
141
|
-
" #{@usage} #{@selector} #{@mtype} #{fingerprint}"
|
155
|
+
"#{left} IN #{@rectype} #{right}"
|
142
156
|
end
|
143
157
|
|
144
158
|
private
|
data/lib/cryptorecord/version.rb
CHANGED
data/lib/cryptorecord.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
EXEDIR=/app/exe
|
4
|
+
|
5
|
+
case "$1" in
|
6
|
+
tlsarecord)
|
7
|
+
$EXEDIR/tlsarecord ${*:2}
|
8
|
+
;;
|
9
|
+
|
10
|
+
openpgpkeysrecord)
|
11
|
+
$EXEDIR/openpgpkeysrecord ${*:2}
|
12
|
+
;;
|
13
|
+
|
14
|
+
sshfprecord)
|
15
|
+
$EXEDIR/sshfprecord ${*:2}
|
16
|
+
;;
|
17
|
+
*)
|
18
|
+
echo "Usage: [ tlsarecord | openpgpkeysrecord | sshfprecord ] <options>"
|
19
|
+
exit 1
|
20
|
+
;;
|
21
|
+
esac
|
22
|
+
|
23
|
+
exit 0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cryptorecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wolfgang Hotwagner
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.2'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -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: mail
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.7.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.7.0
|
55
69
|
description: "This gem provides an API and scripts for creating crypto-related dns-records(e.g.
|
56
70
|
DANE). \nAt the moment the following records are supported:\n * TLSA\n * SSHFP\n
|
57
71
|
\ * OPENPGPKEYS\n\nThis API does not create nor provide any public keys or certificates.
|
@@ -69,6 +83,7 @@ files:
|
|
69
83
|
- ".rspec"
|
70
84
|
- ".rubocop.yml"
|
71
85
|
- ".travis.yml"
|
86
|
+
- Dockerfile
|
72
87
|
- Gemfile
|
73
88
|
- LICENSE.txt
|
74
89
|
- README.md
|
@@ -80,34 +95,17 @@ files:
|
|
80
95
|
- exe/sshfprecord
|
81
96
|
- exe/tlsarecord
|
82
97
|
- lib/cryptorecord.rb
|
83
|
-
- lib/cryptorecord/.yardoc/checksums
|
84
|
-
- lib/cryptorecord/.yardoc/complete
|
85
|
-
- lib/cryptorecord/.yardoc/object_types
|
86
|
-
- lib/cryptorecord/.yardoc/objects/root.dat
|
87
|
-
- lib/cryptorecord/.yardoc/proxy_types
|
88
|
-
- lib/cryptorecord/doc/_index.html
|
89
|
-
- lib/cryptorecord/doc/class_list.html
|
90
|
-
- lib/cryptorecord/doc/css/common.css
|
91
|
-
- lib/cryptorecord/doc/css/full_list.css
|
92
|
-
- lib/cryptorecord/doc/css/style.css
|
93
|
-
- lib/cryptorecord/doc/file_list.html
|
94
|
-
- lib/cryptorecord/doc/frames.html
|
95
|
-
- lib/cryptorecord/doc/index.html
|
96
|
-
- lib/cryptorecord/doc/js/app.js
|
97
|
-
- lib/cryptorecord/doc/js/full_list.js
|
98
|
-
- lib/cryptorecord/doc/js/jquery.js
|
99
|
-
- lib/cryptorecord/doc/method_list.html
|
100
|
-
- lib/cryptorecord/doc/top-level-namespace.html
|
101
98
|
- lib/cryptorecord/exceptions.rb
|
102
|
-
- lib/cryptorecord/
|
99
|
+
- lib/cryptorecord/openpgpkey.rb
|
103
100
|
- lib/cryptorecord/sshfp.rb
|
104
101
|
- lib/cryptorecord/tlsa.rb
|
105
102
|
- lib/cryptorecord/version.rb
|
103
|
+
- scripts/entrypoint.sh
|
106
104
|
homepage: https://github.com/whotwagner/cryptorecord
|
107
105
|
licenses:
|
108
106
|
- GPL
|
109
107
|
metadata: {}
|
110
|
-
post_install_message:
|
108
|
+
post_install_message:
|
111
109
|
rdoc_options: []
|
112
110
|
require_paths:
|
113
111
|
- lib
|
@@ -122,9 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
120
|
- !ruby/object:Gem::Version
|
123
121
|
version: '0'
|
124
122
|
requirements: []
|
125
|
-
|
126
|
-
|
127
|
-
signing_key:
|
123
|
+
rubygems_version: 3.2.22
|
124
|
+
signing_key:
|
128
125
|
specification_version: 4
|
129
126
|
summary: cryptorecord is a ruby-gem that helps creating crypto-related dns-records
|
130
127
|
like tlsa/sshfp/openpgpkey
|
File without changes
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,85 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
-
<title>
|
7
|
-
Documentation by YARD 0.9.12
|
8
|
-
|
9
|
-
</title>
|
10
|
-
|
11
|
-
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
12
|
-
|
13
|
-
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
14
|
-
|
15
|
-
<script type="text/javascript" charset="utf-8">
|
16
|
-
pathId = null;
|
17
|
-
relpath = '';
|
18
|
-
</script>
|
19
|
-
|
20
|
-
|
21
|
-
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
22
|
-
|
23
|
-
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
24
|
-
|
25
|
-
|
26
|
-
</head>
|
27
|
-
<body>
|
28
|
-
<div class="nav_wrap">
|
29
|
-
<iframe id="nav" src="class_list.html?1"></iframe>
|
30
|
-
<div id="resizer"></div>
|
31
|
-
</div>
|
32
|
-
|
33
|
-
<div id="main" tabindex="-1">
|
34
|
-
<div id="header">
|
35
|
-
<div id="menu">
|
36
|
-
|
37
|
-
</div>
|
38
|
-
|
39
|
-
<div id="search">
|
40
|
-
|
41
|
-
<a class="full_list_link" id="class_list_link"
|
42
|
-
href="class_list.html">
|
43
|
-
|
44
|
-
<svg width="24" height="24">
|
45
|
-
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
46
|
-
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
47
|
-
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
48
|
-
</svg>
|
49
|
-
</a>
|
50
|
-
|
51
|
-
</div>
|
52
|
-
<div class="clear"></div>
|
53
|
-
</div>
|
54
|
-
|
55
|
-
<div id="content"><h1 class="noborder title">Documentation by YARD 0.9.12</h1>
|
56
|
-
<div id="listing">
|
57
|
-
<h1 class="alphaindex">Alphabetic Index</h1>
|
58
|
-
|
59
|
-
<div class="clear"></div>
|
60
|
-
<h2>Namespace Listing A-Z</h2>
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
<table>
|
66
|
-
<tr>
|
67
|
-
<td valign='top' width="33%">
|
68
|
-
|
69
|
-
</td>
|
70
|
-
</tr>
|
71
|
-
</table>
|
72
|
-
|
73
|
-
</div>
|
74
|
-
|
75
|
-
</div>
|
76
|
-
|
77
|
-
<div id="footer">
|
78
|
-
Generated on Sat May 5 14:24:03 2018 by
|
79
|
-
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
80
|
-
0.9.12 (ruby-2.5.1).
|
81
|
-
</div>
|
82
|
-
|
83
|
-
</div>
|
84
|
-
</body>
|
85
|
-
</html>
|
@@ -1,51 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
|
-
<meta charset="utf-8" />
|
6
|
-
|
7
|
-
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
|
8
|
-
|
9
|
-
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
14
|
-
|
15
|
-
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
|
16
|
-
|
17
|
-
|
18
|
-
<title>Class List</title>
|
19
|
-
<base id="base_target" target="_parent" />
|
20
|
-
</head>
|
21
|
-
<body>
|
22
|
-
<div id="content">
|
23
|
-
<div class="fixed_header">
|
24
|
-
<h1 id="full_list_header">Class List</h1>
|
25
|
-
<div id="full_list_nav">
|
26
|
-
|
27
|
-
<span><a target="_self" href="class_list.html">
|
28
|
-
Classes
|
29
|
-
</a></span>
|
30
|
-
|
31
|
-
<span><a target="_self" href="method_list.html">
|
32
|
-
Methods
|
33
|
-
</a></span>
|
34
|
-
|
35
|
-
<span><a target="_self" href="file_list.html">
|
36
|
-
Files
|
37
|
-
</a></span>
|
38
|
-
|
39
|
-
</div>
|
40
|
-
|
41
|
-
<div id="search">Search: <input type="text" /></div>
|
42
|
-
</div>
|
43
|
-
|
44
|
-
<ul id="full_list" class="class">
|
45
|
-
<li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
|
46
|
-
|
47
|
-
|
48
|
-
</ul>
|
49
|
-
</div>
|
50
|
-
</body>
|
51
|
-
</html>
|
@@ -1 +0,0 @@
|
|
1
|
-
/* Override this file with custom rules */
|
@@ -1,58 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
margin: 0;
|
3
|
-
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
|
4
|
-
font-size: 13px;
|
5
|
-
height: 101%;
|
6
|
-
overflow-x: hidden;
|
7
|
-
background: #fafafa;
|
8
|
-
}
|
9
|
-
|
10
|
-
h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
|
11
|
-
.clear { clear: both; }
|
12
|
-
.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; }
|
13
|
-
#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
|
14
|
-
#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
|
15
|
-
#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; }
|
16
|
-
#full_list ul { padding: 0; }
|
17
|
-
#full_list li { padding: 0; margin: 0; list-style: none; }
|
18
|
-
#full_list li .item { padding: 5px 5px 5px 12px; }
|
19
|
-
#noresults { padding: 7px 12px; background: #fff; }
|
20
|
-
#content.insearch #noresults { margin-left: 7px; }
|
21
|
-
li.collapsed ul { display: none; }
|
22
|
-
li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
|
23
|
-
li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
|
24
|
-
li { color: #888; cursor: pointer; }
|
25
|
-
li.deprecated { text-decoration: line-through; font-style: italic; }
|
26
|
-
li.odd { background: #f0f0f0; }
|
27
|
-
li.even { background: #fafafa; }
|
28
|
-
.item:hover { background: #ddd; }
|
29
|
-
li small:before { content: "("; }
|
30
|
-
li small:after { content: ")"; }
|
31
|
-
li small.search_info { display: none; }
|
32
|
-
a, a:visited { text-decoration: none; color: #05a; }
|
33
|
-
li.clicked > .item { background: #05a; color: #ccc; }
|
34
|
-
li.clicked > .item a, li.clicked > .item a:visited { color: #eee; }
|
35
|
-
li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; }
|
36
|
-
li.collapsed.clicked a.toggle { background-position: top right; }
|
37
|
-
#search input { border: 1px solid #bbb; border-radius: 3px; }
|
38
|
-
#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; }
|
39
|
-
#full_list_nav a, #nav a:visited { color: #358; }
|
40
|
-
#full_list_nav a:hover { background: transparent; color: #5af; }
|
41
|
-
#full_list_nav span:after { content: ' | '; }
|
42
|
-
#full_list_nav span:last-child:after { content: ''; }
|
43
|
-
|
44
|
-
#content h1 { margin-top: 0; }
|
45
|
-
li { white-space: nowrap; cursor: normal; }
|
46
|
-
li small { display: block; font-size: 0.8em; }
|
47
|
-
li small:before { content: ""; }
|
48
|
-
li small:after { content: ""; }
|
49
|
-
li small.search_info { display: none; }
|
50
|
-
#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
|
51
|
-
#content.insearch #search { background-position: center right; }
|
52
|
-
#search input { width: 110px; }
|
53
|
-
|
54
|
-
#full_list.insearch ul { display: block; }
|
55
|
-
#full_list.insearch .item { display: none; }
|
56
|
-
#full_list.insearch .found { display: block; padding-left: 11px !important; }
|
57
|
-
#full_list.insearch li a.toggle { display: none; }
|
58
|
-
#full_list.insearch li small.search_info { display: block; }
|