nokogiri-tools 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 39d6df169e87c1926113baa48a1e2f9aca50add0
4
+ data.tar.gz: 8dde514294b266ce214fd1583ac91c505eaf1fdb
5
+ SHA512:
6
+ metadata.gz: 7903138ec772c0a9fc23c878532531959fb2fa8081730ba9b3a7b1d1351188a186ec8623e79017b036ffa0a8bf440b36a1534a5b65ceb9863260b801d71ca1e8
7
+ data.tar.gz: 54b8541845af02d83c733dc69e89a401165174fe3b1d0114954504eccd69dd22376000c21fdf74c873c0ebf5756e221ee9077f3c42a3c029a5624dd06dd627db
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ .ruby-version
4
+ pkg/
5
+ tmp/
6
+ /.idea/
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.4.0
5
+
6
+ cache: bundler
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ source 'https://rubygems.org'
5
+ gemspec
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ nokogiri-tools (1.0.0)
5
+ nokogiri
6
+ unicode-tools (~> 1.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ mini_portile2 (2.1.0)
12
+ nokogiri (1.7.1)
13
+ mini_portile2 (~> 2.1.0)
14
+ power_assert (1.0.1)
15
+ rake (12.0.0)
16
+ test-unit (3.2.3)
17
+ power_assert
18
+ unicode-tools (1.0.2)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ nokogiri-tools!
25
+ rake (~> 12.0)
26
+ test-unit (~> 3.2)
27
+
28
+ BUNDLED WITH
29
+ 1.14.3
@@ -0,0 +1,26 @@
1
+ ## Extends Nokogiri with useful methods.
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/nokogiri-tools.svg)](https://badge.fury.io/rb/nokogiri-tools)
4
+ [![Build Status](https://travis-ci.org/yivo/nokogiri-tools.svg?branch=master)](https://travis-ci.org/yivo/nokogiri-tools)
5
+
6
+ ## Installing gem
7
+ Add to your Gemfile:
8
+ ```ruby
9
+ gem 'nokogiri-tools', '~> 1.0'
10
+ ```
11
+
12
+ ## Running Tests
13
+ Install bundler:
14
+ ```bash
15
+ gem install bundler
16
+ ```
17
+
18
+ Install dependencies:
19
+ ```bash
20
+ cd nokogiri-tools && bundle
21
+ ```
22
+
23
+ Run tests:
24
+ ```bash
25
+ cd nokogiri-tools && bundle exec rake test
26
+ ```
@@ -0,0 +1,8 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new { |t| t.libs << 'test' }
7
+
8
+ task default: :test
@@ -0,0 +1,50 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ module NokogiriTools
5
+ module CSS
6
+ def css_properties
7
+ "#{self['style']};".scan(/(\w[\w-]*\w):\s*([^;]+);/)
8
+ end
9
+
10
+ def css_properties=(properties)
11
+ style = properties.map { |x| "#{x[0]}: #{x[1]}" }
12
+ style.empty? ? delete('style') : self['style'] = style.join('; ')
13
+ end
14
+
15
+ def css_classes
16
+ self['class'].to_s.split(/[[:blank:]]+/)
17
+ end
18
+
19
+ def css_classes=(classes)
20
+ value = [classes]
21
+ value.flatten!
22
+ value.map!(&:squish)
23
+ value.empty? ? delete('class') : self['class'] = value.join(' ')
24
+ end
25
+ end
26
+
27
+ module Tree
28
+ def remove_keeping_children
29
+ children.each { |child| before(child) }
30
+ remove
31
+ end
32
+
33
+ def remove_with_parent
34
+ parent ? parent.remove : remove
35
+ end
36
+ end
37
+
38
+ module Data
39
+ def remove_data_attributes
40
+ attributes.keys.each { |name| delete(name) if name.start_with?('data-') }
41
+ end
42
+ end
43
+ end
44
+
45
+ require 'nokogiri'
46
+ require 'unicode-tools'
47
+
48
+ Nokogiri::XML::Node.include NokogiriTools::CSS
49
+ Nokogiri::XML::Node.include NokogiriTools::Tree
50
+ Nokogiri::XML::Node.include NokogiriTools::Data
@@ -0,0 +1,6 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ module NokogiriTools
5
+ VERSION = '1.0.0'
6
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require File.expand_path('../lib/nokogiri-tools/version', __FILE__)
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'nokogiri-tools'
8
+ s.version = NokogiriTools::VERSION
9
+ s.author = 'Yaroslav Konoplov'
10
+ s.email = 'eahome00@gmail.com'
11
+ s.summary = 'Extends Nokogiri with useful methods.'
12
+ s.description = 'Extends Nokogiri with useful methods.'
13
+ s.homepage = 'https://github.com/yivo/nokogiri-tools'
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files -z`.split("\x0")
17
+ s.test_files = `git ls-files -z -- {test,spec,features}/*`.split("\x0")
18
+ s.require_paths = ['lib']
19
+
20
+ s.add_dependency 'nokogiri'
21
+ s.add_dependency 'unicode-tools', '~> 1.0'
22
+ s.add_development_dependency 'rake', '~> 12.0'
23
+ s.add_development_dependency 'test-unit', '~> 3.2'
24
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'test-unit'
5
+ require 'nokogiri-tools'
6
+
7
+ class NokogiriToolsTest < Test::Unit::TestCase
8
+ def test_css_classes
9
+ div = fragment('<div class="foo"></div>').children.first
10
+ assert_equal %w( foo ), div.css_classes
11
+
12
+ div.css_classes = %w( foo bar )
13
+ assert_equal %w( foo bar ), div.css_classes
14
+ end
15
+
16
+ def test_css_styles
17
+ div = fragment('<div style="color: #000; width: 100%;"></div>').children.first
18
+ assert_equal [['color', '#000'], ['width', '100%']], div.css_properties
19
+
20
+ div.css_properties = [['height', '100px'], ['color', 'red']]
21
+ assert_equal [['height', '100px'], ['color', 'red']], div.css_properties
22
+ end
23
+
24
+ def test_data
25
+ div = fragment('<div data-foo="foo" data-bar="bar">test</div>').children.first
26
+ div.remove_data_attributes
27
+ assert_equal '<div>test</div>', div.to_html
28
+ end
29
+
30
+ def test_parent_removal
31
+ fragment = fragment('<div>1<div>2</div></div>')
32
+ fragment.children.first.remove_keeping_children
33
+ assert_equal '1<div>2</div>', fragment.to_html
34
+ end
35
+
36
+ def test_removal_including_parent
37
+ fragment = fragment('<div><div>test</div></div>')
38
+ fragment.children.first.children.first.remove_with_parent
39
+ assert_equal '', fragment.to_html
40
+ end
41
+
42
+ protected
43
+ def fragment(html)
44
+ Nokogiri::HTML.fragment(html) { |config| config.nonet.huge.nowarning.noerror }
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nokogiri-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Yaroslav Konoplov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: unicode-tools
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.2'
69
+ description: Extends Nokogiri with useful methods.
70
+ email: eahome00@gmail.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - ".gitignore"
76
+ - ".travis.yml"
77
+ - Gemfile
78
+ - Gemfile.lock
79
+ - README.md
80
+ - Rakefile
81
+ - lib/nokogiri-tools.rb
82
+ - lib/nokogiri-tools/version.rb
83
+ - nokogiri_tools.gemspec
84
+ - test/test-nokogiri-tools.rb
85
+ homepage: https://github.com/yivo/nokogiri-tools
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.6.8
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Extends Nokogiri with useful methods.
109
+ test_files:
110
+ - test/test-nokogiri-tools.rb