Class: BlogMarks::Feed

Inherits:
Object
  • Object
show all
Defined in:
lib/blogmarks/feed.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}) ⇒ Feed

Create a feed from params

params hash can contains any of the object vars



49
50
51
52
53
54
55
56
# File 'lib/blogmarks/feed.rb', line 49

def initialize( params={} )
  @title          = params[:title]          || nil
  @alternate      = params[:link_alternate] || nil
  @link_prev      = params[:link_prev]      || nil
  @link_next      = params[:link_next]      || nil
  @updated        = params[:updated]        || nil
  @marks          = params[:marks]          || []
end

Instance Attribute Details

Blogmarks.net corresponding feed page



35
36
37
# File 'lib/blogmarks/feed.rb', line 35

def link_alternate
  @link_alternate
end

Next Feed URI



39
40
41
# File 'lib/blogmarks/feed.rb', line 39

def link_next
  @link_next
end

Previous Feed URI



37
38
39
# File 'lib/blogmarks/feed.rb', line 37

def link_prev
  @link_prev
end

#marksObject (readonly)

Feed Marks



44
45
46
# File 'lib/blogmarks/feed.rb', line 44

def marks
  @marks
end

#titleObject (readonly)

Feed title



33
34
35
# File 'lib/blogmarks/feed.rb', line 33

def title
  @title
end

#updatedObject (readonly)

Feed update date



41
42
43
# File 'lib/blogmarks/feed.rb', line 41

def updated
  @updated
end

Class Method Details

.build_from_xml_element(feed) ⇒ Object

Parse an REXML::Element corresponding to the feed



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/blogmarks/feed.rb', line 62

def build_from_xml_element( feed )
  # We need a valide REXML::Element parameters :D
  return nil unless feed.kind_of?(REXML::Element)
  
  # Let's build the params to build a BlogMarks::Feed
  params = {}
  # Iterate over child nodes
  feed.each_element do |element|
    case element.name            
      when 'head'
        element.each_element do |headElement|
          case headElement.name
            when 'title'
              params[:title]        = headElement.text
            when 'updated'
              params[:updated]      = Time.parse(headElement.text)
            when 'link'
              params[:link_alternate] = URI.parse( headElement.attributes['href'] ) if headElement.attributes['rel'] == 'alternate'
              params[:link_prev]      = URI.parse( headElement.attributes['href'] ) if headElement.attributes['rel'] == 'prev'
              params[:link_next]      = URI.parse( headElement.attributes['href'] ) if headElement.attributes['rel'] == 'next'
          end
        end
        
      when 'entry'
        params[:marks]  = [] unless params.has_key?(:marks)
        params[:marks]  <<  BlogMarks::Mark.build_from_xml_element(element)
    end
  end
  
  # Create and return a new Feed constructs using params hash
  return Feed.new(params)
end