peppercorn 0.0.1 → 0.0.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.
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ - README.md CHANGELOG.md
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ Changelog
2
+ ===
3
+
4
+ * 0.0.1 2011/10/25 Initial Release
5
+ * 0.0.2 2011/10/28 Some refactoring and Added Nokogiri::XML::Node#appendable_node
data/Guardfile CHANGED
@@ -5,6 +5,7 @@ guard 'yard' do
5
5
  watch(%r{app/.+\.rb})
6
6
  watch(%r{lib/.+\.rb})
7
7
  watch(%r{ext/.+\.(c|cpp|rb)})
8
+ watch(%r{.*\.md}) { "doc" }
8
9
  end
9
10
 
10
11
  guard 'rspec', :version => 2 do
@@ -1,4 +1,5 @@
1
- == License
1
+ License
2
+ =======
2
3
 
3
4
  Copyright (c) 2011 Wade West
4
5
 
@@ -8,7 +8,7 @@ module Peppercorn
8
8
  # @since 0.0.1
9
9
  # @param [Fixnum] length the number of word to truncate on
10
10
  # @param [Hash] opts hash of truncation options
11
- # @option opts [String, nil] :tail ("…") the string to append to the truncated string
11
+ # @option opts [#to_s, nil] :tail ("…") the object to append to the truncated string
12
12
  # @return [String] the truncated string
13
13
  def truncate(length=30, opts={})
14
14
  opts = Peppercorn::DEFAULT_TRUNCATION_OPTIONS.merge(opts)
@@ -45,8 +45,7 @@ module Peppercorn
45
45
  # @return [String] the truncated html
46
46
  # @option opts [String, Nokogiri::XML::Node, nil] :tail ("…") string or xml node to append to the truncated string
47
47
  def truncate_html(length=30, opts={})
48
- string = Nokogiri::HTML::DocumentFragment.parse(self).truncate(length, opts)
49
- return string
48
+ Nokogiri::HTML::DocumentFragment.parse(self).truncate(length, opts)
50
49
  end
51
50
  end
52
51
  end
@@ -1,4 +1,4 @@
1
1
  module Peppercorn
2
2
  # The current peppercorn version
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
@@ -42,21 +42,27 @@ module Peppercorn
42
42
  end
43
43
 
44
44
  if !opts[:tail].to_s.empty? and overran
45
- append_to = target.children.last
46
- loop do
47
- if append_to.text? or append_to.description.inline? # We want to append to the last block-level element
48
- append_to = append_to.parent
49
- break;
50
- end
51
- append_to = append_to.children.last
52
- end
53
- append_to << Nokogiri::HTML::DocumentFragment.parse(opts[:tail])
45
+ target.appendable_node << Nokogiri::HTML::DocumentFragment.parse(opts[:tail])
54
46
  end
55
47
 
56
48
  target = target.inner_html unless opts[:return_node]
57
49
  return opts[:return_hash] ? {:text => target, :count => [count, length].min, :overran => overran} : target
58
50
 
59
51
  end
52
+
53
+ # Returns the last appendable child node (the last block-level element)
54
+ # return [Nokogiri::XML::Node]
55
+ # since 0.0.2
56
+ def appendable_node
57
+ current = children.last
58
+ loop do
59
+ if current.text? or current.description.inline?
60
+ return current.parent
61
+ end
62
+ current = current.children.last
63
+ end
64
+ return current
65
+ end
60
66
 
61
67
  # Returns the last child node that is a text node
62
68
  # @return [Nokogiri::XML::Node] the last text node
data/peppercorn.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.version = Peppercorn::VERSION
8
8
  s.authors = ["Wade West"]
9
9
  s.email = ["wwest81@gmail.com"]
10
- s.homepage = ""
10
+ s.homepage = "https://github.com/wadewest/peppercorn"
11
11
  s.summary = %q{A simple gem to truncate HTML, with other features coming in the future.}
12
12
  s.description = %q{A simple gem to truncate HTML, with other features coming in the future.}
13
13
 
@@ -23,7 +23,8 @@ Gem::Specification.new do |s|
23
23
  s.add_development_dependency "rspec", "~> 2.7"
24
24
  s.add_development_dependency "guard-rspec", "~> 0.5"
25
25
  s.add_development_dependency "guard-yard", "~> 1.0"
26
+ s.add_development_dependency "rdiscount", "~> 1.6"
26
27
  # s.add_runtime_dependency "rest-client"
27
28
  # s.add_dependency "htmlentities"
28
- s.add_dependency "nokogiri"
29
+ s.add_dependency "nokogiri", "~> 1.5"
29
30
  end
@@ -6,6 +6,16 @@ describe String do
6
6
  @string = "Hello World, I make HTML truncation easy."
7
7
  end
8
8
 
9
+ it "should be able to strip whitespaces from the end of the string" do
10
+ " \t\t\t#{@string}\t \r\n".strip_end.should eql " \t\t\t#{@string}"
11
+ end
12
+
13
+ it "should be able to strip HTML tags from the string" do
14
+ string = "The quick brown fox jumps over the lazy dog."
15
+ html = "<p class=\"example\">The <em>quick</em> brown <i>fox jumps</i> over the lazy dog.</p>"
16
+ html.strip_html.should eql string
17
+ end
18
+
9
19
  it "should properly truncate a string" do
10
20
  @string.truncate(5).should eql "Hello World, I make HTML&#8230;"
11
21
  end
@@ -18,4 +28,19 @@ describe String do
18
28
  "<em>#{@string}</em>".truncate_html(5).should eql "<em>Hello World, I make HTML</em>&#8230;"
19
29
  end
20
30
 
31
+ it "should truncate HTML just like plain text when the HTML contains no tags" do
32
+ html = @string
33
+ html.truncate_html(3).should eql @string.truncate(3)
34
+ end
35
+
36
+ it "should allow a link in the tail" do
37
+ opts = {:tail => "...<a href=\"some_page.html\">Read More</a>"}
38
+ @string.truncate(3, opts).should eql "Hello World, I#{opts[:tail]}"
39
+ end
40
+
41
+ it "should be able to use a Nokogiri::XML::Node as the tail" do
42
+ opts = {:tail => Nokogiri::HTML::DocumentFragment.parse("...<a href=\"some_page.html\">Read More</a>")}
43
+ @string.truncate(3, opts).should eql "Hello World, I#{opts[:tail].to_s}"
44
+ end
45
+
21
46
  end
@@ -3,16 +3,20 @@ require 'spec_helper'
3
3
  describe String do
4
4
 
5
5
  before do
6
- @string = "<p><em class='strong'>Hello World</em>, I <i>can</i> make HTML truncation easy.</p>"
6
+ @string = "<p class=\"appendable\"><em class=\"strong\">Hello World</em>, I <i>can</i> make HTML truncation <i>easy.</i></p>"
7
7
  @html = Nokogiri::HTML::DocumentFragment.parse @string
8
8
  end
9
9
 
10
10
  it "should properly truncate some simple HTML" do
11
- @html.truncate(6).should eql "<p><em class=\"strong\">Hello World</em>, I <i>can</i> make HTML&#8230;</p>"
11
+ @html.truncate(6).should eql "<p class=\"appendable\"><em class=\"strong\">Hello World</em>, I <i>can</i> make HTML&#8230;</p>"
12
12
  end
13
13
 
14
14
  it "should not truncate some HTML that is shorter than length" do
15
- @html.truncate(30).should eql @html.to_s
15
+ @html.truncate(30).should eql @string
16
+ end
17
+
18
+ it "should return the last appendable node" do
19
+ @html.appendable_node.attribute('class').to_s.should eql "appendable"
16
20
  end
17
21
 
18
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peppercorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-26 00:00:00.000000000Z
12
+ date: 2011-10-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
16
- requirement: &70354207037860 !ruby/object:Gem::Requirement
16
+ requirement: &70336758482100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.7'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70354207037860
24
+ version_requirements: *70336758482100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70354207035900 !ruby/object:Gem::Requirement
27
+ requirement: &70336758481140 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.7'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70354207035900
35
+ version_requirements: *70336758481140
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: guard-rspec
38
- requirement: &70354207034020 !ruby/object:Gem::Requirement
38
+ requirement: &70336758479500 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0.5'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70354207034020
46
+ version_requirements: *70336758479500
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: guard-yard
49
- requirement: &70354207032280 !ruby/object:Gem::Requirement
49
+ requirement: &70336758478160 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,18 +54,29 @@ dependencies:
54
54
  version: '1.0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70354207032280
57
+ version_requirements: *70336758478160
58
+ - !ruby/object:Gem::Dependency
59
+ name: rdiscount
60
+ requirement: &70336758476840 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '1.6'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70336758476840
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: nokogiri
60
- requirement: &70354207031480 !ruby/object:Gem::Requirement
71
+ requirement: &70336758475660 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
- - - ! '>='
74
+ - - ~>
64
75
  - !ruby/object:Gem::Version
65
- version: '0'
76
+ version: '1.5'
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *70354207031480
79
+ version_requirements: *70336758475660
69
80
  description: A simple gem to truncate HTML, with other features coming in the future.
70
81
  email:
71
82
  - wwest81@gmail.com
@@ -74,10 +85,12 @@ extensions: []
74
85
  extra_rdoc_files: []
75
86
  files:
76
87
  - .gitignore
88
+ - .yardopts
89
+ - CHANGELOG.md
77
90
  - Gemfile
78
91
  - Guardfile
79
92
  - Procfile
80
- - README
93
+ - README.md
81
94
  - Rakefile
82
95
  - lib/peppercorn.rb
83
96
  - lib/peppercorn/string.rb
@@ -88,7 +101,7 @@ files:
88
101
  - spec/peppercorn/string_spec.rb
89
102
  - spec/peppercorn/xml/node_spec.rb
90
103
  - spec/spec_helper.rb
91
- homepage: ''
104
+ homepage: https://github.com/wadewest/peppercorn
92
105
  licenses: []
93
106
  post_install_message:
94
107
  rdoc_options: []