rss-client 2.0.9 → 2.0.10
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/{MIT-LICENSE → LICENSE} +1 -2
- data/{README → README.rdoc} +19 -16
- data/Rakefile +61 -65
- data/bin/rssclient +3 -3
- data/lib/rss-client.rb +27 -17
- data/spec/helper.rb +3 -10
- data/spec/{spec_http_access2.rb → spec_http_access2_spec.rb} +1 -1
- data/spec/spec_rss_client_spec.rb +40 -0
- metadata +20 -23
- data/install.rb +0 -84
- data/rake_tasks/annotations.rake +0 -84
- data/spec/spec_rss_client.rb +0 -22
data/{MIT-LICENSE → LICENSE}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c)
|
1
|
+
Copyright (c) 2010 Stoyan Zhekov
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -18,4 +18,3 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
20
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
-
|
data/{README → README.rdoc}
RENAMED
@@ -1,19 +1,19 @@
|
|
1
|
-
=
|
1
|
+
= rss-client: Fetching and parsing RSS feeds with easy
|
2
2
|
|
3
3
|
== Download
|
4
4
|
|
5
|
-
The latest version of
|
5
|
+
The latest version of rss-client can be found at
|
6
6
|
|
7
|
-
* http://
|
7
|
+
* http://github.com/zh/rssclient/
|
8
8
|
|
9
9
|
|
10
10
|
== Installation
|
11
11
|
|
12
12
|
=== Normal Installation
|
13
13
|
|
14
|
-
You can install
|
14
|
+
You can install rss-client with the following command.
|
15
15
|
|
16
|
-
%
|
16
|
+
% rake install
|
17
17
|
|
18
18
|
from its distribution directory.
|
19
19
|
|
@@ -63,17 +63,20 @@ Download and install rss-client with the following.
|
|
63
63
|
[<b>Todd Werth</b>] For the ruby command-line application skeleton
|
64
64
|
|
65
65
|
|
66
|
-
==
|
66
|
+
== Note on Patches/Pull Requests
|
67
|
+
|
68
|
+
* Fork the project.
|
69
|
+
* Make your feature addition or bug fix.
|
70
|
+
* Add tests for it. This is important so I don't break it in a
|
71
|
+
future version unintentionally.
|
72
|
+
* Commit, do not mess with rakefile, version, or history.
|
73
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
74
|
+
* Send me a pull request. Bonus points for topic branches.
|
67
75
|
|
68
|
-
|
76
|
+
== Copyright
|
69
77
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
== Other stuff
|
74
|
-
|
75
|
-
Author:: Stoyan Zhekov <stoyan@gmail.com>
|
78
|
+
Author:: Stoyan Zhekov <zh@zhware.net>
|
76
79
|
Requires:: Ruby 1.8.0 or later
|
77
|
-
License:: Copyright (c)
|
78
|
-
Released under an MIT-style license.
|
79
|
-
|
80
|
+
License:: Copyright (c) 2010 Stoyan Zhekov.
|
81
|
+
Released under an MIT-style license.
|
82
|
+
See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,83 +1,79 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
Gem::manage_gems
|
3
|
-
|
4
2
|
require 'rake'
|
5
|
-
require 'rake/clean'
|
6
|
-
require 'rake/packagetask'
|
7
|
-
require 'rake/gempackagetask'
|
8
|
-
require 'rake/rdoctask'
|
9
|
-
require 'fileutils'
|
10
|
-
include FileUtils
|
11
|
-
|
12
|
-
$:.unshift File.join(File.dirname(__FILE__), "lib")
|
13
3
|
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
project_name = "rss-client"
|
7
|
+
rdoc_files = %w[
|
17
8
|
lib
|
18
|
-
README
|
19
|
-
|
20
|
-
]
|
21
|
-
|
22
|
-
RDOC_OPTS = %w[
|
9
|
+
README.rdoc
|
10
|
+
LICENSE
|
11
|
+
]
|
12
|
+
rdoc_opts = %w[
|
23
13
|
--line-numbers
|
24
14
|
--inline-source
|
25
15
|
--all
|
26
16
|
--quiet
|
27
|
-
--title
|
28
|
-
--main README
|
17
|
+
--title rss-client:\ Fetching\ and\ parsing\ RSS\ feeds\ with\ easy
|
18
|
+
--main README.rdoc
|
29
19
|
--exclude "^(_darcs|.hg|.svn|spec|bin|pkg)/"
|
30
|
-
]
|
31
|
-
|
32
|
-
load 'rake_tasks/annotations.rake'
|
20
|
+
]
|
33
21
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
22
|
+
Jeweler::Tasks.new do |gem|
|
23
|
+
gem.name = project_name
|
24
|
+
gem.summary = %Q{Fetching and parsing RSS feeds with easy}
|
25
|
+
gem.description = %Q{Ruby library for fetching (http-access2) and parsing (feed-normalizer) RSS (and Atom) feeds.}
|
26
|
+
gem.email = "zh@zhware.net"
|
27
|
+
gem.homepage = "http://github.com/zh/#{project_name}"
|
28
|
+
gem.authors = ["Stoyan Zhekov"]
|
29
|
+
gem.rubyforge_project = project_name
|
30
|
+
gem.platform = Gem::Platform::RUBY
|
31
|
+
gem.files = (rdoc_files + %w[Rakefile] + Dir["{bin,lib,rake_tasks,spec}/**/*"]).uniq
|
32
|
+
gem.test_files = Dir['spec/spec_*.rb']
|
33
|
+
gem.require_path = "lib"
|
34
|
+
gem.bindir = "bin"
|
35
|
+
gem.executables = ['rssclient']
|
36
|
+
gem.default_executable = 'rssclient'
|
37
|
+
gem.has_rdoc = true
|
38
|
+
gem.extra_rdoc_files = rdoc_files
|
39
|
+
gem.rdoc_options = rdoc_opts
|
40
|
+
gem.add_dependency('feed-normalizer', '>= 1.4.0')
|
41
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
42
|
+
end
|
43
|
+
rescue LoadError
|
44
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
53
45
|
end
|
54
46
|
|
55
|
-
|
56
|
-
|
57
|
-
|
47
|
+
task :default => :spec
|
48
|
+
require 'spec/rake/spectask'
|
49
|
+
Spec::Rake::SpecTask.new {|t| t.spec_opts = ['--color']}
|
58
50
|
|
59
|
-
|
60
|
-
task :install do
|
61
|
-
name = "#{spec.name}-#{spec.version}.gem"
|
62
|
-
sh %{rake package}
|
63
|
-
sh %{sudo gem install pkg/#{spec.name}-#{spec.version}.gem}
|
64
|
-
end
|
51
|
+
task :test => :check_dependencies
|
65
52
|
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
begin
|
54
|
+
require 'rcov/rcovtask'
|
55
|
+
Rcov::RcovTask.new do |test|
|
56
|
+
test.libs << 'spec'
|
57
|
+
test.pattern = 'spec/**/*_spec.rb'
|
58
|
+
test.verbose = true
|
59
|
+
test.rcov_opts = %w{--exclude rdoc\/,pkg\/,spec\/}
|
60
|
+
end
|
61
|
+
rescue LoadError
|
62
|
+
task :rcov do
|
63
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
64
|
+
end
|
69
65
|
end
|
70
66
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
67
|
+
require 'rake/rdoctask'
|
68
|
+
Rake::RDocTask.new do |rdoc|
|
69
|
+
if File.exist?('VERSION')
|
70
|
+
version = File.read('VERSION')
|
71
|
+
else
|
72
|
+
version = ""
|
73
|
+
end
|
75
74
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
task :default => "pkg/#{spec.name}-#{spec.version}.gem" do
|
82
|
-
puts "generated latest version"
|
75
|
+
rdoc.rdoc_dir = 'rdoc'
|
76
|
+
rdoc.title = "rss-client #{version}"
|
77
|
+
rdoc.rdoc_files.include('README*')
|
78
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
83
79
|
end
|
data/bin/rssclient
CHANGED
@@ -26,10 +26,10 @@
|
|
26
26
|
# -s, --since Only changes from {since} seconds ago
|
27
27
|
#
|
28
28
|
# == Author
|
29
|
-
# Stoyan Zhekov <
|
29
|
+
# Stoyan Zhekov <zh@zhware.net>
|
30
30
|
#
|
31
31
|
# == Copyright
|
32
|
-
# Copyright (c)
|
32
|
+
# Copyright (c) 2010 Stoyan Zhekov <zh@zhware.net>. Licensed under the MIT License:
|
33
33
|
# http://www.opensource.org/licenses/mit-license.php
|
34
34
|
|
35
35
|
begin
|
@@ -43,7 +43,7 @@ require 'optparse'
|
|
43
43
|
require 'rdoc/usage'
|
44
44
|
|
45
45
|
class App
|
46
|
-
VERSION = '2.0.
|
46
|
+
VERSION = '2.0.10'
|
47
47
|
|
48
48
|
attr_reader :options
|
49
49
|
|
data/lib/rss-client.rb
CHANGED
@@ -53,25 +53,35 @@ protected
|
|
53
53
|
return nil unless @rssc_raw
|
54
54
|
|
55
55
|
case @rssc_raw.status
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
raise RuntimeError, "can't fetch feed (unknown response code: #{@rssc_raw.status})"
|
56
|
+
when 200 # good
|
57
|
+
when 301, 302 # follow redirect ...
|
58
|
+
@rssc_raw = get_url(@rssc_raw.header["Location"], opts)
|
59
|
+
return nil unless @rssc_raw
|
60
|
+
|
61
|
+
when 304 # Not modified - nothing to do
|
62
|
+
return nil
|
63
|
+
|
64
|
+
# errors
|
65
|
+
when 401
|
66
|
+
raise RuntimeError, "access denied, " + @rssc_raw.header['WWW-Authenticate'].to_s
|
67
|
+
when 404
|
68
|
+
raise RuntimeError, "feed [ #{url} ] not found"
|
69
|
+
else
|
70
|
+
raise RuntimeError, "can't fetch feed (unknown response code: #{@rssc_raw.status})"
|
72
71
|
end
|
72
|
+
|
73
|
+
return nil unless @rssc_raw.content
|
74
|
+
|
73
75
|
# Parse the raw RSS
|
74
|
-
|
76
|
+
begin
|
77
|
+
FeedNormalizer::FeedNormalizer.parse(@rssc_raw.content, :try_others => true)
|
78
|
+
rescue NoMethodError
|
79
|
+
# undefined method `channel' for #<RSS::Atom::Feed:0x9f03b70>
|
80
|
+
# try a simpler parser ...
|
81
|
+
FeedNormalizer::FeedNormalizer.parse(@rssc_raw.content,
|
82
|
+
:try_others => true, :force_parser => FeedNormalizer::SimpleRssParser
|
83
|
+
)
|
84
|
+
end
|
75
85
|
rescue RuntimeError => error
|
76
86
|
@rssc_error = error
|
77
87
|
return nil
|
data/spec/helper.rb
CHANGED
@@ -1,10 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require 'rubygems'
|
5
|
-
require 'bacon'
|
6
|
-
end
|
7
|
-
|
8
|
-
rssclient_dir = File.expand_path(File.join(File.dirname(__FILE__), "../lib"))
|
9
|
-
$LOAD_PATH.unshift(rssclient_dir)
|
10
|
-
require 'rss-client'
|
1
|
+
$LOAD_PATH.unshift 'lib'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rss-client'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec/helper'
|
2
|
+
|
3
|
+
class RSSFeed
|
4
|
+
include RSSClient
|
5
|
+
|
6
|
+
def self.fetch(*args)
|
7
|
+
self.new.fetch(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def fetch(url)
|
11
|
+
get_feed url, OpenStruct.new
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe RSSClient do
|
16
|
+
describe 'basics' do
|
17
|
+
before do
|
18
|
+
@feed = RSSFeed.new
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should have an object identity' do
|
22
|
+
@feed.should_not == RSSFeed.new
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should have useful defaults' do
|
26
|
+
@feed.rssc_error.should == nil
|
27
|
+
@feed.rssc_raw.should == nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'parsing' do
|
32
|
+
it 'can read a normal feed' do
|
33
|
+
RSSFeed.fetch('http://rubyforge.org/export/rss_sfnews.php').entries.size.should >= 5
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'can read weird feeds' do
|
37
|
+
RSSFeed.fetch('http://dotmovfest.blogspot.com/feeds/posts/default').entries.size.should >= 5
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rss-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stoyan Zhekov
|
@@ -9,11 +9,12 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-05 00:00:00 +09:00
|
13
13
|
default_executable: rssclient
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: feed-normalizer
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -21,35 +22,31 @@ dependencies:
|
|
21
22
|
- !ruby/object:Gem::Version
|
22
23
|
version: 1.4.0
|
23
24
|
version:
|
24
|
-
description:
|
25
|
-
email:
|
25
|
+
description: Ruby library for fetching (http-access2) and parsing (feed-normalizer) RSS (and Atom) feeds.
|
26
|
+
email: zh@zhware.net
|
26
27
|
executables:
|
27
28
|
- rssclient
|
28
29
|
extensions: []
|
29
30
|
|
30
31
|
extra_rdoc_files:
|
31
|
-
-
|
32
|
-
- README
|
33
|
-
- MIT-LICENSE
|
32
|
+
- LICENSE
|
33
|
+
- README.rdoc
|
34
34
|
files:
|
35
|
-
-
|
36
|
-
- README
|
37
|
-
- MIT-LICENSE
|
38
|
-
- install.rb
|
35
|
+
- LICENSE
|
36
|
+
- README.rdoc
|
39
37
|
- Rakefile
|
40
38
|
- bin/rssclient
|
41
39
|
- lib/rss-client.rb
|
42
|
-
- lib/rss-client
|
43
40
|
- lib/rss-client/http-access2.rb
|
44
|
-
- lib/rss-client/http-access2
|
45
41
|
- lib/rss-client/http-access2/cookie.rb
|
46
42
|
- lib/rss-client/http-access2/http.rb
|
47
|
-
- rake_tasks/annotations.rake
|
48
43
|
- spec/helper.rb
|
49
|
-
- spec/
|
50
|
-
- spec/
|
44
|
+
- spec/spec_http_access2_spec.rb
|
45
|
+
- spec/spec_rss_client_spec.rb
|
51
46
|
has_rdoc: true
|
52
|
-
homepage: http://
|
47
|
+
homepage: http://github.com/zh/rss-client
|
48
|
+
licenses: []
|
49
|
+
|
53
50
|
post_install_message:
|
54
51
|
rdoc_options:
|
55
52
|
- --line-numbers
|
@@ -57,9 +54,9 @@ rdoc_options:
|
|
57
54
|
- --all
|
58
55
|
- --quiet
|
59
56
|
- --title
|
60
|
-
- "
|
57
|
+
- "rss-client: Fetching and parsing RSS feeds with easy"
|
61
58
|
- --main
|
62
|
-
- README
|
59
|
+
- README.rdoc
|
63
60
|
- --exclude
|
64
61
|
- "\"^(_darcs|.hg|.svn|spec|bin|pkg)/\""
|
65
62
|
require_paths:
|
@@ -79,10 +76,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
76
|
requirements: []
|
80
77
|
|
81
78
|
rubyforge_project: rss-client
|
82
|
-
rubygems_version: 1.
|
79
|
+
rubygems_version: 1.3.5
|
83
80
|
signing_key:
|
84
|
-
specification_version:
|
81
|
+
specification_version: 3
|
85
82
|
summary: Fetching and parsing RSS feeds with easy
|
86
83
|
test_files:
|
87
|
-
- spec/
|
88
|
-
- spec/
|
84
|
+
- spec/spec_http_access2_spec.rb
|
85
|
+
- spec/spec_rss_client_spec.rb
|
data/install.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
require 'find'
|
3
|
-
require 'ftools'
|
4
|
-
|
5
|
-
include Config
|
6
|
-
|
7
|
-
$ruby = CONFIG['ruby_install_name']
|
8
|
-
|
9
|
-
##
|
10
|
-
# Install a binary file. We patch in on the way through to
|
11
|
-
# insert a #! line. If this is a Unix install, we name
|
12
|
-
# the command (for example) 'rssclient' and let the shebang line
|
13
|
-
# handle running it. Under windows, we add a '.rb' extension
|
14
|
-
# and let file associations to their stuff
|
15
|
-
#
|
16
|
-
|
17
|
-
def installBIN(from, opfile)
|
18
|
-
|
19
|
-
tmp_dir = nil
|
20
|
-
for t in [".", "/tmp", "c:/temp", $bindir]
|
21
|
-
stat = File.stat(t) rescue next
|
22
|
-
if stat.directory? and stat.writable?
|
23
|
-
tmp_dir = t
|
24
|
-
break
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
fail "Cannot find a temporary directory" unless tmp_dir
|
29
|
-
tmp_file = File.join(tmp_dir, "_tmp")
|
30
|
-
|
31
|
-
File.open(from) do |ip|
|
32
|
-
File.open(tmp_file, "w") do |op|
|
33
|
-
ruby = File.join($realbindir, $ruby)
|
34
|
-
op.puts "#!#{ruby} -w"
|
35
|
-
op.write ip.read
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
|
40
|
-
File::install(tmp_file, File.join($bindir, opfile), 0755, true)
|
41
|
-
File::unlink(tmp_file)
|
42
|
-
end
|
43
|
-
|
44
|
-
$sitedir = CONFIG["sitelibdir"]
|
45
|
-
unless $sitedir
|
46
|
-
version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
|
47
|
-
$libdir = File.join(CONFIG["libdir"], "ruby", version)
|
48
|
-
$sitedir = $:.find {|x| x =~ /site_ruby/}
|
49
|
-
if !$sitedir
|
50
|
-
$sitedir = File.join($libdir, "site_ruby")
|
51
|
-
elsif $sitedir !~ Regexp.quote(version)
|
52
|
-
$sitedir = File.join($sitedir, version)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
$bindir = CONFIG["bindir"]
|
57
|
-
|
58
|
-
$realbindir = $bindir
|
59
|
-
|
60
|
-
bindir = CONFIG["bindir"]
|
61
|
-
if (destdir = ENV['DESTDIR'])
|
62
|
-
$bindir = destdir + $bindir
|
63
|
-
$sitedir = destdir + $sitedir
|
64
|
-
|
65
|
-
File::makedirs($bindir)
|
66
|
-
File::makedirs($sitedir)
|
67
|
-
end
|
68
|
-
|
69
|
-
# The library files
|
70
|
-
|
71
|
-
files = Dir.chdir('lib') { Dir['**/*.rb'] }
|
72
|
-
|
73
|
-
for fn in files
|
74
|
-
fn_dir = File.dirname(fn)
|
75
|
-
target_dir = File.join($sitedir, fn_dir)
|
76
|
-
if ! File.exist?(target_dir)
|
77
|
-
File.makedirs(target_dir)
|
78
|
-
end
|
79
|
-
File::install(File.join('lib', fn), File.join($sitedir, fn), 0644, true)
|
80
|
-
end
|
81
|
-
|
82
|
-
# and the executable
|
83
|
-
|
84
|
-
installBIN("bin/rssclient", "rssclient")
|
data/rake_tasks/annotations.rake
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
class SourceAnnotationExtractor
|
2
|
-
class Annotation < Struct.new(:line, :tag, :text)
|
3
|
-
def to_s(options={})
|
4
|
-
s = "[%3d] " % line
|
5
|
-
s << "[#{tag}] " if options[:tag]
|
6
|
-
s << text
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.enumerate(tag, options={})
|
11
|
-
extractor = new(tag)
|
12
|
-
extractor.display(extractor.find, options)
|
13
|
-
end
|
14
|
-
|
15
|
-
attr_reader :tag
|
16
|
-
|
17
|
-
def initialize(tag)
|
18
|
-
@tag = tag
|
19
|
-
end
|
20
|
-
|
21
|
-
def find(dirs=%w(app lib test))
|
22
|
-
dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
|
23
|
-
end
|
24
|
-
|
25
|
-
def find_in(dir)
|
26
|
-
results = {}
|
27
|
-
|
28
|
-
Dir.glob("#{dir}/*") do |item|
|
29
|
-
next if File.basename(item)[0] == ?.
|
30
|
-
|
31
|
-
if File.directory?(item)
|
32
|
-
results.update(find_in(item))
|
33
|
-
elsif item =~ /\.(builder|(r(?:b|xml|js)))$/
|
34
|
-
results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/))
|
35
|
-
elsif item =~ /\.(rhtml|erb)$/
|
36
|
-
results.update(extract_annotations_from(item, /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/))
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
results
|
41
|
-
end
|
42
|
-
|
43
|
-
def extract_annotations_from(file, pattern)
|
44
|
-
lineno = 0
|
45
|
-
result = File.readlines(file).inject([]) do |list, line|
|
46
|
-
lineno += 1
|
47
|
-
next list unless line =~ pattern
|
48
|
-
list << Annotation.new(lineno, $1, $2)
|
49
|
-
end
|
50
|
-
result.empty? ? {} : { file => result }
|
51
|
-
end
|
52
|
-
|
53
|
-
def display(results, options={})
|
54
|
-
results.keys.sort.each do |file|
|
55
|
-
puts "#{file}:"
|
56
|
-
results[file].each do |note|
|
57
|
-
puts " * #{note.to_s(options)}"
|
58
|
-
end
|
59
|
-
puts
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
desc "Enumerate all annotations"
|
65
|
-
task :notes do
|
66
|
-
SourceAnnotationExtractor.enumerate "OPTIMIZE|FIXME|TODO", :tag => true
|
67
|
-
end
|
68
|
-
|
69
|
-
namespace :notes do
|
70
|
-
desc "Enumerate all OPTIMIZE annotations"
|
71
|
-
task :optimize do
|
72
|
-
SourceAnnotationExtractor.enumerate "OPTIMIZE"
|
73
|
-
end
|
74
|
-
|
75
|
-
desc "Enumerate all FIXME annotations"
|
76
|
-
task :fixme do
|
77
|
-
SourceAnnotationExtractor.enumerate "FIXME"
|
78
|
-
end
|
79
|
-
|
80
|
-
desc "Enumerate all TODO annotations"
|
81
|
-
task :todo do
|
82
|
-
SourceAnnotationExtractor.enumerate "TODO"
|
83
|
-
end
|
84
|
-
end
|
data/spec/spec_rss_client.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'spec/helper'
|
2
|
-
|
3
|
-
class RSSFeed
|
4
|
-
include RSSClient
|
5
|
-
end
|
6
|
-
|
7
|
-
describe 'rss-client' do
|
8
|
-
|
9
|
-
before do
|
10
|
-
@feed = RSSFeed.new
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should have an object identity' do
|
14
|
-
@feed.should.not.be.same_as RSSFeed.new
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should have useful defaults' do
|
18
|
-
@feed.rssc_error.should == nil
|
19
|
-
@feed.rssc_raw.should == nil
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|