akero 1.0.4 → 1.1.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 +7 -0
- data/.gitattributes +3 -0
- data/.gitignore +0 -2
- data/.rubocop.yml +43 -0
- data/.travis.yml +3 -7
- data/Gemfile +1 -0
- data/Guardfile +4 -3
- data/Makefile +26 -0
- data/README.md +28 -10
- data/Rakefile +8 -17
- data/akero.gemspec +17 -10
- data/bin/akero +6 -0
- data/coverage/.last_run.json +5 -0
- data/coverage/.resultset.json +367 -0
- data/coverage/.resultset.json.lock +0 -0
- data/coverage/assets/0.10.0/application.css +799 -0
- data/coverage/assets/0.10.0/application.js +1707 -0
- data/coverage/assets/0.10.0/colorbox/border.png +0 -0
- data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.0/favicon_green.png +0 -0
- data/coverage/assets/0.10.0/favicon_red.png +0 -0
- data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.0/loading.gif +0 -0
- data/coverage/assets/0.10.0/magnify.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.7.1/application.css +1110 -0
- data/coverage/assets/0.7.1/application.js +626 -0
- data/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
- data/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
- data/coverage/assets/0.7.1/favicon_green.png +0 -0
- data/coverage/assets/0.7.1/favicon_red.png +0 -0
- data/coverage/assets/0.7.1/favicon_yellow.png +0 -0
- data/coverage/assets/0.7.1/loading.gif +0 -0
- data/coverage/assets/0.7.1/magnify.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +2248 -0
- data/doc/Akero/Message.html +475 -0
- data/doc/Akero.html +1148 -0
- data/doc/_index.html +125 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +338 -0
- data/doc/file.README.html +186 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +186 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +148 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/akero/benchmark.rb +21 -20
- data/lib/akero/cli.rb +74 -0
- data/lib/akero/version.rb +2 -1
- data/lib/akero.rb +92 -90
- data/spec/akero_spec.rb +66 -65
- data/spec/spec_helper.rb +1 -0
- metadata +164 -52
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 4f225c55aea3201c19c20e56f02ee12a390a0f34
|
|
4
|
+
data.tar.gz: 1b786e1ba1de3bd0d4842d233eb55cc320edb3b3
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: fd0e126c6fd6fbd211d1ef49edba1d37f704df66870026c750ed83c5e04aa57485d5a0effe2557b1f56d8f6066650133b4036465dce125d8c4bccdedfcf0351e
|
|
7
|
+
data.tar.gz: c8768afdfecda7c928aee36890176f4ee8f1d1bac9b821dc8be311dd85f575bfd228dc4ead7f950edec5db9afae8db38bbdf08ced65248dd762f0d3a684ba15b
|
data/.gitattributes
ADDED
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.3
|
|
3
|
+
|
|
4
|
+
# Offense count: 13
|
|
5
|
+
Lint/AmbiguousRegexpLiteral:
|
|
6
|
+
Exclude:
|
|
7
|
+
- 'spec/akero_spec.rb'
|
|
8
|
+
|
|
9
|
+
# Offense count: 1
|
|
10
|
+
Lint/UnderscorePrefixedVariableName:
|
|
11
|
+
Exclude:
|
|
12
|
+
- 'lib/akero/benchmark.rb'
|
|
13
|
+
|
|
14
|
+
# Offense count: 8
|
|
15
|
+
Lint/UselessAssignment:
|
|
16
|
+
Exclude:
|
|
17
|
+
- 'lib/akero/benchmark.rb'
|
|
18
|
+
- 'spec/akero_spec.rb'
|
|
19
|
+
|
|
20
|
+
# Offense count: 9
|
|
21
|
+
Lint/Void:
|
|
22
|
+
Exclude:
|
|
23
|
+
- 'spec/akero_spec.rb'
|
|
24
|
+
|
|
25
|
+
# Offense count: 7
|
|
26
|
+
Metrics/AbcSize:
|
|
27
|
+
Max: 60
|
|
28
|
+
|
|
29
|
+
# Offense count: 2
|
|
30
|
+
# Configuration parameters: CountComments.
|
|
31
|
+
Metrics/ClassLength:
|
|
32
|
+
Max: 164
|
|
33
|
+
|
|
34
|
+
# Offense count: 45
|
|
35
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
|
36
|
+
# URISchemes: http, https
|
|
37
|
+
Metrics/LineLength:
|
|
38
|
+
Max: 150
|
|
39
|
+
|
|
40
|
+
# Offense count: 8
|
|
41
|
+
# Configuration parameters: CountComments.
|
|
42
|
+
Metrics/MethodLength:
|
|
43
|
+
Max: 51
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
my_code = <<'RUBY_CODE'
|
|
2
3
|
if type == 'failed'
|
|
3
4
|
system "ssh 192.168.1.106 '~/bin/keyboard_leds -c1 >/dev/null'"
|
|
@@ -9,10 +10,10 @@ my_code = <<'RUBY_CODE'
|
|
|
9
10
|
end
|
|
10
11
|
RUBY_CODE
|
|
11
12
|
|
|
12
|
-
notification :eval_notifier, :
|
|
13
|
+
notification :eval_notifier, code: my_code
|
|
13
14
|
|
|
14
|
-
guard 'rspec', :
|
|
15
|
+
guard 'rspec', cli: '--color --format doc' do
|
|
15
16
|
watch(%r{^spec/.+_spec\.rb$})
|
|
16
17
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
|
17
|
-
watch('spec/spec_helper.rb') {
|
|
18
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
|
18
19
|
end
|
data/Makefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 0. make test
|
|
2
|
+
# 1. commit changes
|
|
3
|
+
# 2. bump
|
|
4
|
+
# 3. make release
|
|
5
|
+
|
|
6
|
+
.PHONY: test doc release
|
|
7
|
+
|
|
8
|
+
test:
|
|
9
|
+
bundle exec rubocop
|
|
10
|
+
bundle exec rake
|
|
11
|
+
|
|
12
|
+
doc:
|
|
13
|
+
bundle exec yardoc
|
|
14
|
+
|
|
15
|
+
push: test doc
|
|
16
|
+
git add doc coverage README.md
|
|
17
|
+
git commit -m 'Documentation update' doc coverage README.md
|
|
18
|
+
git checkout gh-pages
|
|
19
|
+
git checkout master -- doc coverage
|
|
20
|
+
git commit -m 'Documentation update'
|
|
21
|
+
git checkout master
|
|
22
|
+
git push origin gh-pages
|
|
23
|
+
|
|
24
|
+
release: test doc push
|
|
25
|
+
bundle exec rake release
|
|
26
|
+
|
data/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# Akero [](https://travis-ci.org/busyloop/akero) [](https://gemnasium.com/busyloop/akero)
|
|
1
|
+
# Akero [](https://travis-ci.org/busyloop/akero) [](https://gemnasium.com/busyloop/akero) [](https://badge.fury.io/rb/akero)
|
|
2
2
|
|
|
3
3
|
Akero ([ἄγγελος](http://en.wiktionary.org/wiki/%F0%90%80%80%F0%90%80%90%F0%90%80%AB), messenger) is an easy-to-use library for peer-to-peer [public key cryptography](http://en.wikipedia.org/wiki/Public-key_cryptography). It enables two or more endpoints to exchange encrypted and/or signed messages without requiring a pre-shared secret.
|
|
4
4
|
|
|
5
5
|
Under the hood Akero uses standard OpenSSL primitives. Each instance wraps a [RSA](http://en.wikipedia.org/wiki/RSA)-keypair, a corresponding [X.509 certificate](http://en.wikipedia.org/wiki/X.509) and exchanges self-signed messages ([PKCS#7](https://tools.ietf.org/html/rfc2315)) with other instances.
|
|
6
6
|
|
|
7
|
-
Akero does not try to be a substitute for a fully featured [PKI](http://en.wikipedia.org/wiki/Public_key_infrastructure). It is meant to be used as a building block in scenarios where trust-relationships and keyrings can be externally
|
|
7
|
+
Akero does not try to be a substitute for a fully featured [PKI](http://en.wikipedia.org/wiki/Public_key_infrastructure). It is meant to be used as a building block in scenarios where trust-relationships and keyrings can be managed externally, and where the complexity of traditional solutions (X.509 PKI, OpenPGP, custom RSA) yields no tangible benefits.
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ Akero does not try to be a substitute for a fully featured [PKI](http://en.wikip
|
|
|
12
12
|
* Low complexity; easy to use, understand and review (only 192 lines of code)
|
|
13
13
|
* Transport agnostic; messages and certificates are self-contained and optionally ascii-armored (base64)
|
|
14
14
|
* Built on standard OpenSSL primitives, no homegrown algorithms
|
|
15
|
-
* [100%](
|
|
15
|
+
* [100%](http://busyloop.github.com/akero/coverage/) test coverage
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
@@ -20,7 +20,7 @@ Akero does not try to be a substitute for a fully featured [PKI](http://en.wikip
|
|
|
20
20
|
`gem install akero`
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
## Usage
|
|
23
|
+
## Usage (API)
|
|
24
24
|
|
|
25
25
|
```ruby
|
|
26
26
|
require 'akero'
|
|
@@ -40,15 +40,17 @@ signed_msg = alice.sign("Hello world!")
|
|
|
40
40
|
# Alice's fingerprint and public key from it
|
|
41
41
|
msg = bob.receive(signed_msg)
|
|
42
42
|
msg.body # => "Hello world!"
|
|
43
|
+
msg.type # => :signed
|
|
43
44
|
msg.from # => "AK:12:34:56:..."
|
|
44
45
|
msg.from_pk # => "(alice-public-key)"
|
|
45
46
|
|
|
46
47
|
# Bob encrypts a message for Alice
|
|
47
48
|
bobs_msg = bob.encrypt(msg.from_pk, "Hello Alice!")
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
# Alice can receive it...
|
|
50
51
|
msg = alice.receive(bobs_msg)
|
|
51
52
|
msg.body # => "Hello Alice!"
|
|
53
|
+
msg.type # => :encrypted
|
|
52
54
|
msg.from # => "AK:ab:cd:ef:..."
|
|
53
55
|
msg.from_pk # => "(bob-public-key)"
|
|
54
56
|
|
|
@@ -68,20 +70,36 @@ new_alice = Akero.load(File.read('/tmp/alice.akr'))
|
|
|
68
70
|
# In production Alice disables the armoring
|
|
69
71
|
# for better performance.
|
|
70
72
|
signed_msg = alice.sign("Hello world!", false)
|
|
71
|
-
|
|
72
|
-
puts alice.receive(
|
|
73
|
+
encrypted_msg = alice.encrypt(alice.public_key, "Hello!", false)
|
|
74
|
+
puts alice.receive(encrypted_msg).body # => "Hello!"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Usage (CLI)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
$ akero id -i /tmp/alice.akr
|
|
81
|
+
Private key not found. Generating a new 4096 bits RSA key and saving to /tmp/alice.akr ...
|
|
82
|
+
AK:8B:33:5B:AB:4C:78:CA:5E:CC:F5:FE:D7:75:F2:A4:74:16:28:FB:C2
|
|
83
|
+
|
|
84
|
+
$ akero id -i /tmp/bob.akr
|
|
85
|
+
Private key not found. Generating a new 4096 bits RSA key and saving to /tmp/bob.akr ...
|
|
86
|
+
AK:CF:B3:4C:BA:7C:9C:2E:31:2D:0D:1D:3F:F9:F4:05:F6:C7:B2:38:3F
|
|
87
|
+
|
|
88
|
+
$ akero pk -i /tmp/bob.akr >/tmp/bob.pk
|
|
73
89
|
|
|
90
|
+
$ echo "Hello" | akero encrypt -i /tmp/alice.akr /tmp/bob.pk | akero receive -i /tmp/bob.akr
|
|
91
|
+
Hello
|
|
74
92
|
```
|
|
75
93
|
|
|
76
94
|
## Documentation
|
|
77
95
|
|
|
78
|
-
* [API Docs](http://
|
|
96
|
+
* [API Docs](http://busyloop.github.com/akero/doc/frames.html)
|
|
79
97
|
* [Spec](https://github.com/busyloop/akero/blob/master/spec/akero_spec.rb)
|
|
80
98
|
|
|
81
99
|
## Benchmarks
|
|
82
100
|
|
|
83
|
-

|
|
102
|
+

|
|
85
103
|
|
|
86
104
|
The above charts were generated using MRI 1.9.3p362 (x86_64-linux) on an [AMD Turion II Neo N40L](http://www.cpubenchmark.net/cpu.php?cpu=AMD+Turion+II+Neo+N40L+Dual-Core) CPU.
|
|
87
105
|
You may run the benchmarks on your own machine with `rake benchmark`.
|
data/Rakefile
CHANGED
|
@@ -1,29 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'bundler/gem_tasks'
|
|
2
3
|
|
|
3
4
|
require 'rspec/core/rake_task'
|
|
4
5
|
|
|
5
|
-
task :
|
|
6
|
+
task default: :test
|
|
6
7
|
|
|
7
|
-
RSpec::Core::RakeTask.new(
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
RSpec::Core::RakeTask.new('test:spec') do |t|
|
|
9
|
+
t.pattern = 'spec/**/*_spec.rb'
|
|
10
|
+
t.rspec_opts = '--fail-fast -b -c -f documentation --tag ~benchmark'
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
desc 'Run test suite'
|
|
13
|
-
task :
|
|
14
|
+
task test: ['test:spec']
|
|
14
15
|
|
|
15
|
-
desc
|
|
16
|
+
desc 'Run benchmark suite'
|
|
16
17
|
task :benchmark do
|
|
17
18
|
require 'akero/benchmark'
|
|
18
19
|
Akero::Benchmark.run!
|
|
19
20
|
end
|
|
20
|
-
|
|
21
|
-
namespace :docs do
|
|
22
|
-
task :push do
|
|
23
|
-
`bl_www_sync akero coverage`
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
task :loc do
|
|
27
|
-
puts `grep -v '^\\s*#' lib/akero.rb | grep -v '^$' | wc -l`
|
|
28
|
-
end
|
|
29
|
-
end
|
data/akero.gemspec
CHANGED
|
@@ -1,29 +1,36 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'akero/version'
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |gem|
|
|
7
|
-
gem.name =
|
|
8
|
+
gem.name = 'akero'
|
|
8
9
|
gem.version = Akero::VERSION
|
|
9
|
-
gem.authors = [
|
|
10
|
-
gem.email = [
|
|
11
|
-
gem.description =
|
|
12
|
-
gem.summary =
|
|
13
|
-
gem.homepage =
|
|
10
|
+
gem.authors = ['Moe']
|
|
11
|
+
gem.email = ['moe@busyloop.net']
|
|
12
|
+
gem.description = 'Easy peer-to-peer public key cryptography'
|
|
13
|
+
gem.summary = 'Easy peer-to-peer public key cryptography'
|
|
14
|
+
gem.homepage = 'https://github.com/busyloop/akero'
|
|
14
15
|
|
|
15
|
-
gem.files = `git ls-files`.split(
|
|
16
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
16
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
|
17
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
18
|
-
gem.require_paths = [
|
|
19
|
+
gem.require_paths = ['lib']
|
|
20
|
+
|
|
21
|
+
gem.required_ruby_version = '>= 2.3.1'
|
|
22
|
+
|
|
23
|
+
gem.add_dependency 'optix'
|
|
19
24
|
|
|
20
25
|
gem.add_development_dependency 'rb-inotify'
|
|
21
26
|
gem.add_development_dependency 'guard'
|
|
22
27
|
gem.add_development_dependency 'guard-rspec'
|
|
23
28
|
gem.add_development_dependency 'rake'
|
|
24
29
|
gem.add_development_dependency 'simplecov'
|
|
25
|
-
gem.add_development_dependency 'rspec'
|
|
30
|
+
gem.add_development_dependency 'rspec', '= 2.12.0'
|
|
26
31
|
gem.add_development_dependency 'b'
|
|
27
32
|
gem.add_development_dependency 'gnuplot'
|
|
28
33
|
gem.add_development_dependency 'yard'
|
|
34
|
+
gem.add_development_dependency 'bump'
|
|
35
|
+
gem.add_development_dependency 'rubocop'
|
|
29
36
|
end
|
data/bin/akero
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
{
|
|
2
|
+
"RSpec": {
|
|
3
|
+
"coverage": {
|
|
4
|
+
"/Users/moe/code/akero/lib/akero.rb": [
|
|
5
|
+
null,
|
|
6
|
+
null,
|
|
7
|
+
null,
|
|
8
|
+
null,
|
|
9
|
+
null,
|
|
10
|
+
null,
|
|
11
|
+
null,
|
|
12
|
+
null,
|
|
13
|
+
null,
|
|
14
|
+
null,
|
|
15
|
+
null,
|
|
16
|
+
null,
|
|
17
|
+
null,
|
|
18
|
+
null,
|
|
19
|
+
null,
|
|
20
|
+
null,
|
|
21
|
+
null,
|
|
22
|
+
null,
|
|
23
|
+
null,
|
|
24
|
+
null,
|
|
25
|
+
null,
|
|
26
|
+
null,
|
|
27
|
+
null,
|
|
28
|
+
null,
|
|
29
|
+
1,
|
|
30
|
+
null,
|
|
31
|
+
1,
|
|
32
|
+
1,
|
|
33
|
+
null,
|
|
34
|
+
null,
|
|
35
|
+
null,
|
|
36
|
+
null,
|
|
37
|
+
null,
|
|
38
|
+
null,
|
|
39
|
+
1,
|
|
40
|
+
null,
|
|
41
|
+
1,
|
|
42
|
+
null,
|
|
43
|
+
1,
|
|
44
|
+
null,
|
|
45
|
+
1,
|
|
46
|
+
null,
|
|
47
|
+
null,
|
|
48
|
+
1,
|
|
49
|
+
9,
|
|
50
|
+
9,
|
|
51
|
+
9,
|
|
52
|
+
null,
|
|
53
|
+
null,
|
|
54
|
+
null,
|
|
55
|
+
1,
|
|
56
|
+
1,
|
|
57
|
+
null,
|
|
58
|
+
null,
|
|
59
|
+
null,
|
|
60
|
+
null,
|
|
61
|
+
1,
|
|
62
|
+
3,
|
|
63
|
+
null,
|
|
64
|
+
null,
|
|
65
|
+
null,
|
|
66
|
+
null,
|
|
67
|
+
1,
|
|
68
|
+
2,
|
|
69
|
+
null,
|
|
70
|
+
null,
|
|
71
|
+
null,
|
|
72
|
+
null,
|
|
73
|
+
null,
|
|
74
|
+
1,
|
|
75
|
+
1,
|
|
76
|
+
1,
|
|
77
|
+
1,
|
|
78
|
+
1,
|
|
79
|
+
1,
|
|
80
|
+
1,
|
|
81
|
+
1,
|
|
82
|
+
1,
|
|
83
|
+
1,
|
|
84
|
+
1,
|
|
85
|
+
null,
|
|
86
|
+
1,
|
|
87
|
+
1,
|
|
88
|
+
1,
|
|
89
|
+
1,
|
|
90
|
+
1,
|
|
91
|
+
null,
|
|
92
|
+
1,
|
|
93
|
+
1,
|
|
94
|
+
null,
|
|
95
|
+
null,
|
|
96
|
+
null,
|
|
97
|
+
null,
|
|
98
|
+
1,
|
|
99
|
+
19,
|
|
100
|
+
null,
|
|
101
|
+
null,
|
|
102
|
+
null,
|
|
103
|
+
null,
|
|
104
|
+
null,
|
|
105
|
+
null,
|
|
106
|
+
null,
|
|
107
|
+
null,
|
|
108
|
+
null,
|
|
109
|
+
null,
|
|
110
|
+
null,
|
|
111
|
+
null,
|
|
112
|
+
null,
|
|
113
|
+
null,
|
|
114
|
+
null,
|
|
115
|
+
null,
|
|
116
|
+
1,
|
|
117
|
+
60,
|
|
118
|
+
null,
|
|
119
|
+
null,
|
|
120
|
+
null,
|
|
121
|
+
null,
|
|
122
|
+
null,
|
|
123
|
+
null,
|
|
124
|
+
null,
|
|
125
|
+
null,
|
|
126
|
+
null,
|
|
127
|
+
1,
|
|
128
|
+
2,
|
|
129
|
+
2,
|
|
130
|
+
1,
|
|
131
|
+
null,
|
|
132
|
+
1,
|
|
133
|
+
1,
|
|
134
|
+
1,
|
|
135
|
+
1,
|
|
136
|
+
1,
|
|
137
|
+
null,
|
|
138
|
+
null,
|
|
139
|
+
null,
|
|
140
|
+
null,
|
|
141
|
+
null,
|
|
142
|
+
null,
|
|
143
|
+
null,
|
|
144
|
+
null,
|
|
145
|
+
1,
|
|
146
|
+
27,
|
|
147
|
+
null,
|
|
148
|
+
null,
|
|
149
|
+
null,
|
|
150
|
+
null,
|
|
151
|
+
null,
|
|
152
|
+
null,
|
|
153
|
+
null,
|
|
154
|
+
null,
|
|
155
|
+
null,
|
|
156
|
+
null,
|
|
157
|
+
null,
|
|
158
|
+
null,
|
|
159
|
+
null,
|
|
160
|
+
1,
|
|
161
|
+
null,
|
|
162
|
+
null,
|
|
163
|
+
4,
|
|
164
|
+
4,
|
|
165
|
+
4,
|
|
166
|
+
4,
|
|
167
|
+
4,
|
|
168
|
+
4,
|
|
169
|
+
null,
|
|
170
|
+
null,
|
|
171
|
+
null,
|
|
172
|
+
null,
|
|
173
|
+
null,
|
|
174
|
+
null,
|
|
175
|
+
null,
|
|
176
|
+
1,
|
|
177
|
+
6,
|
|
178
|
+
6,
|
|
179
|
+
null,
|
|
180
|
+
null,
|
|
181
|
+
null,
|
|
182
|
+
null,
|
|
183
|
+
null,
|
|
184
|
+
null,
|
|
185
|
+
null,
|
|
186
|
+
null,
|
|
187
|
+
null,
|
|
188
|
+
null,
|
|
189
|
+
null,
|
|
190
|
+
null,
|
|
191
|
+
null,
|
|
192
|
+
null,
|
|
193
|
+
null,
|
|
194
|
+
null,
|
|
195
|
+
null,
|
|
196
|
+
null,
|
|
197
|
+
null,
|
|
198
|
+
null,
|
|
199
|
+
null,
|
|
200
|
+
null,
|
|
201
|
+
1,
|
|
202
|
+
13,
|
|
203
|
+
13,
|
|
204
|
+
23,
|
|
205
|
+
null,
|
|
206
|
+
21,
|
|
207
|
+
21,
|
|
208
|
+
null,
|
|
209
|
+
2,
|
|
210
|
+
null,
|
|
211
|
+
null,
|
|
212
|
+
2,
|
|
213
|
+
null,
|
|
214
|
+
null,
|
|
215
|
+
9,
|
|
216
|
+
7,
|
|
217
|
+
null,
|
|
218
|
+
null,
|
|
219
|
+
null,
|
|
220
|
+
null,
|
|
221
|
+
null,
|
|
222
|
+
null,
|
|
223
|
+
1,
|
|
224
|
+
19,
|
|
225
|
+
11,
|
|
226
|
+
null,
|
|
227
|
+
19,
|
|
228
|
+
19,
|
|
229
|
+
null,
|
|
230
|
+
2,
|
|
231
|
+
null,
|
|
232
|
+
null,
|
|
233
|
+
15,
|
|
234
|
+
null,
|
|
235
|
+
null,
|
|
236
|
+
5,
|
|
237
|
+
null,
|
|
238
|
+
null,
|
|
239
|
+
8,
|
|
240
|
+
6,
|
|
241
|
+
4,
|
|
242
|
+
4,
|
|
243
|
+
null,
|
|
244
|
+
2,
|
|
245
|
+
null,
|
|
246
|
+
null,
|
|
247
|
+
null,
|
|
248
|
+
1,
|
|
249
|
+
3,
|
|
250
|
+
null,
|
|
251
|
+
null,
|
|
252
|
+
null,
|
|
253
|
+
1,
|
|
254
|
+
1,
|
|
255
|
+
null,
|
|
256
|
+
null,
|
|
257
|
+
null,
|
|
258
|
+
2,
|
|
259
|
+
null,
|
|
260
|
+
null,
|
|
261
|
+
null,
|
|
262
|
+
null,
|
|
263
|
+
null,
|
|
264
|
+
null,
|
|
265
|
+
null,
|
|
266
|
+
null,
|
|
267
|
+
null,
|
|
268
|
+
1,
|
|
269
|
+
74,
|
|
270
|
+
74,
|
|
271
|
+
null,
|
|
272
|
+
null,
|
|
273
|
+
null,
|
|
274
|
+
null,
|
|
275
|
+
null,
|
|
276
|
+
1,
|
|
277
|
+
23,
|
|
278
|
+
44,
|
|
279
|
+
null,
|
|
280
|
+
1,
|
|
281
|
+
null,
|
|
282
|
+
null,
|
|
283
|
+
null,
|
|
284
|
+
1,
|
|
285
|
+
null,
|
|
286
|
+
1,
|
|
287
|
+
8,
|
|
288
|
+
null,
|
|
289
|
+
2,
|
|
290
|
+
null,
|
|
291
|
+
null,
|
|
292
|
+
1,
|
|
293
|
+
9,
|
|
294
|
+
9,
|
|
295
|
+
null,
|
|
296
|
+
null,
|
|
297
|
+
1,
|
|
298
|
+
26,
|
|
299
|
+
26,
|
|
300
|
+
null,
|
|
301
|
+
15,
|
|
302
|
+
null,
|
|
303
|
+
9,
|
|
304
|
+
null,
|
|
305
|
+
2,
|
|
306
|
+
null,
|
|
307
|
+
24,
|
|
308
|
+
24,
|
|
309
|
+
null,
|
|
310
|
+
null,
|
|
311
|
+
1,
|
|
312
|
+
26,
|
|
313
|
+
24,
|
|
314
|
+
null,
|
|
315
|
+
24,
|
|
316
|
+
18,
|
|
317
|
+
2,
|
|
318
|
+
null,
|
|
319
|
+
null,
|
|
320
|
+
16,
|
|
321
|
+
null,
|
|
322
|
+
null,
|
|
323
|
+
22,
|
|
324
|
+
3,
|
|
325
|
+
null,
|
|
326
|
+
null,
|
|
327
|
+
19,
|
|
328
|
+
null,
|
|
329
|
+
null,
|
|
330
|
+
null,
|
|
331
|
+
null,
|
|
332
|
+
null,
|
|
333
|
+
null,
|
|
334
|
+
null,
|
|
335
|
+
1,
|
|
336
|
+
61,
|
|
337
|
+
61,
|
|
338
|
+
null,
|
|
339
|
+
61,
|
|
340
|
+
61,
|
|
341
|
+
61,
|
|
342
|
+
61,
|
|
343
|
+
61,
|
|
344
|
+
61,
|
|
345
|
+
61,
|
|
346
|
+
null,
|
|
347
|
+
61,
|
|
348
|
+
61,
|
|
349
|
+
null,
|
|
350
|
+
61,
|
|
351
|
+
61,
|
|
352
|
+
61,
|
|
353
|
+
null,
|
|
354
|
+
null,
|
|
355
|
+
null,
|
|
356
|
+
61,
|
|
357
|
+
null,
|
|
358
|
+
61,
|
|
359
|
+
61,
|
|
360
|
+
61,
|
|
361
|
+
null,
|
|
362
|
+
null
|
|
363
|
+
]
|
|
364
|
+
},
|
|
365
|
+
"timestamp": 1465614139
|
|
366
|
+
}
|
|
367
|
+
}
|
|
File without changes
|