paramedic 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Guardfile +14 -0
- data/LICENSE.txt +1 -1
- data/README.md +32 -3
- data/Rakefile +1 -1
- data/lib/paramedic/encoder.rb +4 -4
- data/lib/paramedic/version.rb +1 -1
- data/lib/paramedic/xml_masseuse.rb +32 -0
- data/lib/paramedic.rb +3 -3
- data/paramedic.gemspec +13 -12
- data/spec/paramedic/encoder_spec.rb +2 -2
- data/spec/paramedic/{xml_therapist_spec.rb → xml_masseuse_spec.rb} +44 -14
- metadata +20 -5
- data/lib/paramedic/xml_therapist.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05384eaaef8a30563606ec636ebc18d4212436cb
|
4
|
+
data.tar.gz: ab3c3df45ccf8d10d52b4da661da2453561dca25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccb93be6473d3eab1579b454d2e25151ed31e67d057d5bc9341ac53617d038fb360f3f73ea3ab85810cbbba64ecf349e50b2f3689efedb88fcfbb4bdb01ffee2
|
7
|
+
data.tar.gz: 32ef855bfaaf76f2a458c516657c6c3588af651abb7c69b00a31d30691e60dcdc6c2a3656032f7c26235ced501f68b22a1a0955f0436c283adc1ce51952963b3
|
data/.gitignore
CHANGED
data/Guardfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
guard :rspec, cmd: 'bundle exec rspec' do
|
2
|
+
require 'guard/rspec/dsl'
|
3
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
4
|
+
|
5
|
+
# RSpec files
|
6
|
+
rspec = dsl.rspec
|
7
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
8
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
9
|
+
watch(rspec.spec_files)
|
10
|
+
|
11
|
+
# Ruby files
|
12
|
+
ruby = dsl.ruby
|
13
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
14
|
+
end
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Paramedic
|
2
2
|
|
3
|
-
|
3
|
+
Paramedic provides parameters with a little extra help in dealing with some finnicky legacy systems.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,11 +18,40 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
### Encoder
|
22
|
+
|
23
|
+
Encoder takes a hash of params and their values, and makes them safe for older Microsoft services, like so:
|
24
|
+
|
25
|
+
> params = { CMD: '/cmd?name=bill&id=3' }
|
26
|
+
> Paramedic::Encoder.new(params).to_s
|
27
|
+
=> "CMD=%2Fcmd%3Fname%3Dbill%24id%3D3"
|
28
|
+
|
29
|
+
### XmlMasseuse
|
30
|
+
|
31
|
+
Let's say that you have an XML document assigned to a variable like so:
|
32
|
+
|
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:
|
45
|
+
|
46
|
+
> Paramedic::XmlMasseuse.new(xml: xml, escape_tags: ['superheroes']).to_xml
|
47
|
+
|
48
|
+
The result will be the following string:
|
49
|
+
|
50
|
+
=> <superheroes><superman><name>Clark Kent</name></superheroes>
|
22
51
|
|
23
52
|
## Contributing
|
24
53
|
|
25
|
-
1. Fork it ( https://github.com/
|
54
|
+
1. Fork it ( https://github.com/ryancammer/paramedic/fork )
|
26
55
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
56
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
57
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/Rakefile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
2
|
|
data/lib/paramedic/encoder.rb
CHANGED
@@ -28,23 +28,23 @@ module Paramedic
|
|
28
28
|
':' => '%3A',
|
29
29
|
',' => '%2C',
|
30
30
|
';' => '%3B',
|
31
|
-
'%0A' => '%0D%0A',
|
32
31
|
'#' => '%23',
|
33
32
|
'&' => '%24',
|
34
33
|
'@' => '%40',
|
35
|
-
#'%' => '%25',
|
34
|
+
#'%' => '%25', # Surprisingly, this one doesn't appear to be replaced. We'll need to confirm.
|
36
35
|
'+' => '%2B',
|
37
36
|
'$' => '%26',
|
38
37
|
'<' => '%3C',
|
39
38
|
'>' => '%3E',
|
40
|
-
#'~' => '%25',
|
39
|
+
#'~' => '%25', # Tilde too.
|
41
40
|
'^' => '%5E',
|
42
41
|
'`' => '%60',
|
43
42
|
?\ => '%5C',
|
44
43
|
'[' => '%5B',
|
45
44
|
']' => '%5D',
|
46
45
|
'|' => '%7C',
|
47
|
-
'"' => '%22'
|
46
|
+
'"' => '%22',
|
47
|
+
'%0A' => '%0D%0A' # This converts back to Microsoft's carriage return line feed funness.
|
48
48
|
}
|
49
49
|
end
|
50
50
|
|
data/lib/paramedic/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module Paramedic
|
5
|
+
class XMLMasseuse
|
6
|
+
def initialize(xml, opts={})
|
7
|
+
@xml = xml
|
8
|
+
@escape_tags = opts.fetch(:escape_tags, [])
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_xml
|
12
|
+
xml_document = Nokogiri::XML(xml, &:noblanks)
|
13
|
+
escape_tags.each do |escape_tag|
|
14
|
+
xml_document.css(escape_tag).each do |element|
|
15
|
+
strip_tag_spacing(element)
|
16
|
+
element.inner_html = CGI.escape_html(element.inner_html)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
strip_tag_spacing(xml_document)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def strip_tag_spacing(xml)
|
25
|
+
xml.to_xml(
|
26
|
+
save_with: Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :escape_tags, :xml
|
31
|
+
end
|
32
|
+
end
|
data/lib/paramedic.rb
CHANGED
data/paramedic.gemspec
CHANGED
@@ -4,25 +4,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'paramedic/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'paramedic'
|
8
8
|
spec.version = Paramedic::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email =
|
9
|
+
spec.authors = ['Joseph Jaber', 'Ryan Cammer']
|
10
|
+
spec.email = %w(mail@josephjaber.com ryancammer@gmail.com)
|
11
11
|
spec.summary = %q{Parameter handler}
|
12
12
|
spec.description = %q{Parameter handler}
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://rubygems.org/gems/paramedic'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency
|
21
|
+
spec.add_dependency 'nokogiri'
|
22
22
|
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'guard'
|
26
|
+
spec.add_development_dependency 'guard-rspec'
|
27
|
+
spec.add_development_dependency 'pry'
|
28
|
+
spec.add_development_dependency 'rspec'
|
28
29
|
end
|
@@ -24,7 +24,7 @@ module Paramedic
|
|
24
24
|
|
25
25
|
context 'with xml' do
|
26
26
|
let(:value) {
|
27
|
-
|
27
|
+
XMLMasseuse.new(<<-end_of_xml
|
28
28
|
<?xml version="1.0"?>
|
29
29
|
<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>
|
30
30
|
<CURRENTKEY>~NAMEID={{id}}~</CURRENTKEY>
|
@@ -80,7 +80,7 @@ module Paramedic
|
|
80
80
|
<APPLID></APPLID>
|
81
81
|
</ViewCommand>
|
82
82
|
end_of_xml
|
83
|
-
)
|
83
|
+
).to_xml
|
84
84
|
}
|
85
85
|
|
86
86
|
let(:serialized_value) {
|
@@ -1,10 +1,15 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
|
3
3
|
module Paramedic
|
4
|
-
describe
|
5
|
-
describe '#
|
6
|
-
|
7
|
-
|
4
|
+
describe XMLMasseuse do
|
5
|
+
describe '#to_xml' do
|
6
|
+
subject{ described_class.new(xml, escape_tags: escape_tags).to_xml }
|
7
|
+
|
8
|
+
context 'with no escape tags specified' do
|
9
|
+
let(:escape_tags) { [] }
|
10
|
+
|
11
|
+
let(:xml) {
|
12
|
+
<<-end_of_xml
|
8
13
|
<?xml version="1.0"?>
|
9
14
|
<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>
|
10
15
|
<CURRENTKEY>~NAMEID={{id}}~</CURRENTKEY>
|
@@ -59,21 +64,46 @@ module Paramedic
|
|
59
64
|
</COMMENT>
|
60
65
|
<APPLID></APPLID>
|
61
66
|
</ViewCommand>
|
62
|
-
end_of_xml
|
63
|
-
|
67
|
+
end_of_xml
|
68
|
+
}
|
64
69
|
|
65
|
-
|
70
|
+
it 'removes all but the first newline in between elements' do
|
71
|
+
expect(subject.scan(/>\n</).count).to be 1
|
72
|
+
end
|
66
73
|
|
67
|
-
|
68
|
-
|
74
|
+
it 'does not collapse elements' do
|
75
|
+
expect(subject.scan(/<USERQRY><\/USERQRY>/).count).to be 1
|
76
|
+
end
|
69
77
|
end
|
70
78
|
|
71
|
-
|
72
|
-
|
73
|
-
|
79
|
+
context 'with double encode tags specified' do
|
80
|
+
let(:escape_tags) { ['COMMENT'] }
|
81
|
+
|
82
|
+
let(:expected_result) { <<-end_of_xml
|
83
|
+
<?xml version="1.0"?>
|
84
|
+
<ViewCommand><COMMENT><html><body><p>None</p></body></html></COMMENT></ViewCommand>
|
85
|
+
end_of_xml
|
86
|
+
}
|
87
|
+
|
88
|
+
let(:xml) {
|
89
|
+
<<-end_of_xml
|
90
|
+
<?xml version="1.0"?>
|
91
|
+
<ViewCommand>
|
92
|
+
<COMMENT>
|
93
|
+
<html>
|
94
|
+
<body>
|
95
|
+
<p>None</p>
|
96
|
+
</body>
|
97
|
+
</html>
|
98
|
+
</COMMENT>
|
99
|
+
</ViewCommand>
|
100
|
+
end_of_xml
|
101
|
+
}
|
74
102
|
|
75
|
-
|
76
|
-
|
103
|
+
it 'html escapes specified elements' do
|
104
|
+
expect(subject).to eq expected_result
|
105
|
+
puts subject
|
106
|
+
end
|
77
107
|
end
|
78
108
|
end
|
79
109
|
end
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Jaber
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: pry
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
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'
|
84
98
|
- !ruby/object:Gem::Dependency
|
85
99
|
name: rspec
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,18 +120,19 @@ files:
|
|
106
120
|
- ".gitignore"
|
107
121
|
- ".rspec"
|
108
122
|
- Gemfile
|
123
|
+
- Guardfile
|
109
124
|
- LICENSE.txt
|
110
125
|
- README.md
|
111
126
|
- Rakefile
|
112
127
|
- lib/paramedic.rb
|
113
128
|
- lib/paramedic/encoder.rb
|
114
129
|
- lib/paramedic/version.rb
|
115
|
-
- lib/paramedic/
|
130
|
+
- lib/paramedic/xml_masseuse.rb
|
116
131
|
- paramedic.gemspec
|
117
132
|
- spec/paramedic/encoder_spec.rb
|
118
|
-
- spec/paramedic/
|
133
|
+
- spec/paramedic/xml_masseuse_spec.rb
|
119
134
|
- spec/spec_helper.rb
|
120
|
-
homepage:
|
135
|
+
homepage: https://rubygems.org/gems/paramedic
|
121
136
|
licenses:
|
122
137
|
- MIT
|
123
138
|
metadata: {}
|
@@ -143,5 +158,5 @@ specification_version: 4
|
|
143
158
|
summary: Parameter handler
|
144
159
|
test_files:
|
145
160
|
- spec/paramedic/encoder_spec.rb
|
146
|
-
- spec/paramedic/
|
161
|
+
- spec/paramedic/xml_masseuse_spec.rb
|
147
162
|
- spec/spec_helper.rb
|