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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6c4e97b7c96c2e85cef5daf072af7b7ca46de76f
4
- data.tar.gz: d96c454cff95c4df687ac868cfa6f12d77b911ed
3
+ metadata.gz: 05384eaaef8a30563606ec636ebc18d4212436cb
4
+ data.tar.gz: ab3c3df45ccf8d10d52b4da661da2453561dca25
5
5
  SHA512:
6
- metadata.gz: 353aba54ab255a3e9d9195dffd6435152ad83b55bf8dcba2eb527bf3d38d06fddd0e76166633aa69021e356d81cd9e83c3d05418b656e138ea98ce0e7e8e9e1d
7
- data.tar.gz: 2e0f063155d72410748917b0a98032dc0e33769af2b2f1c0949f9335e6ac0be12374fc4f2fc218c2d8c318a1f2ad454d608e460afb9f55efde8c2fbcdbb4dc62
6
+ metadata.gz: ccb93be6473d3eab1579b454d2e25151ed31e67d057d5bc9341ac53617d038fb360f3f73ea3ab85810cbbba64ecf349e50b2f3689efedb88fcfbb4bdb01ffee2
7
+ data.tar.gz: 32ef855bfaaf76f2a458c516657c6c3588af651abb7c69b00a31d30691e60dcdc6c2a3656032f7c26235ced501f68b22a1a0955f0436c283adc1ce51952963b3
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ .idea
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 Joseph Jaber
1
+ Copyright (c) 2015 Joseph Jaber, Ryan Cammer
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Paramedic
2
2
 
3
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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>&lt;superman&gt;&lt;name&gt;Clark Kent&lt;/name&gt;</superheroes>
22
51
 
23
52
  ## Contributing
24
53
 
25
- 1. Fork it ( https://github.com/[my-github-username]/paramedic/fork )
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 "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
 
@@ -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', # Surprisingly, this one doesn't appear to be replaced. We'll need to confirm.
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', $ Tilde too.
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
 
@@ -1,3 +1,3 @@
1
1
  module Paramedic
2
- VERSION = "0.0.1"
2
+ VERSION = '0.1.0'
3
3
  end
@@ -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
@@ -1,6 +1,6 @@
1
- require "paramedic/version"
2
- require "paramedic/encoder"
3
- require "paramedic/xml_therapist"
1
+ require_relative 'paramedic/version'
2
+ require_relative 'paramedic/encoder'
3
+ require_relative 'paramedic/xml_masseuse'
4
4
 
5
5
  module Paramedic
6
6
  end
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 = "paramedic"
7
+ spec.name = 'paramedic'
8
8
  spec.version = Paramedic::VERSION
9
- spec.authors = ["Joseph Jaber", "Ryan Cammer"]
10
- spec.email = ["mail@josephjaber.com", "ryancammer@gmail.com"]
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 = "MIT"
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 = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency "nokogiri"
21
+ spec.add_dependency 'nokogiri'
22
22
 
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 "rspec"
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
- XMLTherapist.new.massage(<<-end_of_xml
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 XMLTherapist do
5
- describe '#massage' do
6
- let(:xml) {
7
- <<-end_of_xml
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
- subject{ described_class.new.massage(xml) }
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
- it 'removes all but the first newline in between elements' do
68
- expect(subject.scan(/>\n</).count).to be 1
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
- it 'does not collapse elements' do
72
- expect(subject.scan(/<USERQRY><\/USERQRY>/).count).to be 1
73
- end
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>&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
+ }
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
- it 'html escapes specified elements' do
76
- expect(subject.scan(/<USERQRY><\/USERQRY>/).count).to be 1
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.1
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/xml_therapist.rb
130
+ - lib/paramedic/xml_masseuse.rb
116
131
  - paramedic.gemspec
117
132
  - spec/paramedic/encoder_spec.rb
118
- - spec/paramedic/xml_therapist_spec.rb
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/xml_therapist_spec.rb
161
+ - spec/paramedic/xml_masseuse_spec.rb
147
162
  - spec/spec_helper.rb
@@ -1,13 +0,0 @@
1
- require 'nokogiri'
2
-
3
- module Paramedic
4
- class XMLTherapist
5
- def massage(xml)
6
- Nokogiri::XML(xml){
7
- |x| x.noblanks
8
- }.to_xml(
9
- save_with: Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
10
- )
11
- end
12
- end
13
- end