krang 0.0.1rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +51 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +97 -0
- data/LICENSE +41 -0
- data/README.md +81 -0
- data/Rakefile +43 -0
- data/krang.gemspec +38 -0
- data/lib/krang/chain.rb +72 -0
- data/lib/krang/config.rb +63 -0
- data/lib/krang/utils.rb +76 -0
- data/lib/krang/version.rb +4 -0
- data/lib/krang.rb +14 -0
- metadata +384 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d255f5a507b47ca59b49a04ee65afa83d355a027
|
4
|
+
data.tar.gz: 7aa857179a9bd30725fbb7ca3718abd2c0d57ea0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8dd13299008ef27e3c7795cfe5fcb93c92cacdef55a8716eaa0216349a6a5e8b983851bde4ab351e3b07748780a2533b01cc7a46fc63b292c7df52eb17c5d649
|
7
|
+
data.tar.gz: 8cf4930f3115044003d1cba3d7626ffd86701ba002891d94101ab465bd3685bd37d2a5249d368d9fbf2c501e32dffa525a12aaf3f2593937fc1a5ac2a9e85caa
|
data/.gitignore
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
## Specific to RubyMotion:
|
17
|
+
.dat*
|
18
|
+
.repl_history
|
19
|
+
build/
|
20
|
+
*.bridgesupport
|
21
|
+
build-iPhoneOS/
|
22
|
+
build-iPhoneSimulator/
|
23
|
+
|
24
|
+
## Specific to RubyMotion (use of CocoaPods):
|
25
|
+
#
|
26
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
27
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
28
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
29
|
+
#
|
30
|
+
# vendor/Pods/
|
31
|
+
|
32
|
+
## Documentation cache and generated files:
|
33
|
+
/.yardoc/
|
34
|
+
/_yardoc/
|
35
|
+
/doc/
|
36
|
+
/rdoc/
|
37
|
+
|
38
|
+
## Environment normalization:
|
39
|
+
/.bundle/
|
40
|
+
/vendor/bundle
|
41
|
+
/lib/bundler/man/
|
42
|
+
|
43
|
+
# for a library or gem, you might want to ignore these files since the code is
|
44
|
+
# intended to run in multiple environments; otherwise, check them in:
|
45
|
+
# Gemfile.lock
|
46
|
+
# .ruby-version
|
47
|
+
# .ruby-gemset
|
48
|
+
|
49
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
50
|
+
.rvmrc
|
51
|
+
*.log
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
krang (0.0.1rc1)
|
5
|
+
awesome_print (~> 1.8, >= 1.8.0)
|
6
|
+
radiator (~> 0.2, >= 0.2.2)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.5.1)
|
12
|
+
public_suffix (~> 2.0, >= 2.0.2)
|
13
|
+
awesome_print (1.8.0)
|
14
|
+
bitcoin-ruby (0.0.10)
|
15
|
+
byebug (9.0.6)
|
16
|
+
chronic (0.10.2)
|
17
|
+
codeclimate-test-reporter (0.5.2)
|
18
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
19
|
+
coderay (1.1.1)
|
20
|
+
crack (0.4.3)
|
21
|
+
safe_yaml (~> 1.0.0)
|
22
|
+
delorean (2.1.0)
|
23
|
+
chronic
|
24
|
+
docile (1.1.5)
|
25
|
+
ethon (0.10.1)
|
26
|
+
ffi (>= 1.3.0)
|
27
|
+
faraday (0.12.1)
|
28
|
+
multipart-post (>= 1.2, < 3)
|
29
|
+
ffi (1.9.18)
|
30
|
+
hashdiff (0.3.4)
|
31
|
+
hashie (3.5.6)
|
32
|
+
json (1.8.6)
|
33
|
+
little-plugger (1.1.4)
|
34
|
+
logging (2.2.2)
|
35
|
+
little-plugger (~> 1.1)
|
36
|
+
multi_json (~> 1.10)
|
37
|
+
method_source (0.8.2)
|
38
|
+
minitest (5.10.2)
|
39
|
+
minitest-line (0.6.4)
|
40
|
+
minitest (~> 5.0)
|
41
|
+
minitest-proveit (1.0.0)
|
42
|
+
minitest (> 5, < 7)
|
43
|
+
multi_json (1.12.1)
|
44
|
+
multipart-post (2.0.0)
|
45
|
+
net-http-persistent (2.9.4)
|
46
|
+
pry (0.10.4)
|
47
|
+
coderay (~> 1.1.0)
|
48
|
+
method_source (~> 0.8.1)
|
49
|
+
slop (~> 3.4)
|
50
|
+
public_suffix (2.0.5)
|
51
|
+
radiator (0.2.2)
|
52
|
+
bitcoin-ruby (= 0.0.10)
|
53
|
+
ffi (= 1.9.18)
|
54
|
+
hashie (~> 3.5, >= 3.5.5)
|
55
|
+
json (~> 1.8, >= 1.8.6)
|
56
|
+
logging (~> 2.2, >= 2.2.0)
|
57
|
+
net-http-persistent (~> 2.9, >= 2.9.4)
|
58
|
+
rake (12.0.0)
|
59
|
+
safe_yaml (1.0.4)
|
60
|
+
simplecov (0.14.1)
|
61
|
+
docile (~> 1.1.0)
|
62
|
+
json (>= 1.8, < 3)
|
63
|
+
simplecov-html (~> 0.10.0)
|
64
|
+
simplecov-html (0.10.1)
|
65
|
+
slop (3.6.0)
|
66
|
+
typhoeus (1.1.2)
|
67
|
+
ethon (>= 0.9.0)
|
68
|
+
vcr (3.0.3)
|
69
|
+
webmock (3.0.1)
|
70
|
+
addressable (>= 2.3.6)
|
71
|
+
crack (>= 0.3.2)
|
72
|
+
hashdiff
|
73
|
+
yard (0.9.9)
|
74
|
+
|
75
|
+
PLATFORMS
|
76
|
+
ruby
|
77
|
+
|
78
|
+
DEPENDENCIES
|
79
|
+
bundler (~> 1.11)
|
80
|
+
byebug (~> 9.0, >= 9.0.6)
|
81
|
+
codeclimate-test-reporter (~> 0.5.2)
|
82
|
+
delorean (~> 2.1, >= 2.1.0)
|
83
|
+
faraday (~> 0.12, >= 0.12.1)
|
84
|
+
krang!
|
85
|
+
minitest (~> 5.10, >= 5.10.2)
|
86
|
+
minitest-line (~> 0.6, >= 0.6.4)
|
87
|
+
minitest-proveit (~> 1.0, >= 1.0.0)
|
88
|
+
pry (~> 0.10, >= 0.10.4)
|
89
|
+
rake (~> 12.0, >= 12.0.0)
|
90
|
+
simplecov (~> 0.10, >= 0.10.1)
|
91
|
+
typhoeus (~> 1.1, >= 1.1.2)
|
92
|
+
vcr (~> 3.0, >= 3.0.3)
|
93
|
+
webmock (~> 3.0, >= 3.0.1)
|
94
|
+
yard (~> 0.9, >= 0.9.9)
|
95
|
+
|
96
|
+
BUNDLED WITH
|
97
|
+
1.14.6
|
data/LICENSE
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
CC0 1.0 Universal (CC0 1.0)
|
2
|
+
Public Domain Dedication
|
3
|
+
https://creativecommons.org/publicdomain/zero/1.0/
|
4
|
+
|
5
|
+
This is a human-readable summary of the Legal Code:
|
6
|
+
https://creativecommons.org/publicdomain/zero/1.0/legalcode
|
7
|
+
|
8
|
+
Disclaimer
|
9
|
+
|
10
|
+
The Commons Deed is not a legal instrument. It is simply a handy reference for
|
11
|
+
understanding the CC0 Legal Code, a human-readable expression of some of its key
|
12
|
+
terms. Think of it as the user-friendly interface to the CC0 Legal Code beneath.
|
13
|
+
This Deed itself has no legal value, and its contents do not appear in CC0.
|
14
|
+
Creative Commons is not a law firm and does not provide legal services.
|
15
|
+
Distributing, displaying, or linking to this Commons Deed does not create an
|
16
|
+
attorney-client relationship.
|
17
|
+
|
18
|
+
Creative Commons has not verified the copyright status of any work to which CC0
|
19
|
+
has been applied. CC makes no warranties about any work or its copyright status
|
20
|
+
in any jurisdiction, and disclaims all liability for all uses of any work.
|
21
|
+
|
22
|
+
No Copyright
|
23
|
+
|
24
|
+
The person who associated a work with this deed has dedicated the work to the
|
25
|
+
public domain by waiving all of his or her rights to the work worldwide under
|
26
|
+
copyright law, including all related and neighboring rights, to the extent
|
27
|
+
allowed by law.
|
28
|
+
|
29
|
+
You can copy, modify, distribute and perform the work, even for commercial
|
30
|
+
purposes, all without asking permission. See Other Information below.
|
31
|
+
|
32
|
+
Other Information
|
33
|
+
|
34
|
+
* In no way are the patent or trademark rights of any person affected by CC0,
|
35
|
+
nor are the rights that other persons may have in the work or in how the work
|
36
|
+
is used, such as publicity or privacy rights.
|
37
|
+
* Unless expressly stated otherwise, the person who associated a work with this
|
38
|
+
deed makes no warranties about the work, and disclaims liability for all uses
|
39
|
+
of the work, to the fullest extent permitted by applicable law.
|
40
|
+
* When using or citing the work, you should not imply endorsement by the author
|
41
|
+
or the affirmer.
|
data/README.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
krang
|
2
|
+
=====
|
3
|
+
|
4
|
+
[Krang](https://github.com/inertia186/krang) is a bot framework for STEEM.
|
5
|
+
|
6
|
+
<center>
|
7
|
+
<img src="http://i.imgur.com/sQHfEQD.jpg" />
|
8
|
+
</center>
|
9
|
+
|
10
|
+
---
|
11
|
+
|
12
|
+
This framework will make it easier to write bots on the STEEM blockchain.
|
13
|
+
|
14
|
+
---
|
15
|
+
|
16
|
+
#### Install
|
17
|
+
|
18
|
+
To use this [Radiator](https://steemit.com/steem/@inertia/radiator-steem-ruby-api-client) framework:
|
19
|
+
|
20
|
+
I've tested it on various versions of ruby. The oldest one I got it to work was:
|
21
|
+
|
22
|
+
`ruby 2.0.0p645 (2015-04-13 revision 50299) [x86_64-darwin14.4.0]`
|
23
|
+
|
24
|
+
In your `Gemfile`, add:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
gem 'krang'
|
28
|
+
```
|
29
|
+
|
30
|
+
In your app, create a class:
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
require 'rubygems'
|
34
|
+
require 'bundler/setup'
|
35
|
+
|
36
|
+
Bundler.require
|
37
|
+
|
38
|
+
module MyBot
|
39
|
+
include Krang
|
40
|
+
|
41
|
+
extend self
|
42
|
+
|
43
|
+
app_key :my_bot
|
44
|
+
end
|
45
|
+
|
46
|
+
puts MyBot.find_comment('inertia', 'macintosh-napintosh')
|
47
|
+
```
|
48
|
+
|
49
|
+
##### Configure
|
50
|
+
|
51
|
+
Edit the `config.yml` file.
|
52
|
+
|
53
|
+
```yaml
|
54
|
+
:my_bot:
|
55
|
+
:block_mode: irreversible
|
56
|
+
|
57
|
+
:chain_options:
|
58
|
+
:chain: steem
|
59
|
+
:url: https://steemd.steemit.com
|
60
|
+
```
|
61
|
+
|
62
|
+
---
|
63
|
+
|
64
|
+
## Tests
|
65
|
+
|
66
|
+
* Clone the client repository into a directory of your choice:
|
67
|
+
* `git clone https://github.com/inertia186/krang.git`
|
68
|
+
* Navigate into the new folder
|
69
|
+
* `cd krang`
|
70
|
+
* Basic tests can be invoked as follows:
|
71
|
+
* `rake`
|
72
|
+
* To run tests with parallelization and local code coverage:
|
73
|
+
* `HELL_ENABLED=true rake`
|
74
|
+
|
75
|
+
## Get in touch!
|
76
|
+
|
77
|
+
If you're using Krang, I'd love to hear from you. Drop me a line and tell me what you think! I'm @inertia on STEEM and Discord.
|
78
|
+
|
79
|
+
## License
|
80
|
+
|
81
|
+
I don't believe in intellectual "property". If you do, consider Krang as licensed under a Creative Commons [![CC0](http://i.creativecommons.org/p/zero/1.0/80x15.png)](http://creativecommons.org/publicdomain/zero/1.0/) License.
|
data/Rakefile
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'yard'
|
4
|
+
require 'krang'
|
5
|
+
|
6
|
+
Encoding.default_external = Encoding::UTF_8
|
7
|
+
Encoding.default_internal = Encoding::UTF_8
|
8
|
+
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'test'
|
11
|
+
t.libs << 'lib'
|
12
|
+
t.test_files = FileList['test/**/*_test.rb']
|
13
|
+
t.ruby_opts << if ENV['HELL_ENABLED']
|
14
|
+
'-W2'
|
15
|
+
else
|
16
|
+
'-W1'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
YARD::Rake::YardocTask.new do |t|
|
21
|
+
t.files = ['lib/**/*.rb']
|
22
|
+
end
|
23
|
+
|
24
|
+
task default: :test
|
25
|
+
|
26
|
+
task :console do
|
27
|
+
exec "irb -r krang -I ./lib"
|
28
|
+
end
|
29
|
+
|
30
|
+
task :build do
|
31
|
+
exec 'gem build krang.gemspec'
|
32
|
+
end
|
33
|
+
|
34
|
+
task :push do
|
35
|
+
exec "gem push krang-#{Krang::VERSION}.gem"
|
36
|
+
end
|
37
|
+
|
38
|
+
# We're not going to yank on a regular basis, but this is how it's done if you
|
39
|
+
# really want a task for that for some reason.
|
40
|
+
|
41
|
+
# task :yank do
|
42
|
+
# exec "gem yank krang -v #{Krang::VERSION}"
|
43
|
+
# end
|
data/krang.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'krang/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'krang'
|
8
|
+
spec.version = Krang::VERSION
|
9
|
+
spec.authors = ['Anthony Martin']
|
10
|
+
spec.email = ['krang@martin-studio.com']
|
11
|
+
|
12
|
+
spec.summary = %q{Bot framework for STEEM.}
|
13
|
+
spec.description = %q{That frames your work.}
|
14
|
+
spec.homepage = 'https://github.com/inertia186/krang'
|
15
|
+
spec.license = 'CC0 1.0'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
21
|
+
spec.add_development_dependency 'rake', '~> 12.0', '>= 12.0.0'
|
22
|
+
spec.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.2'
|
23
|
+
spec.add_development_dependency 'minitest-line', '~> 0.6', '>= 0.6.4'
|
24
|
+
spec.add_development_dependency 'minitest-proveit', '~> 1.0', '>= 1.0.0'
|
25
|
+
spec.add_development_dependency 'webmock', '~> 3.0', '>= 3.0.1'
|
26
|
+
spec.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.3'
|
27
|
+
spec.add_development_dependency 'faraday', '~> 0.12', '>= 0.12.1'
|
28
|
+
spec.add_development_dependency 'typhoeus', '~> 1.1', '>= 1.1.2'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.10', '>= 0.10.1'
|
30
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.5.2'
|
31
|
+
spec.add_development_dependency 'yard', '~> 0.9', '>= 0.9.9'
|
32
|
+
spec.add_development_dependency 'byebug', '~> 9.0', '>= 9.0.6'
|
33
|
+
spec.add_development_dependency 'pry', '~> 0.10', '>= 0.10.4'
|
34
|
+
spec.add_development_dependency 'delorean', '~> 2.1', '>= 2.1.0'
|
35
|
+
|
36
|
+
spec.add_dependency 'radiator', '~> 0.2', '>= 0.2.2'
|
37
|
+
spec.add_dependency 'awesome_print', '~> 1.8', '>= 1.8.0'
|
38
|
+
end
|
data/lib/krang/chain.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
module Krang
|
2
|
+
require 'krang/utils'
|
3
|
+
|
4
|
+
module Chain
|
5
|
+
include Utils
|
6
|
+
|
7
|
+
def reset_api
|
8
|
+
@api = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def backoff
|
12
|
+
Random.rand(3..20)
|
13
|
+
end
|
14
|
+
|
15
|
+
def api
|
16
|
+
with_api
|
17
|
+
end
|
18
|
+
|
19
|
+
def with_api(&block)
|
20
|
+
loop do
|
21
|
+
@api ||= Radiator::Api.new(chain_options)
|
22
|
+
|
23
|
+
return @api if block.nil?
|
24
|
+
|
25
|
+
begin
|
26
|
+
yield @api
|
27
|
+
break
|
28
|
+
rescue => e
|
29
|
+
warning "API exception, retrying (#{e})", e
|
30
|
+
reset_api
|
31
|
+
sleep backoff
|
32
|
+
redo
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def reset_properties
|
38
|
+
@properties = nil
|
39
|
+
@latest_properties = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def properties
|
43
|
+
if !@latest_properties.nil? && Time.now - @latest_properties > 30
|
44
|
+
@properties = nil
|
45
|
+
@latest_properties = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
return @properties unless @properties.nil?
|
49
|
+
|
50
|
+
response = nil
|
51
|
+
with_api { |api| response = api.get_dynamic_global_properties }
|
52
|
+
response.result.tap do |properties|
|
53
|
+
@latest_properties = Time.parse(properties.time + 'Z')
|
54
|
+
@properties = properties
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def block_time
|
59
|
+
Time.parse(properties.time + 'Z')
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_comment(author, permlink)
|
63
|
+
response = nil
|
64
|
+
with_api { |api| response = api.get_content(author, permlink) }
|
65
|
+
comment = response.result
|
66
|
+
|
67
|
+
trace comment
|
68
|
+
|
69
|
+
comment unless comment.id == 0
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/krang/config.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Krang
|
2
|
+
module Config
|
3
|
+
@@override_config = nil
|
4
|
+
|
5
|
+
def override_config(override_config)
|
6
|
+
@@override_config = override_config
|
7
|
+
end
|
8
|
+
|
9
|
+
def config
|
10
|
+
return @@override_config if !!@@override_config
|
11
|
+
|
12
|
+
config_yml = 'config.yml'
|
13
|
+
config = if File.exist?(config_yml)
|
14
|
+
YAML.load_file(config_yml)
|
15
|
+
else
|
16
|
+
raise "Create a file: #{config_yml}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def init_defaults
|
21
|
+
@default_logger = Logger.new("#{@app_key}.log") if !!@app_key
|
22
|
+
|
23
|
+
@default_chain_options = {
|
24
|
+
logger: @default_logger
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def app_key(app_key = nil)
|
29
|
+
@app_key = app_key unless app_key.nil?
|
30
|
+
raise 'Need to override app_key.' unless !!@app_key
|
31
|
+
init_defaults
|
32
|
+
@app_key.to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
def agent_id(agent_id = nil)
|
36
|
+
@agent_id = agent_id unless agent_id.nil?
|
37
|
+
@agent_id || Krang::AGENT_ID
|
38
|
+
end
|
39
|
+
|
40
|
+
def default_value(key)
|
41
|
+
ENV["#{app_key.to_s.upcase}_#{key.to_s.upcase}"]
|
42
|
+
end
|
43
|
+
|
44
|
+
def block_mode
|
45
|
+
default_value(:blockmode) || config[app_key][:block_mode]
|
46
|
+
end
|
47
|
+
|
48
|
+
def chain_options
|
49
|
+
chain_options = config[:chain_options].merge(@default_chain_options)
|
50
|
+
|
51
|
+
chain = default_value(:chain_options_chain)
|
52
|
+
chain_options = chain_options.merge(chain: chain.to_s) if !!chain
|
53
|
+
url = default_value(:chain_options_url)
|
54
|
+
chain_options = chain_options.merge(url: url) if !!url
|
55
|
+
|
56
|
+
chain_options.dup
|
57
|
+
end
|
58
|
+
|
59
|
+
def logger
|
60
|
+
@default_logger
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/krang/utils.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Krang
|
2
|
+
require 'krang/config'
|
3
|
+
|
4
|
+
module Utils
|
5
|
+
include Config
|
6
|
+
|
7
|
+
LOGGING_LEVELS = {
|
8
|
+
ERR: 1, # error
|
9
|
+
WRN: 2, # warn
|
10
|
+
INF: 3, # info
|
11
|
+
DBG: 4, # debug
|
12
|
+
TRC: 5, # trace
|
13
|
+
}
|
14
|
+
|
15
|
+
def log_level
|
16
|
+
level = ENV['LOG'].to_s.upcase.to_sym || :DBG
|
17
|
+
LOGGING_LEVELS[level] || 4
|
18
|
+
end
|
19
|
+
|
20
|
+
def semaphore
|
21
|
+
@semaphore ||= Mutex.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def console(mode, msg, detail = nil)
|
25
|
+
color = case mode
|
26
|
+
when :INF then :green
|
27
|
+
when :WRN then :yellow
|
28
|
+
when :ERR then :red
|
29
|
+
when :DBG then :yellowish
|
30
|
+
else; :pale
|
31
|
+
end
|
32
|
+
|
33
|
+
output = {mode => msg}
|
34
|
+
|
35
|
+
unless detail.nil?
|
36
|
+
output[:detail] = detail
|
37
|
+
output[:backtrace] = detail.backtrace rescue nil
|
38
|
+
end
|
39
|
+
|
40
|
+
multiline = if mode == :TRC
|
41
|
+
true
|
42
|
+
else
|
43
|
+
output.size > 1
|
44
|
+
end
|
45
|
+
|
46
|
+
if log_level >= (LOGGING_LEVELS[mode] || 4)
|
47
|
+
case mode
|
48
|
+
when :INF then logger.info msg
|
49
|
+
when :WRN then logger.warn msg
|
50
|
+
when :ERR then logger.error msg
|
51
|
+
when :DBG then logger.debug msg
|
52
|
+
else; logger.debug msg
|
53
|
+
end
|
54
|
+
|
55
|
+
semaphore.synchronize do
|
56
|
+
ap(output, {multiline: multiline, color: {string: color}})
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def trace(msg, detail = nil); console(:TRC, msg, detail); end
|
62
|
+
def debug(msg, detail = nil); console(:DBG, msg, detail); end
|
63
|
+
def info(msg, detail = nil); console(:INF, msg, detail); end
|
64
|
+
def warning(msg, detail = nil); console(:WRN, msg, detail); end
|
65
|
+
def error(msg, detail = nil); console(:ERR, msg, detail); end
|
66
|
+
|
67
|
+
def parse_slug(slug)
|
68
|
+
slug = slug.downcase.split('@').last
|
69
|
+
author_name = slug.split('/')[0]
|
70
|
+
permlink = slug.split('/')[1..-1].join('/')
|
71
|
+
permlink = permlink.split('?')[0]
|
72
|
+
|
73
|
+
[author_name, permlink]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/krang.rb
ADDED
metadata
ADDED
@@ -0,0 +1,384 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: krang
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anthony Martin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.0'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 12.0.0
|
37
|
+
type: :development
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '12.0'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 12.0.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: minitest
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '5.10'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 5.10.2
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '5.10'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 5.10.2
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: minitest-line
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0.6'
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.6.4
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.6'
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: 0.6.4
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: minitest-proveit
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '1.0'
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.0.0
|
97
|
+
type: :development
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.0'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 1.0.0
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: webmock
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '3.0'
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 3.0.1
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '3.0'
|
124
|
+
- - ">="
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 3.0.1
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: vcr
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - "~>"
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '3.0'
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 3.0.3
|
137
|
+
type: :development
|
138
|
+
prerelease: false
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - "~>"
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '3.0'
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 3.0.3
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: faraday
|
149
|
+
requirement: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0.12'
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: 0.12.1
|
157
|
+
type: :development
|
158
|
+
prerelease: false
|
159
|
+
version_requirements: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0.12'
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.12.1
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: typhoeus
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1.1'
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 1.1.2
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - "~>"
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: '1.1'
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 1.1.2
|
187
|
+
- !ruby/object:Gem::Dependency
|
188
|
+
name: simplecov
|
189
|
+
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "~>"
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0.10'
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 0.10.1
|
197
|
+
type: :development
|
198
|
+
prerelease: false
|
199
|
+
version_requirements: !ruby/object:Gem::Requirement
|
200
|
+
requirements:
|
201
|
+
- - "~>"
|
202
|
+
- !ruby/object:Gem::Version
|
203
|
+
version: '0.10'
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: 0.10.1
|
207
|
+
- !ruby/object:Gem::Dependency
|
208
|
+
name: codeclimate-test-reporter
|
209
|
+
requirement: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - "~>"
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: 0.5.2
|
214
|
+
type: :development
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - "~>"
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: 0.5.2
|
221
|
+
- !ruby/object:Gem::Dependency
|
222
|
+
name: yard
|
223
|
+
requirement: !ruby/object:Gem::Requirement
|
224
|
+
requirements:
|
225
|
+
- - "~>"
|
226
|
+
- !ruby/object:Gem::Version
|
227
|
+
version: '0.9'
|
228
|
+
- - ">="
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: 0.9.9
|
231
|
+
type: :development
|
232
|
+
prerelease: false
|
233
|
+
version_requirements: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - "~>"
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0.9'
|
238
|
+
- - ">="
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: 0.9.9
|
241
|
+
- !ruby/object:Gem::Dependency
|
242
|
+
name: byebug
|
243
|
+
requirement: !ruby/object:Gem::Requirement
|
244
|
+
requirements:
|
245
|
+
- - "~>"
|
246
|
+
- !ruby/object:Gem::Version
|
247
|
+
version: '9.0'
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 9.0.6
|
251
|
+
type: :development
|
252
|
+
prerelease: false
|
253
|
+
version_requirements: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '9.0'
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
version: 9.0.6
|
261
|
+
- !ruby/object:Gem::Dependency
|
262
|
+
name: pry
|
263
|
+
requirement: !ruby/object:Gem::Requirement
|
264
|
+
requirements:
|
265
|
+
- - "~>"
|
266
|
+
- !ruby/object:Gem::Version
|
267
|
+
version: '0.10'
|
268
|
+
- - ">="
|
269
|
+
- !ruby/object:Gem::Version
|
270
|
+
version: 0.10.4
|
271
|
+
type: :development
|
272
|
+
prerelease: false
|
273
|
+
version_requirements: !ruby/object:Gem::Requirement
|
274
|
+
requirements:
|
275
|
+
- - "~>"
|
276
|
+
- !ruby/object:Gem::Version
|
277
|
+
version: '0.10'
|
278
|
+
- - ">="
|
279
|
+
- !ruby/object:Gem::Version
|
280
|
+
version: 0.10.4
|
281
|
+
- !ruby/object:Gem::Dependency
|
282
|
+
name: delorean
|
283
|
+
requirement: !ruby/object:Gem::Requirement
|
284
|
+
requirements:
|
285
|
+
- - "~>"
|
286
|
+
- !ruby/object:Gem::Version
|
287
|
+
version: '2.1'
|
288
|
+
- - ">="
|
289
|
+
- !ruby/object:Gem::Version
|
290
|
+
version: 2.1.0
|
291
|
+
type: :development
|
292
|
+
prerelease: false
|
293
|
+
version_requirements: !ruby/object:Gem::Requirement
|
294
|
+
requirements:
|
295
|
+
- - "~>"
|
296
|
+
- !ruby/object:Gem::Version
|
297
|
+
version: '2.1'
|
298
|
+
- - ">="
|
299
|
+
- !ruby/object:Gem::Version
|
300
|
+
version: 2.1.0
|
301
|
+
- !ruby/object:Gem::Dependency
|
302
|
+
name: radiator
|
303
|
+
requirement: !ruby/object:Gem::Requirement
|
304
|
+
requirements:
|
305
|
+
- - "~>"
|
306
|
+
- !ruby/object:Gem::Version
|
307
|
+
version: '0.2'
|
308
|
+
- - ">="
|
309
|
+
- !ruby/object:Gem::Version
|
310
|
+
version: 0.2.2
|
311
|
+
type: :runtime
|
312
|
+
prerelease: false
|
313
|
+
version_requirements: !ruby/object:Gem::Requirement
|
314
|
+
requirements:
|
315
|
+
- - "~>"
|
316
|
+
- !ruby/object:Gem::Version
|
317
|
+
version: '0.2'
|
318
|
+
- - ">="
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: 0.2.2
|
321
|
+
- !ruby/object:Gem::Dependency
|
322
|
+
name: awesome_print
|
323
|
+
requirement: !ruby/object:Gem::Requirement
|
324
|
+
requirements:
|
325
|
+
- - "~>"
|
326
|
+
- !ruby/object:Gem::Version
|
327
|
+
version: '1.8'
|
328
|
+
- - ">="
|
329
|
+
- !ruby/object:Gem::Version
|
330
|
+
version: 1.8.0
|
331
|
+
type: :runtime
|
332
|
+
prerelease: false
|
333
|
+
version_requirements: !ruby/object:Gem::Requirement
|
334
|
+
requirements:
|
335
|
+
- - "~>"
|
336
|
+
- !ruby/object:Gem::Version
|
337
|
+
version: '1.8'
|
338
|
+
- - ">="
|
339
|
+
- !ruby/object:Gem::Version
|
340
|
+
version: 1.8.0
|
341
|
+
description: That frames your work.
|
342
|
+
email:
|
343
|
+
- krang@martin-studio.com
|
344
|
+
executables: []
|
345
|
+
extensions: []
|
346
|
+
extra_rdoc_files: []
|
347
|
+
files:
|
348
|
+
- ".gitignore"
|
349
|
+
- Gemfile
|
350
|
+
- Gemfile.lock
|
351
|
+
- LICENSE
|
352
|
+
- README.md
|
353
|
+
- Rakefile
|
354
|
+
- krang.gemspec
|
355
|
+
- lib/krang.rb
|
356
|
+
- lib/krang/chain.rb
|
357
|
+
- lib/krang/config.rb
|
358
|
+
- lib/krang/utils.rb
|
359
|
+
- lib/krang/version.rb
|
360
|
+
homepage: https://github.com/inertia186/krang
|
361
|
+
licenses:
|
362
|
+
- CC0 1.0
|
363
|
+
metadata: {}
|
364
|
+
post_install_message:
|
365
|
+
rdoc_options: []
|
366
|
+
require_paths:
|
367
|
+
- lib
|
368
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
369
|
+
requirements:
|
370
|
+
- - ">="
|
371
|
+
- !ruby/object:Gem::Version
|
372
|
+
version: '0'
|
373
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
374
|
+
requirements:
|
375
|
+
- - ">"
|
376
|
+
- !ruby/object:Gem::Version
|
377
|
+
version: 1.3.1
|
378
|
+
requirements: []
|
379
|
+
rubyforge_project:
|
380
|
+
rubygems_version: 2.4.8
|
381
|
+
signing_key:
|
382
|
+
specification_version: 4
|
383
|
+
summary: Bot framework for STEEM.
|
384
|
+
test_files: []
|