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 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