lines 0.1.19 → 0.1.20
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 +8 -8
- data/.gitignore +1 -0
- data/lib/lines.rb +39 -28
- data/lib/lines/version.rb +1 -1
- data/spec/lines_spec.rb +69 -38
- metadata +2 -2
- data/Gemfile.lock +0 -35
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                NGU4YzQzOTg2NjJlNWFjNjA2ZDliYzEzYTRkMDE3OWJjZGRjZmI0NQ==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                NzIzODU1MzljMTg5N2I1MzVhMjdlN2EwOTE4YmVlY2ZlMjE4NDM4Yg==
         | 
| 7 7 | 
             
            !binary "U0hBNTEy":
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                YmQ0MGI3ODU4ZWJhNDM1NzA5ZDlmMWI2NjNiMmFjMDQ2YjZjZDExZjExMjk4
         | 
| 10 | 
            +
                MDFlZWQyMmRmY2IxZjY4NDc1ODljZmI3NmYwZTkzZjBiYjUwZWY0OWI4MjU4
         | 
| 11 | 
            +
                ZDE3NThhMDhhMWY5NTlkYWZhY2M3YjcwMjZhY2Q2MzlhZDNlNjE=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                OTg1YjllMzkyNjMzNmIwZjdmYTU2MDQzZmIzNmNmY2IyOTE5ZTJiNDkwYWRi
         | 
| 14 | 
            +
                M2U1YWE5OWEzNjk5YjkzMmU2OWFlZDRjMWI1NzZmNjVjOWQwY2NkNmY3NmYx
         | 
| 15 | 
            +
                MjIzNWFjMjNmNjllMGZlZDBlNTljNzMwZmE4OWUzYjMzZWIzYTQ=
         | 
    
        data/.gitignore
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            Gemfile.lock
         | 
    
        data/lib/lines.rb
    CHANGED
    
    | @@ -56,8 +56,7 @@ module Lines | |
| 56 56 | 
             
                # obj - a ruby hash
         | 
| 57 57 | 
             
                # args -
         | 
| 58 58 | 
             
                def log(obj, args={})
         | 
| 59 | 
            -
                  obj =  | 
| 60 | 
            -
                  obj = global.merge(obj)
         | 
| 59 | 
            +
                  obj = prepare_obj(obj, args)
         | 
| 61 60 | 
             
                  outputters.each{|out| out.output(dumper, obj) }
         | 
| 62 61 | 
             
                  obj
         | 
| 63 62 | 
             
                end
         | 
| @@ -65,25 +64,15 @@ module Lines | |
| 65 64 | 
             
                # Add data to the logs
         | 
| 66 65 | 
             
                #
         | 
| 67 66 | 
             
                # data - a ruby hash
         | 
| 67 | 
            +
                #
         | 
| 68 | 
            +
                # return a Context instance
         | 
| 68 69 | 
             
                def context(data={})
         | 
| 69 | 
            -
                  new_context = Context.new  | 
| 70 | 
            +
                  new_context = Context.new ensure_hash!(data)
         | 
| 70 71 | 
             
                  yield new_context if block_given?
         | 
| 71 72 | 
             
                  new_context
         | 
| 72 73 | 
             
                end
         | 
| 73 74 |  | 
| 74 | 
            -
                 | 
| 75 | 
            -
                  attr_reader :data
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                  def initialize(data)
         | 
| 78 | 
            -
                    @data = data
         | 
| 79 | 
            -
                  end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                  def log(obj, args={})
         | 
| 82 | 
            -
                    Lines.log(obj, args.merge(data))
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
                end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                # A backward-compatibile logger
         | 
| 75 | 
            +
                # Returns a backward-compatibile logger
         | 
| 87 76 | 
             
                def logger
         | 
| 88 77 | 
             
                  @logger ||= (
         | 
| 89 78 | 
             
                    require "lines/logger"
         | 
| @@ -91,23 +80,34 @@ module Lines | |
| 91 80 | 
             
                  )
         | 
| 92 81 | 
             
                end
         | 
| 93 82 |  | 
| 83 | 
            +
                def ensure_hash!(obj) # :nodoc:
         | 
| 84 | 
            +
                  return {} unless obj
         | 
| 85 | 
            +
                  return obj if obj.kind_of?(Hash)
         | 
| 86 | 
            +
                  return obj.to_h if obj.respond_to?(:to_h)
         | 
