carnivore 0.2.16 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 011ab8b22ae76b8be44ce315fcf7a9b1a1a136c4
4
- data.tar.gz: aefffbceab3c592743e3a542cb5b226822cfaae1
3
+ metadata.gz: 95abd8e88a4967ca0085fbd0c14a5a768d0df98f
4
+ data.tar.gz: 5a34e744105ff3d482d8d98d5c2c1bba8c70a5f5
5
5
  SHA512:
6
- metadata.gz: 15f085834d83fc162c2f3f937e695cd7a4ebafa3896103b2d73455c067f64f8211e1a97526527263c3805917428c87cae6b6cbb0d2bf79cd36c1f0a17c8433d3
7
- data.tar.gz: 55dd49f607ce11a731c2d4155b3fbb758ebbf009c59917499e9222bc1df55cd1f0c5e6f67d197c5f4b99aab062adc46e070f4ec62e6062e172880805f55cca87
6
+ metadata.gz: f281d3203d532de93c3ff8164fd9ee25f390b82263759b6ca59a20a75c70a8ecd3a0c43aea349c3b6bfb1cb4a9b913b65aeddfff653439a8c250fda4062c8b37
7
+ data.tar.gz: c0a8cd07562ce92166f985007c6b3a053d73e10ad5055784971648d2689ffbefbb376aab6b878220ec82a5e52c1d21fa46dec34468ce20422642710b846d09bb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # v0.3.0
2
+ * Remove custom rolled configuration
3
+ * Auto define configuration when not set prior to start
4
+
1
5
  # v0.2.16
2
6
  * Log incoming messages at info level
3
7
  * Add Source#touch method
data/README.md CHANGED
@@ -16,8 +16,9 @@ stuff gets done. Super simple!
16
16
  3. Profit!
17
17
 
