log4r-sequel 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 22db2c5c31f8fbb61fac792ab52976a26e6e0984
4
+ data.tar.gz: 2ea605f5b25ebc37a19c912403e6e502ca7751a4
5
+ SHA512:
6
+ metadata.gz: eb146d274d9e4bddeb666218f54edb4bda8d26fd95d5b36479c05f42727fb70ea7ce341d1a293b8d089723eb101e897d094dea0fd3720c54933a63ae9cc5f053
7
+ data.tar.gz: a791ae9d859a3854a88b38f174e8774d2ec53f577c5aa3d291fb4022a1a87c03d2f69053f76101ba8bc8be3a01c3bc0e2cde389819df095507cbe9dd9989f836
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 2.1.0
6
+ - 2.2.2
7
+ - 2.3.0
8
+
9
+ notifications:
10
+ email: false
11
+
12
+ bundler_args: --without test --jobs 3 --retry 3
13
+ script: bundle exec rake test
data/Gemfile ADDED
@@ -0,0 +1,29 @@
1
+ ## travis really doesn't like this
2
+ #ruby '2.0.0'
3
+
4
+ source 'https://rubygems.org'
5
+
6
+ gem 'log4r', '~> 1.1.9', '> 1.1'
7
+
8
+ # ugh this is so stupid - jeweler pulls in the latest version of this -
9
+ # through it's own dependency, causing a hard requirement on ruby 2.3.x,
10
+ # locking it down this way
11
+ gem 'rack', '= 1.6.4'
12
+
13
+ gem 'sequel', '~> 4.6', '>= 4.6.0'
14
+
15
+ # making ruby 2.3.0 happy
16
+ gem 'hoe', '~> 3.15', '>= 3.15.1'
17
+
18
+ group :development do
19
+ gem 'jeweler', '~> 2.0', '>= 2.0.0'
20
+ gem 'test-unit', '~> 2.0', '>= 2.0.0'
21
+ end
22
+
23
+ group :sqlite do
24
+ gem 'sqlite3', '~> 1.3', '>= 1.3.11'
25
+ end
26
+
27
+ group :postgres do
28
+ gem 'pg', '~> 0.18', '>= 0.18.4'
29
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,70 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.4.0)
5
+ builder (3.2.2)
6
+ descendants_tracker (0.0.4)
7
+ thread_safe (~> 0.3, >= 0.3.1)
8
+ faraday (0.9.2)
9
+ multipart-post (>= 1.2, < 3)
10
+ git (1.3.0)
11
+ github_api (0.13.1)
12
+ addressable (~> 2.4.0)
13
+ descendants_tracker (~> 0.0.4)
14
+ faraday (~> 0.8, < 0.10)
15
+ hashie (>= 3.4)
16
+ multi_json (>= 1.7.5, < 2.0)
17
+ oauth2
18
+ hashie (3.4.4)
19
+ highline (1.7.8)
20
+ hoe (3.15.1)
21
+ rake (>= 0.8, < 12.0)
22
+ jeweler (2.0.1)
23
+ builder
24
+ bundler (>= 1.0)
25
+ git (>= 1.2.5)
26
+ github_api
27
+ highline (>= 1.6.15)
28
+ nokogiri (>= 1.5.10)
29
+ rake
30
+ rdoc
31
+ json (1.8.3)
32
+ jwt (1.5.1)
33
+ log4r (1.1.10)
34
+ mini_portile2 (2.0.0)
35
+ multi_json (1.12.1)
36
+ multi_xml (0.5.5)
37
+ multipart-post (2.0.0)
38
+ nokogiri (1.6.7.2)
39
+ mini_portile2 (~> 2.0.0.rc2)
40
+ oauth2 (1.1.0)
41
+ faraday (>= 0.8, < 0.10)
42
+ jwt (~> 1.0, < 1.5.2)
43
+ multi_json (~> 1.3)
44
+ multi_xml (~> 0.5)
45
+ rack (>= 1.2, < 3)
46
+ pg (0.18.4)
47
+ rack (1.6.4)
48
+ rake (11.2.2)
49
+ rdoc (4.2.2)
50
+ json (~> 1.4)
51
+ sequel (4.37.0)
52
+ sqlite3 (1.3.11)
53
+ test-unit (2.0.0.0)
54
+ thread_safe (0.3.5)
55
+
56
+ PLATFORMS
57
+ ruby
58
+
59
+ DEPENDENCIES
60
+ hoe (~> 3.15, >= 3.15.1)
61
+ jeweler (~> 2.0, >= 2.0.0)
62
+ log4r (~> 1.1.9, > 1.1)
63
+ pg (~> 0.18, >= 0.18.4)
64
+ rack (= 1.6.4)
65
+ sequel (~> 4.6, >= 4.6.0)
66
+ sqlite3 (~> 1.3, >= 1.3.11)
67
+ test-unit (~> 2.0, >= 2.0.0)
68
+
69
+ BUNDLED WITH
70
+ 1.12.5
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # log4r-sequel
2
+ Log4r outputter to a Sequel database handle
3
+
4
+ ## usage
5
+
6
+ ### pre-built gem installation (stable)
7
+
8
+ [![Gem Version](https://badge.fury.io/rb/log4r-sequel.png)](https://rubygems.org/gems/log4r-sequel)
9
+
10
+ ```sh
11
+ gem install log4r-sequel
12
+ irb
13
+ ...
14
+ irb(main):001:0> require 'log4r/outputter/sequeloutputter'
15
+ => true
16
+ irb(main):002:0> logger = Log4r::Logger.new('foo')
17
+ => #<Log4r::Logger:0x007f889b056df8 @fullname="foo" ...>
18
+ ```
19
+
20
+
21
+ ### from-source installation (latest)
22
+
23
+ [![build status](https://travis-ci.org/chorankates/log4r-sequel.svg)](https://travis-ci.org/chorankates/log4r-sequel)
24
+
25
+ ```sh
26
+ git clone https://github.com/chorankates/log4r-sequel.git
27
+ cd log4r-sequel
28
+ rake clean build
29
+ gem install --local pkg/log4r-sequel*.gem
30
+ irb
31
+ ...
32
+ irb(main):001:0> require 'log4r/outputter/sequeloutputter'
33
+ => true
34
+ ```
35
+
36
+ ## supported databases
37
+ * sqlite3
38
+ * Postgres
39
+
40
+ ## TODO
41
+ * allow database name to be semi-dynamically generated - via YAML config, not just by passing the hash directly
42
+ * tests
43
+ * unit tests
44
+ * marketing
45
+ * screencast / sample output in README.md
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ require 'jeweler'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+
6
+ CLEAN.include('**/*.sqlite')
7
+ CLEAN.include('pkg/*')
8
+
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = 'log4r-sequel'
11
+ gem.summary = 'Log4r::Outputter::Sequel'
12
+ gem.description = 'Log4r::Outputter that writes to a Sequel database'
13
+ gem.email = ['conor.code@gmail.com']
14
+ gem.homepage = 'http://github.com/chorankates/log4r-sequel'
15
+ gem.authors = ['Conor Horan-Kates']
16
+ gem.licenses = 'MIT'
17
+
18
+ gem.files.exclude 'examples/*'
19
+ gem.files.exclude 'pkg/*'
20
+ end
21
+ Jeweler::RubygemsDotOrgTasks.new
22
+
23
+ namespace :test do
24
+
25
+ Rake::TestTask.new do |t|
26
+ t.name = 'functional'
27
+ t.libs << 'lib'
28
+ t.test_files = FileList['test/functional/**/test_*.rb']
29
+ #t.verbose = true
30
+ end
31
+
32
+ end
33
+ desc 'run all tests'
34
+ task :test => ['clean', 'test:functional'] do; end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH << sprintf('%s/../lib', File.dirname(__FILE__))
2
+
3
+ #require 'log4r-sequel'
4
+ require 'log4r/outputter/sequeloutputter'
5
+
6
+ file = sprintf('%s/log4r-postgres.yaml', File.dirname(__FILE__))
7
+ Log4r::YamlConfigurator.load_yaml_file(file)
8
+
9
+ logger = Log4r::Logger.get('bar')
10
+
11
+ [logger].each do |l|
12
+ ## log some garbage
13
+ l.debug('this is a debug message')
14
+ l.info('this is an info message')
15
+ l.warn('this is a warning')
16
+ l.error('this is an error')
17
+ l.fatal('this is a fatal')
18
+ end
@@ -0,0 +1,22 @@
1
+ $LOAD_PATH << sprintf('%s/../lib', File.dirname(__FILE__))
2
+
3
+ require 'sqlite3'
4
+
5
+ #require 'log4r-sequel'
6
+ require 'log4r/outputter/sequeloutputter'
7
+ require 'log4r/yamlconfigurator'
8
+
9
+ ## instantiate a logger following the log4r pattern
10
+ file = sprintf('%s/log4r-sqlite.yaml', File.dirname(__FILE__))
11
+ Log4r::YamlConfigurator.load_yaml_file(file)
12
+
13
+ logger = Log4r::Logger.get('foo')
14
+
15
+ [logger].each do |l|
16
+ ## log some garbage
17
+ l.debug('this is a debug message')
18
+ l.info('this is an info message')
19
+ l.warn('this is a warning')
20
+ l.error('this is an error')
21
+ l.fatal('this is a fatal')
22
+ end
@@ -0,0 +1,53 @@
1
+ ---
2
+ log4r_config:
3
+ loggers:
4
+ - name: 'bar'
5
+ outputters:
6
+ - sequel
7
+ - stdout
8
+ outputters:
9
+ # not needed, but feedback is useful
10
+ - type: StdoutOutputter
11
+ name: stdout
12
+ formatter:
13
+ type: PatternFormatter
14
+ date_pattern: '%Y/%m/%d %H:%M.%s'
15
+ pattern: '%d | %C | %l | %m'
16
+
17
+ - type: SequelOutputter
18
+ # traditional Log4r settings
19
+ name: sequel
20
+ level: DEBUG
21
+ formatter:
22
+ type: PatternFormatter
23
+ date_pattern: '%Y/%m/%d %H:%M.%s'
24
+ pattern: '%d!@#$%l!@#$%C!@#$%c!@#$%h!@#$%p!@#$%m' # kitchen sink
25
+ # log4r-sequel settings
26
+ engine: postgres
27
+ server: localhost
28
+ port: 5432
29
+ database: logs
30
+ table: logs
31
+ username: postgres
32
+ password: postgres
33
+ delimiter: '!@#$' # this is used to determine columns needed based on log4 configuration
34
+ map:
35
+ 0: 'date'
36
+ 1: 'level'
37
+ 2: 'class'
38
+ 3: 'relative_class'
39
+ 4: 'thread'
40
+ 5: 'pid'
41
+ 6: 'message'
42
+
43
+ # truncated map from http://log4r.rubyforge.org/rdoc/Log4r/PatternFormatter.html
44
+ # %c - event short name
45
+ # %C - event fullname
46
+ # %d - date
47
+ # %g - Global Diagnostic Context (GDC)
48
+ # %t - trace
49
+ # %m - message
50
+ # %h - thread name
51
+ # %p - process ID aka PID
52
+ # %M - formatted message
53
+ # %l - Level in string form
@@ -0,0 +1,46 @@
1
+ ---
2
+ log4r_config:
3
+ loggers:
4
+ - name: 'foo'
5
+ outputters:
6
+ - sequel
7
+ - stdout
8
+ outputters:
9
+ # not needed, but feedback is useful
10
+ - type: StdoutOutputter
11
+ name: stdout
12
+ formatter:
13
+ type: PatternFormatter
14
+ date_pattern: '%Y/%m/%d %H:%M.%s'
15
+ pattern: '%d | %C | %l | %m'
16
+
17
+ - type: SequelOutputter
18
+ # traditional Log4r settings
19
+ name: sequel
20
+ level: DEBUG
21
+ formatter:
22
+ type: PatternFormatter
23
+ date_pattern: '%Y/%m/%d %H:%M.%s'
24
+ pattern: '%d!@#$%C!@#$%l!@#$%m' # date|level|event/class fullname|message
25
+ # log4r-sequel settings
26
+ engine: sqlite
27
+ file: log.sqlite
28
+ table: logs
29
+ delimiter: '!@#$' # this is used to determine columns needed based on log4 configuration
30
+ map:
31
+ 0: 'date'
32
+ 1: 'level'
33
+ 2: 'class'
34
+ 3: 'message'
35
+
36
+ # truncated map from http://log4r.rubyforge.org/rdoc/Log4r/PatternFormatter.html
37
+ # %c - event short name
38
+ # %C - event fullname
39
+ # %d - date
40
+ # %g - Global Diagnostic Context (GDC)
41
+ # %t - trace
42
+ # %m - message
43
+ # %h - thread name
44
+ # %p - process ID aka PID
45
+ # %M - formatted message
46
+ # %l - Level in string form
@@ -0,0 +1,127 @@
1
+ require 'log4r'
2
+ require 'log4r/yamlconfigurator'
3
+ require 'sequel'
4
+ require 'yaml'
5
+
6
+ # TODO should we move this to ../logger.rb
7
+ # TODO .. or should we remove this entirely? it was implemented to let us call connect/configure, but since we do that in initiliaze now, maybe we just pull it
8
+ class Log4r::Logger
9
+ # +method+ String or Symbol representing the name of the method in the Log4r::Outputter::SequelOutputter class you want to use
10
+ # +parameters+ arbitrary data type to be passed to :methods
11
+ def sequel(method, parameters = { })
12
+ # TODO support methods that take more than one parameter
13
+ self.outputters.each do |op|
14
+ next unless op.is_a?(SequelOutputter)
15
+ return op.send(method.to_sym, parameters)
16
+ end
17
+ end
18
+
19
+ # no parameters, returns the first Log4r::Outputter::Sequel object
20
+ # TODO is there ever a case where there would be more than one?
21
+ def get_outputter
22
+ self.outputters.each do |op|
23
+ next unless op.is_a?(SequelOutputter)
24
+ return op
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ class SequelOutputter < Log4r::Outputter
31
+
32
+ KNOWN_ENGINES = [
33
+ :postgres,
34
+ :sqlite,
35
+ ]
36
+
37
+ attr_reader :database, :delimiter, :engine, :file, :map, :table
38
+ attr_accessor :dbh
39
+
40
+ def initialize(name, hash)
41
+ super(name, hash) # make us a real Log4r::Outputter object
42
+ dbh = configure(hash) # validate settings passed
43
+ connect(dbh) # actually connect to the DBH
44
+ end
45
+
46
+ # +input+ Hash of configuration options
47
+ def configure(input)
48
+ config = input
49
+
50
+ # convert all keys to symbols
51
+ new_config = Hash.new
52
+ config.keys.each do |key|
53
+ new_config[key.to_sym] = config[key]
54
+ end
55
+ config = new_config
56
+
57
+ @engine = config[:engine].to_sym
58
+
59
+ # error checking on table/column settings
60
+ @table = config[:table].to_sym
61
+ @map = config[:map]
62
+ @delimiter = config[:delimiter]
63
+ [@delimiter, @map, @table].each do |required|
64
+ raise Log4r::ConfigError.new(sprintf("required '%s' key missing from configuration", required)) if required.nil?
65
+ end
66
+
67
+ if @engine.eql?(:postgres)
68
+ @database = config[:database]
69
+ @file = nil
70
+ server = config[:server]
71
+ port = config[:port]
72
+ username = config[:username]
73
+ password = config[:password]
74
+ @dbh = Sequel.connect(sprintf('postgres://%s:%s@%s:%s/%s', username, password, server, port, @database))
75
+ elsif @engine.eql?(:sqlite)
76
+ @database = nil # sqlite has one DB per file
77
+ @file = config[:file]
78
+ @dbh = Sequel.connect(sprintf('sqlite://%s', @file))
79
+ else
80
+ raise Log4r::ConfigError.new(sprintf('unable to use engine[%s], allowed[%s]', @engine, KNOWN_ENGINES))
81
+ end
82
+
83
+ @dbh
84
+ end
85
+
86
+ # +dbh+ a Sequel::Database handle
87
+ ## while not really supported, if you take care of the database/table creation, you could hack it in here by <your_logger>.outputters[<sequel outputter>].connect(<dbh>)
88
+ def connect(dbh)
89
+ raise StandardError.new(sprintf('invalid parameter class[%s] expecting[Sequel::Database]', dbh.class)) unless dbh.is_a?(Sequel::Database)
90
+
91
+ @dbh = dbh
92
+
93
+ # idempotently create table/columns
94
+ initialize_db
95
+ end
96
+
97
+ def connected?
98
+ # this is sufficient since we throw an exception during #connect if we don't get a good handle
99
+ ! @dbh.nil?
100
+ end
101
+
102
+ private
103
+
104
+ def write(data)
105
+ raise StandardError.new(sprintf('%s is not connected, run %s.connect(yaml_file)', self.class, self.class)) unless connected?
106
+ # INSERT INTO `logs`(`id`,`date`,`level`,`class`,`message`) VALUES (1,NULL,NULL,NULL,NULL);
107
+ tokens = data.split(@delimiter)
108
+ hash = Hash.new
109
+
110
+ tokens.each_with_index do |token, i|
111
+ hash[@map[i].to_sym] = token
112
+ end
113
+
114
+ @dbh[@table].insert(hash)
115
+ end
116
+
117
+ def initialize_db
118
+ map = @map # we're in a different class in the block below, can't access
119
+ @dbh.create_table? @table do
120
+ primary_key :id
121
+ map.values.each do |v|
122
+ String v.to_sym
123
+ end
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,49 @@
1
+ $LOAD_PATH << sprintf('%s/../../lib', File.dirname(__FILE__))
2
+ require 'log4r/outputter/sequeloutputter'
3
+
4
+
5
+ require 'test/unit'
6
+
7
+ class TestSqlite < Test::Unit::TestCase
8
+
9
+ def setup
10
+ @good_config = sprintf('%s/../log4r-sqlite_test.yaml', File.expand_path(File.dirname(__FILE__)))
11
+ @table = :logs
12
+ end
13
+
14
+ def teardown
15
+ # TODO remove the database.. assume it's just '*.sqlite' in this path?
16
+ end
17
+
18
+
19
+ def test_happy_yaml
20
+ file = @good_config
21
+ Log4r::YamlConfigurator.load_yaml_file(file)
22
+
23
+ logger = nil
24
+
25
+ assert_nothing_raised do
26
+ logger = Log4r::Logger.get('test')
27
+ end
28
+
29
+ assert_not_nil(logger)
30
+ assert_equal(0, logger.get_outputter.dbh[@table].count)
31
+
32
+ assert_nothing_raised do
33
+ logger.debug('this is a debug message')
34
+ logger.info('this is an info message')
35
+ logger.warn('this is a warning')
36
+ logger.error('this is an error')
37
+ logger.fatal('this is a fatal')
38
+ end
39
+
40
+ assert_not_equal(0, logger.get_outputter.dbh[@table].count)
41
+
42
+ end
43
+
44
+ def test_sad_config
45
+ # TODO pass in bad configs as hashes
46
+ end
47
+
48
+
49
+ end
@@ -0,0 +1,46 @@
1
+ ---
2
+ log4r_config:
3
+ loggers:
4
+ - name: 'test'
5
+ outputters:
6
+ - sequel
7
+ - stdout
8
+ outputters:
9
+ # not needed, but feedback is useful
10
+ - type: StdoutOutputter
11
+ name: stdout
12
+ formatter:
13
+ type: PatternFormatter
14
+ date_pattern: '%Y/%m/%d %H:%M.%s'
15
+ pattern: '%d | %C | %l | %m'
16
+
17
+ - type: SequelOutputter
18
+ # traditional Log4r settings
19
+ name: sequel
20
+ level: DEBUG
21
+ formatter:
22
+ type: PatternFormatter
23
+ date_pattern: '%Y/%m/%d %H:%M.%s'
24
+ pattern: '%d!@#$%C!@#$%l!@#$%m' # date|level|event/class fullname|message
25
+ # log4r-sequel settings
26
+ engine: sqlite
27
+ file: log.sqlite
28
+ table: logs
29
+ delimiter: '!@#$' # this is used to determine columns needed based on log4 configuration
30
+ map:
31
+ 0: 'date'
32
+ 1: 'level'
33
+ 2: 'class'
34
+ 3: 'message'
35
+
36
+ # truncated map from http://log4r.rubyforge.org/rdoc/Log4r/PatternFormatter.html
37
+ # %c - event short name
38
+ # %C - event fullname
39
+ # %d - date
40
+ # %g - Global Diagnostic Context (GDC)
41
+ # %t - trace
42
+ # %m - message
43
+ # %h - thread name
44
+ # %p - process ID aka PID
45
+ # %M - formatted message
46
+ # %l - Level in string form
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: log4r-sequel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Conor Horan-Kates
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: log4r
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>'
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.9
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>'
28
+ - !ruby/object:Gem::Version
29
+ version: '1.1'
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.9
33
+ - !ruby/object:Gem::Dependency
34
+ name: rack
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.6.4
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '='
45
+ - !ruby/object:Gem::Version
46
+ version: 1.6.4
47
+ - !ruby/object:Gem::Dependency
48
+ name: sequel
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 4.6.0
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: '4.6'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: 4.6.0
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: '4.6'
67
+ - !ruby/object:Gem::Dependency
68
+ name: hoe
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: 3.15.1
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '3.15'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 3.15.1
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: '3.15'
87
+ - !ruby/object:Gem::Dependency
88
+ name: jeweler
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 2.0.0
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.0
104
+ - - ~>
105
+ - !ruby/object:Gem::Version
106
+ version: '2.0'
107
+ - !ruby/object:Gem::Dependency
108
+ name: test-unit
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - '>='
112
+ - !ruby/object:Gem::Version
113
+ version: 2.0.0
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: '2.0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: 2.0.0
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: '2.0'
127
+ description: Log4r::Outputter that writes to a Sequel database
128
+ email:
129
+ - conor.code@gmail.com
130
+ executables: []
131
+ extensions: []
132
+ extra_rdoc_files:
133
+ - README.md
134
+ files:
135
+ - .travis.yml
136
+ - Gemfile
137
+ - Gemfile.lock
138
+ - README.md
139
+ - Rakefile
140
+ - VERSION
141
+ - example/log2postgres.rb
142
+ - example/log2sqlite.rb
143
+ - example/log4r-postgres.yaml
144
+ - example/log4r-sqlite.yaml
145
+ - lib/log4r/outputter/sequeloutputter.rb
146
+ - test/functional/test_sqlite.rb
147
+ - test/log4r-sqlite_test.yaml
148
+ homepage: http://github.com/chorankates/log4r-sequel
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.4.8
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Log4r::Outputter::Sequel
172
+ test_files: []