fluent-plugin-rewrite 0.0.2 → 0.0.3

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.
data/README.md CHANGED
@@ -145,6 +145,49 @@ This time, the messabe above will be re-emmited as the message below:
145
145
  apache.log.others { "path" : "/foo/bar" }
146
146
  ```
147
147
 
148
+ ### rule: last
149
+
150
+ If you set `last` option to true, rewriting chain stops applying rule where the pattern matches first.
151
+
152
+ ```
153
+ <rule>
154
+ key path
155
+ pattern ^/foo$
156
+ replace /bar
157
+ last true
158
+ </rule>
159
+ <rule>
160
+ key path
161
+ pattern ^/bar$
162
+ replace /baz
163
+ </rule>
164
+ ```
165
+
166
+ This rules will be applied like below:
167
+
168
+ ```
169
+ { "path" => "/foo" }
170
+ ```
171
+
172
+ will be replaced with
173
+
174
+ ```
175
+ { "path" => "/bar" }
176
+ ```
177
+
178
+ and the chain stops here. Therefore, the second rule is never
179
+ applied.
180
+
181
+ ```
182
+ { "path" => "/bar" }
183
+ ```
184
+
185
+ will be replaced by the second rule as usual.
186
+
187
+ ```
188
+ { "path" => "/baz" }
189
+ ```
190
+
148
191
  ## Installation
149
192
 
150
193
  Add this line to your application's Gemfile:
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "fluent-plugin-rewrite"
3
- gem.version = '0.0.2'
3
+ gem.version = '0.0.3'
4
4
  gem.authors = ["Kentaro Kuribayashi"]
5
5
  gem.email = ["kentarok@gmail.com"]
6
6
  gem.homepage = "http://github.com/kentaro/fluent-plugin-rewrite"
@@ -66,7 +66,9 @@ module Fluent
66
66
  end
67
67
 
68
68
  rules.each do |rule|
69
- tag, record = apply_rule(rule, tag, record)
69
+ tag, record, last = apply_rule(rule, tag, record)
70
+
71
+ break if last
70
72
  return if !tag && !record
71
73
  end
72
74
 
@@ -77,6 +79,7 @@ module Fluent
77
79
  tag = rule["append_to_tag"] ? tag.dup : tag
78
80
  key = rule["key"]
79
81
  pattern = rule["pattern"]
82
+ last = nil
80
83
 
81
84
  return [tag, record] if !key || !record.has_key?(key)
82
85
  return [tag, record] unless pattern
@@ -85,20 +88,24 @@ module Fluent
85
88
  return if rule["ignore"]
86
89
 
87
90
  if rule["replace"]
88
- replace = rule["replace"].to_s
91
+ replace = rule["replace"]
89
92
  record[key] = record[key].gsub(rule["regex"], replace)
90
93
  end
91
94
 
92
95
  if rule["append_to_tag"]
93
96
  matched.captures.each { |m| tag << ".#{m}" }
94
97
  end
98
+
99
+ if rule["last"]
100
+ last = true
101
+ end
95
102
  else
96
103
  if rule["append_to_tag"] && rule["fallback"]
97
104
  tag << ".#{rule["fallback"]}"
98
105
  end
99
106
  end
100
107
 
101
- [tag, record]
108
+ [tag, record, last]
102
109
  end
103
110
  end
104
111
  end
@@ -142,6 +142,31 @@ class RewriteOutputTest < Test::Unit::TestCase
142
142
  )
143
143
  end
144
144
 
145
+ def test_last
146
+ d = create_driver(%[
147
+ <rule>
148
+ key path
149
+ pattern ^/foo$
150
+ replace /bar
151
+ last true
152
+ </rule>
153
+ <rule>
154
+ key path
155
+ pattern ^/bar$
156
+ replace /baz
157
+ </rule>
158
+ ])
159
+
160
+ assert_equal(
161
+ [ "test", { "path" => "/bar" } ],
162
+ d.instance.rewrite("test", { "path" => "/foo" })
163
+ )
164
+ assert_equal(
165
+ [ "test", { "path" => "/baz" } ],
166
+ d.instance.rewrite("test", { "path" => "/bar" })
167
+ )
168
+ end
169
+
145
170
  def test_rewrite_rules
146
171
  d = create_driver(%[
147
172
  <rule>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-rewrite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-30 00:00:00.000000000 Z
12
+ date: 2012-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake