carnivore 0.2.16 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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