Ruby on Rails 5.2 - ActionView::Helpers::AtomFeedHelper

मॉड्यूल ActionView :: सहायक :: AtomFeedHelper




ruby

मॉड्यूल ActionView :: सहायक :: AtomFeedHelper

सार्वजनिक प्रवृत्ति के तरीके

atom_feed (विकल्प = {}) {| atom_feed_builder | ...} स्रोत दिखाएं
# File actionview/lib/action_view/helpers/atom_feed_helper.rb, line 98
def atom_feed(options = {}, &block)
  if options[:schema_date]
    options[:schema_date] = options[:schema_date].strftime("%Y-%m-%d") if options[:schema_date].respond_to?(:strftime)
  else
    options[:schema_date] = "2005" # The Atom spec copyright date
  end

  xml = options.delete(:xml) || eval("xml", block.binding)
  xml.instruct!
  if options[:instruct]
    options[:instruct].each do |target, attrs|
      if attrs.respond_to?(:keys)
        xml.instruct!(target, attrs)
      elsif attrs.respond_to?(:each)
        attrs.each { |attr_group| xml.instruct!(target, attr_group) }
      end
    end
  end

  feed_opts = { "xml:lang" => options[:language] || "en-US", "xmlns" => "http://www.w3.org/2005/Atom" }
  feed_opts.merge!(options).reject! { |k, v| !k.to_s.match(/^xml/) }

  xml.feed(feed_opts) do
    xml.id(options[:id] || "tag:#{request.host},#{options[:schema_date]}:#{request.fullpath.split(".")[0]}")
    xml.link(rel: "alternate", type: "text/html", href: options[:root_url] || (request.protocol + request.host_with_port))
    xml.link(rel: "self", type: "application/atom+xml", href: options[:url] || request.url)

    yield AtomFeedBuilder.new(xml, self, options)
  end
end

बिल्डर टेम्पलेट इंजन के साथ एटम फीड लिखने में आसान चूक जोड़ता है (यह ईआरबी या किसी अन्य टेम्पलेट भाषाओं पर काम नहीं करता है)।

पूर्ण उपयोग उदाहरण:

config/routes.rb:
  Rails.application.routes.draw do
    resources :posts
    root to: "posts#index"
  end

app/controllers/posts_controller.rb:
  class PostsController < ApplicationController
    # GET /posts.html
    # GET /posts.atom
    def index
      @posts = Post.all

      respond_to do |format|
        format.html
        format.atom
      end
    end
  end

app/views/posts/index.atom.builder:
  atom_feed do |feed|
    feed.title("My great blog!")
    feed.updated(@posts[0].created_at) if @posts.length > 0

    @posts.each do |post|
      feed.entry(post) do |entry|
        entry.title(post.title)
        entry.content(post.body, type: 'html')

        entry.author do |author|
          author.name("DHH")
        end
      end
    end
  end

#atom_feed विकल्प हैं:

  • :language : "एन-यूएस" के लिए चूक।

  • :root_url : वह HTML विकल्प जिसके लिए यह फ़ीड दोगुना हो रहा है। मौजूदा मेजबान पर / के लिए चूक।

  • :url : इस फ़ीड का URL। वर्तमान URL के लिए डिफ़ॉल्ट।

  • :id : इस फ़ीड के लिए आईडी। इस मामले में "टैग: लोकलहोस्ट, 2005: / पोस्ट" के लिए चूक।

  • :schema_date : वह दिनांक जिस पर फ़ीड के लिए टैग योजना का पहली बार उपयोग किया गया था। एक अच्छा डिफ़ॉल्ट वह वर्ष है जब आपने फ़ीड बनाया था। अधिक जानकारी के लिए feedvalidator.org/docs/error/InvalidTAG.html देखें। यदि निर्दिष्ट नहीं है, तो 2005 का उपयोग किया जाता है (एक "मुझे परवाह नहीं है" मूल्य के रूप में)।

  • :instruct : XML संसाधन निर्देश का Hash {लक्ष्य => {विशेषता => मूल्य,}} या {लक्ष्य => [{विशेषता => मूल्य,},]} में

अन्य नामस्थानों को मूल तत्व में जोड़ा जा सकता है:

app/views/posts/index.atom.builder:
  atom_feed({'xmlns:app' => 'http://www.w3.org/2007/app',
      'xmlns:openSearch' => 'http://a9.com/-/spec/opensearch/1.1/'}) do |feed|
    feed.title("My great blog!")
    feed.updated((@posts.first.created_at))
    feed.tag!('openSearch:totalResults', 10)

    @posts.each do |post|
      feed.entry(post) do |entry|
        entry.title(post.title)
        entry.content(post.body, type: 'html')
        entry.tag!('app:edited', Time.now)

        entry.author do |author|
          author.name("DHH")
        end
      end
    end
  end

एटम युक्ति पांच तत्वों (सामग्री अधिकार शीर्षक उपशीर्षक सारांश) को परिभाषित करता है जिसमें सीधे xhtml सामग्री हो सकती है यदि प्रकार: 'xhtml' को एक विशेषता के रूप में निर्दिष्ट किया गया है। यदि ऐसा है, तो यह सहायक एनक्लोजिंग डिव और एक्सएचटीएमएल नेमस्पेस घोषणा की देखभाल करेगा। उदाहरण का उपयोग:

entry.summary type: 'xhtml' do |xhtml|
  xhtml.p pluralize(order.line_items.count, "line item")
  xhtml.p "Shipped to #{order.address}"
  xhtml.p "Paid by #{order.pay_type}"
end

atom_feed एक AtomFeedBuilder उदाहरण देता है। नेस्टेड तत्व एक AtomBuilder उदाहरण देते हैं।