paramedic 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 05384eaaef8a30563606ec636ebc18d4212436cb
4
- data.tar.gz: ab3c3df45ccf8d10d52b4da661da2453561dca25
3
+ metadata.gz: 1d62dc7b67b68ff1e498b57ed5d6e773406f8d1b
4
+ data.tar.gz: b22d3ad0db632998a533b53b8fe8f1e676610868
5
5
  SHA512:
6
- metadata.gz: ccb93be6473d3eab1579b454d2e25151ed31e67d057d5bc9341ac53617d038fb360f3f73ea3ab85810cbbba64ecf349e50b2f3689efedb88fcfbb4bdb01ffee2
7
- data.tar.gz: 32ef855bfaaf76f2a458c516657c6c3588af651abb7c69b00a31d30691e60dcdc6c2a3656032f7c26235ced501f68b22a1a0955f0436c283adc1ce51952963b3
6
+ metadata.gz: 4287bf0321aa006c052e599727c63f3fd0b554bafb9e2edfa7999b044ebae5f5a49e66befbf9d8f68c39e3ab998222b73445f980e12dea9d364a62533dea318e
7
+ data.tar.gz: 97fba8e3d5165e331cf7a06aeb9c5465b7a4b08e42e8f3b99cff9b56912b036112d9e3b8a2fc5a6a1a8376bbd0a74c3a3e80c88b6e944a87482cb7d2df99bd1e
data/README.md CHANGED
@@ -22,32 +22,34 @@ Or install it yourself as:
22
22
 
23
23
  Encoder takes a hash of params and their values, and makes them safe for older Microsoft services, like so:
24
24
 
25
- > params = { CMD: '/cmd?name=bill&id=3' }
26
- > Paramedic::Encoder.new(params).to_s
27
- => "CMD=%2Fcmd%3Fname%3Dbill%24id%3D3"
25
+ ```ruby
26
+ params = { CMD: '/cmd?name=bill&id=3' }
27
+ Paramedic::Encoder.new(params).to_s
28
+ # => "CMD=%2Fcmd%3Fname%3Dbill%24id%3D3"
29
+ ```
28
30
 
29
- ### XmlMasseuse
31
+ ### XMLMasseuse
30
32
 
31
33
  Let's say that you have an XML document assigned to a variable like so:
32
34
 
33
- > xml = """
34
- ...
35
- <superheroes>
36
- <superman>
37
- <name>Clark Kent</name>
38
- </superman>
39
- </superheroes>
40
- ...
41
- """
42
-
43
- If you want the <superheroes /> element's children to be treated like they're not part of the XML document,
44
- do the following:
35
+ ```xml
36
+ <!-- /superheroes.xml -->
37
+ <superheroes>
38
+ <superman>
39
+ <name>Clark Kent</name>
40
+ </superman>
41
+ </superheroes>
42
+ ```
45
43
 
46
- > Paramedic::XmlMasseuse.new(xml: xml, escape_tags: ['superheroes']).to_xml
44
+ If you want the `<superheroes />` element's children to be treated like they're not part of the XML document,
45
+ do the following:
47
46
 
48
- The result will be the following string:
47
+ ```ruby
48
+ xml = File.read('/superheroes.xml')
49
+ Paramedic::XMLMasseuse.new(xml, escape_tags: ['superheroes']).to_xml
49
50
 
50
- => <superheroes>&lt;superman&gt;&lt;name&gt;Clark Kent&lt;/name&gt;</superheroes>
51
+ # => "<superheroes>&lt;superman&gt;&lt;name&gt;Clark Kent&lt;/name&gt;</superheroes>"
52
+ ```
51
53
 
52
54
  ## Contributing
53
55
 
