serbea 0.8.1 → 0.9.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: 439fb102e78e2208de075b03b058b77d1cc909a6fe9414c341a48370fd3988e2
4
- data.tar.gz: d0ff78ac67f00a59fa1047f7f05795cee88051ff0fdb9c179601984601fecae4
3
+ metadata.gz: 352c314f5f5a9b6df23933e1b379af39617c82c9b583f4c0703480a5f71df498
4
+ data.tar.gz: 364a353dba20ce3af4bcc071247477ec6dfa6f95c15bb94c88677520344a3cf1
5
5
  SHA512:
6
- metadata.gz: 6ca9922186315539c54e3a44fad5da81b3075425bb991dd8521e4777f5d46e515d4a65f9fd7fd54c52b870df21c8155b32beb3a24c84080c95367b1143526ff5
7
- data.tar.gz: ccb34f9d8129fe5c4e34f96d7cbce118f5dbf8538151ae554cca9c35f63e223a0d14b4456e1463c8a79661de6109831ca3058aaee184f2925af974acfbc5f6b1
6
+ metadata.gz: 6bcdd89d15300e24e051f68de0d87899bec18c9f304162e3b667afc7c8a420ab5978e5eb91ab40f8dfd4201375a7fab769d9419a19562196e3ba93b85692e262
7
+ data.tar.gz: 8ba0cddf305d712c3e970adb06979e27f426aae797b2d99702f844e6e5c9248d34a96e35238134314da783e5fbd3de93b56cf7d5701ecc909690719393aa05fc
data/Gemfile CHANGED
@@ -4,5 +4,3 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in serbea.gemspec
6
6
  gemspec
7
-
8
- gem "erubi", github: "jaredcwhite/erubi", branch: "config-literal-prefix"
data/README.md CHANGED
@@ -13,7 +13,7 @@ Serbea combines the best ideas from "brace-style" template languages such as Liq
13
13
  * Supports every convention of ERB and builds upon it with new features (which is why it's "awesomer!").
14
14
  * Builtin frontmatter support so you can access the variables written into the top YAML within your templates. In any Rails view, including layouts, you'll have access to the `@frontmatter` ivar which is a merged `HashWithDotAccess::Hash` with data from any part of the view tree (partials, pages, layout).
15
15
  * The filters accessible within Serbea templates are either helpers (where the variable gets passed as the first argument) or instance methods of the variable itself, so you can build extremely expressive pipelines that take advantage of the code you already know and love. (For example, in Rails you could write `{{ "My Link" | link_to: route_path }}`).
16
- * The `Serbea::Pipeline.exec` method lets you pass a pipeline template in, along with an optional input value or included helpers module, and you'll get the output as a object of any type (not converted to a string like in traditional templates). For example: `Serbea::Pipeline.exec("[1,2,3] |> map: ->(i) { i * 10 }")` will return `[10, 20, 30]`.
16
+ * The `Serbea::Pipeline.exec` method lets you pass a pipeline template in, along with an optional input value or included helpers module, and you'll get the output as a object of any type (not converted to a string like in traditional templates). For example: `Serbea::Pipeline.exec("arr |> map: ->(i) { i * 10 }", arr: [1,2,3])` will return `[10, 20, 30]`.
17
17
 
18
18
  ## What It Looks Like
19
19
 
@@ -10,7 +10,7 @@ module Tilt
10
10
  def prepare
11
11
  @options.merge!(
12
12
  outvar: "@_erbout",
13
- bufval: "Serbea::Buffer.new",
13
+ bufval: "Serbea::OutputBuffer.new",
14
14
  literal_prefix: "{%",
15
15
  literal_postfix: "%}",
16
16
  engine_class: Serbea::TemplateEngine
@@ -8,11 +8,12 @@ module Serbea
8
8
 
9
9
  def capture(obj = nil, &block)
10
10
  previous_buffer_state = @_erbout
11
- @_erbout = Serbea::Buffer.new
11
+ @_erbout = Serbea::OutputBuffer.new
12
12
 
13
13
  # For compatibility with ActionView, not used by Bridgetown normally
14
14
  previous_ob_state = @output_buffer
15
- @output_buffer = Serbea::Buffer.new
15
+ @output_buffer = Serbea::OutputBuffer.new
16
+
16
17
 
17
18
  result = instance_exec(obj, &block)
18
19
  if @output_buffer != ""
@@ -32,11 +33,11 @@ module Serbea
32
33
  def helper(name, &helper_block)
33
34
  self.class.define_method(name) do |*args, &block|
34
35
  previous_buffer_state = @_erbout
35
- @_erbout = Serbea::Buffer.new
36
+ @_erbout = Serbea::OutputBuffer.new
36
37
 
37
38
  # For compatibility with ActionView, not used by Bridgetown normally
38
39
  previous_ob_state = @output_buffer
39
- @output_buffer = Serbea::Buffer.new
40
+ @output_buffer = Serbea::OutputBuffer.new
40
41
 
41
42
  result = helper_block.call(*args, &block)
42
43
  if @output_buffer != ""
@@ -1,12 +1,13 @@
1
1
  require "active_support/core_ext/string/output_safety"
2
+ require "active_support/core_ext/object/blank"
2
3
 
3
4
  module Serbea
4
5
  class Pipeline
5
- def self.exec(template, input: (no_input_passed = true; nil), include_helpers: nil)
6
+ def self.exec(template, locals = {}, include_helpers: nil, **kwargs)
6
7
  anon = Class.new do
7
8
  include Serbea::Helpers
8
9
 
9
- attr_accessor :input, :output
10
+ attr_accessor :output
10
11
  end
11
12
 
12
13
  if include_helpers
@@ -14,12 +15,11 @@ module Serbea
14
15
  end
15
16
 
16
17
  pipeline_obj = anon.new
17
- pipeline_obj.input = input unless no_input_passed
18
18
 
19
19
  full_template = "{{ #{template} | assign_to: :output }}"
20
20
 
21
21
  tmpl = Tilt::SerbeaTemplate.new { full_template }
22
- tmpl.render(pipeline_obj)
22
+ tmpl.render(pipeline_obj, locals.presence || kwargs)
23
23
 
24
24
  pipeline_obj.output
25
25
  end
@@ -54,8 +54,9 @@ module Serbea
54
54
  @value_methods_denylist ||= Set.new
55
55
  end
56
56
 
57
- def initialize(context, value)
58
- @context = context
57
+ def initialize(binding, value)
58
+ @binding = binding
59
+ @context = binding.receiver
59
60
  @value = value
60
61
  end
61
62
 
@@ -83,6 +84,19 @@ module Serbea
83
84
  else
84
85
  @value = @context.send(name, @value, *args)
85
86
  end
87
+ elsif @binding.local_variables.include?(name)
88
+ var = @binding.local_variable_get(name)
89
+ if var.respond_to?(:call)
90
+ unless kwargs.empty?
91
+ @value = var.call(@value, *args, **kwargs)
92
+ else
93
+ @value = var.call(@value, *args)
94
+ end
95
+ else
96
+ "Serbea warning: Filter #{name} does not respond to call".tap do |warning|
97
+ self.class.raise_on_missing_filters ? raise(warning) : STDERR.puts(warning)
98
+ end
99
+ end
86
100
  else
87
101
  "Serbea warning: Filter not found: #{name}".tap do |warning|
88
102
  self.class.raise_on_missing_filters ? raise(warning) : STDERR.puts(warning)
@@ -1,7 +1,7 @@
1
1
  require "strscan"
2
2
 
3
3
  module Serbea
4
- class Buffer < String
4
+ class OutputBuffer < String
5
5
  def concat_to_s(input)
6
6
  concat input.to_s
7
7
  end
@@ -125,7 +125,7 @@ module Serbea
125
125
  end
126
126
  end
127
127
 
128
- segments[0] = "pipeline(self, (#{segments[0].strip}))"
128
+ segments[0] = "pipeline(binding, (#{segments[0].strip}))"
129
129
  segments[1..-1].each_with_index do |segment, index|
130
130
  filter, args = segment.strip.match(/([^ :]*)(.*)/m).captures
131
131
  segments[index + 1] = ".filter(:" + filter
@@ -1,3 +1,3 @@
1
1
  module Serbea
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ["lib"]
18
18
 
19
19
  spec.add_runtime_dependency("activesupport", "~> 6.0")
20
- spec.add_runtime_dependency("erubi", "~> 1.9")
20
+ spec.add_runtime_dependency("erubi", ">= 1.10")
21
21
  spec.add_runtime_dependency("hash_with_dot_access", "~> 1.1")
22
22
  spec.add_runtime_dependency("tilt", "~> 2.0")
23
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serbea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-14 00:00:00.000000000 Z
11
+ date: 2020-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: erubi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.9'
33
+ version: '1.10'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.9'
40
+ version: '1.10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hash_with_dot_access
43
43
  requirement: !ruby/object:Gem::Requirement