sc4ry 0.1.7 → 0.2.1
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/.github/workflows/main.yml +27 -0
- data/.gitignore +1 -1
- data/.rubocop.yml +47 -0
- data/Gemfile +9 -5
- data/README.md +283 -39
- data/Rakefile +41 -3
- data/VERSION +1 -0
- data/assets/images/sc4ry_workflow.png +0 -0
- data/bin/console +4 -3
- data/lib/sc4ry/backends/init.rb +3 -1
- data/lib/sc4ry/backends/memory.rb +41 -16
- data/lib/sc4ry/backends/redis.rb +59 -61
- data/lib/sc4ry/circuits.rb +240 -59
- data/lib/sc4ry/config.rb +99 -0
- data/lib/sc4ry/constants.rb +55 -0
- data/lib/sc4ry/dependencies.rb +14 -5
- data/lib/sc4ry/exceptions.rb +41 -8
- data/lib/sc4ry/exporters/init.rb +3 -1
- data/lib/sc4ry/helpers.rb +39 -30
- data/lib/sc4ry/logger.rb +55 -18
- data/lib/sc4ry/notifiers/init.rb +47 -19
- data/lib/sc4ry/notifiers/mattermost.rb +38 -31
- data/lib/sc4ry/notifiers/prometheus.rb +21 -19
- data/lib/sc4ry/run_controller.rb +41 -32
- data/lib/sc4ry/store.rb +87 -18
- data/lib/sc4ry/version.rb +8 -1
- data/lib/sc4ry.rb +3 -9
- data/samples/test.rb +159 -0
- data/sc4ry.gemspec +20 -16
- metadata +98 -8
- data/assets/logo_sc4ry.png +0 -0
data/lib/sc4ry/store.rb
CHANGED
@@ -1,42 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Sc4ry module
|
4
|
+
# @note namespace
|
1
5
|
module Sc4ry
|
6
|
+
# Sc4ry::Store class
|
7
|
+
# Store Class Provider/manager singleton Forwarder on {Sc4ry::Backends::Memory} or {Sc4ry::Backends::Redis}
|
8
|
+
# @note must be accessed by {Sc4ry::Circuits.store}
|
2
9
|
class Store
|
3
|
-
|
4
10
|
@@current = :memory
|
5
11
|
|
6
12
|
extend Forwardable
|
7
13
|
include Singleton
|
8
14
|
|
9
|
-
@@backends = {:
|
10
|
-
|
15
|
+
@@backends = { memory: { class: Sc4ry::Backends::Memory, config: {} },
|
16
|
+
redis: { class: Sc4ry::Backends::Redis, config: { host: 'localhost', port: 6379, db: 1 } } }
|
11
17
|
|
18
|
+
# accessor on current backend (default :memory)
|
12
19
|
attr_reader :be
|
20
|
+
|
13
21
|
def_delegators :@be, :put, :get, :flush, :exist?, :del, :list
|
14
22
|
|
23
|
+
# constructor pointing on :memory backend
|
15
24
|
def initialize
|
16
|
-
change_backend name: @@current
|
17
|
-
end
|
25
|
+
change_backend name: @@current
|
26
|
+
end
|
18
27
|
|
28
|
+
# return the current backend
|
29
|
+
# @return [Object] in {Sc4ry::Backends::Memory} or {Sc4ry::Backends::Redis}
|
30
|
+
# @example usage
|
31
|
+
# include Sc4ry
|
32
|
+
# puts Circuits.store.current
|
19
33
|
def current
|
20
|
-
|
34
|
+
@@current
|
21
35
|
end
|
22
36
|
|
23
|
-
|
24
|
-
|
25
|
-
|
37
|
+
# return the config of a specific backend
|
38
|
+
# @param [Symbol] backend the name the backend
|
39
|
+
# @return [Hash] the config of the backend
|
40
|
+
# @raise Sc4ry::Exceptions::Sc4ryBackendError if backend is not found
|
41
|
+
# @example usage
|
42
|
+
# include Sc4ry
|
43
|
+
# puts Circuits.store.get_config backend: :redis
|
44
|
+
def get_config(backend:)
|
45
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, "backend #{backend} not found" unless @@backends.include? backend
|
46
|
+
|
47
|
+
@@backends[backend][:config]
|
26
48
|
end
|
27
49
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
50
|
+
# list backend available
|
51
|
+
# @return [Array] of Symbol the list of backend name
|
52
|
+
# @example usage
|
53
|
+
# include Sc4ry
|
54
|
+
# puts Circuits.store.list_backend
|
55
|
+
def list_backend
|
56
|
+
@@backends.keys
|
32
57
|
end
|
33
58
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
59
|
+
# change the current backend
|
60
|
+
# @note if changing form :memory to :redis => all values and result are lost and circuits will be lost
|
61
|
+
# @note if changing to :redis, get all the define circuits with values and status (ideal)
|
62
|
+
# @note for distributed worker/instance/runner/services
|
63
|
+
# @param [Symbol] name the name of the target backend
|
64
|
+
# @return [Symbol] the name of the new current backend
|
65
|
+
# @raise Sc4ry::Exceptions::Sc4ryBackendError if backend is not found
|
66
|
+
def change_backend(name:)
|
67
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, "backend #{name} not found" unless @@backends.include? name
|
68
|
+
|
69
|
+
@@current = name
|
70
|
+
@be = @@backends[@@current][:class].new(@@backends[@@current][:config])
|
71
|
+
name
|
38
72
|
end
|
39
73
|
|
74
|
+
# register a new backend
|
75
|
+
# @param [Symbol] name the name of the backend
|
76
|
+
# @param [Hash] config the config for this backend
|
77
|
+
# @param [Class] backend_class the class name of the new backend
|
78
|
+
# @raise Sc4ry::Exceptions::Sc4ryBackendError if backend already exist
|
79
|
+
# @return [Symbol] the name of the backend
|
80
|
+
def register_backend(name:, backend_class:, config: {})
|
81
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, "backend #{name} already exist" if @@backends.include? name
|
40
82
|
|
83
|
+
@@backends[name] = { config: config, class: backend_class }
|
84
|
+
name
|
85
|
+
end
|
86
|
+
|
87
|
+
# delete the specified backend reference
|
88
|
+
# @param [Symbol] name the name of the target backend
|
89
|
+
# @raise Sc4ry::Exceptions::Sc4ryBackendError if backend is not found, or name == :memory or :redis
|
90
|
+
# @return [Boolean]
|
91
|
+
def delete_backend(name:)
|
92
|
+
forbidden_mes = 'Delete forbidden for backend in [:redis,:memory]'
|
93
|
+
notfound_mes = "backend #{name} not found"
|
94
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, forbidden_mes if %i[memory redis].include? name
|
95
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, notfound_mes unless @@backends.include? name
|
96
|
+
|
97
|
+
@@backends.delete(name)
|
98
|
+
end
|
99
|
+
|
100
|
+
# change the specified backend config
|
101
|
+
# @param [Symbol] name the name of the target backend
|
102
|
+
# @param [Hash] config the config of the specified backend
|
103
|
+
# @raise Sc4ry::Exceptions::Sc4ryBackendError if backend is not found, or name == :memory
|
104
|
+
def config_backend(name:, config:)
|
105
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, "backend #{name} not found" unless @@backends.include? name
|
106
|
+
raise Sc4ry::Exceptions::Sc4ryBackendError, 'backend :memory not need config' if name == :memory
|
107
|
+
|
108
|
+
@@backends[name][:config] = config
|
109
|
+
end
|
41
110
|
end
|
42
|
-
end
|
111
|
+
end
|
data/lib/sc4ry/version.rb
CHANGED
data/lib/sc4ry.rb
CHANGED
data/samples/test.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sc4ry'
|
3
|
+
|
4
|
+
include Sc4ry
|
5
|
+
|
6
|
+
# display of default Sc4ry config
|
7
|
+
puts '1.1/ CONFIG : Initial default config'
|
8
|
+
Circuits.default_config.each do |item, value|
|
9
|
+
puts " * #{item} : #{value}"
|
10
|
+
end
|
11
|
+
puts ''
|
12
|
+
|
13
|
+
# testing the two ways to configure Sc4ry default config
|
14
|
+
puts '1.2/ CONFIG : modifying default config activate timout and set max_time to 12'
|
15
|
+
Circuits.merge_default_config diff: { timeout: true }
|
16
|
+
Circuits.configure do |spec|
|
17
|
+
spec.max_time = 12
|
18
|
+
end
|
19
|
+
puts ''
|
20
|
+
|
21
|
+
# display default config, must be override with a nested hash by calling default_config= method
|
22
|
+
puts '1.3/ CONFIG : Default config updated:'
|
23
|
+
Circuits.default_config.each do |item, value|
|
24
|
+
puts " * #{item} : #{value}"
|
25
|
+
end
|
26
|
+
puts ''
|
27
|
+
|
28
|
+
# display current data Store
|
29
|
+
print '2.1/ STORE : Current datastore backend : '
|
30
|
+
puts Circuits.store.current
|
31
|
+
puts ''
|
32
|
+
|
33
|
+
# display available backend
|
34
|
+
puts '2.2/ STORE : List of existing backends : '
|
35
|
+
Circuits.store.list_backend.each do |backend|
|
36
|
+
puts " - #{backend}"
|
37
|
+
end
|
38
|
+
puts ''
|
39
|
+
|
40
|
+
# display Redis backend config in store before change
|
41
|
+
puts '2.3/ STORE : display default config of redis backend'
|
42
|
+
Circuits.store.get_config(backend: :redis).each do |item, value|
|
43
|
+
puts " * #{item} : #{value}"
|
44
|
+
end
|
45
|
+
puts ''
|
46
|
+
|
47
|
+
# reconfigure a backend
|
48
|
+
puts '2.4/ STORE : reconfigure Redis backend'
|
49
|
+
Circuits.store.config_backend name: :redis, config: { host: 'localhost', port: 6379, db: 10 }
|
50
|
+
puts
|
51
|
+
|
52
|
+
# display after
|
53
|
+
puts '2.5/ STORE : display altered config of redis backend'
|
54
|
+
Circuits.store.get_config(backend: :redis).each do |item, value|
|
55
|
+
puts " * #{item} : #{value}"
|
56
|
+
end
|
57
|
+
puts ''
|
58
|
+
|
59
|
+
# change backend
|
60
|
+
|
61
|
+
puts '2.6/ STORE : change to redis backend (NEED a Redis installed) '
|
62
|
+
puts ' $ docker pull redis:latest'
|
63
|
+
puts ' $ docker run --rm -d -p 6379:6379/tcp redis:latest'
|
64
|
+
Circuits.store.change_backend name: :redis
|
65
|
+
puts ''
|
66
|
+
|
67
|
+
puts '2.7/ STORE : flush redis backend, just for test, and for idempotency (NEED a Redis installed) '
|
68
|
+
Circuits.store.flush
|
69
|
+
puts ''
|
70
|
+
|
71
|
+
# defining a circuit, config must be empty or override from default
|
72
|
+
puts '3.1/ CIRCUIT : registering a circuit by merge :'
|
73
|
+
Circuits.register circuit: :test, config: { notifiers: %i[prometheus mattermost], exceptions: [Errno::ECONNREFUSED, URI::InvalidURIError] }
|
74
|
+
puts ''
|
75
|
+
|
76
|
+
puts '3.2/ CIRCUIT : registering a circuit by block :'
|
77
|
+
Circuits.register circuit: :test2 do |spec|
|
78
|
+
spec.exceptions = [Errno::ECONNREFUSED]
|
79
|
+
end
|
80
|
+
puts ''
|
81
|
+
|
82
|
+
puts '3.3/ CIRCUIT : registering a circuit by default :'
|
83
|
+
Circuits.register circuit: :test3
|
84
|
+
puts ''
|
85
|
+
|
86
|
+
puts '3.4/ CIRCUITS : Circuits list'
|
87
|
+
Circuits.list.each do |circuit|
|
88
|
+
puts " * #{circuit}"
|
89
|
+
end
|
90
|
+
puts ''
|
91
|
+
|
92
|
+
puts '3.5/ CIRCUIT : display a circuit config :test3 :'
|
93
|
+
Circuits.get(circuit: :test3).each do |item, value|
|
94
|
+
puts " * #{item} : #{value}"
|
95
|
+
end
|
96
|
+
puts ''
|
97
|
+
|
98
|
+
puts '3.6/ CIRCUIT : update config of :test3 => :raise_on_opening == true :'
|
99
|
+
Circuits.update_config circuit: :test3, config: { raise_on_opening: true }
|
100
|
+
puts ''
|
101
|
+
|
102
|
+
puts '3.7/ CIRCUIT : display a circuit config :test3 after change :'
|
103
|
+
Circuits.get(circuit: :test3).each do |item, value|
|
104
|
+
puts " * #{item} : #{value}"
|
105
|
+
end
|
106
|
+
puts ''
|
107
|
+
|
108
|
+
puts '3.8/ unregister a circuit : :test2 :'
|
109
|
+
Circuits.unregister circuit: :test2
|
110
|
+
puts ''
|
111
|
+
|
112
|
+
puts '3.9/ CIRCUITS : Circuits list after unregister'
|
113
|
+
Circuits.list.each do |circuit|
|
114
|
+
puts " * #{circuit}"
|
115
|
+
end
|
116
|
+
puts ''
|
117
|
+
|
118
|
+
# Config an alternate logger
|
119
|
+
|
120
|
+
puts '4.1/ LOGGER : register a logger on file '
|
121
|
+
Circuits.loggers.register name: :perso, instance: ::Logger.new('/tmp/logfile.log')
|
122
|
+
puts ''
|
123
|
+
|
124
|
+
puts '4.2/ LOGGER : get the list of available loggers'
|
125
|
+
Circuits.loggers.list_available.each do |logger|
|
126
|
+
puts " * #{logger}"
|
127
|
+
end
|
128
|
+
puts ''
|
129
|
+
|
130
|
+
puts '4.3/ LOGGER : change logger to :perso'
|
131
|
+
Circuits.loggers.current = :perso
|
132
|
+
puts ''
|
133
|
+
|
134
|
+
# sample Mattermost notification
|
135
|
+
puts '5/ set notifier mattermost on dummy url, change with your slack or mattermost server'
|
136
|
+
Sc4ry::Notifiers.config name: :mattermost, config: { url: 'https://mattermost.mycorp.com', token: '<TOKEN>' }
|
137
|
+
puts ''
|
138
|
+
|
139
|
+
# sample loop
|
140
|
+
puts '6/ running circuits test, please wait ... (see /tmp/logfile.log for result)'
|
141
|
+
puts ' check endoint status for different result, you cloud use http://github.com/Ultragreen/MockWS for testing endpoint, on an other tty'
|
142
|
+
puts ' $ git clone https://github.com/Ultragreen/MockWS.git'
|
143
|
+
puts ' $ cd MockWS'
|
144
|
+
puts ' $ rackup'
|
145
|
+
begin
|
146
|
+
10.times do
|
147
|
+
sleep 1
|
148
|
+
Circuits.run circuit: :test do
|
149
|
+
# for the test choose or build an endpoint you must shutdown
|
150
|
+
puts RestClient.get('http://localhost:9292/test2/data')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
rescue Interrupt
|
154
|
+
puts 'Interrputed'
|
155
|
+
ensure
|
156
|
+
Circuits.store.flush
|
157
|
+
end
|
158
|
+
|
159
|
+
puts 'end'
|
data/sc4ry.gemspec
CHANGED
@@ -1,27 +1,31 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
|
-
spec.name =
|
5
|
-
spec.version =
|
6
|
-
spec.authors = [
|
7
|
-
spec.email = [
|
8
|
-
|
9
|
-
spec.summary = %q{Sc4Ry is Simple Circuitbreaker 4 RubY}
|
10
|
-
spec.description = %q{Sc4ry provide the design pattern Circuit breaker for your application.}
|
11
|
-
spec.homepage = "https://github.com/Ultragreen/sc4ry"
|
12
|
-
spec.license = "MIT"
|
13
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
4
|
+
spec.name = 'sc4ry'
|
5
|
+
spec.version = `cat VERSION`.chomp
|
6
|
+
spec.authors = ['Romain GEORGES']
|
7
|
+
spec.email = ['romain.georges@orange.com']
|
14
8
|
|
9
|
+
spec.summary = 'Sc4Ry is Simple Circuitbreaker 4 RubY'
|
10
|
+
spec.description = 'Sc4ry provide the design pattern Circuit breaker for your application.'
|
11
|
+
spec.homepage = 'https://github.com/Ultragreen/sc4ry'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
15
14
|
|
16
15
|
# Specify which files should be added to the gem when it is released.
|
17
16
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
18
|
-
spec.files
|
17
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
19
18
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
19
|
end
|
21
|
-
spec.require_paths = [
|
22
|
-
|
23
|
-
spec.add_dependency "prometheus-client", "~> 3.0"
|
24
|
-
spec.add_dependency "rest-client", "~> 2.1"
|
20
|
+
spec.require_paths = ['lib']
|
25
21
|
|
22
|
+
spec.add_dependency 'prometheus-client', '~> 3.0'
|
23
|
+
spec.add_dependency 'redis', '~> 4.6'
|
24
|
+
spec.add_dependency 'rest-client', '~> 2.1'
|
26
25
|
|
26
|
+
spec.add_development_dependency 'code_statistics', '~> 0.2.13'
|
27
|
+
spec.add_development_dependency 'rubocop', '~> 1.32'
|
28
|
+
spec.add_development_dependency 'yard', '~> 0.9.27'
|
29
|
+
spec.add_development_dependency 'yard-rspec', '~> 0.1'
|
30
|
+
spec.add_dependency 'version', '~> 1.1'
|
27
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sc4ry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Romain GEORGES
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prometheus-client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.6'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rest-client
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,76 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '2.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: code_statistics
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.2.13
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.2.13
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.32'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.32'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.9.27
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.9.27
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: version
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.1'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.1'
|
41
125
|
description: Sc4ry provide the design pattern Circuit breaker for your application.
|
42
126
|
email:
|
43
127
|
- romain.georges@orange.com
|
@@ -45,14 +129,17 @@ executables: []
|
|
45
129
|
extensions: []
|
46
130
|
extra_rdoc_files: []
|
47
131
|
files:
|
132
|
+
- ".github/workflows/main.yml"
|
48
133
|
- ".gitignore"
|
49
134
|
- ".rspec"
|
135
|
+
- ".rubocop.yml"
|
50
136
|
- Gemfile
|
51
137
|
- LICENSE.txt
|
52
138
|
- README.md
|
53
139
|
- Rakefile
|
140
|
+
- VERSION
|
54
141
|
- assets/images/logo_sc4ry.png
|
55
|
-
- assets/
|
142
|
+
- assets/images/sc4ry_workflow.png
|
56
143
|
- bin/console
|
57
144
|
- bin/setup
|
58
145
|
- lib/sc4ry.rb
|
@@ -60,6 +147,8 @@ files:
|
|
60
147
|
- lib/sc4ry/backends/memory.rb
|
61
148
|
- lib/sc4ry/backends/redis.rb
|
62
149
|
- lib/sc4ry/circuits.rb
|
150
|
+
- lib/sc4ry/config.rb
|
151
|
+
- lib/sc4ry/constants.rb
|
63
152
|
- lib/sc4ry/dependencies.rb
|
64
153
|
- lib/sc4ry/exceptions.rb
|
65
154
|
- lib/sc4ry/exporters/init.rb
|
@@ -71,12 +160,13 @@ files:
|
|
71
160
|
- lib/sc4ry/run_controller.rb
|
72
161
|
- lib/sc4ry/store.rb
|
73
162
|
- lib/sc4ry/version.rb
|
163
|
+
- samples/test.rb
|
74
164
|
- sc4ry.gemspec
|
75
165
|
homepage: https://github.com/Ultragreen/sc4ry
|
76
166
|
licenses:
|
77
167
|
- MIT
|
78
168
|
metadata: {}
|
79
|
-
post_install_message:
|
169
|
+
post_install_message:
|
80
170
|
rdoc_options: []
|
81
171
|
require_paths:
|
82
172
|
- lib
|
@@ -84,15 +174,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
174
|
requirements:
|
85
175
|
- - ">="
|
86
176
|
- !ruby/object:Gem::Version
|
87
|
-
version: 2.
|
177
|
+
version: 2.6.0
|
88
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
179
|
requirements:
|
90
180
|
- - ">="
|
91
181
|
- !ruby/object:Gem::Version
|
92
182
|
version: '0'
|
93
183
|
requirements: []
|
94
|
-
rubygems_version: 3.
|
95
|
-
signing_key:
|
184
|
+
rubygems_version: 3.2.3
|
185
|
+
signing_key:
|
96
186
|
specification_version: 4
|
97
187
|
summary: Sc4Ry is Simple Circuitbreaker 4 RubY
|
98
188
|
test_files: []
|
data/assets/logo_sc4ry.png
DELETED
Binary file
|