@@ -0,0 +1,15 @@
1
+ Feature: Encode a query string
2
+
3
+ Scenario:
4
+ Given a query string that requires encoding
5
+ And a value for REQUESTTYPE of SAVE
6
+ And a value for TABLE of undefined
7
+ And a value for GROUP of WEB_RMLEAS
8
+ And a value for PAGE of APPLY
9
+ And a value for ID of MRI_1
10
+ And a value for CMD in command.xml
11
+ And a value for DATA in data.xml
12
+ When the keys and values are encoded
13
+ Then they produce the string in expected_output.txt
14
+
15
+
@@ -0,0 +1,29 @@
1
+ Given(/^a query string that requires encoding$/) do
2
+ @params = {}
3
+ end
4
+
5
+ Given(/^a value for (\w+)? in (\w+.xml)$/) do |key, file|
6
+ @params[key] = Paramedic::XMLMasseuse.new(File.readlines("features/support/#{file}").join('')).to_xml
7
+ end
8
+
9
+ And(/^a value for (\w+)? of (\w+)?/) do |key, value|
10
+ @params[key] = value
11
+ end
12
+
13
+ When(/^the keys and values are encoded$/) do
14
+ @result = Paramedic::Encoder.new(@params).to_s
15
+ end
16
+
17
+ Then(/^they produce the string in (.+)?$/) do |output_file|
18
+ expected_output = File.readlines("features/support/#{output_file}").first
19
+
20
+ result_hash = produce_hash(@result)
21
+
22
+ expected_hash = produce_hash(expected_output)
23
+
24
+ result_hash.each_pair do |key, value|
25
+ expected_value = expected_hash[key]
26
+
27
+ expect(value.strip).to eq expected_value.strip
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ <?xml version="1.0"?>
2
+ <ViewCommand>
3
+ <GROUP>WEB_RMLEAS</GROUP>
4
+ <PAGE>APPLY</PAGE>
5
+ <COMMAND>SAVE</COMMAND>
6
+ <PARMS>~GROUP=WEB_RMLEAS~MODAL=Y~MENUNAME=WEB_RMHOME~MENUID=MRI_69~INHERITMENU=Y~WHERE=NAME.NAMEID=''~RMPROPID=0115~NAMEGROUP=~NAME.RESPROPID=0115~PATH=C:\Program Files (x86)\MriWeb\~URL=/mripage.asp~</PARMS>
7
+ <CURRENTKEY>~NAMEID=~</CURRENTKEY>
8
+ <CURRENTORDERFLDS>~NAMEID=''~</CURRENTORDERFLDS>
9
+ <ORDERBY></ORDERBY>
10
+ <WHERE>NAME.NAMEID=''</WHERE>
11
+ <USERQRY></USERQRY>
12
+ <GROUP>WEB_RMLEAS</GROUP>
13
+ <MENUNAME>WEB_RMHOME</MENUNAME>
14
+ <MENUID>MRI_69</MENUID>
15
+ <PARENTMENUNAME></PARENTMENUNAME>
16
+ <PARENTMENUID></PARENTMENUID>
17
+ <FILTERID></FILTERID>
18
+ <FORM>APPLY</FORM>
19
+ <CMDBTNS>
20
+ <BTNSAVE>CLNTCMD{SAVE,CLOSE,RETURN{CLNTCMD{RECALC}}}</BTNSAVE>
21
+ <BTNCANCEL1>CLNTCMD{CANCELCLOSE}</BTNCANCEL1>
22
+ </CMDBTNS>
23
+ <HIDE>
24
+ <UTILBILLLINK>HIDE</UTILBILLLINK>
25
+ <CHKOPTOUT>HIDE</CHKOPTOUT>
26
+ <L_CHKOPTOUT>HIDE</L_CHKOPTOUT>
27
+ </HIDE>
28
+ <UPDATEABLE>Y</UPDATEABLE>
29
+ <ABANDON></ABANDON>
30
+ <DELETECOOKIES>COOKIE_7;</DELETECOOKIES>
31
+ <CLIENTEXPR>
32
+ </CLIENTEXPR>
33
+ <BASECLIENTEXPR>
34
+ </BASECLIENTEXPR>
35
+ <HELPPAGE>RM\RM.htm</HELPPAGE>
36
+ <PATH>C:\Program Files (x86)\MriWeb\</PATH>
37
+ <URL>/mripage.asp</URL>
38
+ <COMMENT>
39
+ 27837.5: Start GetWebHtmlAndData
40
+ 27837.7 0 elapsed for BuildMenu
41
+ 27837.72 0.0156 elapsed for Build HTML
42
+ 27837.72 0 elapsed for CmdXml to Svr
43
+ 27837.73 0 elapsed for cleargroup
44
+ 27837.73 0 elapsed for GetData 1
45
+ 27837.75 0.0176 elapsed for BaseQry SQL
46
+ 27837.77 0.0137 elapsed for BaseQry Fetch
47
+ 27837.77 0.0312 elapsed for ExecuteQuery total
48
+ 27837.78 0 elapsed for Build DataXml (0 Rows)
49
+ 27837.78 0.0469 elapsed for GetData
50
+ Evaluate Count: 21
51
+ SQL Time: 0.3398438</COMMENT>
52
+ <APPLID></APPLID>
53
+ </ViewCommand>
@@ -0,0 +1,129 @@
1
+ <?xml version="1.0"?>
2
+ <TABLEDATA>
3
+ <FORM>
4
+ <PRE_ADDRLEN></PRE_ADDRLEN>
5
+ <CUR_ADDRLEN></CUR_ADDRLEN>
6
+ <MRIX_54>
7
+ <N>:: Application Details for William Brewer</N>
8
+ </MRIX_54>
9
+ <PRE_ADDRESS2>
10
+ <N></N>
11
+ </PRE_ADDRESS2>
12
+ <PRE_CITY>
13
+ <N></N>
14
+ </PRE_CITY>
15
+ <PRE_STATE>
16
+ <N></N>
17
+ </PRE_STATE>
18
+ <PRE_ZIP>
19
+ <N></N>
20
+ </PRE_ZIP>
21
+ <EMP_ADDRESS1>
22
+ <N></N>
23
+ </EMP_ADDRESS1>
24
+ <EMP_CITY>
25
+ <N></N>
26
+ </EMP_CITY>
27
+ <EMP_STATE>
28
+ <N></N>
29
+ </EMP_STATE>
30
+ <EMP_ZIP>
31
+ <N></N>
32
+ </EMP_ZIP>
33
+ <EMP_ADDRESS2>
34
+ <N></N>
35
+ </EMP_ADDRESS2>
36
+ <GET_ADDR></GET_ADDR>
37
+ <PRE_ADDRESS>
38
+ <N></N>
39
+ </PRE_ADDRESS>
40
+ <CUR_ADDRESS2>
41
+ <N></N>
42
+ </CUR_ADDRESS2>
43
+ <CUR_CITY>
44
+ <N>Mountain View</N>
45
+ </CUR_CITY>
46
+ <CUR_STATE>
47
+ <N>CA</N>
48
+ </CUR_STATE>
49
+ <CUR_ZIP>
50
+ <N>94040</N>
51
+ </CUR_ZIP>
52
+ <CUR_ADDRESS>
53
+ <N>123 Main Str.</N>
54
+ </CUR_ADDRESS>
55
+ <APPFEE>
56
+ <N>$.00</N>
57
+ </APPFEE>
58
+ <EMT_NAME>
59
+ <N></N>
60
+ </EMT_NAME>
61
+ <EMT_PHONE>
62
+ <N></N>
63
+ </EMT_PHONE>
64
+ <UTILBILLLINK>
65
+ <N>Utility Billing</N>
66
+ </UTILBILLLINK>
67
+ <PREVNAMEID></PREVNAMEID>
68
+ <NAME.BIRTHDAY>
69
+ <N>3/27/1963</N>
70
+ </NAME.BIRTHDAY>
71
+ <SSN>
72
+ <N>999999992</N>
73
+ </SSN>
74
+ <PROSPECT.MNLYINC>0<N>4000</N></PROSPECT.MNLYINC>
75
+ <NAMEGROUP></NAMEGROUP>
76
+ <TYPE>A</TYPE>
77
+ <NAMEID></NAMEID>
78
+ <RMPROPID>0115</RMPROPID>
79
+ <EMP_COMPANY>
80
+ <N></N>
81
+ </EMP_COMPANY>
82
+ <EMP_JOBTITLE>
83
+ <N></N>
84
+ </EMP_JOBTITLE>
85
+ <EMP_JOBYRS>
86
+ <N></N>
87
+ </EMP_JOBYRS>
88
+ <EMP_PHONE>4085551231</EMP_PHONE>
89
+ <FIRSTNAME>William</FIRSTNAME>
90
+ <LASTNAME>Brewer</LASTNAME>
91
+ <PROSPECT.APPLDATE>3/11/2014</PROSPECT.APPLDATE>
92
+ <PROSPECT.OCCDATE>4/12/2015</PROSPECT.OCCDATE>
93
+ <NAME.MVIREASN></NAME.MVIREASN>
94
+ <PROSPECT.CURRRENT>0.00</PROSPECT.CURRRENT>
95
+ <PROSPECT.PROPOSEDRENT>.00</PROSPECT.PROPOSEDRENT>
96
+ <PROSPECT.RMRENTID>41</PROSPECT.RMRENTID>
97
+ <NOSSN>N</NOSSN>
98
+ <NAME.LICENSE>
99
+ <N>B123456789</N>
100
+ </NAME.LICENSE>
101
+ <APPCODE>APP</APPCODE>
102
+ <NAME.RESPROPID>0115</NAME.RESPROPID>
103
+ <CHKOPTOUT></CHKOPTOUT>
104
+ <NAME.OCCUPATION></NAME.OCCUPATION>
105
+ <MRIX_49_URL>
106
+ <N>~LINK=LOADMODALPAGE{VEHICLE,WEB_RMSHR,,&MENUNAME=WEB_RMHOME&MENUID=MRI_69&INHERITMENU=Y&WHERE=VEHICLE.NAMEID='URLSAFE{CLNTVAL{NAMEID}}'&RETURNCOMMAND=C&PASSED_NAMEID=URLSAFE{CLNTVAL{NAMEID}}}~EXPR=</N>
107
+ </MRIX_49_URL>
108
+ <MRIX_51_URL>
109
+ <N>~LINK=LOADMODALPAGE{APCRED,WEB_RMLEAS,,&MENUNAME=WEB_RMHOME&MENUID=MRI_69&INHERITMENU=Y&WHERE=NAME.NAMEID='URLSAFE{CLNTVAL{NAMEID}}'&RETURNCOMMAND=C&PASSED_NAMEID=URLSAFE{CLNTVAL{NAMEID}}}~EXPR=</N>
110
+ </MRIX_51_URL>
111
+ <UTILBILLLINK_URL>
112
+ <N>~LINK=LOADMODALPAGE{UTILBILL,WEB_RMLEAS,,&MENUNAME=WEB_RMHOME&MENUID=MRI_69&INHERITMENU=Y&NAMEGROUP=URLSAFE{CLNTVAL{NAMEID}}&RMPROPID=URLSAFE{CLNTVAL{RMPROPID}}}~EXPR=</N>
113
+ </UTILBILLLINK_URL>
114
+ <NAME.LASTDATE>4/12/2015 7:43:34 AM</NAME.LASTDATE>
115
+ <NAME.USERID></NAME.USERID>
116
+ <NAME.WHO>SS</NAME.WHO>
117
+ <NAME.QUALIFY>N</NAME.QUALIFY>
118
+ <NAME.PREVRESIDENCE>R</NAME.PREVRESIDENCE>
119
+ <NAME.INCOME>@@</NAME.INCOME>
120
+ <NAME.GUARANTOR>N</NAME.GUARANTOR>
121
+ <NAME.LOCATION>C</NAME.LOCATION>
122
+ <NAME.MARRIED>N</NAME.MARRIED>
123
+ <NAME.USIZE>00</NAME.USIZE>
124
+ <NAME.BACKGRNDSTATUS>A</NAME.BACKGRNDSTATUS>
125
+ <NAME.WEBNOCHECKS>N</NAME.WEBNOCHECKS>
126
+ <NAME.AUTOSPREAD>N</NAME.AUTOSPREAD>
127
+ </FORM>
128
+ <GRIDS/>
129
+ </TABLEDATA>
@@ -0,0 +1,14 @@
1
+ require 'paramedic'
2
+
3
+ def produce_hash(string)
4
+ hash = {}
5
+
6
+ pieces = string.split('&')
7
+
8
+ pieces.each do |piece|
9
+ sub = piece.split('=')
10
+ hash[sub[0]] = sub[1]
11
+ end
12
+
13
+ hash
14
+ end
@@ -0,0 +1 @@
1
+ REQUESTTYPE=SAVE&TABLE=undefined&GROUP=WEB_RMLEAS&PAGE=APPLY&ID=MRI_1&CMD=%3C%3Fxml%20version%3D%221.0%22%3F%3E%0D%0A%3CViewCommand%3E%3CGROUP%3EWEB_RMLEAS%3C%2FGROUP%3E%3CPAGE%3EAPPLY%3C%2FPAGE%3E%3CCOMMAND%3ESAVE%3C%2FCOMMAND%3E%3CPARMS%3E~GROUP%3DWEB_RMLEAS~MODAL%3DY~MENUNAME%3DWEB_RMHOME~MENUID%3DMRI_69~INHERITMENU%3DY~WHERE%3DNAME.NAMEID%3D''~RMPROPID%3D0115~NAMEGROUP%3D~NAME.RESPROPID%3D0115~PATH%3DC%3A%5CProgram%20Files%20(x86)%5CMriWeb%5C~URL%3D%2Fmripage.asp~%3C%2FPARMS%3E%3CCURRENTKEY%3E~NAMEID%3D~%3C%2FCURRENTKEY%3E%3CCURRENTORDERFLDS%3E~NAMEID%3D''~%3C%2FCURRENTORDERFLDS%3E%3CORDERBY%3E%3C%2FORDERBY%3E%3CWHERE%3ENAME.NAMEID%3D''%3C%2FWHERE%3E%3CUSERQRY%3E%3C%2FUSERQRY%3E%3CGROUP%3EWEB_RMLEAS%3C%2FGROUP%3E%3CMENUNAME%3EWEB_RMHOME%3C%2FMENUNAME%3E%3CMENUID%3EMRI_69%3C%2FMENUID%3E%3CPARENTMENUNAME%3E%3C%2FPARENTMENUNAME%3E%3CPARENTMENUID%3E%3C%2FPARENTMENUID%3E%3CFILTERID%3E%3C%2FFILTERID%3E%3CFORM%3EAPPLY%3C%2FFORM%3E%3CCMDBTNS%3E%3CBTNSAVE%3ECLNTCMD%7BSAVE%2CCLOSE%2CRETURN%7BCLNTCMD%7BRECALC%7D%7D%7D%3C%2FBTNSAVE%3E%3CBTNCANCEL1%3ECLNTCMD%7BCANCELCLOSE%7D%3C%2FBTNCANCEL1%3E%3C%2FCMDBTNS%3E%3CHIDE%3E%3CUTILBILLLINK%3EHIDE%3C%2FUTILBILLLINK%3E%3CCHKOPTOUT%3EHIDE%3C%2FCHKOPTOUT%3E%3CL_CHKOPTOUT%3EHIDE%3C%2FL_CHKOPTOUT%3E%3C%2FHIDE%3E%3CUPDATEABLE%3EY%3C%2FUPDATEABLE%3E%3CABANDON%3E%3C%2FABANDON%3E%3CDELETECOOKIES%3ECOOKIE_7%3B%3C%2FDELETECOOKIES%3E%3CCLIENTEXPR%3E%0D%0A%20%20%3C%2FCLIENTEXPR%3E%3CBASECLIENTEXPR%3E%0D%0A%20%20%3C%2FBASECLIENTEXPR%3E%3CHELPPAGE%3ERM%5CRM.htm%3C%2FHELPPAGE%3E%3CPATH%3EC%3A%5CProgram%20Files%20(x86)%5CMriWeb%5C%3C%2FPATH%3E%3CURL%3E%2Fmripage.asp%3C%2FURL%3E%3CCOMMENT%3E%0D%0A27837.5%3A%20Start%20GetWebHtmlAndData%0D%0A27837.7%20%20%20%20%20%200%20elapsed%20for%20%20%20%20%20BuildMenu%0D%0A27837.72%20%20%20%20%20%200.0156%20elapsed%20for%20%20%20Build%20HTML%0D%0A27837.72%20%20%20%20%20%200%20elapsed%20for%20CmdXml%20to%20Svr%0D%0A27837.73%20%20%20%20%20%200%20elapsed%20for%20cleargroup%0D%0A27837.73%20%20%20%20%20%200%20elapsed%20for%20GetData%201%0D%0A27837.75%20%20%20%20%20%200.0176%20elapsed%20for%20BaseQry%20SQL%0D%0A27837.77%20%20%20%20%20%200.0137%20elapsed%20for%20BaseQry%20Fetch%0D%0A27837.77%20%20%20%20%20%200.0312%20elapsed%20for%20ExecuteQuery%20total%0D%0A27837.78%20%20%20%20%20%200%20elapsed%20for%20Build%20DataXml%20(0%20Rows)%0D%0A27837.78%20%20%20%20%20%200.0469%20elapsed%20for%20GetData%0D%0A%20%20Evaluate%20Count%3A%2021%0D%0A%20%20SQL%20Time%3A%200.3398438%3C%2FCOMMENT%3E%3CAPPLID%3E%3C%2FAPPLID%3E%3C%2FViewCommand%3E%0D%0A&DATA=%3C%3Fxml%20version%3D%221.0%22%3F%3E%0D%0A%3CTABLEDATA%3E%3CFORM%3E%3CPRE_ADDRLEN%3E%3C%2FPRE_ADDRLEN%3E%3CCUR_ADDRLEN%3E%3C%2FCUR_ADDRLEN%3E%3CMRIX_54%3E%3CN%3E%3A%3A%20Application%20Details%20for%20William%20Brewer%3C%2FN%3E%3C%2FMRIX_54%3E%3CPRE_ADDRESS2%3E%3CN%3E%3C%2FN%3E%3C%2FPRE_ADDRESS2%3E%3CPRE_CITY%3E%3CN%3E%3C%2FN%3E%3C%2FPRE_CITY%3E%3CPRE_STATE%3E%3CN%3E%3C%2FN%3E%3C%2FPRE_STATE%3E%3CPRE_ZIP%3E%3CN%3E%3C%2FN%3E%3C%2FPRE_ZIP%3E%3CEMP_ADDRESS1%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_ADDRESS1%3E%3CEMP_CITY%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_CITY%3E%3CEMP_STATE%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_STATE%3E%3CEMP_ZIP%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_ZIP%3E%3CEMP_ADDRESS2%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_ADDRESS2%3E%3CGET_ADDR%3E%3C%2FGET_ADDR%3E%3CPRE_ADDRESS%3E%3CN%3E%3C%2FN%3E%3C%2FPRE_ADDRESS%3E%3CCUR_ADDRESS2%3E%3CN%3E%3C%2FN%3E%3C%2FCUR_ADDRESS2%3E%3CCUR_CITY%3E%3CN%3EMountain%20View%3C%2FN%3E%3C%2FCUR_CITY%3E%3CCUR_STATE%3E%3CN%3ECA%3C%2FN%3E%3C%2FCUR_STATE%3E%3CCUR_ZIP%3E%3CN%3E94040%3C%2FN%3E%3C%2FCUR_ZIP%3E%3CCUR_ADDRESS%3E%3CN%3E123%20Main%20Str.%3C%2FN%3E%3C%2FCUR_ADDRESS%3E%3CAPPFEE%3E%3CN%3E%24.00%3C%2FN%3E%3C%2FAPPFEE%3E%3CEMT_NAME%3E%3CN%3E%3C%2FN%3E%3C%2FEMT_NAME%3E%3CEMT_PHONE%3E%3CN%3E%3C%2FN%3E%3C%2FEMT_PHONE%3E%3CUTILBILLLINK%3E%3CN%3EUtility%20Billing%3C%2FN%3E%3C%2FUTILBILLLINK%3E%3CPREVNAMEID%3E%3C%2FPREVNAMEID%3E%3CNAME.BIRTHDAY%3E%3CN%3E3%2F27%2F1963%3C%2FN%3E%3C%2FNAME.BIRTHDAY%3E%3CSSN%3E%3CN%3E999999992%3C%2FN%3E%3C%2FSSN%3E%3CPROSPECT.MNLYINC%3E0%3CN%3E4000%3C%2FN%3E%3C%2FPROSPECT.MNLYINC%3E%3CNAMEGROUP%3E%3C%2FNAMEGROUP%3E%3CTYPE%3EA%3C%2FTYPE%3E%3CNAMEID%3E%3C%2FNAMEID%3E%3CRMPROPID%3E0115%3C%2FRMPROPID%3E%3CEMP_COMPANY%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_COMPANY%3E%3CEMP_JOBTITLE%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_JOBTITLE%3E%3CEMP_JOBYRS%3E%3CN%3E%3C%2FN%3E%3C%2FEMP_JOBYRS%3E%3CEMP_PHONE%3E4085551231%3C%2FEMP_PHONE%3E%3CFIRSTNAME%3EWilliam%3C%2FFIRSTNAME%3E%3CLASTNAME%3EBrewer%3C%2FLASTNAME%3E%3CPROSPECT.APPLDATE%3E3%2F11%2F2014%3C%2FPROSPECT.APPLDATE%3E%3CPROSPECT.OCCDATE%3E4%2F12%2F2015%3C%2FPROSPECT.OCCDATE%3E%3CNAME.MVIREASN%3E%3C%2FNAME.MVIREASN%3E%3CPROSPECT.CURRRENT%3E0.00%3C%2FPROSPECT.CURRRENT%3E%3CPROSPECT.PROPOSEDRENT%3E.00%3C%2FPROSPECT.PROPOSEDRENT%3E%3CPROSPECT.RMRENTID%3E41%3C%2FPROSPECT.RMRENTID%3E%3CNOSSN%3EN%3C%2FNOSSN%3E%3CNAME.LICENSE%3E%3CN%3EB123456789%3C%2FN%3E%3C%2FNAME.LICENSE%3E%3CAPPCODE%3EAPP%3C%2FAPPCODE%3E%3CNAME.RESPROPID%3E0115%3C%2FNAME.RESPROPID%3E%3CCHKOPTOUT%3E%3C%2FCHKOPTOUT%3E%3CNAME.OCCUPATION%3E%3C%2FNAME.OCCUPATION%3E%3CMRIX_49_URL%3E%3CN%3E~LINK%3DLOADMODALPAGE%7BVEHICLE%2CWEB_RMSHR%2C%2C%26amp%3BMENUNAME%3DWEB_RMHOME%26amp%3BMENUID%3DMRI_69%26amp%3BINHERITMENU%3DY%26amp%3BWHERE%3DVEHICLE.NAMEID%3D'URLSAFE%7BCLNTVAL%7BNAMEID%7D%7D'%26amp%3BRETURNCOMMAND%3DC%26amp%3BPASSED_NAMEID%3DURLSAFE%7BCLNTVAL%7BNAMEID%7D%7D%7D~EXPR%3D%3C%2FN%3E%3C%2FMRIX_49_URL%3E%3CMRIX_51_URL%3E%3CN%3E~LINK%3DLOADMODALPAGE%7BAPCRED%2CWEB_RMLEAS%2C%2C%26amp%3BMENUNAME%3DWEB_RMHOME%26amp%3BMENUID%3DMRI_69%26amp%3BINHERITMENU%3DY%26amp%3BWHERE%3DNAME.NAMEID%3D'URLSAFE%7BCLNTVAL%7BNAMEID%7D%7D'%26amp%3BRETURNCOMMAND%3DC%26amp%3BPASSED_NAMEID%3DURLSAFE%7BCLNTVAL%7BNAMEID%7D%7D%7D~EXPR%3D%3C%2FN%3E%3C%2FMRIX_51_URL%3E%3CUTILBILLLINK_URL%3E%3CN%3E~LINK%3DLOADMODALPAGE%7BUTILBILL%2CWEB_RMLEAS%2C%2C%26amp%3BMENUNAME%3DWEB_RMHOME%26amp%3BMENUID%3DMRI_69%26amp%3BINHERITMENU%3DY%26amp%3BNAMEGROUP%3DURLSAFE%7BCLNTVAL%7BNAMEID%7D%7D%26amp%3BRMPROPID%3DURLSAFE%7BCLNTVAL%7BRMPROPID%7D%7D%7D~EXPR%3D%3C%2FN%3E%3C%2FUTILBILLLINK_URL%3E%3CNAME.LASTDATE%3E4%2F12%2F2015%207%3A43%3A34%20AM%3C%2FNAME.LASTDATE%3E%3CNAME.USERID%3E%3C%2FNAME.USERID%3E%3CNAME.WHO%3ESS%3C%2FNAME.WHO%3E%3CNAME.QUALIFY%3EN%3C%2FNAME.QUALIFY%3E%3CNAME.PREVRESIDENCE%3ER%3C%2FNAME.PREVRESIDENCE%3E%3CNAME.INCOME%3E%40%40%3C%2FNAME.INCOME%3E%3CNAME.GUARANTOR%3EN%3C%2FNAME.GUARANTOR%3E%3CNAME.LOCATION%3EC%3C%2FNAME.LOCATION%3E%3CNAME.MARRIED%3EN%3C%2FNAME.MARRIED%3E%3CNAME.USIZE%3E00%3C%2FNAME.USIZE%3E%3CNAME.BACKGRNDSTATUS%3EA%3C%2FNAME.BACKGRNDSTATUS%3E%3CNAME.WEBNOCHECKS%3EN%3C%2FNAME.WEBNOCHECKS%3E%3CNAME.AUTOSPREAD%3EN%3C%2FNAME.AUTOSPREAD%3E%3C%2FFORM%3E%3CGRIDS%3E%3C%2FGRIDS%3E%3C%2FTABLEDATA%3E%0D%0A
@@ -29,11 +29,11 @@ module Paramedic
29
29
  ',' => '%2C',
