paramedic 0.0.1 → 0.1.0
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/.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
|