krang 0.0.1rc1
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/.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 [](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: []
|