feedfilter 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4e6f33ca3e35338b0d1e32d81fda9b4fef4bf18
4
- data.tar.gz: 89b6850ef5738a0c092d9abb33e976e403dea277
3
+ metadata.gz: 81bab08453558167699203ea2a2ee6159a0fbaae
4
+ data.tar.gz: 83d6db5270e1ee8d8444b8334b96d364faba4bfe
5
5
  SHA512:
6
- metadata.gz: 259ab66f191ae4f1ce880d760cdecc2c891b3dfa5e5f47f8f98c37e35b135e71381e2d21d77a6a043ba2a6316405c6fe1dc7faf4c71865dd2221cadcd8eae196
7
- data.tar.gz: fc9b241d1fe969884fb1a7436e7dd97034858395c29dade025094824dafaba16e06710b7ff9aa6f35b44e4be5bfb8513f4951aff0afe7f614f5a8e15cc970e8c
6
+ metadata.gz: 59cd7df83d51380bfc8aa9bb524b086d05c24137f83dd1be29b89db9be885c1366b0fea95a4e132e0b251a169c37ba662a42fc89fbaff6bcc20524c0c402634b
7
+ data.tar.gz: 11ce28d9351a39e2e9a5ad736f7594194ebf7a07fc8417b240418871d3b96ef3487655f684e23fcdc69df08b6e88d28459026bf31f052c3f7c4f8b2260ac3d51
data/Manifest.txt CHANGED
@@ -2,5 +2,13 @@ HISTORY.md
2
2
  Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
+ config/feedburner.txt
6
+ config/feedflare.txt
5
7
  lib/feedfilter.rb
8
+ lib/feedfilter/ads.rb
9
+ lib/feedfilter/block_reader.rb
6
10
  lib/feedfilter/version.rb