| 87 | 
            +
                  obj = {msg: obj}
         | 
| 88 | 
            +
                end
         | 
| 89 | 
            +
             | 
| 94 90 | 
             
                protected
         | 
| 95 91 |  | 
| 96 | 
            -
                def  | 
| 92 | 
            +
                def prepare_obj(obj, args={})
         | 
| 97 93 | 
             
                  if obj.kind_of?(Exception)
         | 
| 98 94 | 
             
                    ex = obj
         | 
| 99 95 | 
             
                    obj = {ex: ex.class, msg: ex.to_s}
         | 
| 100 96 | 
             
                    if ex.respond_to?(:backtrace) && ex.backtrace
         | 
| 101 97 | 
             
                      obj[:backtrace] = ex.backtrace
         | 
| 102 98 | 
             
                    end
         | 
| 103 | 
            -
                   | 
| 104 | 
            -
                     | 
| 105 | 
            -
                      obj = obj.to_h
         | 
| 106 | 
            -
                    else
         | 
| 107 | 
            -
                      obj = {msg: obj}
         | 
| 108 | 
            -
                    end
         | 
| 99 | 
            +
                  else
         | 
| 100 | 
            +
                    obj = ensure_hash!(obj)
         | 
| 109 101 | 
             
                  end
         | 
| 110 | 
            -
             | 
| 102 | 
            +
             | 
| 103 | 
            +
                  args = ensure_hash!(args)
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  g = global.inject({}) do |h, (k,v)|
         | 
| 106 | 
            +
                    h[k] = v.respond_to?(:call) ? v.call : v
         | 
| 107 | 
            +
                    h
         | 
| 108 | 
            +
                  end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  g.merge(obj.merge(args))
         | 
| 111 111 | 
             
                end
         | 
| 112 112 |  | 
| 113 113 | 
             
                def to_outputter(out)
         | 
| @@ -125,6 +125,19 @@ module Lines | |
| 125 125 | 
             
                end
         | 
| 126 126 | 
             
              end
         | 
| 127 127 |  | 
| 128 | 
            +
              # Wrapper object that holds a given context. Emitted by Lines.with
         | 
| 129 | 
            +
              class Context
         | 
| 130 | 
            +
                attr_reader :data
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                def initialize(data)
         | 
| 133 | 
            +
                  @data = data
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                def log(obj, args={})
         | 
| 137 | 
            +
                  Lines.log obj, Lines.ensure_hash!(args).merge(data)
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
              end
         | 
| 140 | 
            +
             | 
| 128 141 | 
             
              class StreamOutputter
         | 
| 129 142 | 
             
                # stream must accept a #write(str) message
         | 
| 130 143 | 
             
                def initialize(stream = $stderr)
         | 
| @@ -157,9 +170,8 @@ module Lines | |
| 157 170 | 
             
                }
         | 
| 158 171 |  | 
| 159 172 | 
             
                def initialize(syslog = Syslog, app_name=nil)
         | 
| 160 | 
            -
                  @app_name = app_name
         | 
| 161 173 | 
             
                  @syslog = syslog
         | 
| 162 | 
            -
                  prepare_syslog
         | 
| 174 | 
            +
                  prepare_syslog(app_name)
         | 
| 163 175 | 
             
                end
         | 
| 164 176 |  | 
| 165 177 | 
             
                def output(dumper, obj)
         | 
| @@ -176,10 +188,9 @@ module Lines | |
| 176 188 |  | 
| 177 189 | 
             
                protected
         | 
| 178 190 |  | 
| 179 | 
            -
                attr_reader :app_name
         | 
| 180 191 | 
             
                attr_reader :syslog
         | 
| 181 192 |  | 
| 182 | 
            -
                def prepare_syslog
         | 
| 193 | 
            +
                def prepare_syslog(app_name)
         | 
| 183 194 | 
             
                  unless syslog.opened?
         | 
| 184 195 | 
             
                    # Did you know ? app_name is detected by syslog if nil
         | 
