data-converter 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +35 -0
- data/data-converter.gemspec +15 -16
- data/lib/data-converter.rb +31 -27
- data/lib/version.rb +3 -0
- data/test/data_converter_spec.rb +43 -0
- metadata +71 -48
- data/README.rdoc +0 -24
- data/test/test.rb +0 -59
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1ab86a4fc881ba1446b4bb1391d6e0f3776a6e75
|
4
|
+
data.tar.gz: e14ecc460c9f2dde92f29ff1623e45c8ecf6ed5e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8bd5f20a1e14effd29ee387639c25108056164cb146adcace677a6035b5d75180025f803c8a23c3d5fa5fa78af117a4f65382d0038cf14fb450e907b9892f7bd
|
7
|
+
data.tar.gz: 6852ffd724bd2f8bdff35a51ebf5a556bcd2e6122fa65404ad34daa26f79403d9f487f44d745b510027fe5a6011047b07c70057e6c62bc02e13c06ec02a7866e
|
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# data-converter
|
2
|
+
|
3
|
+
DataConverter convert Array and Hash into HTML.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
add this line to your Gemfile.
|
8
|
+
|
9
|
+
`gem 'data-converter'`
|
10
|
+
|
11
|
+
or
|
12
|
+
|
13
|
+
`$ gem install data-converter`
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
require 'data-converter'
|
19
|
+
|
20
|
+
DataConverter.parse([0,1,2,3]) #=> "<ul><li>0</li><li>1</li><li>2</li></ul>"
|
21
|
+
DataConverter.parse(:foo => "bar") #=> "<dl><dt>foo</dt><dd>bar</dd></dl>"
|
22
|
+
```
|
23
|
+
|
24
|
+
## Contributing to Botch
|
25
|
+
|
26
|
+
1. fork the project.
|
27
|
+
2. create your feature branch. (`git checkout -b my-feature`)
|
28
|
+
3. commit your changes. (`git commit -am 'commit message.'`)
|
29
|
+
4. push to the branch. (`git push origin my-feature`)
|
30
|
+
5. send pull request.
|
31
|
+
|
32
|
+
## License
|
33
|
+
|
34
|
+
MIT
|
35
|
+
|
data/data-converter.gemspec
CHANGED
@@ -1,17 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
)
|
1
|
+
require File.expand_path("../lib/version", __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new "data-converter", DataConverter::VERSION do |s|
|
4
|
+
s.summary = "Convert hash and array into HTML Element."
|
5
|
+
s.description = "Convert hash and array into HTML Element."
|
6
|
+
s.authors = ["namusyaka"]
|
7
|
+
s.email = "namusyaka@gmail.com"
|
8
|
+
s.homepage = "https://github.com/namusyaka/data-converter"
|
9
|
+
s.files = `git ls-files`.split("\n") - %w(.gitignore)
|
10
|
+
s.test_files = s.files.select { |path| path =~ /^spec\/.*_spec\.rb/ }
|
11
|
+
s.license = "MIT"
|
12
|
+
|
13
|
+
s.add_development_dependency "rake"
|
14
|
+
s.add_development_dependency "rspec"
|
15
|
+
s.add_development_dependency "rspec-html-matchers"
|
17
16
|
end
|
data/lib/data-converter.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
-
class String
|
2
|
-
def escapeHTML
|
3
|
-
self.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<').gsub(/'/, ''')
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
1
|
class DataConverter
|
8
2
|
attr_reader :data
|
9
3
|
|
4
|
+
ESCAPE_VALUES = {
|
5
|
+
"&" => "&",
|
6
|
+
"<" => "<",
|
7
|
+
">" => ">",
|
8
|
+
'"' => """
|
9
|
+
}
|
10
|
+
|
11
|
+
ESCAPE_REGEXP = Regexp.union(*ESCAPE_VALUES.keys)
|
12
|
+
|
10
13
|
def initialize(data)
|
11
14
|
@data = data
|
12
15
|
end
|
@@ -21,20 +24,12 @@ class DataConverter
|
|
21
24
|
|
22
25
|
case data
|
23
26
|
when Array
|
24
|
-
|
25
|
-
<ul>
|
26
|
-
#{ convert_to_li(data).join("\n") }
|
27
|
-
</ul>
|
28
|
-
UL
|
27
|
+
tag(:ul, convert_to_li(data), :escaped => true)
|
29
28
|
when Hash
|
30
|
-
|
31
|
-
<dl>
|
32
|
-
#{ convert_to_dl_childs(data) }</dl>
|
33
|
-
DL
|
29
|
+
tag(:dl, convert_to_dl_childs(data), :escaped => true)
|
34
30
|
else
|
35
|
-
|
31
|
+
data
|
36
32
|
end
|
37
|
-
list
|
38
33
|
end
|
39
34
|
|
40
35
|
private
|
@@ -44,25 +39,34 @@ class DataConverter
|
|
44
39
|
end
|
45
40
|
|
46
41
|
def convert_to_li(data)
|
47
|
-
data.map
|
48
|
-
if check_data?(
|
49
|
-
|
42
|
+
data.map do |caption|
|
43
|
+
if check_data?(caption)
|
44
|
+
tag(:li, convert(caption), :escaped => true)
|
50
45
|
else
|
51
|
-
|
46
|
+
tag(:li, caption)
|
52
47
|
end
|
53
|
-
end
|
48
|
+
end.join("\n")
|
54
49
|
end
|
55
50
|
|
56
51
|
def convert_to_dl_childs(data)
|
57
|
-
childs =
|
52
|
+
childs = []
|
58
53
|
data.each_pair do | key, value |
|
59
|
-
childs
|
54
|
+
childs << tag(:dt, key)
|
60
55
|
if check_data?(value)
|
61
|
-
childs
|
56
|
+
childs << tag(:dd, convert(value), :escaped => true)
|
62
57
|
else
|
63
|
-
childs
|
58
|
+
childs << tag(:dd, value)
|
64
59
|
end
|
65
60
|
end
|
66
|
-
childs
|
61
|
+
childs.join("\n")
|
62
|
+
end
|
63
|
+
|
64
|
+
def tag(name, caption, options = {})
|
65
|
+
caption = caption.to_s
|
66
|
+
"<#{name}>#{options[:escaped] ? caption : escape_html(caption)}</#{name}>"
|
67
|
+
end
|
68
|
+
|
69
|
+
def escape_html(str)
|
70
|
+
str.to_s.gsub(ESCAPE_REGEXP) { |char| ESCAPE_VALUES[char] }
|
67
71
|
end
|
68
72
|
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path("../../lib/data-converter", __FILE__)
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rspec-html-matchers'
|
4
|
+
require 'rspec'
|
5
|
+
|
6
|
+
describe DataConverter do
|
7
|
+
before(:all) do
|
8
|
+
@array_data = [0, 1, 2, ["string", DataConverter, :symbol, 0.1]]
|
9
|
+
@hash_data = { :foo => ["bar", "baz"], :hoge => { :fuga => :symbol }, :const => DataConverter, :float => 0.1 }
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should support array." do
|
13
|
+
actual_html = DataConverter.parse(@array_data)
|
14
|
+
expect(actual_html).to have_tag('ul') do
|
15
|
+
with_tag 'li', :text => 0
|
16
|
+
with_tag 'li', :text => 1
|
17
|
+
with_tag 'li', :text => 2
|
18
|
+
with_tag 'li > ul'
|
19
|
+
with_tag 'li > ul li', :text => "string"
|
20
|
+
with_tag 'li > ul li', :text => "DataConverter"
|
21
|
+
with_tag 'li > ul li', :text => "symbol"
|
22
|
+
with_tag 'li > ul li', :text => "0.1"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should support hash." do
|
27
|
+
actual_html = DataConverter.parse(@hash_data)
|
28
|
+
expect(actual_html).to have_tag('dl') do
|
29
|
+
with_tag 'dt', :text => 'foo'
|
30
|
+
with_tag 'dt', :text => 'hoge'
|
31
|
+
with_tag 'dt', :text => 'const'
|
32
|
+
with_tag 'dt', :text => 'float'
|
33
|
+
with_tag 'dd > ul'
|
34
|
+
with_tag 'dd > ul > li', :text => 'bar'
|
35
|
+
with_tag 'dd > ul > li', :text => 'baz'
|
36
|
+
with_tag 'dd > dl'
|
37
|
+
with_tag 'dd > dl > dt', :text => 'fuga'
|
38
|
+
with_tag 'dd > dl > dd', :text => 'symbol'
|
39
|
+
with_tag 'dd', :text => "DataConverter"
|
40
|
+
with_tag 'dd', :text => '0.1'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,68 +1,91 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: data-converter
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 6
|
10
|
-
version: 0.1.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.7
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- namusyaka
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-html-matchers
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Convert hash and array into HTML Element.
|
22
56
|
email: namusyaka@gmail.com
|
23
57
|
executables: []
|
24
|
-
|
25
58
|
extensions: []
|
26
|
-
|
27
59
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
|
60
|
+
files:
|
61
|
+
- README.md
|
30
62
|
- data-converter.gemspec
|
31
|
-
- README.rdoc
|
32
63
|
- lib/data-converter.rb
|
33
|
-
-
|
64
|
+
- lib/version.rb
|
65
|
+
- test/data_converter_spec.rb
|
34
66
|
homepage: https://github.com/namusyaka/data-converter
|
35
|
-
licenses:
|
36
|
-
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
37
70
|
post_install_message:
|
38
71
|
rdoc_options: []
|
39
|
-
|
40
|
-
require_paths:
|
72
|
+
require_paths:
|
41
73
|
- lib
|
42
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
none: false
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
hash: 3
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
version: "0"
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
60
84
|
requirements: []
|
61
|
-
|
62
85
|
rubyforge_project:
|
63
|
-
rubygems_version:
|
86
|
+
rubygems_version: 2.0.2
|
64
87
|
signing_key:
|
65
|
-
specification_version:
|
66
|
-
summary:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Convert hash and array into HTML Element.
|
67
90
|
test_files: []
|
68
|
-
|
91
|
+
has_rdoc:
|
data/README.rdoc
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
=data-converter
|
2
|
-
|
3
|
-
|
4
|
-
==Install
|
5
|
-
gem install data-converter
|
6
|
-
|
7
|
-
==Description
|
8
|
-
Convert hash and array into HTML Element (Array => ul, Hash => dl).
|
9
|
-
It's under the development.
|
10
|
-
|
11
|
-
==Code
|
12
|
-
require 'rubygems'
|
13
|
-
require 'data-converter'
|
14
|
-
|
15
|
-
puts DataConverter.parse({
|
16
|
-
:a => "b",
|
17
|
-
:c => { :d => ["<>&\"'", 1, 2] }
|
18
|
-
})
|
19
|
-
|
20
|
-
==License
|
21
|
-
the MIT License
|
22
|
-
|
23
|
-
==Author
|
24
|
-
namusyaka
|
data/test/test.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require File.expand_path('../../lib/data-converter', __FILE__)
|
3
|
-
|
4
|
-
class Test_DataConverter < Test::Unit::TestCase
|
5
|
-
HASH_RESULT = <<-EOS
|
6
|
-
<dl>
|
7
|
-
<dt>a</dt>
|
8
|
-
<dd><dl>
|
9
|
-
<dt>b</dt>
|
10
|
-
<dd><dl>
|
11
|
-
<dt>c</dt>
|
12
|
-
<dd><ul>
|
13
|
-
<li>0</li>
|
14
|
-
<li>1</li>
|
15
|
-
<li>2</li>
|
16
|
-
<li>3</li>
|
17
|
-
</ul>
|
18
|
-
</dd>
|
19
|
-
</dl>
|
20
|
-
</dd>
|
21
|
-
</dl>
|
22
|
-
</dd>
|
23
|
-
</dl>
|
24
|
-
EOS
|
25
|
-
|
26
|
-
ARRAY_RESULT = <<-EOS
|
27
|
-
<ul>
|
28
|
-
<li><dl>
|
29
|
-
<dt>f</dt>
|
30
|
-
<dd><ul>
|
31
|
-
<li>4</li>
|
32
|
-
<li>5</li>
|
33
|
-
<li>6</li>
|
34
|
-
<li>7</li>
|
35
|
-
</ul>
|
36
|
-
</dd>
|
37
|
-
</dl>
|
38
|
-
</li>
|
39
|
-
</ul>
|
40
|
-
EOS
|
41
|
-
|
42
|
-
def setup
|
43
|
-
@hash_data = { :a => { :b => { :c => [0, 1, 2, 3] } } }
|
44
|
-
@array_data = [{ :f => [4, 5, 6, 7] }]
|
45
|
-
@class = DataConverter
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_array_parse
|
49
|
-
assert_equal(ARRAY_RESULT, @class.parse(@array_data))
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_hash_parse
|
53
|
-
assert_equal(HASH_RESULT, @class.parse(@hash_data))
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_other_approach
|
57
|
-
assert_equal(HASH_RESULT, DataConverter.new(@hash_data).convert)
|
58
|
-
end
|
59
|
-
end
|