musterb 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/musterb.rb +1 -0
- data/lib/musterb/evaluator.rb +10 -4
- data/lib/musterb/hash_extractor.rb +2 -2
- data/lib/musterb/musterbifier.rb +8 -4
- data/lib/musterb/null_extractor.rb +11 -0
- data/lib/musterb/object_extractor.rb +3 -3
- data/lib/musterb/version.rb +1 -1
- data/spec/musterb/evaluator_spec.rb +15 -0
- data/spec/musterb/hash_extractor_spec.rb +4 -4
- data/spec/musterb/musterbifier_spec.rb +8 -0
- data/spec/musterb/object_extractor_spec.rb +3 -3
- metadata +3 -1
data/lib/musterb.rb
CHANGED
data/lib/musterb/evaluator.rb
CHANGED
@@ -4,7 +4,11 @@ class Musterb::Evaluator
|
|
4
4
|
end
|
5
5
|
|
6
6
|
def [](symbol)
|
7
|
-
@context
|
7
|
+
return @context.value if symbol == "."
|
8
|
+
final_context = symbol.split(".").inject(@context) do |con, symbol|
|
9
|
+
new_context con[symbol], con
|
10
|
+
end
|
11
|
+
final_context.value
|
8
12
|
end
|
9
13
|
|
10
14
|
def block(symbol)
|
@@ -38,12 +42,14 @@ class Musterb::Evaluator
|
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
|
-
def new_context(value)
|
45
|
+
def new_context(value, old_context = @context)
|
42
46
|
case value
|
43
47
|
when Hash
|
44
|
-
HashExtractor.new(value,
|
48
|
+
Musterb::HashExtractor.new(value, old_context)
|
49
|
+
when nil
|
50
|
+
Musterb::NullExtractor.new(old_context)
|
45
51
|
else
|
46
|
-
ObjectExtractor.new(value,
|
52
|
+
Musterb::ObjectExtractor.new(value, old_context)
|
47
53
|
end
|
48
54
|
end
|
49
55
|
|
data/lib/musterb/musterbifier.rb
CHANGED
@@ -8,15 +8,19 @@ class Musterb::Musterbifier
|
|
8
8
|
match = $1
|
9
9
|
case match[0]
|
10
10
|
when '#'
|
11
|
-
"<% musterb.block '#{match[1..-1]}' do %>"
|
11
|
+
"<% musterb.block '#{match[1..-1].strip}' do %>"
|
12
12
|
when '^'
|
13
|
-
"<% musterb.block_unless '#{match[1..-1]}' do %>"
|
13
|
+
"<% musterb.block_unless '#{match[1..-1].strip}' do %>"
|
14
14
|
when "/"
|
15
15
|
"<% end %>"
|
16
16
|
when '{'
|
17
|
-
"<%= musterb['#{match[1..-2]}'] %>"
|
17
|
+
"<%= musterb['#{match[1..-2].strip}'] %>"
|
18
|
+
when '&'
|
19
|
+
"<%= musterb['#{match[1..-1].strip}'] %>"
|
20
|
+
when '!'
|
21
|
+
""
|
18
22
|
else
|
19
|
-
"<%== musterb['#{match}'] %>"
|
23
|
+
"<%== musterb['#{match.strip}'] %>"
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
class ObjectExtractor
|
2
|
-
attr_reader :parent
|
1
|
+
class Musterb::ObjectExtractor
|
2
|
+
attr_reader :parent, :value
|
3
3
|
|
4
4
|
def initialize(value, parent)
|
5
5
|
@value = value
|
6
6
|
@parent = parent
|
7
7
|
end
|
8
8
|
|
9
|
-
def [](symbol)
|
9
|
+
def [](symbol)
|
10
10
|
if @value.respond_to? symbol
|
11
11
|
@value.send(symbol)
|
12
12
|
else
|
data/lib/musterb/version.rb
CHANGED
@@ -5,6 +5,21 @@ describe Musterb::Evaluator do
|
|
5
5
|
evaluator["foo"].should eq "bar"
|
6
6
|
end
|
7
7
|
|
8
|
+
it "pulls out values from ." do
|
9
|
+
evaluator = Musterb::Evaluator.new Musterb::ObjectExtractor.new(2, nil)
|
10
|
+
evaluator["."].should eq 2
|
11
|
+
end
|
12
|
+
|
13
|
+
it "can do nested values" do
|
14
|
+
evaluator = Musterb::Evaluator.new Musterb::ObjectExtractor.new(2, nil)
|
15
|
+
evaluator["next.to_s"].should eq "3"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does not barf when pulling out a value on nil" do
|
19
|
+
evaluator = Musterb::Evaluator.new Musterb::HashExtractor.new({:foo => nil}, nil)
|
20
|
+
evaluator["foo.bar"].should eq nil
|
21
|
+
end
|
22
|
+
|
8
23
|
context "block" do
|
9
24
|
it "yields to the block if a value is set" do
|
10
25
|
foo = "bar"
|
@@ -1,16 +1,16 @@
|
|
1
|
-
describe HashExtractor do
|
1
|
+
describe Musterb::HashExtractor do
|
2
2
|
it "can pull values out from a hash" do
|
3
|
-
extractor = HashExtractor.new({"foo" => "bar"}, nil)
|
3
|
+
extractor = Musterb::HashExtractor.new({"foo" => "bar"}, nil)
|
4
4
|
extractor["foo"].should eq "bar"
|
5
5
|
end
|
6
6
|
|
7
7
|
it "can pull values out from a symbol" do
|
8
|
-
extractor = HashExtractor.new({:foo => "bar"}, nil)
|
8
|
+
extractor = Musterb::HashExtractor.new({:foo => "bar"}, nil)
|
9
9
|
extractor["foo"].should eq "bar"
|
10
10
|
end
|
11
11
|
|
12
12
|
it "delegates to the parent if there is no match" do
|
13
|
-
extractor = HashExtractor.new({}, HashExtractor.new({:foo => "bar"}, nil))
|
13
|
+
extractor = Musterb::HashExtractor.new({}, Musterb::HashExtractor.new({:foo => "bar"}, nil))
|
14
14
|
extractor["foo"].should eq "bar"
|
15
15
|
end
|
16
16
|
end
|
@@ -11,6 +11,10 @@ describe Musterb::Musterbifier do
|
|
11
11
|
Musterb::Musterbifier.new("Hello, {{{world}}}!").to_erb.should eq "Hello, <%= musterb['world'] %>!"
|
12
12
|
end
|
13
13
|
|
14
|
+
it "does not escape if it starts with &" do
|
15
|
+
Musterb::Musterbifier.new("Hello, {{& world}}!").to_erb.should eq "Hello, <%= musterb['world'] %>!"
|
16
|
+
end
|
17
|
+
|
14
18
|
it "replaces blocks correctly" do
|
15
19
|
Musterb::Musterbifier.new("{{#cond}}foo{{/cond}}").to_erb.should eq "<% musterb.block 'cond' do %>foo<% end %>"
|
16
20
|
end
|
@@ -18,4 +22,8 @@ describe Musterb::Musterbifier do
|
|
18
22
|
it "replaces carrot correctly" do
|
19
23
|
Musterb::Musterbifier.new("{{^cond}}foo{{/cond}}").to_erb.should eq "<% musterb.block_unless 'cond' do %>foo<% end %>"
|
20
24
|
end
|
25
|
+
|
26
|
+
it "replaces comments with nothing" do
|
27
|
+
Musterb::Musterbifier.new("{{! foo\n bar}}").to_erb.should eq ""
|
28
|
+
end
|
21
29
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
describe ObjectExtractor do
|
1
|
+
describe Musterb::ObjectExtractor do
|
2
2
|
it "calls methods on the object" do
|
3
|
-
extractor = ObjectExtractor.new(2, nil)
|
3
|
+
extractor = Musterb::ObjectExtractor.new(2, nil)
|
4
4
|
extractor["to_s"].should eq "2"
|
5
5
|
end
|
6
6
|
|
7
7
|
it "delegates to the parent if there it doesn't respnd to something" do
|
8
|
-
extractor = ObjectExtractor.new(2, ObjectExtractor.new("string", nil))
|
8
|
+
extractor = Musterb::ObjectExtractor.new(2, Musterb::ObjectExtractor.new("string", nil))
|
9
9
|
extractor["upcase"].should eq "STRING"
|
10
10
|
end
|
11
11
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: musterb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -89,6 +89,8 @@ files:
|
|
89
89
|
bGliL211c3RlcmIvaGFzaF9leHRyYWN0b3IucmI=
|
90
90
|
- !binary |-
|
91
91
|
bGliL211c3RlcmIvbXVzdGVyYmlmaWVyLnJi
|
92
|
+
- !binary |-
|
93
|
+
bGliL211c3RlcmIvbnVsbF9leHRyYWN0b3IucmI=
|
92
94
|
- !binary |-
|
93
95
|
bGliL211c3RlcmIvb2JqZWN0X2V4dHJhY3Rvci5yYg==
|
94
96
|
- !binary |-
|