30
30
  ';' => '%3B',
31
31
  '#' => '%23',
32
- '&' => '%24',
32
+ '&' => '%26',
33
33
  '@' => '%40',
34
34
  #'%' => '%25', # Surprisingly, this one doesn't appear to be replaced. We'll need to confirm.
35
35
  '+' => '%2B',
36
- '$' => '%26',
36
+ '$' => '%24',
37
37
  '<' => '%3C',
38
38
  '>' => '%3E',
39
39
  #'~' => '%25', # Tilde too.
@@ -1,3 +1,3 @@
1
1
  module Paramedic
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -9,21 +9,34 @@ module Paramedic
9
9
  end
10
10
 
11
11
  def to_xml
12
- xml_document = Nokogiri::XML(xml, &:noblanks)
12
+ strip_tag_spacing(
13
+ escape_specified_tags(
14
+ Nokogiri::XML(remove_naked_ampersands(xml), &:noblanks)
15
+ )
16
+ )
17
+ end
18
+
19
+ private
20
+
21
+ def remove_naked_ampersands(text)
22
+ text.gsub('&', '&amp;')
23
+ end
24
+
25
+ def escape_specified_tags(xml_document)
13
26
  escape_tags.each do |escape_tag|
14
27
  xml_document.css(escape_tag).each do |element|
