feedtools 0.2.9 → 0.2.10

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ == FeedTools 0.2.10
2
+ * http error messages now sport a list of redirections to simplify debugging
3
+ * automatic table creation removed
4
+ * database schema information included in rdoc and package files
5
+ * deals with servers returning 404 if passed a User-Agent http header
1
6
  == FeedTools 0.2.9
2
7
  * changed ordering of elements checked for the item content
3
8
  * added dependancy on uuidtools, uuids used in feed generation
@@ -0,0 +1,10 @@
1
+ CREATE TABLE `feeds` (
2
+ `id` int(10) unsigned NOT NULL auto_increment,
3
+ `url` varchar(255) default NULL,
4
+ `title` varchar(255) default NULL,
5
+ `link` varchar(255) default NULL,
6
+ `xml_data` longtext default NULL,
7
+ `http_headers` text default NULL,
8
+ `last_retrieved` datetime default NULL,
9
+ PRIMARY KEY (`id`)
10
+ )
@@ -0,0 +1,9 @@
1
+ CREATE TABLE feeds (
2
+ id SERIAL PRIMARY KEY NOT NULL,
3
+ url varchar(255) default NULL,
4
+ title varchar(255) default NULL,
5
+ link varchar(255) default NULL,
6
+ xml_data text default NULL,
7
+ http_headers text default NULL,
8
+ last_retrieved timestamp default NULL
9
+ );
@@ -0,0 +1,9 @@
1
+ CREATE TABLE 'feeds' (
2
+ 'id' INTEGER PRIMARY KEY NOT NULL,
3
+ 'url' VARCHAR(255) DEFAULT NULL,
4
+ 'title' VARCHAR(255) DEFAULT NULL,
5
+ 'link' VARCHAR(255) DEFAULT NULL,
6
+ 'xml_data' TEXT DEFAULT NULL,
7
+ 'http_headers' TEXT DEFAULT NULL,
8
+ 'last_retrieved' DATETIME DEFAULT NULL
9
+ );
@@ -51,11 +51,6 @@ module FeedTools
51
51
  rescue
52
52
  end
53
53
  end
54
- # Verify that the necessary database tables are in place
55
- # and if they're missing, create them
56
- unless DatabaseFeedCache.table_exists?
57
- DatabaseFeedCache.create_table
58
- end
59
54
  return nil
60
55
  end
61
56
 
@@ -85,61 +80,5 @@ module FeedTools
85
80
  end
86
81
  return true
87
82
  end
88
-
89
- # Creates the appropriate database table
90
- # Deprecated.
91
- def DatabaseFeedCache.create_table
92
- warn("The table creation methods will be removed in a future version " +
93
- "and any reliance on this method should be removed.")
94
- unless DatabaseFeedCache.table_exists?
95
- feeds_mysql = <<-SQL_END
96
- CREATE TABLE `#{self.table_name()}` (
97
- `id` int(10) unsigned NOT NULL auto_increment,
98
- `url` varchar(255) default NULL,
99
- `title` varchar(255) default NULL,
100
- `link` varchar(255) default NULL,
101
- `xml_data` longtext default NULL,
102
- `http_headers` text default NULL,
103
- `last_retrieved` datetime default NULL,
104
- PRIMARY KEY (`id`)
105
- )
106
- SQL_END
107
- feeds_sqlite = <<-SQL_END
108
- CREATE TABLE '#{self.table_name()}' (
109
- 'id' INTEGER PRIMARY KEY NOT NULL,
110
- 'url' VARCHAR(255) DEFAULT NULL,
111
- 'title' VARCHAR(255) DEFAULT NULL,
112
- 'link' VARCHAR(255) DEFAULT NULL,
113
- 'xml_data' TEXT DEFAULT NULL,
114
- 'http_headers' TEXT DEFAULT NULL,
115
- 'last_retrieved' DATETIME DEFAULT NULL
116
- );
117
- SQL_END
118
- feeds_psql = <<-SQL_END
119
- CREATE TABLE #{self.table_name()} (
120
- id SERIAL PRIMARY KEY NOT NULL,
121
- url varchar(255) default NULL,
122
- title varchar(255) default NULL,
123
- link varchar(255) default NULL,
124
- xml_data text default NULL,
125
- http_headers text default NULL,
126
- last_retrieved timestamp default NULL
127
- );
128
- SQL_END
129
- table_creation_sql = nil
130
- if configurations["adapter"] == "mysql"
131
- table_creation_sql = feeds_mysql
132
- elsif configurations["adapter"] == "sqlite"
133
- table_creation_sql = feeds_sqlite
134
- elsif configurations["adapter"] == "postgresql"
135
- table_creation_sql = feeds_psql
136
- end
137
- if table_creation_sql.nil?
138
- raise "Could not build #{self.table_name()} table."
139
- else
140
- connection.execute table_creation_sql
141
- end
142
- end
143
- end
144
83
  end
