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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 596efc44c3293a8a3049ee3237a2c2850b5af0096cf401468eade5b6345420c1
4
- data.tar.gz: 53bc54ff807d5eb487fe8574394ec4532e9f522469d1294fd4b634f5283e3dd0
3
+ metadata.gz: a15d1b1af5104587de13695cd26cd528f0a206a89db62cc11c68271a9fa70259
4
+ data.tar.gz: 6c0a3e17256f6f079700506a84c42c922eeac2a249fef2bdf9d2676601d20b6a
5
5
  SHA512:
6
- metadata.gz: 6ce7372ae800b855691a47b697b5e994373287fa71db57cc72e6873cdc2c92d1803b2d95ff8d23c28e292bb64cdd7b756c89a636bfcd4b81ccff72260709cb14
7
- data.tar.gz: ead6c277842110c63da076fbc932cbba9fd085a0abf17d051dc69fd2d4c1378a028b3edeb2b53385829813ea195a8097941f1d0ebc446b1e1cf32b0bda624b37
6
+ metadata.gz: e687fb6692312faef3308dc7e91b760068d2528b39a502143fbe5518253661f79327f55b73478548cbb40bbba600703eb79f19c0b972bddb396311d7efeeb141
7
+ data.tar.gz: 23ce2483830c047446e77e98cc97ab52fb972295953fcea355877a046c7fbc1206e5237ee61eb45411bf187c417bfc78d561c4b53a5a681164869890523c7f9c
@@ -1,6 +1,6 @@
1
1
  require 'teer/version'
2
2
  require 'teer/engine'
3
- require 'handlebars'
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), handlebars, locale, kwargs)
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.handlebars
36
- @handlebars ||= Handlebars::Context.new
35
+ def self.parser
36
+ @parser ||= Parser.new
37
37
  end
38
38
 
39
39
  def self.register_helpers
40
- handlebars.register_helper(:round) do |_context, condition, _block|
41
- condition < 1 ? condition.round(2) : condition.round(1)
40
+ parser.register_helper(:round) do |ctx, value|
41
+ value < 1 ? value.round(2) : value.round(1)
42
42
  end
43
- handlebars.register_helper(:month) do |_context, condition, _block|
44
- Time.at(condition).strftime('%B')
43
+ parser.register_helper(:month) do |ctx, value|
44
+ Time.at(value).strftime('%B')
45
45
  end
46
46
  end
47
47
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'vector_store'
2
4
 
3
5
  module Teer
@@ -7,9 +7,9 @@ require 'ostruct'
7
7
 
8
8
  module Teer
9
9
  class Engine
10
- def initialize(data, names, template, handlebars, locale, kwargs)
10
+ def initialize(data, names, template, parser, locale, kwargs)
11
11
  @template = template
12
- @handlebars = handlebars
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
- @pre_parsed_finding = CGI.unescapeHTML(pre_parsed_text[0...-1]) if !pre_parsed_text.nil? && !pre_parsed_text.empty?
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 })
@@ -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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Teer
2
4
  class VectorStore
3
5
  def initialize(data, locale)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Teer
2
- VERSION = "1.0.2"
4
+ VERSION = '2.0.0'
3
5
  end
@@ -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: 1.0.2
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-28 00:00:00.000000000 Z
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