llt-core 0.0.1 → 0.0.2

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: 99ad6c4858497e80179b2537f7e945f41972b79e
4
- data.tar.gz: 6647133228668feb869b4c846525d2345e5da2e9
3
+ metadata.gz: e1f24fb2e3f840c885ba1156442dd42cc21eacd7
4
+ data.tar.gz: ea0e69af62b090a427f163cfa545c6f0bc5a84a1
5
5
  SHA512:
6
- metadata.gz: 920a2015f453e256c3769381852df4329eba586b1aa3f16c3fb725fde00d58db48964154b4cb07c41ee2167bf077a27e6bbce30eba02a6b41a30fed28df6b9cd
7
- data.tar.gz: b1787c797c2af8da0e8e1d1311304cd2a6369d7679cde3c8d3bb0100317ed34bb4200e4a704d1b47d850edc2435439a8c8d110bf8b19d592c534ae32984ebd6e
6
+ metadata.gz: 6ac77f13805196d581a12fba96cdf3dde2f51a8e999ad21018eb2954a715bee0c2ca9b08ed13c823e32aa2bb9912c54fdfd577a67d3737892e5e0f457e789fa5
7
+ data.tar.gz: b797df93991e0b930305ed47a4fc8eb03d7c3a40be69f0a9f93aad356fc122bf7ee3a08f74084283d129cf8be9f766d1d95401cbf14f5abc5935ded756be446e
@@ -1,28 +1,29 @@
1
1
  require 'cgi'
2
+ require 'xml_escape'
2
3
 
3
4
  module LLT
4
5
  module Core
5
6
  module Api
6
7
  module Helpers
7
- def uu(text)
8
- CGI.unescape(text)
9
- end
10
-
11
- def u(text)
12
- CGI.escape(text)
13
- end
8
+ include XmlEscape
14
9
 
15
10
  # tries to resolve an uri or a text included in the params
11
+ #
12
+ # strips any incoming xml declaration because it gets added back in at
13
+ # the end and otherwise will be duped
14
+ # if an xml declaration is included, the xml param is set to true
16
15
  def extract_text(params)
17
- if uri = params[:uri]
18
- get_from_uri(uri)
16
+ text = get_text(params)
17
+ if has_xml_declaration?(text)
18
+ params[:xml] = true
19
+ text.sub(XML_DECLARATION_REGEXP, '')
19
20
  else
20
- params[:text]
21
+ text
21
22
  end
22
23
  end
23
24
 
24
25
  def extract_markup_params(params)
25
- mu_params = %i{ recursive indexing inline }
26
+ mu_params = %i{ recursive indexing inline id_as }
26
27
  extracted = [params[:tags]]
27
28
  relevant = mu_params.each_with_object({}) do |param, h|
28
29
  val = params[param]
@@ -57,8 +58,21 @@ module LLT
57
58
 
58
59
  private
59
60
 
61
+ XML_DECLARATION_REGEXP = /<\?xml.*?\?>/
60
62
  XML_DECLARATION = %{<?xml version="1.0" encoding="UTF-8"?>}
61
63
 
64
+ def has_xml_declaration?(txt)
65
+ txt.match(XML_DECLARATION_REGEXP)
66
+ end
67
+
68
+ def get_text(params)
69
+ if uri = params[:uri]
70
+ get_from_uri(uri)
71
+ else
72
+ params[:text]
73
+ end
74
+ end
75
+
62
76
  def typecast(val)
63
77
  if val.kind_of?(Array)
64
78
  val.map { |e| typecast(e) }
@@ -28,6 +28,7 @@ module LLT
28
28
  def to_xml(tags = nil, indexing: true,
29
29
  recursive: true,
30
30
  inline: false,
31
+ id_as: 'n',
31
32
  attrs: {})
32
33
 
33
34
  # for easier recursion it's solved in a way that might
@@ -37,17 +38,17 @@ module LLT
37
38
  end_of_recursion = false
38
39
 
39
40
  val = if recursive && all? { |e| e.respond_to?(:to_xml)}
40
- attrs.merge!(inline_id(tag)) if inline && indexing
41
- recursive_xml(tags, indexing, inline, attrs)
41
+ attrs.merge!(inline_id(tag, id_as)) if inline && indexing
42
+ recursive_xml(tags, indexing, inline, id_as, attrs)
42
43
  else
43
44
  end_of_recursion = true
44
45
  as_xml
45
46
  end
46
47
 
47
48
  if inline
48
- end_of_recursion ? wrap_with_xml(tag, val, indexing, attrs) : val
49
+ end_of_recursion ? wrap_with_xml(tag, val, indexing, id_as, attrs) : val
49
50
  else
50
- wrap_with_xml(tag, val, indexing, attrs)
51
+ wrap_with_xml(tag, val, indexing, id_as, attrs)
51
52
  end
52
53
  end
53
54
 
@@ -89,8 +90,8 @@ module LLT
89
90
 
90
91
  # id is represented as @n attribute in the xml, as xml:id
91
92
  # is reserved for something else
92
- def wrap_with_xml(tag, string, indexing, attrs = {})
93
- merge_id!(attrs) if indexing && @id
93
+ def wrap_with_xml(tag, string, indexing, id_as, attrs = {})
94
+ merge_id!(id_as, attrs) if indexing && @id
94
95
  attr = attrs.any? ? " #{to_xml_attrs(attrs)}" : ''
95
96
  "<#{tag}#{attr}>#{string}</#{tag}>"
96
97
  end
