Add i18n filter with trasliterate support

This commit is contained in:
Juarez Bochi 2013-11-21 16:46:29 -02:00
parent fd3ab9166d
commit 6e4812d92b
2 changed files with 76 additions and 0 deletions

View file

@ -0,0 +1,51 @@
# encoding: utf-8
require "i18n"
require "logstash/filters/base"
require "logstash/namespace"
# The i18n filter allows you to remove special characters from
# from a field
class LogStash::Filters::I18n < LogStash::Filters::Base
config_name "i18n"
milestone 0
# Replaces non-ASCII characters with an ASCII approximation, or
# if none exists, a replacement character which defaults to “?”
#
# Example:
#
# filter {
# i18n {
# transliterate => ["field1", "field2"]
# }
# }
config :transliterate, :validate => :array
public
def register
end # def register
public
def filter(event)
return unless filter?(event)
transliterate(event) if @transliterate
filter_matched(event)
end # def filter
private
def transliterate(event)
@transliterate.each do |field|
if event[field].is_a?(Array)
event[field].map! { |v| I18n.transliterate(v).encode('UTF-8') }
elsif event[field].is_a?(String)
event[field] = I18n.transliterate(event[field].encode('UTF-8'))
else
@logger.debug("Can't transliterate something that isn't a string",
:field => field, :value => event[field])
end
end
end # def transliterate
end # class LogStash::Filters::I18n

25
spec/filters/i18n.rb Normal file
View file

@ -0,0 +1,25 @@
# encoding: utf-8
require "test_utils"
require "logstash/filters/i18n"
describe LogStash::Filters::I18n do
extend LogStash::RSpec
describe "transliterate" do
config <<-CONFIG
filter {
i18n {
transliterate => [ "transliterateme" ]
}
}
CONFIG
event = {
"transliterateme" => [ "Ærøskøbing" ]
}
sample event do
insist { subject["transliterateme"] } == [ "AEroskobing" ]
end
end
end