teer 1.0.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/teer.rb +8 -8
- data/lib/teer/data_store.rb +2 -0
- data/lib/teer/engine.rb +10 -14
- data/lib/teer/parser.rb +48 -0
- data/lib/teer/vector_store.rb +2 -0
- data/lib/teer/version.rb +3 -1
- data/teer.gemspec +0 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a15d1b1af5104587de13695cd26cd528f0a206a89db62cc11c68271a9fa70259
|
4
|
+
data.tar.gz: 6c0a3e17256f6f079700506a84c42c922eeac2a249fef2bdf9d2676601d20b6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e687fb6692312faef3308dc7e91b760068d2528b39a502143fbe5518253661f79327f55b73478548cbb40bbba600703eb79f19c0b972bddb396311d7efeeb141
|
7
|
+
data.tar.gz: 23ce2483830c047446e77e98cc97ab52fb972295953fcea355877a046c7fbc1206e5237ee61eb45411bf187c417bfc78d561c4b53a5a681164869890523c7f9c
|
data/lib/teer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'teer/version'
|
2
2
|
require 'teer/engine'
|
3
|
-
require '
|
3
|
+
require 'teer/parser'
|
4
4
|
require 'yaml'
|
5
5
|
|
6
6
|
module Teer
|
@@ -12,7 +12,7 @@ module Teer
|
|
12
12
|
register_helpers
|
13
13
|
data_keys = data.first.keys
|
14
14
|
raise ArgumentError, "#{names} not present in data" if (Array(names) - data_keys).count != 0
|
15
|
-
@template = Engine.new(data, names, template(rules_path_or_obj, locale),
|
15
|
+
@template = Engine.new(data, names, template(rules_path_or_obj, locale), parser, locale, kwargs)
|
16
16
|
end
|
17
17
|
|
18
18
|
def pre_parsed_finding
|
@@ -32,16 +32,16 @@ module Teer
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def self.
|
36
|
-
@
|
35
|
+
def self.parser
|
36
|
+
@parser ||= Parser.new
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.register_helpers
|
40
|
-
|
41
|
-
|
40
|
+
parser.register_helper(:round) do |ctx, value|
|
41
|
+
value < 1 ? value.round(2) : value.round(1)
|
42
42
|
end
|
43
|
-
|
44
|
-
Time.at(
|
43
|
+
parser.register_helper(:month) do |ctx, value|
|
44
|
+
Time.at(value).strftime('%B')
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
data/lib/teer/data_store.rb
CHANGED
data/lib/teer/engine.rb
CHANGED
@@ -7,9 +7,9 @@ require 'ostruct'
|
|
7
7
|
|
8
8
|
module Teer
|
9
9
|
class Engine
|
10
|
-
def initialize(data, names, template,
|
10
|
+
def initialize(data, names, template, parser, locale, kwargs)
|
11
11
|
@template = template
|
12
|
-
@
|
12
|
+
@parser = parser
|
13
13
|
@locale = locale
|
14
14
|
@findings = []
|
15
15
|
setup_store(data, names)
|
@@ -65,17 +65,7 @@ module Teer
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def interpolate
|
68
|
-
@interpolate ||= proc { |string|
|
69
|
-
begin
|
70
|
-
@handlebars.compile(string).call(@store.to_h)
|
71
|
-
rescue StandardError => e
|
72
|
-
if e.to_s.match(/Missing helper:/)
|
73
|
-
raise e
|
74
|
-
else
|
75
|
-
raise ArgumentError, "Could not parse variables in string: '#{string}'"
|
76
|
-
end
|
77
|
-
end
|
78
|
-
}
|
68
|
+
@interpolate ||= proc { |string| @parser.render(string, @store.to_h) }
|
79
69
|
end
|
80
70
|
|
81
71
|
def add_to_store(template)
|
@@ -104,10 +94,16 @@ module Teer
|
|
104
94
|
text += new_text + ' ' if new_text
|
105
95
|
pre_parsed_text += unparsed_new_text + ' ' if unparsed_new_text
|
106
96
|
end
|
107
|
-
|
97
|
+
update_preparsed_finding(pre_parsed_text)
|
108
98
|
CGI.unescapeHTML(text[0...-1]) if !text.nil? && !text.empty?
|
109
99
|
end
|
110
100
|
|
101
|
+
def update_preparsed_finding(text)
|
102
|
+
if !text.nil? && !text.empty?
|
103
|
+
@pre_parsed_finding = CGI.unescapeHTML(text[0...-1])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
111
107
|
def catch_eval(k)
|
112
108
|
begin
|
113
109
|
eval(k, @store.instance_eval { binding })
|
data/lib/teer/parser.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Teer
|
4
|
+
class Parser
|
5
|
+
def initialize
|
6
|
+
@helpers = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def register_helper(func, &fn)
|
10
|
+
@helpers[func.to_sym] = fn
|
11
|
+
end
|
12
|
+
|
13
|
+
def render(template = '', ctx = {})
|
14
|
+
rendered_template = template.dup
|
15
|
+
template.scan(/{{\s*[\w\. ]+\s*}}/).map do |substr|
|
16
|
+
key, func = parse_func(substr)
|
17
|
+
value = value_from_ctx(ctx, key)
|
18
|
+
if func
|
19
|
+
raise ArgumentError, "Missing helper: '#{func}'" if !@helpers[func.to_sym]
|
20
|
+
value = @helpers[func.to_sym].call(ctx, value)
|
21
|
+
end
|
22
|
+
rendered_template[substr] = value.to_s
|
23
|
+
end
|
24
|
+
rendered_template
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def parse_func(substr) # if multiple and function
|
30
|
+
split = substr.gsub(/{|}/, '').split.reverse
|
31
|
+
if split.size == 2
|
32
|
+
split
|
33
|
+
else
|
34
|
+
split.first
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def value_from_ctx(ctx, key)
|
39
|
+
split = key.split('.')# currently only support . function calls
|
40
|
+
value = ctx[split.shift.to_sym]
|
41
|
+
split.each do |func|
|
42
|
+
value = value.send(func)
|
43
|
+
end
|
44
|
+
raise ArgumentError, "Could not parse variable: '#{key}'" if !value
|
45
|
+
value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/teer/vector_store.rb
CHANGED
data/lib/teer/version.rb
CHANGED
data/teer.gemspec
CHANGED
@@ -35,7 +35,6 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.bindir = 'exe'
|
36
36
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
37
37
|
spec.require_paths = ['lib']
|
38
|
-
spec.add_dependency 'handlebars'
|
39
38
|
spec.add_dependency 'activesupport'
|
40
39
|
spec.add_development_dependency 'bundler', '~> 1.17'
|
41
40
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Ramotowski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: handlebars
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: activesupport
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +115,7 @@ files:
|
|
129
115
|
- lib/teer.rb
|
130
116
|
- lib/teer/data_store.rb
|
131
117
|
- lib/teer/engine.rb
|
118
|
+
- lib/teer/parser.rb
|
132
119
|
- lib/teer/vector_store.rb
|
133
120
|
- lib/teer/version.rb
|
134
121
|
- teer.gemspec
|