@@ -99,23 +100,19 @@ module LLT
99
100
  attrs.map { |k, v| %{#{k}="#{v}"} }.join(' ')
100
101
  end
101
102
 
102
- def recursive_xml(tags, indexing, inline, attrs)
103
+ def recursive_xml(tags, indexing, inline, id_as, attrs)
103
104
  each_with_object('') do |element, s|
104
105
  s << element.to_xml(tags.clone, indexing: indexing, recursive: true,
105
- inline: inline, attrs: attrs)
106
+ inline: inline, id_as: id_as, attrs: attrs)
106
107
  end
107
108
  end
108
109
 
109
- def merge_id!(attrs)
110
- attrs.merge!(id_as_xml => @id,)
110
+ def merge_id!(id_as, attrs)
111
+ attrs.merge!(id_as => @id,)
111
112
  end
112
113
 
113
- def id_as_xml
114
- 'n'
115
- end
116
-
117
- def inline_id(tag)
118
- { "#{tag}_#{id_as_xml}" => @id }
114
+ def inline_id(tag, id_as)
115
+ { "#{tag}_#{id_as}" => @id }
119
116
  end
120
117
 
121
118
  module ClassMethods
@@ -1,5 +1,5 @@
1
1
  module LLT
2
2
  module Core
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
data/llt-core.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "simplecov", "~> 0.7"
26
26
  spec.add_dependency "sinatra"
27
27
  spec.add_dependency "sinatra-contrib"
28
+ spec.add_dependency "xml_escape"
28
29
  end
@@ -7,22 +7,33 @@ describe LLT::Core::Api::Helpers do
7
7
  end
8
8
 
9
9
  describe "#extract_text" do
10
- it "tries to resolve a passed or a given text param" do
11
- pending
10
+ context "text param" do
11
+ it "tries to resolve a passed or a given text param" do
12
+ dummy.extract_text(:text => "some text").should == "some text"
13
+ end
14
+
15
+ it "strips away the xml declaration" do
16
+ dummy.extract_text(:text => %{<?xml version="1.0" encoding="UTF-8"?>some text}).should == "some text"
17
+ end
12
18
  end
13
- end
14
19
 
15
- describe "#uu" do
16
- it "unescapes url strings" do
17
- url = 'http%3A%2F%2Ftest.com'
18
- dummy.uu(url).should == 'http://test.com'
20
+ context "uri param" do
21
+ it "calls to the given URI to retrieve the text" do
22
+ allow(dummy).to receive(:get_from_uri) { "text from uri" }
23
+ dummy.extract_text(:uri => "some uri").should == "text from uri"
24
+ end
25
+
26
+ it "strips away the xml declaration" do
27
+ allow(dummy).to receive(:get_from_uri) { %{<?xml version="1.0" encoding="UTF-8"?>text from uri} }
28
+ dummy.extract_text(:uri => "some uri").should == "text from uri"
29
+ end
19
30
  end
20
- end
21
31
 
22
- describe "#u" do
23
- it "escapes url strings" do
24
- url = 'http://test.com'
25
- dummy.u(url).should == 'http%3A%2F%2Ftest.com'
32
+ it "sets xml param to true when there is an xml declaration present" do
33
+ params = { text: %{<?xml version="1.0"?>some text} }
34
+ dummy.extract_text(params).should == 'some text'
35
+ params.should have_key(:xml)
36
+ params[:xml].should be_true
26
37
  end
27
38
  end
28
39
 
@@ -32,6 +43,11 @@ describe LLT::Core::Api::Helpers do
32
43
  dummy.extract_markup_params(params).should == [nil, { recursive: true }]
33
44
  end
34
45
 
46
+ it "extracts the id_as param" do
47
+ params = { 'id_as' => 'id' }
48
+ dummy.extract_markup_params(params).should == [nil, { id_as: 'id'} ]
49
+ end
50
+
35
51
  it "returns an array that should be exploded when used with #to_xml" do
36
52
  params = { recursive: true, tags: %w{ a b }}
37
53
  extracted = [%w{ a b }, { recursive: true }]
@@ -125,7 +125,7 @@ describe LLT::Core::Containable do
125
125
  sentence.to_xml(['a', nil, 'c'], recursive: true).should == result
126
126
  end
127
127
 
128
- it "can include the id of an element, as @n attribute" do
128
+ it "can include the id of an element, as @n attribute by default" do
129
129
  dummy.xml_tag 's'
130
130
  other_dummy.xml_tag 'w'
131
131
 
@@ -136,6 +136,13 @@ describe LLT::Core::Containable do
136
136
  sentence.to_xml(indexing: true, recursive: true).should == result
137
137
  end
138
138
 
139
+ it "can represent a custom id attribute identifier" do
140
+ dummy.xml_tag 's'
141
+ sentence = dummy.new('test', 1)
142
+ result = '<s id="1">test</s>'
143
+ sentence.to_xml(id_as: 'id').should == result
144
+ end
145
+
139
146
  it "recursive representation can be inlined" do
140
147
  dummy.xml_tag 's'
141
148
  other_dummy.xml_tag 'w'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: llt-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - LFDM
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-08 00:00:00.000000000 Z
11
+ date: 2014-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: xml_escape
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: LLT::Core classes and modules
112
126
  email:
113
127
  - 1986gh@gmail.com
@@ -154,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
168
  version: '0'
155
169
  requirements: []
156
170
  rubyforge_project:
157
- rubygems_version: 2.1.5
171
+ rubygems_version: 2.2.0
158
172
  signing_key:
159
173
  specification_version: 4
160
174
  summary: Contains classes and modules that are shared across several llt gems