11
+ test/helper.rb
12
+ test/test_ads.rb
13
+ test/test_ads_all.rb
14
+ test/test_block_reader.rb
@@ -0,0 +1,21 @@
1
+ ####################################
2
+ # feedburner text pattern (regex)
3
+ #
4
+ # pattern (regex)
5
+ # ---
6
+ # test1
7
+ # ---
8
+ # test2
9
+ # ---
10
+ # etc.
11
+
12
+
13
+ <img[^>]*?
14
+ src=("|')(:?http:)?//feeds\.feedburner\.com/~r/[^>]+?\1
15
+ .*?>
16
+
17
+ ---
18
+
19
+ <img src="//feeds.feedburner.com/~r/Rubyflow/~4/1wUDnBztAJY" height="1" width="1" alt=""/>
20
+
21
+
@@ -0,0 +1,17 @@
1
+ ###################################
2
+ # feedflare text pattern (regex)
3
+
4
+ <div[^>]*?
5
+ class=("|')feedflare\1
6
+ [^>]*?>
7
+ .*?
8
+ <\/div>
9
+
10
+ ---
11
+
12
+ <div class="feedflare">
13
+ <a href="http://feeds.feedburner.com/~ff/Rubyflow?a=1wUDnBztAJY:fzqBvTOGB9M:3H-1DwQop_U">
14
+ <img src="http://feeds.feedburner.com/~ff/Rubyflow?i=1wUDnBztAJY:fzqBvTOGB9M:3H-1DwQop_U" border="0"></img>
15
+ </a>
16
+ </div>
17
+
data/lib/feedfilter.rb CHANGED
@@ -6,14 +6,16 @@
6
6
 
7
7
  # 3rd party gems/libs
8
8
 
9
- require 'logutils'
9
+ require 'textutils'
10
10
 
11
11
  # our own code
12
12
 
13
13
  require 'feedfilter/version' # let it always go first
14
14
  require 'feedfilter/ads'
15
15
 
16
+ require 'feedfilter/block_reader' ## todo/fix: move to textutils!!!!
16
17
 
17
18
 
18
19
  # say hello
19
20
  puts FeedFilter.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
21
+
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module FeedFilter
5
+
6
+
7
+ class AdsFilters
8
+
9
+ include LogUtils::Logging
10
+
11
+ def initialize
12
+ @filters=[]
13
+
14
+ names=[
15
+ 'feedburner',
16
+ 'feedflare'
17
+ ]
18
+
19
+ names.each do |name|
20
+ logger.debug " add ads filter #{name}"
21
+
22
+ b = BlockReader.from_file( "#{FeedFilter.root}/config/#{name}.txt").read
23
+ ## Note: replace newline and space in string for regex (w/o spaces)
24
+ ## Note: add multiline option and ignore case
25
+ regexp = Regexp.new( b[0].gsub( /[\n ]/, '' ), Regexp::MULTILINE|Regexp::IGNORECASE )
26
+ @filters << [name, regexp]
27
+ end
28
+ end
29
+
30
+ def filter( text )
31
+ @filters.each do |f|
32
+ name = f[0]
33
+ pattern = f[1]
34
+
35
+ text = text.gsub( pattern ) do |m|
36
+ # Note: m - match is just a regular string
37
+ ## double check if it's true also if regex contains capture groups ???
38
+ puts "strip #{name}:"
39
+ pp m
40
+ ''
41
+ end
42
+ end # each filter
43
+ text
44
+ end # filter
45
+
46
+ end # AdsFilters
47
+
48
+
49
+ def self.strip_ads( text )
50
+ @@ads_filters ||= FeedFilter::AdsFilters.new
51
+ @@ads_filters.filter( text )
52
+ end
53
+
54
+
55
+ module AdsFilter
56
+ def strip_ads( text )
57
+ FeedFilter.strip_ads( text )
58
+ end
59
+ end # module AdsFilter
60
+
61
+ end # module FeedFitler
62
+
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ ####
4
+ ## todo: move to textutils for re(use) ?????
5
+
6
+ class BlockReader
7
+
8
+ include LogUtils::Logging
9
+
10
+ def self.from_file( path )
11
+ ## nb: assume/enfore utf-8 encoding (with or without BOM - byte order mark)
12
+ ## - see textutils/utils.rb
13
+ text = File.read_utf8( path )
14
+ self.from_string( text )
15
+ end
16
+
17
+ def self.from_string( text )
18
+ self.new( text )
19
+ end
20
+
21
+ def initialize( text )
22
+ @text = text
23
+ end
24
+
25
+ def read
26
+ ## note returns an array of (line) strings e.g.
27
+ ## [
28
+ ## "line1\nline2", ## -- block1
29
+ ## "line1\nline2\nline3" ## -- block2
30
+ ## ]
31
+
32
+ blocks = []
33
+ buf = ""
34
+
35
+ @text.each_line do |line|
36
+ # comments allow:
37
+ # 1) ##### (shell/ruby style)
38
+ if line =~ /^\s*#/
39
+ # skip komments and do NOT copy to result (keep comments secret!)
40
+ logger.debug 'skipping comment line'
41
+ next
42
+ end
43
+
44
+ # if line =~ /^\s*$/
45
+ # # kommentar oder leerzeile überspringen
46
+ # logger.debug 'skipping blank line'
47
+ # next
48
+ # end
49
+
50
+ # pass 2) remove leading and trailing whitespace
51
+ line = line.strip
52
+
53
+ if line =~ /^-{3,}$/ ## three or more lines
54
+ logger.debug 'block separator'
55
+ blocks << buf.strip ## note: strip leading and trailing whitespace
56
+ buf = ""
57
+ else
58
+ buf << "#{line}\n"
59
+ end
60
+ end # each lines
61
+
62
+ blocks << buf.strip ## note: strip leading and trailing whitespace
63
+ blocks
64
+ end # method read
65
+
66
+ end # class BlockReader
67
+
@@ -3,7 +3,7 @@
3
3
  module FeedFilter
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 2
6
+ MINOR = 3
7
7
  PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
data/test/helper.rb ADDED
@@ -0,0 +1,14 @@
1
+ ## $:.unshift(File.dirname(__FILE__))
2
+
3
+
4
+ ## minitest setup
5
+
6
+ require 'minitest/autorun'
7
+
8
+
9
+ ## our own code
10
+
11
+ require 'feedfilter'
12
+
13
+ LogUtils::Logger.root.level = :debug
14
+
data/test/test_ads.rb CHANGED
@@ -11,19 +11,28 @@ class TestAds < MiniTest::Test
11
11
 
12
12
  include FeedFilter::AdsFilter
13
13
 
14
+
14
15
  def test_feedflare_ads
15
- text = read_snippet( 'feedflare.html' )
16
+ text =<<EOS
17
+ <div class="feedflare">
18
+ <a href="http://feeds.feedburner.com/~ff/Rubyflow?a=1wUDnBztAJY:fzqBvTOGB9M:3H-1DwQop_U">
19
+ <img src="http://feeds.feedburner.com/~ff/Rubyflow?i=1wUDnBztAJY:fzqBvTOGB9M:3H-1DwQop_U" border="0"></img>
20
+ </a>
21
+ </div>
22
+ EOS
16
23
  text = strip_ads( text ).strip
17
24
 
18
25
  assert_equal '', text
19
26
  end
20
27
 
28
+
21
29
  def test_feedburner_bugs
22
- text = read_snippet( 'feedburner.html' )
30
+ text =<<EOS
31
+ <img src="//feeds.feedburner.com/~r/Rubyflow/~4/1wUDnBztAJY" height="1" width="1" alt=""/>
32
+ EOS
23
33
  text = strip_ads( text ).strip
24
34
 
25
35
  assert_equal '', text
26
36
  end
27
37
 
28
-
29
38
  end # class TestAds
@@ -0,0 +1,29 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_ads_all.rb
4
+ # or better
5
+ # rake test
6
+
7
+ require 'helper'
8
+
9
+
10
+ class TestAdsAll < MiniTest::Test
11
+
12
+ def test_all
13
+ names=[
14
+ 'feedburner',
15
+ 'feedflare'
16
+ ]
17
+
18
+ names.each do |name|
19
+ b = BlockReader.from_file( "#{FeedFilter.root}/config/#{name}.txt").read
20
+ ## Note: replace newline and space in string for regex (w/o spaces)
21
+ ## Note: add multiline option and ignore case
22
+ regexp = Regexp.new( b[0].gsub( /[\n ]/, '' ), Regexp::MULTILINE|Regexp::IGNORECASE )
23
+ test1 = b[1]
24
+
25
+ assert_equal '', test1.gsub( regexp, '' ).strip
26
+ end
27
+ end
28
+
29
+ end # class TestAdsAll
@@ -0,0 +1,25 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_block_reader.rb
4
+ # or better
5
+ # rake test
6
+
7
+ require 'helper'
8
+
9
+
10
+ class TestBlockReader < MiniTest::Test
11
+
12
+ def test_feedburner
13
+ blocks = BlockReader.from_file( "#{FeedFilter.root}/config/feedburner.txt" ).read
14
+
15
+ ## note: regex - use %q - do NOT escape \. or \1 etc.
16
+ pattern = %q{<img[^>]*?src=("|')(:?http:)?//feeds\.feedburner\.com/~r/[^>]+?\1.*?>}
17
+
18
+ test1 = %q{<img src="//feeds.feedburner.com/~r/Rubyflow/~4/1wUDnBztAJY" height="1" width="1" alt=""/>}
19
+
20
+ assert_equal 2, blocks.size
21
+ assert_equal pattern, blocks[0].gsub( /[\n ]/, '' ) ## note: need to remove newlines and spaces
22
+ assert_equal test1, blocks[1]
23
+ end
24
+
25
+ end # class TestBlockReader
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedfilter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
@@ -60,15 +60,24 @@ extra_rdoc_files:
60
60
  - HISTORY.md
61
61
  - Manifest.txt
62
62
  - README.md
63
+ - config/feedburner.txt
64
+ - config/feedflare.txt
63
65
  files:
64
66
  - ".gemtest"
65
67
  - HISTORY.md
66
68
  - Manifest.txt
67
69
  - README.md
68
70
  - Rakefile
71
+ - config/feedburner.txt
72
+ - config/feedflare.txt
69
73
  - lib/feedfilter.rb
74
+ - lib/feedfilter/ads.rb
75
+ - lib/feedfilter/block_reader.rb
70
76
  - lib/feedfilter/version.rb
77
+ - test/helper.rb
71
78
  - test/test_ads.rb
79
+ - test/test_ads_all.rb
80
+ - test/test_block_reader.rb
72
81
  homepage: https://github.com/feedreader/feed.filter
73
82
  licenses:
74
83
  - Public Domain
@@ -96,4 +105,6 @@ signing_key:
96
105
  specification_version: 4
97
106
  summary: feedfilter - feed filter and rules for easy (re)use
98
107
  test_files:
108
+ - test/test_ads_all.rb
99
109
  - test/test_ads.rb
110
+ - test/test_block_reader.rb