format_engine 0.3.0 → 0.3.1
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/README.md +20 -11
- data/lib/format_engine/format_spec/literal.rb +1 -1
- data/lib/format_engine/version.rb +1 -1
- data/mocks/demo/demo_format.rb +4 -2
- data/mocks/demo/demo_parse.rb +4 -2
- data/mocks/demo.rb +11 -2
- data/mocks/test_person_mock.rb +3 -2
- data/tests/format_spec_tests.rb +17 -0
- data/tests/formatter_engine_tests.rb +10 -9
- data/tests/parser_engine_tests.rb +33 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31f6ac5a6816b11346d2bfe10a94108395ac2feb
|
4
|
+
data.tar.gz: 9f0aabe82aa6fcaeac3a9300bb17b2588e48ff52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a4c4b22b157eeccaaaa6225e6a22db1b6c2fef0c1ee38ff5e05b3088f840990c55832f26995c5d5de0175e70e2d6cccae6b822ad1c1e8e0c9b20170d4025073
|
7
|
+
data.tar.gz: 54370ba86beaeaae3faaf6b354e8fc6a63781b5b73695ccf1ccc5e20afd08f1d2a3a1808127df5887172e309e940ba026d319f88a6de811f358f19f27aebad00
|
data/README.md
CHANGED
@@ -37,6 +37,8 @@ require 'format_engine'
|
|
37
37
|
|
38
38
|
#A demo class for the format_engine gem.
|
39
39
|
|
40
|
+
require 'format_engine'
|
41
|
+
|
40
42
|
class Customer
|
41
43
|
extend FormatEngine::AttrFormatter
|
42
44
|
extend FormatEngine::AttrParser
|
@@ -47,32 +49,39 @@ class Customer
|
|
47
49
|
#Demo customer last name
|
48
50
|
attr_reader :last_name
|
49
51
|
|
52
|
+
#Demo customer age
|
53
|
+
attr_reader :age
|
54
|
+
|
50
55
|
#Demo defn of the strfmt method for formatted string output!
|
51
56
|
attr_formatter :strfmt,
|
52
|
-
{"%
|
53
|
-
"%
|
57
|
+
{"%a" => lambda {cat "%#{fmt.width_str}d" % src.age },
|
58
|
+
"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name },
|
59
|
+
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name }
|
60
|
+
}
|
54
61
|
|
55
62
|
#Demo defn of the strprs method for formatted string input!
|
56
63
|
attr_parser :strprs,
|
57
|
-
{"%
|
64
|
+
{"%a" => lambda { tmp[:age] = found.to_i if parse(/(\d)+/ ) },
|
65
|
+
"%f" => lambda { tmp[:fn] = found if parse(/(\w)+/ ) },
|
58
66
|
"%l" => lambda { tmp[:ln] = found if parse(/(\w)+/ ) },
|
59
|
-
:after => lambda { set dst.new(tmp[:fn], tmp[:ln]) }
|
67
|
+
:after => lambda { set dst.new(tmp[:fn], tmp[:ln], tmp[:age]) }
|
68
|
+
}
|
60
69
|
|
61
70
|
#Create an instance of the demo customer.
|
62
|
-
def initialize(first_name, last_name)
|
63
|
-
@first_name, @last_name = first_name, last_name
|
71
|
+
def initialize(first_name, last_name, age)
|
72
|
+
@first_name, @last_name, @age = first_name, last_name, age
|
64
73
|
end
|
65
74
|
end
|
66
75
|
|
67
76
|
#Then later in the code...
|
68
77
|
|
69
|
-
cust = Customer.
|
70
|
-
|
78
|
+
cust = Customer.strprs('Jane, Smith 22', "%f, %l %a")
|
79
|
+
|
80
|
+
# snd still in another part of Gotham City...
|
71
81
|
|
72
|
-
|
82
|
+
puts cust.strfmt('%f %l is %a years old.')
|
73
83
|
|
74
|
-
|
75
|
-
agent = Customer.strprs(in_str, "%f, %l")
|
84
|
+
# Prints out: Jane Smith is 22 years old.
|
76
85
|
|
77
86
|
#Etc, etc, etc ...
|
78
87
|
|
data/mocks/demo/demo_format.rb
CHANGED
@@ -7,7 +7,9 @@ class Customer
|
|
7
7
|
#The specification of the formatter method of the demo \Customer class.
|
8
8
|
|
9
9
|
attr_formatter :strfmt,
|
10
|
-
{"%
|
11
|
-
"%
|
10
|
+
{"%a" => lambda {cat "%#{fmt.width_str}d" % src.age },
|
11
|
+
"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name },
|
12
|
+
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name }
|
13
|
+
}
|
12
14
|
|
13
15
|
end
|
data/mocks/demo/demo_parse.rb
CHANGED
@@ -7,8 +7,10 @@ class Customer
|
|
7
7
|
#The specification of the parser method of the demo \Customer class.
|
8
8
|
|
9
9
|
attr_parser :strprs,
|
10
|
-
{"%
|
10
|
+
{"%a" => lambda { tmp[:age] = found.to_i if parse(/(\d)+/ ) },
|
11
|
+
"%f" => lambda { tmp[:fn] = found if parse(/(\w)+/ ) },
|
11
12
|
"%l" => lambda { tmp[:ln] = found if parse(/(\w)+/ ) },
|
12
|
-
:after => lambda { set dst.new(tmp[:fn], tmp[:ln]) }
|
13
|
+
:after => lambda { set dst.new(tmp[:fn], tmp[:ln], tmp[:age]) }
|
14
|
+
}
|
13
15
|
|
14
16
|
end
|
data/mocks/demo.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# A simple class of customer info.
|
2
2
|
|
3
|
+
require_relative '../lib/format_engine'
|
4
|
+
|
3
5
|
require_relative 'demo/demo_format'
|
4
6
|
require_relative 'demo/demo_parse'
|
5
7
|
|
@@ -11,8 +13,15 @@ class Customer
|
|
11
13
|
#Demo customer last name
|
12
14
|
attr_reader :last_name
|
13
15
|
|
16
|
+
#Demo customer age
|
17
|
+
attr_reader :age
|
18
|
+
|
14
19
|
#Create an instance of the demo customer.
|
15
|
-
def initialize(first_name, last_name)
|
16
|
-
@first_name, @last_name = first_name, last_name
|
20
|
+
def initialize(first_name, last_name, age)
|
21
|
+
@first_name, @last_name, @age = first_name, last_name, age
|
17
22
|
end
|
18
23
|
end
|
24
|
+
|
25
|
+
cust = Customer.strprs('Jane, Smith 22', "%f, %l %a")
|
26
|
+
|
27
|
+
puts cust.strfmt('%f %l is %a years old.')
|
data/mocks/test_person_mock.rb
CHANGED
@@ -3,8 +3,9 @@
|
|
3
3
|
class TestPerson
|
4
4
|
attr_reader :first_name
|
5
5
|
attr_reader :last_name
|
6
|
+
attr_reader :age
|
6
7
|
|
7
|
-
def initialize(first_name, last_name)
|
8
|
-
@first_name, @last_name = first_name, last_name
|
8
|
+
def initialize(first_name, last_name, age)
|
9
|
+
@first_name, @last_name, @age = first_name, last_name, age
|
9
10
|
end
|
10
11
|
end
|
data/tests/format_spec_tests.rb
CHANGED
@@ -25,6 +25,23 @@ class FormatSpecTester < Minitest::Test
|
|
25
25
|
assert_equal(nil, test.specs[0].parms)
|
26
26
|
end
|
27
27
|
|
28
|
+
def test_that_it_scans_tab_seperators
|
29
|
+
test = FormatEngine::FormatSpec.get_spec "%A\t%B"
|
30
|
+
assert_equal(Array, test.specs.class)
|
31
|
+
assert_equal(3, test.specs.length)
|
32
|
+
|
33
|
+
assert_equal(FormatEngine::FormatVariable, test.specs[0].class)
|
34
|
+
assert_equal("%A", test.specs[0].format)
|
35
|
+
assert_equal(nil, test.specs[0].parms)
|
36
|
+
|
37
|
+
assert_equal(FormatEngine::FormatLiteral, test.specs[1].class)
|
38
|
+
assert_equal("\t", test.specs[1].literal)
|
39
|
+
|
40
|
+
assert_equal(FormatEngine::FormatVariable, test.specs[2].class)
|
41
|
+
assert_equal("%B", test.specs[2].format)
|
42
|
+
assert_equal(nil, test.specs[2].parms)
|
43
|
+
end
|
44
|
+
|
28
45
|
def test_that_it_scans_option_variable_formats
|
29
46
|
"~@#&^&*-+=?_<>\\/.,|".each_char do |char|
|
30
47
|
test = FormatEngine::FormatSpec.get_spec "%#{char}A"
|
@@ -13,6 +13,7 @@ class FormatterTester < Minitest::Test
|
|
13
13
|
|
14
14
|
def make_formatter
|
15
15
|
FormatEngine::Engine.new(
|
16
|
+
"%a" => lambda {cat "%#{fmt.width_str}d" % src.age},
|
16
17
|
"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name},
|
17
18
|
"%F" => lambda {cat "%#{fmt.width_str}s" % src.first_name.upcase},
|
18
19
|
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name},
|
@@ -20,7 +21,7 @@ class FormatterTester < Minitest::Test
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def make_person
|
23
|
-
TestPerson.new("Squidly", "Jones")
|
24
|
+
TestPerson.new("Squidly", "Jones", 21)
|
24
25
|
end
|
25
26
|
|
26
27
|
def make_spec(str)
|
@@ -32,23 +33,23 @@ class FormatterTester < Minitest::Test
|
|
32
33
|
end
|
33
34
|
|
34
35
|
def test_that_it_can_format_normally
|
35
|
-
engine, obj, spec = make_all("Name = %f %l")
|
36
|
-
assert_equal("Name = Squidly Jones", engine.do_format(obj, spec))
|
36
|
+
engine, obj, spec = make_all("Name = %f %l %a")
|
37
|
+
assert_equal("Name = Squidly Jones 21", engine.do_format(obj, spec))
|
37
38
|
end
|
38
39
|
|
39
40
|
def test_that_it_can_format_shouting
|
40
|
-
engine, obj, spec = make_all("Name = %F %L")
|
41
|
-
assert_equal("Name = SQUIDLY JONES", engine.do_format(obj, spec))
|
41
|
+
engine, obj, spec = make_all("Name = %F %L %a")
|
42
|
+
assert_equal("Name = SQUIDLY JONES 21", engine.do_format(obj, spec))
|
42
43
|
end
|
43
44
|
|
44
45
|
def test_that_it_can_format_wider
|
45
|
-
engine, obj, spec = make_all("Name = %-10f %-10l")
|
46
|
-
assert_equal("Name = Squidly Jones
|
46
|
+
engine, obj, spec = make_all("Name = %-10f %-10l %-5a")
|
47
|
+
assert_equal("Name = Squidly Jones 21 ", engine.do_format(obj, spec))
|
47
48
|
end
|
48
49
|
|
49
50
|
def test_that_it_can_format_right
|
50
|
-
engine, obj, spec = make_all("Name = %10f %10l")
|
51
|
-
assert_equal("Name = Squidly Jones", engine.do_format(obj, spec))
|
51
|
+
engine, obj, spec = make_all("Name = %10f %10l %5a")
|
52
|
+
assert_equal("Name = Squidly Jones 21", engine.do_format(obj, spec))
|
52
53
|
end
|
53
54
|
|
54
55
|
def test_that_it_calls_before_and_after
|
@@ -13,7 +13,8 @@ class ParserTester < Minitest::Test
|
|
13
13
|
|
14
14
|
def make_parser
|
15
15
|
FormatEngine::Engine.new(
|
16
|
-
"%
|
16
|
+
"%a" => lambda { tmp[:age] = found.to_i if parse(/\d+/) },
|
17
|
+
"%f" => lambda { tmp[:fn] = found if parse(/(\w)+/) },
|
17
18
|
"%F" => lambda { tmp[:fn] = found.upcase if parse(/(\w)+/) },
|
18
19
|
"%-F" => lambda { tmp[:fn] = found.capitalize if parse(/(\w)+/) },
|
19
20
|
"%l" => lambda { tmp[:ln] = found if parse(/(\w)+/ ) },
|
@@ -22,13 +23,15 @@ class ParserTester < Minitest::Test
|
|
22
23
|
"%t" => lambda { parse("\t") },
|
23
24
|
"%!t" => lambda { parse!("\t") },
|
24
25
|
|
25
|
-
:after => lambda
|
26
|
+
:after => lambda do
|
27
|
+
set TestPerson.new(*[tmp[:fn], tmp[:ln], tmp[:age]].delete_if(&:nil?))
|
28
|
+
end)
|
26
29
|
end
|
27
30
|
|
28
31
|
def test_that_it_can_parse
|
29
32
|
engine = make_parser
|
30
|
-
spec = "%f, %l"
|
31
|
-
result = engine.do_parse("Squidly, Jones", TestPerson, spec)
|
33
|
+
spec = "%f, %l %a"
|
34
|
+
result = engine.do_parse("Squidly, Jones 55", TestPerson, spec)
|
32
35
|
|
33
36
|
assert_equal(TestPerson, result.class)
|
34
37
|
assert_equal("Squidly", result.first_name)
|
@@ -37,8 +40,8 @@ class ParserTester < Minitest::Test
|
|
37
40
|
|
38
41
|
def test_that_it_can_parse_loudly
|
39
42
|
engine = make_parser
|
40
|
-
spec = "%F, %L"
|
41
|
-
result = engine.do_parse("Squidly, Jones", TestPerson, spec)
|
43
|
+
spec = "%F, %L %a"
|
44
|
+
result = engine.do_parse("Squidly, Jones 55", TestPerson, spec)
|
42
45
|
|
43
46
|
assert_equal(TestPerson, result.class)
|
44
47
|
assert_equal("SQUIDLY", result.first_name)
|
@@ -47,8 +50,8 @@ class ParserTester < Minitest::Test
|
|
47
50
|
|
48
51
|
def test_that_it_can_fix_shouting
|
49
52
|
engine = make_parser
|
50
|
-
spec = "%-F, %-L"
|
51
|
-
result = engine.do_parse("SQUIDLY, JONES", TestPerson, spec)
|
53
|
+
spec = "%-F, %-L %a"
|
54
|
+
result = engine.do_parse("SQUIDLY, JONES 55", TestPerson, spec)
|
52
55
|
|
53
56
|
assert_equal(TestPerson, result.class)
|
54
57
|
assert_equal("Squidly", result.first_name)
|
@@ -57,24 +60,24 @@ class ParserTester < Minitest::Test
|
|
57
60
|
|
58
61
|
def test_that_it_can_flex_parse
|
59
62
|
engine = make_parser
|
60
|
-
spec = "%f, %l"
|
63
|
+
spec = "%f, %l, %a"
|
61
64
|
|
62
65
|
#No spaces.
|
63
|
-
result = engine.do_parse("Squidly,Jones", TestPerson, spec)
|
66
|
+
result = engine.do_parse("Squidly,Jones,55", TestPerson, spec)
|
64
67
|
|
65
68
|
assert_equal(TestPerson, result.class)
|
66
69
|
assert_equal("Squidly", result.first_name)
|
67
70
|
assert_equal("Jones", result.last_name)
|
68
71
|
|
69
72
|
#One space.
|
70
|
-
result = engine.do_parse("Squidly, Jones", TestPerson, spec)
|
73
|
+
result = engine.do_parse("Squidly, Jones, 55", TestPerson, spec)
|
71
74
|
|
72
75
|
assert_equal(TestPerson, result.class)
|
73
76
|
assert_equal("Squidly", result.first_name)
|
74
77
|
assert_equal("Jones", result.last_name)
|
75
78
|
|
76
79
|
#Two spaces.
|
77
|
-
result = engine.do_parse("Squidly, Jones", TestPerson, spec)
|
80
|
+
result = engine.do_parse("Squidly, Jones, 55", TestPerson, spec)
|
78
81
|
|
79
82
|
assert_equal(TestPerson, result.class)
|
80
83
|
assert_equal("Squidly", result.first_name)
|
@@ -83,8 +86,8 @@ class ParserTester < Minitest::Test
|
|
83
86
|
|
84
87
|
def test_that_it_can_tab_parse
|
85
88
|
engine = make_parser
|
86
|
-
spec = "%f%
|
87
|
-
result = engine.do_parse("Squidly\tJones", TestPerson, spec)
|
89
|
+
spec = "%f %l %a"
|
90
|
+
result = engine.do_parse("Squidly\tJones\t55", TestPerson, spec)
|
88
91
|
|
89
92
|
assert_equal(TestPerson, result.class)
|
90
93
|
assert_equal("Squidly", result.first_name)
|
@@ -93,17 +96,30 @@ class ParserTester < Minitest::Test
|
|
93
96
|
|
94
97
|
def test_that_it_can_detect_errors
|
95
98
|
engine = make_parser
|
96
|
-
spec = "%f, %l"
|
99
|
+
spec = "%f, %l %a"
|
97
100
|
|
98
101
|
assert_raises(RuntimeError) do
|
99
|
-
engine.do_parse("Squidly Jones", TestPerson, spec)
|
102
|
+
engine.do_parse("Squidly Jones 55", TestPerson, spec)
|
100
103
|
end
|
101
104
|
|
102
|
-
spec = "%f%!t%l"
|
105
|
+
spec = "%f%!t%l %a"
|
103
106
|
|
104
107
|
assert_raises(RuntimeError) do
|
108
|
+
engine.do_parse("Squidly Jones 55", TestPerson, spec)
|
109
|
+
end
|
110
|
+
|
111
|
+
spec = "%f %l"
|
112
|
+
|
113
|
+
assert_raises(ArgumentError) do
|
114
|
+
engine.do_parse("Squidly Jones 55", TestPerson, spec)
|
115
|
+
end
|
116
|
+
|
117
|
+
spec = "%f %l %a"
|
118
|
+
|
119
|
+
assert_raises(ArgumentError) do
|
105
120
|
engine.do_parse("Squidly Jones", TestPerson, spec)
|
106
121
|
end
|
122
|
+
|
107
123
|
end
|
108
124
|
|
109
125
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: format_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|