145
84
  end
@@ -32,7 +32,7 @@ FEED_TOOLS_ENV = ENV['FEED_TOOLS_ENV'] ||
32
32
  ENV['RAILS_ENV'] ||
33
33
  'production' # :nodoc:
34
34
 
35
- FEED_TOOLS_VERSION = "0.2.9"
35
+ FEED_TOOLS_VERSION = "0.2.10"
36
36
 
37
37
  $:.unshift(File.dirname(__FILE__))
38
38
  $:.unshift(File.dirname(__FILE__) + "/feed_tools/vendor")
@@ -75,7 +75,7 @@ require 'pp'
75
75
  require 'yaml'
76
76
 
77
77
  require_gem('activerecord', '>= 1.10.1')
78
- require_gem('uuidtools', '>= 0.1.1')
78
+ require_gem('uuidtools', '>= 0.1.2')
79
79
 
80
80
  require 'database_feed_cache'
81
81
 
@@ -832,7 +832,7 @@ module FeedTools
832
832
 
833
833
  # The http feed access method
834
834
  http_fetch = lambda do |feed_url, http_headers, redirect_limit,
835
- response_chain|
835
+ response_chain, no_headers|
836
836
  raise FeedAccessError, 'Redirect too deep' if redirect_limit == 0
837
837
  feed_uri = nil
838
838
  begin
@@ -850,10 +850,11 @@ module FeedTools
850
850
  # So override it here explicitly.
851
851
  http_headers['Host'] = feed_uri.host
852
852
  http_headers['Host'] += ":#{feed_uri.port}" if feed_uri.port
853
-
853
+
854
854
  Net::HTTP.start(feed_uri.host, (feed_uri.port or 80)) do |http|
855
855
  final_uri = feed_uri.path
856
856
  final_uri += ('?' + feed_uri.query) if feed_uri.query
857
+ http_headers = {} if no_headers
857
858
  response = http.request_get(final_uri, http_headers)
858
859
 
859
860
  case response
@@ -889,16 +890,50 @@ module FeedTools
889
890
  # in Location header
890
891
  # =================================================
891
892
  http_fetch.call(new_location, http_headers,
892
- redirect_limit - 1, response_chain)
893
+ redirect_limit - 1, response_chain, no_headers)
893
894
  end
894
895
  else
896
+ class << response
897
+ def response_chain
898
+ return @response_chain
899
+ end
900
+ end
901
+ response.instance_variable_set("@response_chain",
902
+ response_chain)
895
903
  response.error!
896
904
  end
897
905
  end
898
906
  end
899
907
 
900
908
  begin
901
- @http_response = http_fetch.call(self.url, headers, 10, [])
909
+ begin
910
+ @http_response = http_fetch.call(self.url, headers, 10, [], false)
911
+ rescue => error
912
+ if error.respond_to?(:response)
913
+ # You might not believe this, but...
914
+ #
915
+ # Under certain circumstances, web servers will try to block
916
+ # based on the User-Agent header. This is *retarded*. But
917
+ # we won't let their stupid error stop us!
918
+ #
919
+ # This is, of course, a quick-n-dirty hack. But at least
920
+ # we get to blame other people's bad software and/or bad
921
+ # configuration files.
922
+ if error.response.code.to_i == 404 &&
923
+ FeedTools.user_agent != nil
924
+ @http_response = http_fetch.call(self.url, {}, 10, [], true)
925
+ if @http_response != nil && @http_response.code.to_i == 200
926
+ warn("The server appears to be blocking based on the " +
927
+ "User-Agent header. This is stupid, and you should " +
928
+ "inform the webmaster of this.")
929
+ end
930
+ else
931
+ raise error
932
+ end
933
+ else
934
+ raise error
935
+ end
936
+ end
902
937
  @http_headers = {}
