Extract JSON generating for preview to each RegexpPreview class

This commit is contained in:
yoshihara 2015-04-21 13:06:41 +09:00
parent f4381a81fd
commit ceaed87dad
3 changed files with 33 additions and 13 deletions

View File

@ -20,19 +20,8 @@ class ApiController < ApplicationController
def regexp_preview
preview = RegexpPreview.processor(params[:format]).new(params[:file], params[:format], params)
matches = preview.matches
render json: {
params: {
setting: {
# NOTE: regexp and timeformat are used when format == 'apache' || 'nginx' || etc.
# TODO: prepare rendered JSON by prcessor(RegexpPreview::{Signle,Multi}Line
regexp: preview.try(:regexp).try(:source),
time_format: preview.try(:time_format),
}
},
matches: matches.compact,
}
render json: preview.matches_json
end
def grok_to_regexp

View File

@ -8,6 +8,20 @@ module RegexpPreview
@params = params[:params]
end
def matches_json
{
params: {
setting: { # for vue.js
regexp: nil,
time_format: nil,
}
},
matches: matches.compact,
}
end
private
def matches
return [] if patterns.empty?
reader = FileReverseReader.new(File.open(file))

View File

@ -1,11 +1,13 @@
module RegexpPreview
class SingleLine
attr_reader :file, :format, :params, :regexp
attr_reader :file, :format, :params, :regexp, :time_format
def initialize(file, format, params = {})
@file = file
@format = format
@time_format = params[:time_format]
@params = params
case format
when "regexp"
@regexp = Regexp.new(params[:regexp])
@ -18,6 +20,21 @@ module RegexpPreview
end
end
def matches_json
{
params: {
setting: {
# NOTE: regexp and time_format are used when format == 'apache' || 'nginx' || etc.
regexp: regexp.source,
time_format: time_format,
}
},
matches: matches.compact,
}
end
private
def matches
return [] unless @regexp # such as ltsv, json, apache, etc
reader = FileReverseReader.new(File.open(file))