format_engine 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -9
- data/lib/format_engine/format_spec/variable.rb +1 -1
- data/lib/format_engine/format_spec.rb +1 -1
- data/lib/format_engine/version.rb +1 -1
- data/mocks/demo/demo_format.rb +2 -2
- data/tests/format_spec_tests.rb +20 -2
- data/tests/formatter_engine_tests.rb +6 -10
- data/tests/variable_spec_tests.rb +9 -0
- 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: 6a255811c1f0df1bc9b92fc02eaaee55b58b2f73
|
4
|
+
data.tar.gz: 10705de5b1a6bf5722cbf4d8350cce41f10a08c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b61ac28dd23cd0cb2c3a58f6ba6cf80b79d883933a0906f24de50c173019d718e49c89a807a0f476d444970dd407e9a2626e8b115bf47363adf9d77ba4db025d
|
7
|
+
data.tar.gz: e76b17e94d5e83e26e0c99c2d4e43b82e1c00ec5bd49de5c490c6c06f149bbee446fffecee2d9564d806176e9e269b7400269873c626b7c0a350af4f6829e147
|
data/README.md
CHANGED
@@ -49,8 +49,8 @@ class Customer
|
|
49
49
|
|
50
50
|
#Demo defn of the strfmt method for formatted string output!
|
51
51
|
attr_formatter :strfmt,
|
52
|
-
{"%f" => lambda {cat src.first_name
|
53
|
-
"%l" => lambda {cat src.last_name
|
52
|
+
{"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name },
|
53
|
+
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name } }
|
54
54
|
|
55
55
|
#Demo defn of the strprs method for formatted string input!
|
56
56
|
attr_parser :strprs,
|
@@ -82,11 +82,8 @@ agent = Customer.strprs(in_str, "%f, %l")
|
|
82
82
|
Format String Specification Syntax (BNF):
|
83
83
|
|
84
84
|
* spec = ( text | item )+
|
85
|
-
* item = "%" flag* (parm ("." parm)?)? command
|
86
|
-
* flag =
|
87
|
-
"&" | "*" | "-" | "+" | "=" |
|
88
|
-
"?" | "_" | "<" | ">" | "\\" |
|
89
|
-
"/" | "." | "," | "|" | "!" )
|
85
|
+
* item = "%" flag* ("+" | "-")?(parm ("." parm)?)? command
|
86
|
+
* flag = "~"|"@"|"#"|"&"|"^"|"&"|"*"|"="|"?"|"_"|"<"|">"|"\\"|"/"|"."|","|"|"|"!"
|
90
87
|
* parm = ("0" .. "9")+
|
91
88
|
* command = ("a" .. "z" | "A" .. "Z")
|
92
89
|
|
@@ -95,7 +92,7 @@ Format String Specification Syntax (BNF):
|
|
95
92
|
|
96
93
|
The format specification:
|
97
94
|
```ruby
|
98
|
-
"Elapsed = %*02H:%M
|
95
|
+
"Elapsed = %*02H:%M:%-5.2S!"
|
99
96
|
```
|
100
97
|
creates the following format specification array:
|
101
98
|
|
@@ -105,7 +102,7 @@ creates the following format specification array:
|
|
105
102
|
Literal(":"),
|
106
103
|
Variable("%M", nil).
|
107
104
|
Literal(":"),
|
108
|
-
Variable("%S", ["5", "2"]),
|
105
|
+
Variable("%S", ["-5", "2"]),
|
109
106
|
Literal("!")]
|
110
107
|
```
|
111
108
|
Where literals are processed as themselves and variables are executed by looking
|
@@ -41,7 +41,7 @@ module FormatEngine
|
|
41
41
|
#Scan the format string extracting literals and variables.
|
42
42
|
def scan_spec(fmt_string)
|
43
43
|
until fmt_string.empty?
|
44
|
-
if fmt_string =~ /%[
|
44
|
+
if fmt_string =~ /%[~@#$^&*\=?_<>\\\/\.,\|!]*[-+]?(\d+(\.\d+)?)?[a-zA-Z]/
|
45
45
|
@specs << FormatLiteral.new($PREMATCH) unless $PREMATCH.empty?
|
46
46
|
@specs << FormatVariable.new($MATCH)
|
47
47
|
fmt_string = $POSTMATCH
|
data/mocks/demo/demo_format.rb
CHANGED
@@ -7,7 +7,7 @@ class Customer
|
|
7
7
|
#The specification of the formatter method of the demo \Customer class.
|
8
8
|
|
9
9
|
attr_formatter :strfmt,
|
10
|
-
{"%f" => lambda {cat src.first_name
|
11
|
-
"%l" => lambda {cat src.last_name
|
10
|
+
{"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name },
|
11
|
+
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name } }
|
12
12
|
|
13
13
|
end
|
data/tests/format_spec_tests.rb
CHANGED
@@ -75,6 +75,24 @@ class FormatSpecTester < Minitest::Test
|
|
75
75
|
assert_equal("123.456", test.specs[0].parm_str)
|
76
76
|
end
|
77
77
|
|
78
|
+
def test_negative_variable_formats
|
79
|
+
test = FormatEngine::FormatSpec.get_spec "%-123.456A"
|
80
|
+
assert_equal(Array, test.specs.class)
|
81
|
+
assert_equal(1, test.specs.length)
|
82
|
+
assert_equal(FormatEngine::FormatVariable, test.specs[0].class)
|
83
|
+
assert_equal("%A", test.specs[0].format)
|
84
|
+
|
85
|
+
assert_equal(Array, test.specs[0].parms.class)
|
86
|
+
assert_equal(2, test.specs[0].parms.length)
|
87
|
+
assert_equal("-123", test.specs[0].parms[0])
|
88
|
+
assert_equal("456", test.specs[0].parms[1])
|
89
|
+
assert(test.specs[0].has_width?)
|
90
|
+
assert(test.specs[0].has_prec?)
|
91
|
+
assert_equal("-123", test.specs[0].width_str)
|
92
|
+
assert_equal("456", test.specs[0].prec_str)
|
93
|
+
assert_equal("-123.456", test.specs[0].parm_str)
|
94
|
+
end
|
95
|
+
|
78
96
|
def test_multipart_formats
|
79
97
|
test = FormatEngine::FormatSpec.get_spec "T(%+02A:%3B:%4.1C)"
|
80
98
|
|
@@ -85,9 +103,9 @@ class FormatSpecTester < Minitest::Test
|
|
85
103
|
assert_equal("T(", test.specs[0].literal)
|
86
104
|
|
87
105
|
assert_equal(FormatEngine::FormatVariable, test.specs[1].class)
|
88
|
-
assert_equal("
|
106
|
+
assert_equal("%A", test.specs[1].format)
|
89
107
|
assert_equal(1, test.specs[1].parms.length)
|
90
|
-
assert_equal("02", test.specs[1].parms[0])
|
108
|
+
assert_equal("+02", test.specs[1].parms[0])
|
91
109
|
|
92
110
|
assert_equal(FormatEngine::FormatLiteral, test.specs[2].class)
|
93
111
|
assert_equal(":", test.specs[2].literal)
|
@@ -13,14 +13,10 @@ class FormatterTester < Minitest::Test
|
|
13
13
|
|
14
14
|
def make_formatter
|
15
15
|
FormatEngine::Engine.new(
|
16
|
-
"%f" => lambda {cat src.first_name
|
17
|
-
"
|
18
|
-
"%
|
19
|
-
"
|
20
|
-
"%l" => lambda {cat src.last_name.ljust(fmt.width)},
|
21
|
-
"%-l" => lambda {cat src.last_name.rjust(fmt.width)},
|
22
|
-
"%L" => lambda {cat src.last_name.upcase.ljust(fmt.width) },
|
23
|
-
"%-L" => lambda {cat src.last_name.upcase.rjust(fmt.width) })
|
16
|
+
"%f" => lambda {cat "%#{fmt.width_str}s" % src.first_name},
|
17
|
+
"%F" => lambda {cat "%#{fmt.width_str}s" % src.first_name.upcase},
|
18
|
+
"%l" => lambda {cat "%#{fmt.width_str}s" % src.last_name},
|
19
|
+
"%L" => lambda {cat "%#{fmt.width_str}s" % src.last_name.upcase})
|
24
20
|
end
|
25
21
|
|
26
22
|
def make_person
|
@@ -46,12 +42,12 @@ class FormatterTester < Minitest::Test
|
|
46
42
|
end
|
47
43
|
|
48
44
|
def test_that_it_can_format_wider
|
49
|
-
engine, obj, spec = make_all("Name =
|
45
|
+
engine, obj, spec = make_all("Name = %-10f %-10l")
|
50
46
|
assert_equal("Name = Squidly Jones ", engine.do_format(obj, spec))
|
51
47
|
end
|
52
48
|
|
53
49
|
def test_that_it_can_format_right
|
54
|
-
engine, obj, spec = make_all("Name =
|
50
|
+
engine, obj, spec = make_all("Name = %10f %10l")
|
55
51
|
assert_equal("Name = Squidly Jones", engine.do_format(obj, spec))
|
56
52
|
end
|
57
53
|
|
@@ -46,5 +46,14 @@ class VariableSpecTester < Minitest::Test
|
|
46
46
|
assert_equal("5", test.prec_str)
|
47
47
|
assert_equal("10.5", test.parm_str)
|
48
48
|
|
49
|
+
test = FormatEngine::FormatVariable.new("%-10.5B")
|
50
|
+
assert(test.has_width?)
|
51
|
+
assert_equal(-10, test.width)
|
52
|
+
assert_equal("-10", test.width_str)
|
53
|
+
assert(test.has_prec?)
|
54
|
+
assert_equal(5, test.prec)
|
55
|
+
assert_equal("5", test.prec_str)
|
56
|
+
assert_equal("-10.5", test.parm_str)
|
57
|
+
|
49
58
|
end
|
50
59
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|