@@ -2,7 +2,6 @@ package vibes
22
33import (
44 "fmt"
5- "strings"
65)
76
87func stringMember (str Value , property string ) (Value , error ) {
@@ -11,129 +10,8 @@ func stringMember(str Value, property string) (Value, error) {
1110 return stringMemberQuery (property )
1211 case "strip" , "strip!" , "squish" , "squish!" , "lstrip" , "lstrip!" , "rstrip" , "rstrip!" , "chomp" , "chomp!" , "delete_prefix" , "delete_prefix!" , "delete_suffix" , "delete_suffix!" , "upcase" , "upcase!" , "downcase" , "downcase!" , "capitalize" , "capitalize!" , "swapcase" , "swapcase!" , "reverse" , "reverse!" :
1312 return stringMemberTransforms (property )
14- case "sub" :
15- return NewAutoBuiltin ("string.sub" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
16- if len (args ) != 2 {
17- return NewNil (), fmt .Errorf ("string.sub expects pattern and replacement" )
18- }
19- regex , err := stringRegexOption ("sub" , kwargs )
20- if err != nil {
21- return NewNil (), err
22- }
23- if args [0 ].Kind () != KindString {
24- return NewNil (), fmt .Errorf ("string.sub pattern must be string" )
25- }
26- if args [1 ].Kind () != KindString {
27- return NewNil (), fmt .Errorf ("string.sub replacement must be string" )
28- }
29- updated , err := stringSub (receiver .String (), args [0 ].String (), args [1 ].String (), regex )
30- if err != nil {
31- return NewNil (), fmt .Errorf ("string.sub invalid regex: %v" , err )
32- }
33- return NewString (updated ), nil
34- }), nil
35- case "sub!" :
36- return NewAutoBuiltin ("string.sub!" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
37- if len (args ) != 2 {
38- return NewNil (), fmt .Errorf ("string.sub! expects pattern and replacement" )
39- }
40- regex , err := stringRegexOption ("sub!" , kwargs )
41- if err != nil {
42- return NewNil (), err
43- }
44- if args [0 ].Kind () != KindString {
45- return NewNil (), fmt .Errorf ("string.sub! pattern must be string" )
46- }
47- if args [1 ].Kind () != KindString {
48- return NewNil (), fmt .Errorf ("string.sub! replacement must be string" )
49- }
50- updated , err := stringSub (receiver .String (), args [0 ].String (), args [1 ].String (), regex )
51- if err != nil {
52- return NewNil (), fmt .Errorf ("string.sub! invalid regex: %v" , err )
53- }
54- return stringBangResult (receiver .String (), updated ), nil
55- }), nil
56- case "gsub" :
57- return NewAutoBuiltin ("string.gsub" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
58- if len (args ) != 2 {
59- return NewNil (), fmt .Errorf ("string.gsub expects pattern and replacement" )
60- }
61- regex , err := stringRegexOption ("gsub" , kwargs )
62- if err != nil {
63- return NewNil (), err
64- }
65- if args [0 ].Kind () != KindString {
66- return NewNil (), fmt .Errorf ("string.gsub pattern must be string" )
67- }
68- if args [1 ].Kind () != KindString {
69- return NewNil (), fmt .Errorf ("string.gsub replacement must be string" )
70- }
71- updated , err := stringGSub (receiver .String (), args [0 ].String (), args [1 ].String (), regex )
72- if err != nil {
73- return NewNil (), fmt .Errorf ("string.gsub invalid regex: %v" , err )
74- }
75- return NewString (updated ), nil
76- }), nil
77- case "gsub!" :
78- return NewAutoBuiltin ("string.gsub!" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
79- if len (args ) != 2 {
80- return NewNil (), fmt .Errorf ("string.gsub! expects pattern and replacement" )
81- }
82- regex , err := stringRegexOption ("gsub!" , kwargs )
83- if err != nil {
84- return NewNil (), err
85- }
86- if args [0 ].Kind () != KindString {
87- return NewNil (), fmt .Errorf ("string.gsub! pattern must be string" )
88- }
89- if args [1 ].Kind () != KindString {
90- return NewNil (), fmt .Errorf ("string.gsub! replacement must be string" )
91- }
92- updated , err := stringGSub (receiver .String (), args [0 ].String (), args [1 ].String (), regex )
93- if err != nil {
94- return NewNil (), fmt .Errorf ("string.gsub! invalid regex: %v" , err )
95- }
96- return stringBangResult (receiver .String (), updated ), nil
97- }), nil
98- case "split" :
99- return NewAutoBuiltin ("string.split" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
100- if len (args ) > 1 {
101- return NewNil (), fmt .Errorf ("string.split accepts at most one separator" )
102- }
103- text := receiver .String ()
104- var parts []string
105- if len (args ) == 0 {
106- parts = strings .Fields (text )
107- } else {
108- if args [0 ].Kind () != KindString {
109- return NewNil (), fmt .Errorf ("string.split separator must be string" )
110- }
111- parts = strings .Split (text , args [0 ].String ())
112- }
113- values := make ([]Value , len (parts ))
114- for i , part := range parts {
115- values [i ] = NewString (part )
116- }
117- return NewArray (values ), nil
118- }), nil
119- case "template" :
120- return NewAutoBuiltin ("string.template" , func (exec * Execution , receiver Value , args []Value , kwargs map [string ]Value , block Value ) (Value , error ) {
121- if len (args ) != 1 {
122- return NewNil (), fmt .Errorf ("string.template expects exactly one context hash" )
123- }
124- if args [0 ].Kind () != KindHash && args [0 ].Kind () != KindObject {
125- return NewNil (), fmt .Errorf ("string.template context must be hash" )
126- }
127- strict , err := stringTemplateOption (kwargs )
128- if err != nil {
129- return NewNil (), err
130- }
131- rendered , err := stringTemplate (receiver .String (), args [0 ], strict )
132- if err != nil {
133- return NewNil (), err
134- }
135- return NewString (rendered ), nil
136- }), nil
13+ case "sub" , "sub!" , "gsub" , "gsub!" , "split" , "template" :
14+ return stringMemberTextOps (property )
13715 default :
13816 return NewNil (), fmt .Errorf ("unknown string method %s" , property )
13917 }
0 commit comments