903
938
  self.http_response.each_header do |header|
904
939
  self.http_headers[header.first.downcase] = header.last
@@ -948,7 +983,14 @@ module FeedTools
948
983
  end
949
984
  @live = false
950
985
  if self.xml_data.nil?
951
- raise
986
+ if error.respond_to?(:response) &&
987
+ error.response.respond_to?(:response_chain)
988
+ redirects = error.response.response_chain.map do |pair|
989
+ pair.first
990
+ end
991
+ error.message << (" - Redirects: " + redirects.inspect)
992
+ end
993
+ raise error
952
994
  end
953
995
  end
954
996
  elsif retrieval_method == "https"
data/rakefile CHANGED
@@ -7,7 +7,7 @@ require 'rake/gempackagetask'
7
7
  require 'rake/contrib/rubyforgepublisher'
8
8
 
9
9
  PKG_NAME = 'feedtools'
10
- PKG_VERSION = '0.2.9'
10
+ PKG_VERSION = '0.2.10'
11
11
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
12
 
13
13
  RELEASE_NAME = "REL #{PKG_VERSION}"
@@ -16,7 +16,8 @@ RUBY_FORGE_PROJECT = "feedtools"
16
16
  RUBY_FORGE_USER = "vacindak"
17
17
 
18
18
  PKG_FILES = FileList[
19
- "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "rakefile"
19
+ "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "db/**/*",
20
+ "[A-Z]*", "install.rb", "rakefile"
20
21
  ].exclude(/\bCVS\b|~$/).exclude(/database\.yml/)
21
22
 
22
23
  desc "Default Task"
@@ -39,11 +40,12 @@ Rake::RDocTask.new { |rdoc|
39
40
  rdoc.template = "#{ENV['template']}.rb" if ENV['template']
40
41
  rdoc.rdoc_files.include('README', 'CHANGELOG')
41
42
  rdoc.rdoc_files.include('lib/**/*.rb')
43
+ rdoc.rdoc_files.include('db/**/*.sql')
42
44
  }
43
45
 
44
46
  # Create compressed packages
45
47
 
46
- dist_dirs = [ "lib", "test" ]
48
+ dist_dirs = [ "lib", "test", "db" ]
47
49
 
48
50
  spec = Gem::Specification.new do |s|
49
51
  s.name = PKG_NAME
@@ -59,7 +61,7 @@ spec = Gem::Specification.new do |s|
59
61
  end
60
62
 
61
63
  s.add_dependency('activerecord', '>= 1.10.1')
62
- s.add_dependency('uuidtools', '>= 0.1.1')
64
+ s.add_dependency('uuidtools', '>= 0.1.2')
63
65
 
64
66
  s.require_path = 'lib'
65
67
  s.autorequire = 'feed_tools'
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: feedtools
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.9
7
- date: 2005-09-25 00:00:00 -04:00
6
+ version: 0.2.10
7
+ date: 2005-09-26 00:00:00 -04:00
8
8
  summary: "Parsing, generation, and caching system for xml news feeds."
9
9
  require_paths:
10
10
  - lib
@@ -78,6 +78,9 @@ files:
78
78
  - test/helper_test.rb
79
79
  - test/nonstandard_test.rb
80
80
  - test/rss_test.rb
81
+ - db/schema.mysql.sql
82
+ - db/schema.postgresql.sql
83
+ - db/schema.sqlite.sql
81
84
  test_files: []
82
85
  rdoc_options:
83
86
  - "--main"
@@ -106,5 +109,5 @@ dependencies:
106
109
  -
107
110
  - ">="
108
111
  - !ruby/object:Gem::Version
109
- version: 0.1.1
112
+ version: 0.1.2
110
113
  version: