feather 0.4.1 → 0.4.2
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/.travis.yml +8 -0
- data/Gemfile +4 -1
- data/README.md +1 -1
- data/RELEASES.txt +3 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/feather.gemspec +11 -4
- data/lib/feather/support.rb +1 -1
- data/lib/feather/template.rb +11 -10
- data/test/helper.rb +13 -1
- data/test/test_feather.rb +1 -1
- data/test/test_feather_support.rb +56 -8
- data/test/test_feather_template.rb +1 -1
- metadata +32 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85c43bfc423dc5a8dbd77857b92a2c9d74bb73c2
|
4
|
+
data.tar.gz: 95d9b80ee144392fe22c7e107926f4d6aad4215c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b38495655005155dd0ef4d3d684bad79ab9ca71f3d530f7d845f67f1b69feecb188246fdacd70474e5aa7daf519f9b4dd80f9c72e8b928baae348105a8c19468
|
7
|
+
data.tar.gz: 2d6b49b9e1a689b771899874df3d889bf63c8a97d7268d48ba7c00de31121c735c1f58b66185281d8fb2bae7d4de89f6a564c1e1285b7812639795c5ffbb848f
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/RELEASES.txt
CHANGED
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/feather.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: feather 0.4.
|
5
|
+
# stub: feather 0.4.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "feather"
|
9
|
-
s.version = "0.4.
|
9
|
+
s.version = "0.4.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Scott Tadman"]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2016-03-28"
|
15
15
|
s.description = "A simple light-weight text templating system"
|
16
16
|
s.email = "github@tadman.ca"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
+
".travis.yml",
|
23
24
|
"Gemfile",
|
24
25
|
"LICENSE.txt",
|
25
26
|
"README.md",
|
@@ -38,19 +39,25 @@ Gem::Specification.new do |s|
|
|
38
39
|
]
|
39
40
|
s.homepage = "http://github.com/twg/feather"
|
40
41
|
s.licenses = ["MIT"]
|
41
|
-
s.rubygems_version = "2.
|
42
|
+
s.rubygems_version = "2.5.1"
|
42
43
|
s.summary = "Light-weight text tempating system"
|
43
44
|
|
44
45
|
if s.respond_to? :specification_version then
|
45
46
|
s.specification_version = 4
|
46
47
|
|
47
48
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<addressable>, [">= 0"])
|
48
50
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
51
|
+
s.add_development_dependency(%q<minitest>, [">= 0"])
|
49
52
|
else
|
53
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
50
54
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
55
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
51
56
|
end
|
52
57
|
else
|
58
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
53
59
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
60
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
54
61
|
end
|
55
62
|
end
|
56
63
|
|
data/lib/feather/support.rb
CHANGED
@@ -5,7 +5,7 @@ module Feather::Support
|
|
5
5
|
# == Module/Mixin Methods =================================================
|
6
6
|
|
7
7
|
def uri_escape(object)
|
8
|
-
URI.
|
8
|
+
Addressable::URI.normalize_component(object.to_s, /[^a-z0-9\-\.]/i)
|
9
9
|
end
|
10
10
|
|
11
11
|
def html_escape(object)
|
data/lib/feather/template.rb
CHANGED
@@ -4,8 +4,6 @@ class Feather::Template
|
|
4
4
|
TOKEN_REGEXP = /((?:[^\{]|\{[^\{]|\{\{\{)+)|\{\{\s*([\&\%\$\.\:\#\^\*\/\=\!]|\?\!?)?([^\}]*)\}\}/.freeze
|
5
5
|
TOKEN_TRIGGER = /\{\{/.freeze
|
6
6
|
|
7
|
-
TO_YAML_PROPERTIES = %w[ @content @escape_method ].freeze
|
8
|
-
|
9
7
|
# == Utility Classes ======================================================
|
10
8
|
|
11
9
|
class TemplateHash < Hash; end
|
@@ -33,6 +31,8 @@ class Feather::Template
|
|
33
31
|
# * :html - Automatically escape fields for HTML
|
34
32
|
# * :text - Default mode, render all fields literally
|
35
33
|
def initialize(content, options = nil)
|
34
|
+
@escape_method = nil
|
35
|
+
|
36
36
|
if (options)
|
37
37
|
if (source = options[:escape])
|
38
38
|
case (source.to_sym)
|
@@ -62,7 +62,7 @@ class Feather::Template
|
|
62
62
|
@_proc ||= begin
|
63
63
|
source = ''
|
64
64
|
|
65
|
-
self.compile(:
|
65
|
+
self.compile(source: source, escape_method: @escape_method)
|
66
66
|
|
67
67
|
eval(source)
|
68
68
|
end
|
@@ -88,7 +88,7 @@ class Feather::Template
|
|
88
88
|
when Feather::Template, Proc, Array
|
89
89
|
v
|
90
90
|
when TOKEN_TRIGGER
|
91
|
-
self.class.new(v, :
|
91
|
+
self.class.new(v, escape: @escape_method)
|
92
92
|
when nil
|
93
93
|
nil
|
94
94
|
else
|
@@ -107,7 +107,7 @@ class Feather::Template
|
|
107
107
|
_parent = _parents.shift
|
108
108
|
|
109
109
|
unless (_parent.is_a?(Feather::Template))
|
110
|
-
_parent = self.class.new(_parent, :
|
110
|
+
_parent = self.class.new(_parent, escape: @escape_method)
|
111
111
|
end
|
112
112
|
|
113
113
|
_parent.render(
|
@@ -208,7 +208,7 @@ class Feather::Template
|
|
208
208
|
stack << [ :section, tag, VariableTracker.new ]
|
209
209
|
|
210
210
|
source and source << "if(v);s<<v;v=v.is_a?(Array)?v[#{index}]:(v.is_a?(Hash)&&v[#{tag.inspect}]);"
|
211
|
-
source and source << "h.iterate(v){|
|
211
|
+
source and source << "h.iterate(v){|_v|;v=h.cast_as_vars(_v, s);"
|
212
212
|
|
213
213
|
sections and sections[tag] = true
|
214
214
|
when '^'
|
@@ -294,9 +294,10 @@ class Feather::Template
|
|
294
294
|
true
|
295
295
|
end
|
296
296
|
|
297
|
-
# For compatibility with YAML
|
298
|
-
def
|
299
|
-
|
297
|
+
# For compatibility with YAML
|
298
|
+
def encode_with(coder)
|
299
|
+
coder['content'] = @content
|
300
|
+
coder['escape_method'] = @escape_method
|
300
301
|
end
|
301
302
|
|
302
303
|
# For compatibility with the Psych YAML library
|
@@ -314,7 +315,7 @@ class Feather::Template
|
|
314
315
|
|
315
316
|
# For compatibility with Marshal.dump
|
316
317
|
def marshal_dump
|
317
|
-
[ @content, { :
|
318
|
+
[ @content, { escape: @escape_method } ]
|
318
319
|
end
|
319
320
|
|
320
321
|
# For compatibility with Marshal.load
|
data/test/helper.rb
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
begin
|
5
|
+
Bundler.setup(:default, :development)
|
6
|
+
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
|
13
|
+
gem 'minitest'
|
2
14
|
require 'minitest/autorun'
|
3
15
|
|
4
16
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -6,7 +18,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
6
18
|
|
7
19
|
require 'feather'
|
8
20
|
|
9
|
-
class
|
21
|
+
class MiniTest::Test
|
10
22
|
def assert_exception(exception_class, message = nil)
|
11
23
|
begin
|
12
24
|
yield
|
data/test/test_feather.rb
CHANGED
@@ -2,9 +2,19 @@ require_relative './helper'
|
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
|
5
|
-
class TestFeatherSupport <
|
6
|
-
def
|
7
|
-
test = {
|
5
|
+
class TestFeatherSupport < MiniTest::Test
|
6
|
+
def test_variable_stack_with_symbol_keys
|
7
|
+
test = {
|
8
|
+
test: [
|
9
|
+
{
|
10
|
+
a: 'a',
|
11
|
+
b: 'b'
|
12
|
+
},
|
13
|
+
{
|
14
|
+
c: 'c'
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
8
18
|
|
9
19
|
variables = Feather::Support.variable_stack(test)
|
10
20
|
|
@@ -14,8 +24,20 @@ class TestFeatherSupport < Minitest::Test
|
|
14
24
|
assert_equal 'b', variables[:test][0][:b]
|
15
25
|
assert_equal 'c', variables[:test][1][:c]
|
16
26
|
assert_equal nil, variables[:test][1][:d]
|
27
|
+
end
|
17
28
|
|
18
|
-
|
29
|
+
def test_variable_stack_with_string_keys
|
30
|
+
test = {
|
31
|
+
'test' => [
|
32
|
+
{
|
33
|
+
'a' => :a,
|
34
|
+
'b' => :b
|
35
|
+
},
|
36
|
+
{
|
37
|
+
'c' => :c
|
38
|
+
}
|
39
|
+
]
|
40
|
+
}
|
19
41
|
|
20
42
|
variables = Feather::Support.variable_stack(test)
|
21
43
|
|
@@ -27,13 +49,39 @@ class TestFeatherSupport < Minitest::Test
|
|
27
49
|
assert_equal [ 'test' ], Feather::Support.variable_stack('test')
|
28
50
|
assert_equal [ 'test' ], Feather::Support.variable_stack([ 'test' ], false)
|
29
51
|
assert_equal [ 'test' ], Feather::Support.variable_stack([ 'test' ])
|
30
|
-
|
31
|
-
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_variable_stack_with_multiple_values
|
55
|
+
variables = Feather::Support.variable_stack(
|
56
|
+
head: [
|
57
|
+
{
|
58
|
+
tag: 'meta'
|
59
|
+
},
|
60
|
+
{
|
61
|
+
tag: 'link'
|
62
|
+
}
|
63
|
+
]
|
64
|
+
)
|
32
65
|
|
33
66
|
assert_equal 'meta', variables[:head][0][:tag]
|
34
67
|
assert_equal 'link', variables[:head][1][:tag]
|
35
|
-
|
36
|
-
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_variable_stack_with_deeper_nesting
|
71
|
+
test = {
|
72
|
+
'top' => {
|
73
|
+
'layer' => 'top',
|
74
|
+
't' => 'top',
|
75
|
+
'middle' => {
|
76
|
+
'layer' => 'middle',
|
77
|
+
'm' => 'middle',
|
78
|
+
'bottom' => {
|
79
|
+
'layer' => 'bottom',
|
80
|
+
'b' => 'bottom'
|
81
|
+
}
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
37
85
|
|
38
86
|
variables = Feather::Support.variable_stack(test)
|
39
87
|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Tadman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
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'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: jeweler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +38,20 @@ dependencies:
|
|
24
38
|
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: A simple light-weight text templating system
|
28
56
|
email: github@tadman.ca
|
29
57
|
executables: []
|
@@ -33,6 +61,7 @@ extra_rdoc_files:
|
|
33
61
|
- README.md
|
34
62
|
files:
|
35
63
|
- ".document"
|
64
|
+
- ".travis.yml"
|
36
65
|
- Gemfile
|
37
66
|
- LICENSE.txt
|
38
67
|
- README.md
|
@@ -68,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
97
|
version: '0'
|
69
98
|
requirements: []
|
70
99
|
rubyforge_project:
|
71
|
-
rubygems_version: 2.
|
100
|
+
rubygems_version: 2.5.1
|
72
101
|
signing_key:
|
73
102
|
specification_version: 4
|
74
103
|
summary: Light-weight text tempating system
|