15
28
  strip_tag_spacing(element)
16
29
  element.inner_html = CGI.escape_html(element.inner_html)
17
30
  end
18
31
  end
19
- strip_tag_spacing(xml_document)
20
- end
21
32
 
22
- private
33
+ xml_document
34
+ end
23
35
 
24
- def strip_tag_spacing(xml)
25
- xml.to_xml(
26
- save_with: Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
36
+ def strip_tag_spacing(xml_document)
37
+ xml_document.to_xml(
38
+ save_with: Nokogiri::XML::Node::SaveOptions::AS_XML |
39
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
27
40
  )
28
41
  end
29
42
 
data/paramedic.gemspec CHANGED
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'nokogiri'
22
22
 
23
23
  spec.add_development_dependency 'bundler', '~> 1.6'
24
- spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'cucumber'
25
25
  spec.add_development_dependency 'guard'
26
26
  spec.add_development_dependency 'guard-rspec'
27
27
  spec.add_development_dependency 'pry'
28
+ spec.add_development_dependency 'rake'
28
29
  spec.add_development_dependency 'rspec'
29
30
  end
@@ -5,6 +5,39 @@ module Paramedic
5
5
  describe '#to_s' do
6
6
  subject { described_class.new(args).to_s }
7
7
 
8
+ context 'with single characters' do
9
+ let(:args) {
10
+ {
11
+ 'char' => char
12
+ }
13
+ }
14
+
15
+
16
+ context 'with a $' do
17
+ let(:char) { '$' }
18
+
19
+ it 'correctly encodes the character' do
20
+ expect(subject).to eq 'char=%24'
21
+ end
22
+ end
23
+
24
+ context 'with a %' do
25
+ let(:char) { '%' }
26
+
27
+ it 'correctly encodes the character' do
28
+ expect(subject).to eq 'char=%25'
29
+ end
30
+ end
31
+
32
+ context 'with a &' do
33
+ let(:char) { '&' }
34
+
35
+ it 'correctly encodes the character' do
36
+ expect(subject).to eq 'char=%26'
37
+ end
38
+ end
39
+ end
40
+
8
41
  context 'with a single parameter' do
9
42
  let(:args) {
10
43
  {
@@ -8,8 +8,54 @@ module Paramedic
8
8
  context 'with no escape tags specified' do
9
9
  let(:escape_tags) { [] }
10
10
 
11
- let(:xml) {
12
- <<-end_of_xml
11
+ context 'with a space between tags' do
12
+ let(:xml) {
13
+ <<-end_of_xml
14
+ <root>
15
+ <a>value1</a>
16
+ <b>value2</b>
17
+ </root>
18
+ end_of_xml
19
+ }
20
+
21
+ it 'strips the spaces between tags' do
22
+ expect(subject).to eq "<?xml version=\"1.0\"?>\n<root><a>value1</a><b>value2</b></root>\n"
23
+ end
24
+
25
+ it 'has a newline after the declaration' do
26
+ expect(subject).to include("<?xml version=\"1.0\"?>\n")
27
+ end
28
+
29
+ it 'has a newline at the end of the document' do
30
+ expect(subject[-1]).to eq "\n"
31
+ end
32
+ end
33
+
34
+ context 'when there are ampersands within the content' do
35
+ let(:expected_result) { <<-end_of_xml
36
+ <?xml version="1.0"?>
37
+ <root><MRIX_49_URL><N>~LINK=LOADMODALPAGE{VEHICLE,WEB_RMSHR,,&amp;MENUNAME=WEB_RMHOME&amp;MENUID=MRI_69&amp;INHERITMENU=Y&amp;WHERE=VEHICLE.NAMEID='URLSAFE{CLNTVAL{NAMEID}}'&amp;RETURNCOMMAND=C&amp;PASSED_NAMEID=URLSAFE{CLNTVAL{NAMEID}}}~EXPR=</N></MRIX_49_URL></root>
38
+ end_of_xml
39
+ }
40
+
41
+ let(:xml) {
42
+ <<-end_of_xml
43
+ <root>
44
+ <MRIX_49_URL>
45
+ <N>~LINK=LOADMODALPAGE{VEHICLE,WEB_RMSHR,,&MENUNAME=WEB_RMHOME&MENUID=MRI_69&INHERITMENU=Y&WHERE=VEHICLE.NAMEID='URLSAFE{CLNTVAL{NAMEID}}'&RETURNCOMMAND=C&PASSED_NAMEID=URLSAFE{CLNTVAL{NAMEID}}}~EXPR=</N>
46
+ </MRIX_49_URL>
47
+ </root>
48
+ end_of_xml
49
+ }
50
+
51
+ it 'incorporates the ampersands' do
52
+ expect(subject).to eq expected_result
53
+ end
54
+ end
55
+
56
+ context 'with complex xml' do
57
+ let(:xml) {
58
+ <<-end_of_xml
13
59
  <?xml version="1.0"?>
14
60
  <ViewCommand><GROUP>WEB_RMLEAS</GROUP><PAGE>OCCP</PAGE><COMMAND>SAVE</COMMAND><PARMS>~GROUP=WEB_RMLEAS~MENU=NONE~WHERE=NAME.NAMEID='{{id}}'~INFRAME=Y~PARENTMENUNAME=WEB_RMHOME~PARENTMENUID=MRI_69~PARENTSAVE=Y~PATH=C:\\Program Files (x86)\\MriWeb\\~URL=/mripage.asp~</PARMS>
15
61
  <CURRENTKEY>~NAMEID={{id}}~</CURRENTKEY>
@@ -64,29 +110,51 @@ module Paramedic
64
110
  </COMMENT>
65
111
  <APPLID></APPLID>
66
112
  </ViewCommand>
67
- end_of_xml
68
- }
113
+ end_of_xml
114
+ }
69
115
 
70
- it 'removes all but the first newline in between elements' do
71
- expect(subject.scan(/>\n</).count).to be 1
72
- end
73
-
74
- it 'does not collapse elements' do
75
- expect(subject.scan(/<USERQRY><\/USERQRY>/).count).to be 1
116
+ it 'does not collapse elements' do
117
+ expect(subject.scan(/<USERQRY><\/USERQRY>/).count).to be 1
118
+ end
76
119
  end
77
120
  end
78
121
 
79
122
  context 'with double encode tags specified' do
80
123
  let(:escape_tags) { ['COMMENT'] }
81
124
 
82
- let(:expected_result) { <<-end_of_xml
125
+ context 'when the encode tag content is text' do
126
+ let(:expected_result) { <<-end_of_xml
127
+ <?xml version="1.0"?>
128
+ <ViewCommand><COMMENT>\n a\nb\n </COMMENT></ViewCommand>
129
+ end_of_xml
130
+ }
131
+
132
+ let(:xml) {
133
+ <<-end_of_xml
134
+ <?xml version="1.0"?>
135
+ <ViewCommand>
136
+ <COMMENT>
137
+ a
138
+ b
139
+ </COMMENT>
140
+ </ViewCommand>
141
+ end_of_xml
142
+ }
143
+
144
+ it 'html escapes specified elements' do
145
+ expect(subject).to eq expected_result
146
+ end
147
+ end
148
+
149
+ context 'when the encode tag content is markup' do
150
+ let(:expected_result) { <<-end_of_xml
83
151
  <?xml version="1.0"?>
84
152
  <ViewCommand><COMMENT>&lt;html&gt;&lt;body&gt;&lt;p&gt;None&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</COMMENT></ViewCommand>
85
- end_of_xml
86
- }
153
+ end_of_xml
154
+ }
87
155
 
88
- let(:xml) {
89
- <<-end_of_xml
156
+ let(:xml) {
157
+ <<-end_of_xml
90
158
  <?xml version="1.0"?>
91
159
  <ViewCommand>
92
160
  <COMMENT>
@@ -97,14 +165,16 @@ end_of_xml
97
165
  </html>
98
166
  </COMMENT>
99
167
  </ViewCommand>
100
- end_of_xml
101
- }
168
+ end_of_xml
169
+ }
102
170
 
103
- it 'html escapes specified elements' do
104
- expect(subject).to eq expected_result
105
- puts subject
171
+ it 'html escapes specified elements' do
172
+ expect(subject).to eq expected_result
173
+ end
106
174
  end
107
175
  end
108
176
  end
109
177
  end
110
178
  end
179
+
180
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paramedic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Jaber
@@ -9,104 +9,118 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-09 00:00:00.000000000 Z
12
+ date: 2015-04-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ">="
25
+ - - '>='
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ~>
33
33
  - !ruby/object:Gem::Version
34
34
  version: '1.6'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ~>
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.6'
42
42
  - !ruby/object:Gem::Dependency
43
- name: rake
43
+ name: cucumber
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - '>='
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: guard
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
67
+ - - '>='
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: guard-rspec
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - '>='
75
75
  - !ruby/object:Gem::Version
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ">="
81
+ - - '>='
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: pry
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ">="
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rake
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
89
103
  - !ruby/object:Gem::Version
90
104
  version: '0'
91
105
  type: :development
92
106
  prerelease: false
93
107
  version_requirements: !ruby/object:Gem::Requirement
94
108
  requirements:
95
- - - ">="
109
+ - - '>='
96
110
  - !ruby/object:Gem::Version
97
111
  version: '0'
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: rspec
100
114
  requirement: !ruby/object:Gem::Requirement
101
115
  requirements:
102
- - - ">="
116
+ - - '>='
103
117
  - !ruby/object:Gem::Version
104
118
  version: '0'
105
119
  type: :development
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
108
122
  requirements:
109
- - - ">="
123
+ - - '>='
110
124
  - !ruby/object:Gem::Version
111
125
  version: '0'
112
126
  description: Parameter handler
@@ -117,13 +131,19 @@ executables: []
117
131
  extensions: []
118
132
  extra_rdoc_files: []
119
133
  files:
120
- - ".gitignore"
121
- - ".rspec"
134
+ - .gitignore
135
+ - .rspec
122
136
  - Gemfile
123
137
  - Guardfile
124
138
  - LICENSE.txt
125
139
  - README.md
126
140
  - Rakefile
141
+ - features/encode_a_request.feature
142
+ - features/step_definitions/steps.rb
143
+ - features/support/command.xml
144
+ - features/support/data.xml
145
+ - features/support/env.rb
146
+ - features/support/expected_output.txt
127
147
  - lib/paramedic.rb
128
148
  - lib/paramedic/encoder.rb
129
149
  - lib/paramedic/version.rb
@@ -142,21 +162,27 @@ require_paths:
142
162
  - lib
143
163
  required_ruby_version: !ruby/object:Gem::Requirement
144
164
  requirements:
145
- - - ">="
165
+ - - '>='
146
166
  - !ruby/object:Gem::Version
147
167
  version: '0'
148
168
  required_rubygems_version: !ruby/object:Gem::Requirement
149
169
  requirements:
150
- - - ">="
170
+ - - '>='
151
171
  - !ruby/object:Gem::Version
152
172
  version: '0'
153
173
  requirements: []
154
174
  rubyforge_project:
155
- rubygems_version: 2.4.5
175
+ rubygems_version: 2.0.14
156
176
  signing_key:
157
177
  specification_version: 4
158
178
  summary: Parameter handler
159
179
  test_files:
180
+ - features/encode_a_request.feature
181
+ - features/step_definitions/steps.rb
182
+ - features/support/command.xml
183
+ - features/support/data.xml
184
+ - features/support/env.rb
185
+ - features/support/expected_output.txt
160
186
  - spec/paramedic/encoder_spec.rb
161
187
  - spec/paramedic/xml_masseuse_spec.rb
162
188
  - spec/spec_helper.rb