Class: Cosmo::Config
- Inherits:
-
Hash
- Object
- Hash
- Cosmo::Config
- Extended by:
- Forwardable
- Defined in:
- lib/cosmo/config.rb
Constant Summary collapse
- NANO =
1_000_000_000- DEFAULT_PATH =
"config/cosmo.yml"
Class Method Summary collapse
- .deliver_policy(start_position) ⇒ Object
- .instance ⇒ Object
- .internal ⇒ Object
-
.normalize!(config) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity.
- .parse_file(path) ⇒ Object
Instance Method Summary collapse
Class Method Details
.deliver_policy(start_position) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/cosmo/config.rb', line 43 def self.deliver_policy(start_position) case start_position when "last", :last { deliver_policy: "last" } when "new", :new { deliver_policy: "new" } when Time { deliver_policy: "by_start_time", opt_start_time: start_position.iso8601 } when String { deliver_policy: "by_start_time", opt_start_time: start_position } else { deliver_policy: "all" } end end |
.instance ⇒ Object
58 59 60 |
# File 'lib/cosmo/config.rb', line 58 def self.instance @instance ||= new end |
.internal ⇒ Object
62 63 64 |
# File 'lib/cosmo/config.rb', line 62 def self.internal @internal ||= {} end |
.normalize!(config) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/cosmo/config.rb', line 21 def self.normalize!(config) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity Utils::Hash.symbolize_keys!(config) config[:consumers]&.each_key do |name| config[:consumers][name].each do |stream_name, c| next unless c c[:subject] = format(c[:subject], { name: stream_name }) if c[:subject] c[:subjects] = c[:subjects].map { |s| format(s, name: stream_name) } if c[:subjects] end end config[:setup]&.each_key do |type| config[:setup][type]&.each_key do |name| c = config[:setup][type][name] c[:max_age] = c[:max_age].to_i * NANO if c[:max_age] c[:duplicate_window] = c[:duplicate_window].to_i * NANO if c[:duplicate_window] c[:subjects] = c[:subjects].map { |s| format(s, name: name) } if c[:subjects] end end end |
.parse_file(path) ⇒ Object
17 18 19 |
# File 'lib/cosmo/config.rb', line 17 def self.parse_file(path) YAML.load_file(path, aliases: true).tap { normalize!(_1) } end |