feedtools 0.2.19 → 0.2.20

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == FeedTools 0.2.20
2
+ * fixed some atom namespace bugs
3
+ * added a summary method to feed items
4
+ * added some support for the apple-wallpapers elements
1
5
  == FeedTools 0.2.19
2
6
  * lousy encoding support (as opposed to none at all)
3
7
  * xml processing instruction now correctly prefixes generated feeds
@@ -1123,7 +1123,9 @@ module FeedTools
1123
1123
  "a/@href"
1124
1124
  ], :select_result_value => true)
1125
1125
  if @link.blank?
1126
- if FeedTools.is_uri?(self.guid)
1126
+ if FeedTools.is_uri?(self.guid) &&
1127
+ !(self.guid =~ /^urn:uuid:/) &&
1128
+ !(self.guid =~ /^tag:/)
1127
1129
  @link = self.guid
1128
1130
  end
1129
1131
  end
@@ -1305,6 +1307,9 @@ module FeedTools
1305
1307
  if @author.name.blank?
1306
1308
  @author.name = FeedTools.unescape_entities(
1307
1309
  try_xpaths(author_node, [
1310
+ "atom10:name/text()",
1311
+ "atom03:name/text()",
1312
+ "atom:name/text()",
1308
1313
  "name/text()",
1309
1314
  "@name"
1310
1315
  ], :select_result_value => true)
@@ -1313,6 +1318,9 @@ module FeedTools
1313
1318
  if @author.email.blank?
1314
1319
  @author.email = FeedTools.unescape_entities(
1315
1320
  try_xpaths(author_node, [
1321
+ "atom10:email/text()",
1322
+ "atom03:email/text()",
1323
+ "atom:email/text()",
1316
1324
  "email/text()",
1317
1325
  "@email"
1318
1326
  ], :select_result_value => true)
@@ -1321,7 +1329,13 @@ module FeedTools
1321
1329
  if @author.url.blank?
1322
1330
  @author.url = FeedTools.unescape_entities(
1323
1331
  try_xpaths(author_node, [
1332
+ "atom10:url/text()",
1333
+ "atom03:url/text()",
1334
+ "atom:url/text()",
1324
1335
  "url/text()",
1336
+ "atom10:uri/text()",
1337
+ "atom03:uri/text()",
1338
+ "atom:uri/text()",
1325
1339
  "uri/text()",
1326
1340
  "@url",
1327
1341
  "@uri",
@@ -1499,7 +1513,13 @@ module FeedTools
1499
1513
  def updated
1500
1514
  if @updated.nil?
1501
1515
  updated_string = try_xpaths(self.channel_node, [
1516
+ "atom10:updated/text()",
1517
+ "atom03:updated/text()",
1518
+ "atom:updated/text()",
1502
1519
  "updated/text()",
1520
+ "atom10:modified/text()",
1521
+ "atom03:modified/text()",
1522
+ "atom:modified/text()",
1503
1523
  "modified/text()"
1504
1524
  ], :select_result_value => true)
1505
1525
  unless updated_string.blank?
@@ -1520,8 +1540,14 @@ module FeedTools
1520
1540
  def published
1521
1541
  if @published.nil?
1522
1542
  published_string = try_xpaths(self.channel_node, [
1543
+ "atom10:published/text()",
1544
+ "atom03:published/text()",
1545
+ "atom:published/text()",
1523
1546
  "published/text()",
1524
1547
  "pubDate/text()",
1548
+ "atom10:issued/text()",
1549
+ "atom03:issued/text()",
1550
+ "atom:issued/text()",
1525
1551
  "issued/text()",
1526
1552
  "dc:date/text()"
1527
1553
  ], :select_result_value => true)
@@ -1577,6 +1603,7 @@ module FeedTools
1577
1603
  image_nodes = try_xpaths_all(self.channel_node, [
1578
1604
  "image",
1579
1605
  "logo",
1606
+ "apple-wallpapers:image",
1580
1607
  "atom10:link",
1581
1608
  "atom03:link",
1582
1609
  "atom:link",
@@ -1587,7 +1614,8 @@ module FeedTools
1587
1614
  image = FeedTools::Feed::Image.new
1588
1615
  image.url = try_xpaths(image_node, [
1589
1616
  "url/text()",
1590
- "@rdf:resource"
1617
+ "@rdf:resource",
1618
+ "text()"
1591
1619
  ], :select_result_value => true)
1592
1620
  if image.url.blank? && (image_node.name == "logo" ||
1593
1621
  (image_node.attributes['type'].to_s =~ /^image/) == 0)
@@ -344,6 +344,9 @@ module FeedTools
344
344
  if @content.nil?
345
345
  repair_entities = false
346
346
  content_node = try_xpaths(self.root_node, [
347
+ "atom10:content",
348
+ "atom03:content",
349
+ "atom:content",
347
350
  "content:encoded",
348
351
  "content",
349
352
  "fullitem",
@@ -353,6 +356,9 @@ module FeedTools
353
356
  "description",
354
357
  "tagline",
355
358
  "subtitle",
359
+ "atom10:summary",
360
+ "atom03:summary",
361
+ "atom:summary",
356
362
  "summary",
357
363
  "abstract",
358
364
  "blurb",
@@ -411,6 +417,85 @@ module FeedTools
411
417
  def content=(new_content)
412
418
  @content = new_content
413
419
  end
420
+
421
+ # Returns the feed item summary
422
+ def summary
423
+ if @summary.nil?
424
+ repair_entities = false
425
+ summary_node = try_xpaths(self.root_node, [
426
+ "atom10:summary",
427
+ "atom03:summary",
428
+ "atom:summary",
429
+ "summary",
430
+ "abstract",
431
+ "blurb",
432
+ "description",
433
+ "tagline",
434
+ "subtitle",
435
+ "fullitem",
436
+ "xhtml:body",
437
+ "body",
438
+ "content:encoded",
439
+ "encoded",
440
+ "atom10:content",
441
+ "atom03:content",
442
+ "atom:content",
443
+ "content",
444
+ "info"
445
+ ])
446
+ if summary_node.nil?
447
+ return nil
448
+ end
449
+ summary_type = try_xpaths(summary_node, "@type",
450
+ :select_result_value => true)
451
+ summary_mode = try_xpaths(summary_node, "@mode",
452
+ :select_result_value => true)
453
+ summary_encoding = try_xpaths(summary_node, "@encoding",
454
+ :select_result_value => true)
455
+
456
+ # Note that we're checking for misuse of type, mode and encoding here
457
+ if !summary_encoding.blank?
458
+ @summary =
459
+ "[Embedded data objects are not currently supported.]"
460
+ elsif summary_node.cdatas.size > 0
461
+ @summary = summary_node.cdatas.first.value
462
+ elsif summary_type == "base64" || summary_mode == "base64" ||
463
+ summary_encoding == "base64"
464
+ @summary = Base64.decode64(summary_node.inner_xml.strip)
465
+ elsif summary_type == "xhtml" || summary_mode == "xhtml" ||
466
+ summary_type == "xml" || summary_mode == "xml" ||
467
+ summary_type == "application/xhtml+xml"
468
+ @summary = summary_node.inner_xml
469
+ elsif summary_type == "escaped" || summary_mode == "escaped"
470
+ @summary = FeedTools.unescape_entities(
471
+ summary_node.inner_xml)
472
+ else
473
+ @summary = summary_node.inner_xml
474
+ repair_entities = true
475
+ end
476
+ if @summary.blank?
477
+ @summary = self.itunes_summary
478
+ end
479
+ if @summary.blank?
480
+ @summary = self.itunes_subtitle
481
+ end
482
+
483
+ unless @summary.blank?
484
+ @summary = FeedTools.sanitize_html(@summary, :strip)
485
+ @summary = FeedTools.unescape_entities(@summary) if repair_entities
486
+ @summary = FeedTools.tidy_html(@summary)
487
+ end
488
+
489
+ @summary = @summary.strip unless @summary.nil?
490
+ @summary = nil if @summary.blank?
491
+ end
492
+ return @summary
493
+ end
494
+
495
+ # Sets the feed item summary
496
+ def summary=(new_summary)
497
+ @summary = new_summary
498
+ end
414
499
 
415
500
  # Returns the contents of the itunes:summary element
416
501
  def itunes_summary
@@ -497,7 +582,9 @@ module FeedTools
497
582
  "a/@href"
498
583
  ], :select_result_value => true)
499
584
  if @link.blank?
500
- if FeedTools.is_uri? self.guid
585
+ if FeedTools.is_uri?(self.guid) &&
586
+ !(self.guid =~ /^urn:uuid:/) &&
587
+ !(self.guid =~ /^tag:/)
501
588
  @link = self.guid
502
589
  end
503
590
  end
@@ -601,6 +688,7 @@ module FeedTools
601
688
  image_nodes = try_xpaths_all(self.root_node, [
602
689
  "image",
603
690
  "logo",
691
+ "apple-wallpapers:image",
604
692
  "atom10:link",
605
693
  "atom03:link",
606
694
  "atom:link",
@@ -611,7 +699,8 @@ module FeedTools
611
699
  image = FeedTools::Feed::Image.new
612
700
  image.url = try_xpaths(image_node, [
613
701
  "url/text()",
614
- "@rdf:resource"
702
+ "@rdf:resource",
703
+ "text()"
615
704
  ], :select_result_value => true)
616
705
  if image.url.blank? && (image_node.name == "logo" ||
617
706
  (image_node.attributes['type'].to_s =~ /^image/) == 0)
@@ -1215,6 +1304,9 @@ module FeedTools
1215
1304
  if @author.name.blank?
1216
1305
  @author.name = FeedTools.unescape_entities(
1217
1306
  try_xpaths(author_node, [
1307
+ "atom10:name/text()",
1308
+ "atom03:name/text()",
1309
+ "atom:name/text()",
1218
1310
  "name/text()",
1219
1311
  "@name"
1220
1312
  ], :select_result_value => true)
@@ -1223,6 +1315,9 @@ module FeedTools
1223
1315
  if @author.email.blank?
1224
1316
  @author.email = FeedTools.unescape_entities(
1225
1317
  try_xpaths(author_node, [
1318
+ "atom10:email/text()",
1319
+ "atom03:email/text()",
1320
+ "atom:email/text()",
1226
1321
  "email/text()",
1227
1322
  "@email"
1228
1323
  ], :select_result_value => true)
@@ -1231,7 +1326,13 @@ module FeedTools
1231
1326
  if @author.url.blank?
1232
1327
  @author.url = FeedTools.unescape_entities(
1233
1328
  try_xpaths(author_node, [
1329
+ "atom10:url/text()",
1330
+ "atom03:url/text()",
1331
+ "atom:url/text()",
1234
1332
  "url/text()",
1333
+ "atom10:uri/text()",
1334
+ "atom03:uri/text()",
1335
+ "atom:uri/text()",
1235
1336
  "uri/text()",
1236
1337
  "@url",
1237
1338
  "@uri",
@@ -1921,8 +2022,6 @@ module FeedTools
1921
2022
  end
1922
2023
  end
1923
2024
 
1924
- alias_method :summary, :content
1925
- alias_method :summary=, :content=
1926
2025
  alias_method :abstract, :content
1927
2026
  alias_method :abstract=, :content=
1928
2027
  alias_method :description, :content
data/lib/feed_tools.rb CHANGED
@@ -32,7 +32,7 @@ FEED_TOOLS_ENV = ENV['FEED_TOOLS_ENV'] ||
32
32
  ENV['RAILS_ENV'] ||
33
33
  'development' # :nodoc:
34
34
 
35
- FEED_TOOLS_VERSION = "0.2.19"
35
+ FEED_TOOLS_VERSION = "0.2.20"
36
36
 
37
37
  FEED_TOOLS_NAMESPACES = {
38
38
  "admin" => "http://webns.net/mvcb/",
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.19'
10
+ PKG_VERSION = '0.2.20'
11
11
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
12
12
 
13
13
  RELEASE_NAME = "REL #{PKG_VERSION}"
@@ -91,7 +91,8 @@ Rake::TestTask.new("rss_test") { |t|
91
91
  Rake::RDocTask.new { |rdoc|
92
92
  rdoc.rdoc_dir = 'doc'
93
93
  rdoc.title = "Feed Tools -- caching system for xml news feeds"
94
- rdoc.options << '--line-numbers --inline-source --accessor cattr_accessor=object'
94
+ rdoc.options << '--line-numbers' << '--inline-source' <<
95
+ '--accessor' << 'cattr_accessor=object'
95
96
  rdoc.template = "#{ENV['template']}.rb" if ENV['template']
96
97
  rdoc.rdoc_files.include('README', 'CHANGELOG')
97
98
  rdoc.rdoc_files.include('lib/**/*.rb')
metadata CHANGED
@@ -3,7 +3,7 @@ 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.19
6
+ version: 0.2.20
7
7
  date: 2006-01-21 00:00:00 -05:00
8
8
  summary: "Parsing, generation, and caching system for xml news feeds."
9
9
  require_paths: