filters 1.0.1 → 1.1.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.
data/Manifest CHANGED
@@ -19,6 +19,3 @@ spec/filter_profanity_spec.rb
19
19
  spec/filter_uri_spec.rb
20
20
  spec/spec.opts
21
21
  spec/spec_helper.rb
22
- tasks/docs.rake
23
- tasks/gemspec.rake
24
- tasks/spec.rake
data/README.rdoc CHANGED
@@ -9,6 +9,16 @@ Ruby text filters consisting of the following core filters:
9
9
  * uri (converts uris to anchor tags)
10
10
  * markup (mini-markup language)
11
11
 
12
+ == Mutative
13
+
14
+ All filters return a new string by default, however when you bang! it, the
15
+ string object initially passed will be modified. This method is often ideal,
16
+ as it is easier to chain filters together.
17
+
18
+ Filter::Profanity!(text)
19
+ Filter::Email!(text)
20
+ ...
21
+
12
22
  == Filter::Phrase
13
23
 
14
24
  Filter::Phrase('bad word!', :phrases => ['bad'])
@@ -40,12 +50,12 @@ Ruby text filters consisting of the following core filters:
40
50
  == Filter::URI
41
51
 
42
52
  Filter::URI('hey checkout http://vision-media.ca sometime')
43
- # => 'hey checkout <a href="http://vision-media.ca">sometime</a>'
53
+ # => 'hey checkout <a href="http://vision-media.ca">http://vision-media.ca</a> sometime'
44
54
 
45
55
  == Filter::Email
46
56
 
47
57
  Filter::Email('hey email me@foo.com sometime')
48
- # => 'hey email <a href="mailto:me@foo.com">sometime</a> sometime'
58
+ # => 'hey email <a href="mailto:me@foo.com">me@foo.com</a> sometime'
49
59
 
50
60
  == Filter::Markup
51
61
 
data/Rakefile CHANGED
@@ -13,4 +13,4 @@ Echoe.new "filters", Filter::VERSION do |p|
13
13
  p.runtime_dependencies = []
14
14
  end
15
15
 
16
- Dir['tasks/**/*.rake'].sort.each { |f| load f }
16
+ task :gemspec => [:build_gemspec]
data/filters.gemspec CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{filters}
5
- s.version = "1.0.1"
5
+ s.version = "1.1.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["TJ Holowaychuk"]
9
- s.date = %q{2009-10-23}
9
+ s.date = %q{2009-11-23}
10
10
  s.description = %q{Text filters including phrases, profanity, mini-markdown, uri, email, etc}
11
11
  s.email = %q{tj@vision-media.ca}
12
- s.extra_rdoc_files = ["README.rdoc", "lib/filters.rb", "lib/filters/all.rb", "lib/filters/email.rb", "lib/filters/filter.rb", "lib/filters/markup.rb", "lib/filters/phrase.rb", "lib/filters/profanity.rb", "lib/filters/uri.rb", "lib/filters/version.rb", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
13
- s.files = ["History.rdoc", "Manifest", "README.rdoc", "Rakefile", "filters.gemspec", "lib/filters.rb", "lib/filters/all.rb", "lib/filters/email.rb", "lib/filters/filter.rb", "lib/filters/markup.rb", "lib/filters/phrase.rb", "lib/filters/profanity.rb", "lib/filters/uri.rb", "lib/filters/version.rb", "spec/filter_email_spec.rb", "spec/filter_markup_spec.rb", "spec/filter_phrase_spec.rb", "spec/filter_profanity_spec.rb", "spec/filter_uri_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/filters.rb", "lib/filters/all.rb", "lib/filters/email.rb", "lib/filters/filter.rb", "lib/filters/markup.rb", "lib/filters/phrase.rb", "lib/filters/profanity.rb", "lib/filters/uri.rb", "lib/filters/version.rb"]
13
+ s.files = ["History.rdoc", "Manifest", "README.rdoc", "Rakefile", "filters.gemspec", "lib/filters.rb", "lib/filters/all.rb", "lib/filters/email.rb", "lib/filters/filter.rb", "lib/filters/markup.rb", "lib/filters/phrase.rb", "lib/filters/profanity.rb", "lib/filters/uri.rb", "lib/filters/version.rb", "spec/filter_email_spec.rb", "spec/filter_markup_spec.rb", "spec/filter_phrase_spec.rb", "spec/filter_profanity_spec.rb", "spec/filter_uri_spec.rb", "spec/spec.opts", "spec/spec_helper.rb"]
14
14
  s.homepage = %q{http://github.com/visionmedia/filters}
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Filters", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
data/lib/filters/all.rb CHANGED
@@ -1,6 +1,2 @@
1
1
 
2
- require 'filters/phrase'
3
- require 'filters/profanity'
4
- require 'filters/markup'
5
- require 'filters/email'
6
- require 'filters/uri'
2
+ warn "require 'filters/all' is deprecated; all filters are auto-loaded"
@@ -13,14 +13,34 @@ class Filter
13
13
  @string, @options = string, options
14
14
  end
15
15
 
16
+ ##
17
+ # Non-mutative filter.
18
+
19
+ def filter
20
+ @string = string.dup and filter!
21
+ end
22
+
16
23
  ##
17
24
  # Auto generate Filter::Subclass() methods which
18
- # act as a shortcut to Filter::Subclass.new(...).filter!
25
+ # act as a shortcut to Filter::Subclass.new(...).filter
19
26
 
20
27
  def self.inherited subclass
21
28
  (class << self; self end).send :define_method, subclass.name.split('::').last do |*args|
29
+ subclass.new(*args).filter
30
+ end
31
+ (class << self; self end).send :define_method, subclass.name.split('::').last + '!' do |*args|
22
32
  subclass.new(*args).filter!
23
33
  end
24
34
  end
25
35
 
36
+ #--
37
+ # Autoloading
38
+ #++
39
+
40
+ autoload :URI, 'filters/uri'
41
+ autoload :Email, 'filters/email'
42
+ autoload :Markup, 'filters/markup'
43
+ autoload :Phrase, 'filters/phrase'
44
+ autoload :Profanity, 'filters/profanity'
45
+
26
46
  end
@@ -1,6 +1,4 @@
1
1
 
2
- require 'filters/phrase'
3
-
4
2
  class Filter
5
3
  class Profanity < Phrase
6
4
 
@@ -300,7 +298,11 @@ class Filter
300
298
 
301
299
  end
302
300
 
303
- def self.Profanity *args
301
+ def self.Profanity! *args
304
302
  Profanity.new(*args).filter!
305
303
  end
304
+
305
+ def self.Profanity *args
306
+ Profanity.new(*args).filter
307
+ end
306
308
  end
data/lib/filters/uri.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'uri/common'
1
2
 
2
3
  class Filter
3
4
  class URI < self
@@ -17,13 +18,13 @@ class Filter
17
18
 
18
19
  ##
19
20
  # Convert URIs to anchor tags.
20
-
21
+
21
22
  def filter!
22
- string.gsub! /\w+:\/\/(.*?)(\s+|$)/ do |uri|
23
+ string.gsub! ::URI.regexp do |uri|
23
24
  if new_window
24
- %(<a href="#{uri.strip}" target="_blank">#{uri}</a>)
25
+ %(<a href="#{uri}" target="_blank">#{uri}</a>)
25
26
  else
26
- %(<a href="#{uri.strip}">#{uri}</a>)
27
+ %(<a href="#{uri}">#{uri}</a>)
27
28
  end
28
29
  end
29
30
  string
@@ -1,4 +1,4 @@
1
1
 
2
2
  class Filter
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
4
4
  end
@@ -1,6 +1,5 @@
1
1
 
2
2
  require File.dirname(__FILE__) + '/spec_helper'
3
- require 'filters/email'
4
3
 
5
4
  describe Filter::Email do
6
5
  it "should convert URIs to clickable anchor tags" do
@@ -12,6 +11,22 @@ describe Filter::Email do
12
11
  it "should retain whitespace" do
13
12
  string = 'email tj@vision-media.ca for awesome web-dev'
14
13
  Filter::Email(string).
15
- should == 'email <a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a> for awesome web-dev'
14
+ should == 'email <a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a> for awesome web-dev'
15
+ end
16
+
17
+ it "should not mutate the string passed" do
18
+ string = 'email tj@vision-media.ca for awesome web-dev'
19
+ Filter::Email(string)
20
+ string.should == 'email tj@vision-media.ca for awesome web-dev'
21
+ end
22
+
23
+ it "should mutate when bang is used" do
24
+ string = 'email tj@vision-media.ca for awesome web-dev'
25
+ Filter::Email!(string)
26
+ string.should == 'email <a href="mailto:tj@vision-media.ca">tj@vision-media.ca</a> for awesome web-dev'
27
+ end
28
+
29
+ it "should return the string untouched when no emails are present" do
30
+ Filter::Email('foo bar').should == 'foo bar'
16
31
  end
17
32
  end
@@ -1,6 +1,5 @@
1
1
 
2
2
  require File.dirname(__FILE__) + '/spec_helper'
3
- require 'filters/markup'
4
3
 
5
4
  describe Filter::Markup do
6
5
  it "should treat *STR* as strong" do
@@ -96,4 +95,20 @@ describe Filter::Markup do
96
95
  filtered2.should include('<h2>Article</h2>')
97
96
  filtered2.should include('<h3>Sub Article</h3>')
98
97
  end
98
+
99
+ it "should not mutate the string passed" do
100
+ string = 'foo *bar*'
101
+ Filter::Markup(string)
102
+ string.should == 'foo *bar*'
103
+ end
104
+
105
+ it "should mutate when a bang is used" do
106
+ string = 'foo *bar*'
107
+ Filter::Markup!(string)
108
+ string.should == 'foo <strong>bar</strong>'
109
+ end
110
+
111
+ it "should return the string untouched when no conversion are present" do
112
+ Filter::Markup('foo bar').should == 'foo bar'
113
+ end
99
114
  end
@@ -1,11 +1,9 @@
1
1
 
2
2
  require File.dirname(__FILE__) + '/spec_helper'
3
- require 'filters/phrase'
4
3
 
5
4
  describe Filter::Phrase do
6
5
  it "should not modify the string when no phrases are passed" do
7
- string = 'everything is good here!'
8
- Filter::Phrase(string).should == string
6
+ Filter::Phrase('everything is good here!').should == 'everything is good here!'
9
7
  end
10
8
 
11
9
  it "should remove phrases by default" do
@@ -41,4 +39,16 @@ describe Filter::Phrase do
41
39
  result = Filter::Phrase(string, :phrases => ['fuck(ing|!)?'])
42
40
  result.should be_empty
43
41
  end
42
+
43
+ it "should not mutate the string passed" do
44
+ string = 'fuck fuck!'
45
+ Filter::Phrase(string, :phrases => ['fuck'])
46
+ string.should == 'fuck fuck!'
47
+ end
48
+
49
+ it "should mutate when a bang is used" do
50
+ string = 'fuck fuck!'
51
+ Filter::Phrase!(string, :phrases => ['fuck'])
52
+ string.should == 'fuck!'
53
+ end
44
54
  end
@@ -1,6 +1,5 @@
1
1
 
2
2
  require File.dirname(__FILE__) + '/spec_helper'
3
- require 'filters/profanity'
4
3
 
5
4
  describe Filter::Profanity do
6
5
  it "should remove profanity" do
@@ -8,4 +7,20 @@ describe Filter::Profanity do
8
7
  results = Filter::Profanity(string, :phrases => %w( fucking! ) )
9
8
  results.should == 'this is so awesome i just love it'
10
9
  end
10
+
11
+ it "should return the string untouched when no profanity is present" do
12
+ Filter::Markup('foo bar').should == 'foo bar'
13
+ end
14
+
15
+ it "should not mutate the string passed" do
16
+ string = 'fuck this shit'
17
+ Filter::Profanity(string)
18
+ string.should == 'fuck this shit'
19
+ end
20
+
21
+ it "should mutate when a bang is used" do
22
+ string = 'fuck this shit'
23
+ Filter::Profanity!(string)
24
+ string.strip.should == 'this'
25
+ end
11
26
  end
@@ -1,6 +1,5 @@
1
1
 
2
2
  require File.dirname(__FILE__) + '/spec_helper'
3
- require 'filters/uri'
4
3
 
5
4
  describe Filter::URI do
6
5
  it "should return string when no uris are present" do
@@ -22,6 +21,18 @@ describe Filter::URI do
22
21
  it "should retain whitespace" do
23
22
  string = 'goto ftp://foo.com to do stuff'
24
23
  Filter::URI(string).
25
- should == 'goto <a href="ftp://foo.com">ftp://foo.com </a>to do stuff'
24
+ should == 'goto <a href="ftp://foo.com">ftp://foo.com</a> to do stuff'
25
+ end
26
+
27
+ it "should not mutate the string passed" do
28
+ string = 'goto ftp://foo.com to do stuff'
29
+ Filter::URI(string)
30
+ string.should == 'goto ftp://foo.com to do stuff'
31
+ end
32
+
33
+ it "should mutate when a bang is used" do
34
+ string = 'goto ftp://foo.com to do stuff'
35
+ Filter::URI!(string)
36
+ string.should == 'goto <a href="ftp://foo.com">ftp://foo.com</a> to do stuff'
26
37
  end
27
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filters
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TJ Holowaychuk
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-23 00:00:00 -07:00
12
+ date: 2009-11-23 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -30,9 +30,6 @@ extra_rdoc_files:
30
30
  - lib/filters/profanity.rb
31
31
  - lib/filters/uri.rb
32
32
  - lib/filters/version.rb
33
- - tasks/docs.rake
34
- - tasks/gemspec.rake
35
- - tasks/spec.rake
36
33
  files:
37
34
  - History.rdoc
38
35
  - Manifest
@@ -55,9 +52,6 @@ files:
55
52
  - spec/filter_uri_spec.rb
56
53
  - spec/spec.opts
57
54
  - spec/spec_helper.rb
58
- - tasks/docs.rake
59
- - tasks/gemspec.rake
60
- - tasks/spec.rake
61
55
  has_rdoc: true
62
56
  homepage: http://github.com/visionmedia/filters
63
57
  licenses: []
data/tasks/docs.rake DELETED
@@ -1,13 +0,0 @@
1
-
2
- namespace :docs do
3
-
4
- desc 'Remove rdoc products'
5
- task :remove => [:clobber_docs]
6
-
7
- desc 'Build docs, and open in browser for viewing (specify BROWSER)'
8
- task :open do
9
- browser = ENV["BROWSER"] || "safari"
10
- sh "open -a #{browser} doc/index.html"
11
- end
12
-
13
- end
data/tasks/gemspec.rake DELETED
@@ -1,3 +0,0 @@
1
-
2
- desc 'Build gemspec file'
3
- task :gemspec => [:build_gemspec]
data/tasks/spec.rake DELETED
@@ -1,25 +0,0 @@
1
-
2
- require 'spec/rake/spectask'
3
-
4
- desc "Run all specifications"
5
- Spec::Rake::SpecTask.new(:spec) do |t|
6
- t.libs << "lib"
7
- t.spec_opts = ["--color", "--require", "spec/spec_helper.rb"]
8
- end
9
-
10
- namespace :spec do
11
-
12
- desc "Run all specifications verbosely"
13
- Spec::Rake::SpecTask.new(:verbose) do |t|
14
- t.libs << "lib"
15
- t.spec_opts = ["--color", "--format", "specdoc", "--require", "spec/spec_helper.rb"]
16
- end
17
-
18
- desc "Run specific specification verbosely (specify SPEC)"
19
- Spec::Rake::SpecTask.new(:select) do |t|
20
- t.libs << "lib"
21
- t.spec_files = [ENV["SPEC"]]
22
- t.spec_opts = ["--color", "--format", "specdoc", "--require", "spec/spec_helper.rb"]
23
- end
24
-
25
- end