html_truncator 0.2.1 → 0.2.2

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.
Files changed (4) hide show
  1. data/README.md +1 -1
  2. data/init.rb +2 -0
  3. data/lib/html_truncator.rb +19 -13
  4. metadata +60 -33
data/README.md CHANGED
@@ -14,7 +14,7 @@ It's very simple. Install it with rubygems:
14
14
 
15
15
  Or, if you use bundler, add it to your `Gemfile`:
16
16
 
17
- gem "html_truncator", :version => "~>0.2"
17
+ gem "html_truncator", "~>0.2"
18
18
 
19
19
  Then you can use it in your code:
20
20
 
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require "html_truncator"
@@ -22,7 +22,6 @@ class HTML_Truncator
22
22
  self.ellipsable_tags = Set.new(%w(p ol ul li div header article nav section footer aside dd dt dl))
23
23
  end
24
24
 
25
-
26
25
  class Nokogiri::HTML::DocumentFragment
27
26
  def ellipsable?
28
27
  true
@@ -33,6 +32,7 @@ class Nokogiri::XML::Node
33
32
  def truncate(max, opts)
34
33
  return ["", 1, opts] if max == 0 && !ellipsable?
35
34
  inner, remaining, opts = inner_truncate(max, opts)
35
+ return ["", max - remaining, opts] if inner.empty?
36
36
  children.remove
37
37
  add_child Nokogiri::HTML::DocumentFragment.parse(inner)
38
38
  [to_html(:indent => 0), max - remaining, opts]
@@ -46,7 +46,7 @@ class Nokogiri::XML::Node
46
46
  inner += txt
47
47
  next if remaining >= 0
48
48
  if ellipsable?
49
- inner += opts[:ellipsis]
49
+ inner = inner.rstrip + opts[:ellipsis]
50
50
  opts[:ellipsis] = ""
51
51
  opts[:was_truncated] = true
52
52
  end
@@ -61,16 +61,22 @@ class Nokogiri::XML::Node
61
61
  end
62
62
 
63
63
  class Nokogiri::XML::Text
64
- def truncate(max, opts)
65
- if opts[:length_in_chars]
66
- count = to_xhtml.length
67
- return [to_xhtml, count, opts] if count <= max && max > 0
68
- [content.slice(0, max), count, opts]
69
- else
70
- words = to_xhtml.scan(/\s*\S+/)
71
- count = words.length
72
- return [to_xhtml, count, opts] if count <= max && max > 0
73
- [words.slice(0, max).join, count, opts]
74
- end
64
+ def truncate(max, opts)
65
+ words = to_xhtml.scan(/\s*\S+/)
66
+ if opts[:length_in_chars]
67
+ count = to_xhtml.length
68
+ return [to_xhtml, count, opts] if count <= max && max > 0
69
+ if words.size > 1
70
+ words.inject('') do |string, word|
71
+ return [string, count, opts] if string.length + word.length > max
72
+ string + word
73
+ end
74
+ end
75
+ [content.slice(0, max), count, opts]
76
+ else
77
+ count = words.length
78
+ return [to_xhtml, count, opts] if count <= max && max > 0
79
+ [words.slice(0, max).join, count, opts]
80
+ end
75
81
  end
76
82
  end
metadata CHANGED
@@ -1,73 +1,100 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: html_truncator
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 2
10
+ version: 0.2.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Bruno Michel
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-02-23 00:00:00.000000000 +01:00
17
+
18
+ date: 2011-04-19 00:00:00 +02:00
13
19
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: nokogiri
17
- requirement: &79281530 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
18
25
  none: false
19
- requirements:
26
+ requirements:
20
27
  - - ~>
21
- - !ruby/object:Gem::Version
22
- version: '1.4'
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 1
32
+ - 4
33
+ version: "1.4"
23
34
  type: :runtime
24
- prerelease: false
25
- version_requirements: *79281530
26
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
27
37
  name: rspec
28
- requirement: &79281290 !ruby/object:Gem::Requirement
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
29
40
  none: false
30
- requirements:
41
+ requirements:
31
42
  - - ~>
32
- - !ruby/object:Gem::Version
33
- version: '2.4'
43
+ - !ruby/object:Gem::Version
44
+ hash: 11
45
+ segments:
46
+ - 2
47
+ - 4
48
+ version: "2.4"
34
49
  type: :development
35
- prerelease: false
36
- version_requirements: *79281290
50
+ version_requirements: *id002
37
51
  description: Wants to truncate an HTML string properly? This gem is for you.
38
52
  email: bmichel@menfin.info
39
53
  executables: []
54
+
40
55
  extensions: []
41
- extra_rdoc_files:
56
+
57
+ extra_rdoc_files:
42
58
  - README.md
43
- files:
59
+ files:
44
60
  - MIT-LICENSE
45
61
  - README.md
46
62
  - Gemfile
47
63
  - lib/html_truncator.rb
64
+ - init.rb
48
65
  has_rdoc: true
49
66
  homepage: http://github.com/nono/HTML-Truncator
50
67
  licenses: []
68
+
51
69
  post_install_message:
52
70
  rdoc_options: []
53
- require_paths:
71
+
72
+ require_paths:
54
73
  - lib
55
- required_ruby_version: !ruby/object:Gem::Requirement
74
+ required_ruby_version: !ruby/object:Gem::Requirement
56
75
  none: false
57
- requirements:
58
- - - ! '>='
59
- - !ruby/object:Gem::Version
60
- version: '0'
61
- required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ hash: 3
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
84
  none: false
63
- requirements:
64
- - - ! '>='
65
- - !ruby/object:Gem::Version
66
- version: '0'
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
67
92
  requirements: []
93
+
68
94
  rubyforge_project:
69
95
  rubygems_version: 1.5.2
70
96
  signing_key:
71
97
  specification_version: 3
72
98
  summary: Wants to truncate an HTML string properly? This gem is for you.
73
99
  test_files: []
100
+