teer 1.0.2 → 2.0.0
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 +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
|