| 185 196 | 
             
                    syslog.open(app_name,
         | 
    
        data/lib/lines/version.rb
    CHANGED
    
    
    
        data/spec/lines_spec.rb
    CHANGED
    
    | @@ -6,59 +6,90 @@ describe Lines do | |
| 6 6 | 
             
              let(:outputter) { StringIO.new }
         | 
| 7 7 | 
             
              let(:output) { outputter.string }
         | 
| 8 8 | 
             
              before do
         | 
| 9 | 
            +
                Lines.global.replace({})
         | 
| 9 10 | 
             
                Lines.use(outputter)
         | 
| 10 11 | 
             
              end
         | 
| 11 12 |  | 
| 12 | 
            -
               | 
| 13 | 
            -
                 | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 13 | 
            +
              context ".log" do
         | 
| 14 | 
            +
                it "logs stuff" do
         | 
| 15 | 
            +
                  Lines.log(foo: 'bar')
         | 
| 16 | 
            +
                  expect(output).to eq('foo=bar' + Lines::NL)
         | 
| 17 | 
            +
                end
         | 
| 16 18 |  | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 19 | 
            +
                it "supports a first msg argument" do
         | 
| 20 | 
            +
                  Lines.log("this user is annoying", user: 'bob')
         | 
| 21 | 
            +
                  expect(output).to eq("msg='this user is annoying' user=bob" + Lines::NL)
         | 
| 22 | 
            +
                end
         | 
| 21 23 |  | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 24 | 
            +
                it "logs exceptions" do
         | 
| 25 | 
            +
                  Lines.log(StandardError.new("error time!"), user: 'bob')
         | 
| 26 | 
            +
                  expect(output).to eq("ex=StandardError msg='error time!' user=bob" + Lines::NL)
         | 
| 27 | 
            +
                end
         | 
| 26 28 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 29 | 
            +
                it "logs exception backtraces when available" do
         | 
| 30 | 
            +
                  ex = (raise "foo" rescue $!)
         | 
| 31 | 
            +
                  #expect(ex).not_to eq(nil)
         | 
| 32 | 
            +
                  Lines.log(ex)
         | 
| 33 | 
            +
                  expect(output).to match(/ex=RuntimeError msg=foo backtrace=\[[^\]]+\]/)
         | 
| 34 | 
            +
                end
         | 
| 33 35 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 36 | 
            +
                it "works with anything" do
         | 
| 37 | 
            +
                  Lines.log("anything1", "anything2")
         | 
| 38 | 
            +
                  expect(output).to eq('msg=anything2' + Lines::NL)
         | 
| 39 | 
            +
                end
         | 
| 38 40 |  | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
                 | 
| 43 | 
            -
                expect(output).to eq('app=self' + Lines::NL)
         | 
| 41 | 
            +
                it "doesn't convert nil args to msg" do
         | 
| 42 | 
            +
                  Lines.log("anything", nil)
         | 
| 43 | 
            +
                  expect(output).to eq('msg=anything' + Lines::NL)
         | 
| 44 | 
            +
                end
         | 
| 44 45 | 
             
              end
         | 
| 45 46 |  | 
| 46 | 
            -
               | 
| 47 | 
            -
                 | 
| 48 | 
            -
             | 
| 47 | 
            +
              context ".context" do
         | 
| 48 | 
            +
                it "has contextes" do
         | 
| 49 | 
            +
                  Lines.context(foo: "bar").log(a: 'b')
         | 
| 50 | 
            +
                  expect(output).to eq('a=b foo=bar' + Lines::NL)
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                it "has contextes with blocks" do
         | 
| 54 | 
            +
                  Lines.context(foo: "bar") do |ctx|
         | 
| 55 | 
            +
                    ctx.log(a: 'b')
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                  expect(output).to eq('a=b foo=bar' + Lines::NL)
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                it "mixes everything" do
         | 
| 61 | 
            +
                  Lines.global[:app] = :self
         | 
| 62 | 
            +
                  ctx = Lines.context(foo: "bar")
         | 
| 63 | 
            +
                  ctx.log('msg', ahoi: true)
         | 
| 64 | 
            +
                  expect(output).to eq('app=self msg=msg ahoi=#t foo=bar' + Lines::NL)
         | 
| 65 | 
            +
                end
         | 
| 49 66 | 
             
              end
         | 
| 50 67 |  | 
| 51 | 
            -
               | 
| 52 | 
            -
                 | 
| 53 | 
            -
                   | 
| 68 | 
            +
              context ".logger" do
         | 
| 69 | 
            +
                it "is provided for backward-compatibility" do
         | 
| 70 | 
            +
                  l = Lines.logger
         | 
| 71 | 
            +
                  l.info("hi")
         | 