18
18
  ```ruby
19
+ require 'carnivore'
19
20
  Carnivore.configure do
20
- src = Source.build(:type => :test, :args => {})
21
+ src = Carnivore::Source.build(:type => :test, :args => {})
21
22
  src.add_callback(:print_message) do |msg|
22
23
  puts "Received message: #{msg}"
23
24
  end
@@ -111,4 +112,4 @@ end.start!
111
112
  ## Info
112
113
 
113
114
  * Repository: https://github.com/carnivore-rb/carnivore
114
- * IRC: Freenode @ #carnivore
115
+ * IRC: Freenode @ #carnivore
data/carnivore.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.license = 'Apache 2.0'
12
12
  s.require_path = 'lib'
13
13
  s.add_dependency 'celluloid'
14
- s.add_dependency 'mixlib-config'
14
+ s.add_dependency 'bogo-config'
15
15
  s.add_dependency 'multi_json'
16
16
  s.add_dependency 'hashie'
17
17
  s.files = Dir['lib/**/*'] + %w(carnivore.gemspec README.md CHANGELOG.md)
data/lib/carnivore.rb CHANGED
@@ -2,12 +2,13 @@
2
2
  autoload :Celluloid, 'celluloid'
3
3
  autoload :MultiJson, 'multi_json'
4
4
 
5
+ require 'bogo-cli'
6
+ require 'bogo-config'
5
7
  require 'carnivore/runner'
6
8
  require 'carnivore/version'
7
9
 
8
10
  # Message consumer and processor
9
11
  module Carnivore
10
- autoload :Config, 'carnivore/config'
11
12
  autoload :Callback, 'carnivore/callback'
12
13
  autoload :Container, 'carnivore/container'
13
14
  autoload :Error, 'carnivore/errors'
@@ -17,5 +18,3 @@ module Carnivore
17
18
  autoload :Utils, 'carnivore/utils'
18
19
  autoload :Version, 'carnivore/version'
19
20
  end
20
-
21
- autoload :Smash, 'carnivore/utils/smash'
@@ -70,7 +70,7 @@ module Carnivore
70
70
  debug "Invalid message for this callback #{message})"
71
71
  end
72
72
  rescue => e
73
- error "[callback: #{self}, source: #{message[:source]}, message: #{message[:message].object_id}]: #{e.class} - #{e}"
73
+ error "[callback: #{self}, source: #{message[:source]}, message: #{message}]: #{e.class} - #{e}"
74
74
  debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}"
75
75
  nil
76
76
  end
@@ -3,6 +3,24 @@ require 'carnivore'
3
3
  module Carnivore
4
4
  class << self
5
5
 
6
+ # Sets the global configuration
7
+ #
8
+ # @param path [String] configuration file or directory
9
+ # @return [Bogo::Config]
10
+ def configure!(*args)
11
+ if(defined?(Carnivore::Config))
12
+ if(!args.include?(:verify) && !args.include?(:force))
13
+ raise 'Global configuration has already been set!'
14
+ end
15
+ if(args.include?(:force))
16
+ Carnivore.send(:remove_const, :Config)
17
+ end
18
+ end
19
+ unless(defined?(Carnivore::Config))
20
+ Carnivore.const_set(:Config, Bogo::Config.new(args.first))
21
+ end
22
+ end
23
+
6
24
  # Add configuration to Carnivore
7
25
  #
8
26
  # @yield block of configuration
@@ -18,6 +36,7 @@ module Carnivore
18
36
  supervisor = nil
19
37
  begin
20
38
  require 'carnivore/supervisor'
39
+ configure!(:verify)
21
40
  supervisor = Carnivore::Supervisor.build!
22
41
  Celluloid::Logger.info 'Initializing all registered sources.'
23
42
  [].tap do |register|
@@ -1,136 +1,3 @@
1
- require 'hashie'
1
+ require 'carnivore'
2
2
 
3
- module Carnivore
4
- module Utils
5
-
6
- # Customized Hash
7
- class Smash < Hash
8
- include Hashie::Extensions::IndifferentAccess
9
- include Hashie::Extensions::MergeInitializer
10
- include Hashie::Extensions::DeepMerge
11
- include Hashie::Extensions::Coercion
12
-
13
- coerce_value Hash, Smash
14
-
15
- # Create new instance
16
- #
17
- # @param args [Object] argument list
18
- def initialize(*args)
19
- base = nil
20
- if(args.first.is_a?(::Hash))
21
- base = args.shift
22
- end
23
- super *args
24
- if(base)
25
- self.replace(base.to_smash)
26
- end
27
- end
28
-
29
- def merge!(hash)
30
- hash = hash.to_smash unless hash.is_a?(::Smash)
31
- super(hash)
32
- end
33
-
34
- # Get value at given path
35
- #
36
- # @param args [String, Symbol] key path to walk
37
- # @return [Object, NilClass]
38
- def retrieve(*args)
39
- args.inject(self) do |memo, key|
40
- if(memo.is_a?(Hash))
41
- memo.to_smash[key]
42
- else
43
- nil
44
- end
45
- end
46
- end
47
- alias_method :get, :retrieve
48
-
49
- # Fetch value at given path or return a default value
50
- #
51
- # @param args [String, Symbol, Object] key path to walk. last value default to return
52
- # @return [Object] value at key or default value
53
- def fetch(*args)
54
- default_value = args.pop
55
- retrieve(*args) || default_value
56
- end
57
-
58
- # Set value at given path
59
- #
60
- # @param args [String, Symbol, Object] key path to walk. set last value to given path
61
- # @return [Object] value set
62
- def set(*args)
63
- unless(args.size > 1)
64
- raise ArgumentError.new 'Set requires at least one key and a value'
65
- end
66
- value = args.pop
67
- set_key = args.pop
68
- leaf = args.inject(self) do |memo, key|
69
- unless(memo[key].is_a?(Hash))
70
- memo[key] = Smash.new
71
- end
72
- memo[key]
73
- end
74
- leaf[set_key] = value
75
- value
76
- end
77
-
78
- # Convert to Hash
79
- #
80
- # @return [Hash]
81
- def to_hash
82
- self.to_type_converter(::Hash, :to_hash)
83
- end
84
-
85
- end
86
- end
87
-
88
- end
89
-
90
- # Hook helper into toplevel `Hash`
91
- class Hash
92
-
93
- # Convert to Smash
94
- #
95
- # @return [Smash]
96
- def to_smash
97
- self.to_type_converter(::Smash, :to_smash)
98
- end
99
- alias_method :hulk_smash, :to_smash
100
-
101
- protected
102
-
103
- # Convert to type
104
- #
105
- # @param type [Class] hash type
106
- # @param convert_call [Symbol] builtin hash convert
107
- # @return [Smash]
108
- def to_type_converter(type, convert_call)
109
- type.new.tap do |smash|
110
- self.each do |k,v|
111
- smash[k.is_a?(Symbol) ? k.to_s : k] = smash_conversion(v, convert_call)
112
- end
113
- end
114
- end
115
-
116
- # Convert object to smash if applicable
117
- #
118
- # @param obj [Object]
119
- # @param convert_call [Symbol] builtin hash convert
120
- # @return [Smash, Object]
121
- def smash_conversion(obj, convert_call)
122
- case obj
123
- when Hash
124
- obj.send(convert_call)
125
- when Array
126
- obj.map do |i|
127
- smash_conversion(i, convert_call)
128
- end
129
- else
130
- obj
131
- end
132
- end
133
-
134
- end
135
-
136
- Smash = Carnivore::Utils::Smash
3
+ Carnivore::Utils::Smash = Bogo::Smash
@@ -1,4 +1,4 @@
1
1
  module Carnivore
2
2
  # Current version of library
3
- VERSION = Gem::Version.new('0.2.16')
3
+ VERSION = Gem::Version.new('0.3.0')
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carnivore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.16
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2015-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: celluloid
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: mixlib-config
28
+ name: bogo-config
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -77,7 +77,6 @@ files:
77
77
  - carnivore.gemspec
78
78
  - lib/carnivore.rb
79
79
  - lib/carnivore/callback.rb
80
- - lib/carnivore/config.rb
81
80
  - lib/carnivore/container.rb
82
81
  - lib/carnivore/errors.rb
83
82
  - lib/carnivore/message.rb
@@ -1,92 +0,0 @@
1
- require 'mixlib/config'
2
- require 'carnivore'
3
-
4
- module Carnivore
5
- # Configuration helper
6
- class Config
7
-
8
- extend Mixlib::Config
9
-
10
- class << self
11
-
12
- # Set/get automatic symbolization of hash keys
13
- #
14
- # @param v [Object] truthy or falsey value
15
- # @return [TrueClass, FalseClass]
16
- # v:: Boolean value
17
- def auto_symbolize(v=nil)
18
- unless(v.nil?)
19
- @hash_symbolizer = !!v
20
- end
21
- @hash_symbolizer.nil? ? true : @hash_symbolizer
22
- end
23
-
24
- # Merge provided args into configuration
25
- #
26
- # @param args [Hash]
27
- # @return [self]
28
- def configure(args)
29
- build(args[:config_path]) if args[:config_path]
30
- self.merge!(args)
31
- self
32
- end
33
-
34
- # Populates the configuration
35
- #
36
- # @param path_or_hash [String, Hash] Path to JSON file or configuration hash
37
- # @return [self]
38
- def build(path_or_hash)
39
- if(path_or_hash.is_a?(Hash))
40
- conf = path_or_hash
41
- else
42
- if(File.directory?(path_or_hash.to_s))
43
- files = Dir.new(path_or_hash.to_s).find_all do |f|
44
- File.extname(f) == '.json'
45
- end.sort
46
- conf = files.inject(Smash.new) do |memo, path|
47
- memo.deep_merge!(
48
- MultiJson.load(
49
- File.read(
50
- File.join(
51
- path_or_hash.to_s, path
52
- )
53
- )
54
- ).to_smash
55
- )
56
- end
57
- self.config_path = path_or_hash
58
- elsif(File.exists?(path_or_hash.to_s))
59
- conf = MultiJson.load(File.read(path_or_hash))
60
- self.config_path = path_or_hash
61
- else
62
- raise "Failed to load configuration file: #{path_or_hash}"
63
- end
64
- end
65
- conf.each do |k,v|
66
- self.send(k, v)
67
- end
68
- self
69
- end
70
-
71
- # Fetch value from configuration
72
- #
73
- # @param ary [String, Symbol] list of strings or symbols as hash path
74
- # @return [Object] return value or nil
75
- # @example
76
- # Config.build(:my_app => {:port => 30})
77
- # Config.get(:my_app, :port) => 30
78
- # Config.get(:my_app, :host) => nil
79
- # Config.get(:other_app, :port) => nil
80
- # Config.get(:my_app, :mail, :server) => nil
81
- def get(*ary)
82
- value = Carnivore::Utils.retrieve(self, *ary)
83
- if(value.is_a?(Hash) && auto_symbolize)
84
- Smash.new(value)
85
- else
86
- value
87
- end
88
- end
89
-
90
- end
91
- end
92
- end