| 72 | 
            +
                  expect(output).to eq('pri=info msg=hi' + Lines::NL)
         | 
| 54 73 | 
             
                end
         | 
| 55 | 
            -
                expect(output).to eq('a=b foo=bar' + Lines::NL)
         | 
| 56 74 | 
             
              end
         | 
| 57 75 |  | 
| 58 | 
            -
               | 
| 59 | 
            -
                 | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 76 | 
            +
              context ".global" do
         | 
| 77 | 
            +
                it "prepends data to the line" do
         | 
| 78 | 
            +
                  Lines.global["app"] = :self
         | 
| 79 | 
            +
                  Lines.log 'hey'
         | 
| 80 | 
            +
                  expect(output).to eq('app=self msg=hey' + Lines::NL)
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                it "resolves procs dynamically" do
         | 
| 84 | 
            +
                  count = 0
         | 
| 85 | 
            +
                  Lines.global[:count] = proc{ count += 1 }
         | 
| 86 | 
            +
                  Lines.log 'test1'
         | 
| 87 | 
            +
                  Lines.log 'test2'
         | 
| 88 | 
            +
                  expect(output).to eq(
         | 
| 89 | 
            +
                    'count=1 msg=test1' + Lines::NL +
         | 
| 90 | 
            +
                    'count=2 msg=test2' + Lines::NL
         | 
| 91 | 
            +
                  )
         | 
| 92 | 
            +
                end
         | 
| 62 93 | 
             
              end
         | 
| 63 94 | 
             
            end
         | 
| 64 95 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: lines
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.20
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jonas Pfenniger
         | 
| @@ -45,10 +45,10 @@ executables: [] | |
| 45 45 | 
             
            extensions: []
         | 
| 46 46 | 
             
            extra_rdoc_files: []
         | 
| 47 47 | 
             
            files:
         | 
| 48 | 
            +
            - .gitignore
         | 
| 48 49 | 
             
            - .rspec
         | 
| 49 50 | 
             
            - .travis.yml
         | 
| 50 51 | 
             
            - Gemfile
         | 
| 51 | 
            -
            - Gemfile.lock
         | 
| 52 52 | 
             
            - LICENSE.txt
         | 
| 53 53 | 
             
            - README.md
         | 
| 54 54 | 
             
            - Rakefile
         | 
    
        data/Gemfile.lock
    DELETED
    
    | @@ -1,35 +0,0 @@ | |
| 1 | 
            -
            PATH
         | 
| 2 | 
            -
              remote: .
         | 
| 3 | 
            -
              specs:
         | 
| 4 | 
            -
                lines (0.1.18)
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            GEM
         | 
| 7 | 
            -
              remote: http://rubygems.org/
         | 
| 8 | 
            -
              specs:
         | 
| 9 | 
            -
                blankslate (2.1.2.4)
         | 
| 10 | 
            -
                diff-lcs (1.2.1)
         | 
| 11 | 
            -
                json (1.7.7)
         | 
| 12 | 
            -
                parslet (1.5.0)
         | 
| 13 | 
            -
                  blankslate (~> 2.0)
         | 
| 14 | 
            -
                rake (0.9.2.2)
         | 
| 15 | 
            -
                rdoc (4.0.0)
         | 
| 16 | 
            -
                  json (~> 1.4)
         | 
| 17 | 
            -
                rspec (2.13.0)
         | 
| 18 | 
            -
                  rspec-core (~> 2.13.0)
         | 
| 19 | 
            -
                  rspec-expectations (~> 2.13.0)
         | 
| 20 | 
            -
                  rspec-mocks (~> 2.13.0)
         | 
| 21 | 
            -
                rspec-core (2.13.0)
         | 
| 22 | 
            -
                rspec-expectations (2.13.0)
         | 
| 23 | 
            -
                  diff-lcs (>= 1.1.3, < 2.0)
         | 
| 24 | 
            -
                rspec-mocks (2.13.0)
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            PLATFORMS
         | 
| 27 | 
            -
              ruby
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            DEPENDENCIES
         | 
| 30 | 
            -
              bundler (~> 1.3)
         | 
| 31 | 
            -
              lines!
         | 
| 32 | 
            -
              parslet
         | 
| 33 | 
            -
              rake
         | 
| 34 | 
            -
              rdoc
         | 
| 35 | 
            -
              rspec
         |