Ruby on Rails 5.2 - ActionDispatch::Response

वर्ग ActionDispatch :: प्रतिक्रिया




ruby

वर्ग ActionDispatch :: प्रतिक्रिया

जनक:
Object
शामिल मॉड्यूल:
ActionDispatch :: Http :: FilterRedirect , ActionDispatch::Http::Cache::Response

नियंत्रक क्रिया द्वारा उत्पन्न HTTP प्रतिक्रिया का प्रतिनिधित्व करता है। प्रतिक्रिया की वर्तमान स्थिति को पुनः प्राप्त करने के लिए इसका उपयोग करें, या प्रतिक्रिया को अनुकूलित करें। यह या तो एक वास्तविक HTTP प्रतिसाद (यानी एक जिसे वेब ब्राउज़र में वापस भेजने के लिए है) या एक TestResponse (अर्थात एक जो एकीकरण परीक्षणों से उत्पन्न होता है) का प्रतिनिधित्व कर सकता है।

प्रतिक्रिया ज्यादातर रेल ढांचे के कार्यान्वयन के विस्तार पर एक रूबी है, और इसे कभी भी नियंत्रकों में सीधे उपयोग नहीं किया जाना चाहिए। नियंत्रकों को ActionController::Base में परिभाषित विधियों का उपयोग करना चाहिए। उदाहरण के लिए, यदि आप HTTP प्रतिसाद की सामग्री MIME प्रकार सेट करना चाहते हैं, तो # हेडर के बजाय ActionControllerBase # शीर्ष लेख का उपयोग करें।

फिर भी, एकीकरण परीक्षण अधिक विस्तार से नियंत्रक प्रतिक्रियाओं का निरीक्षण करना चाहते हैं, और हो सकता है कि जब प्रतिक्रिया अनुप्रयोग डेवलपर्स के लिए उपयोगी हो। एकीकरण परीक्षण विधियाँ जैसे कि ActionDispatch::Integration::RequestHelpers#get और ActionDispatch::Integration::RequestHelpers#post प्रकार की TestResponse ऑब्जेक्ट्स (जो निश्चित रूप से टाइप रिस्पॉन्स के हैं) की ActionDispatch::Integration::RequestHelpers#post रिटर्न रिटर्न ऑब्जेक्ट्स।

उदाहरण के लिए, निम्नलिखित डेमो एकीकरण परीक्षण कंसोल के लिए नियंत्रक प्रतिक्रिया के शरीर को प्रिंट करता है:

class DemoControllerTest < ActionDispatch::IntegrationTest
  def test_print_root_path_to_console
    get('/')
    puts response.body
  end
end

स्थिरांक

सामग्री प्रकार
ContentTypeHeader
स्थान
NO_CONTENT_CODES
NullContentTypeHeader

गुण

हेडर [R]

इस प्रतिक्रिया के लिए शीर्ष लेख प्राप्त करें।

हेडर्स [आर]

इस प्रतिक्रिया के लिए शीर्ष लेख प्राप्त करें।

अनुरोध [आरडब्ल्यू]

वह अनुरोध जो प्रतिसाद दे रहा है।

स्थिति [R]

HTTP स्थिति कोड।

धारा [आर]

अंतर्निहित शरीर, एक सुव्यवस्थित वस्तु के रूप में।

पब्लिक क्लास के तरीके

(स्थिति = 200, हेडर = {}, बॉडी = [], default_headers: self.default_headers) बनाएं स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 151
def self.create(status = 200, header = {}, body = [], default_headers: self.default_headers)
  header = merge_default_headers(header, default_headers)
  new status, header, body
end
merge_default_headers (मूल, डिफ़ॉल्ट) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 156
def self.merge_default_headers(original, default)
  default.respond_to?(:merge) ? default.merge(original) : original
end
new (स्थिति = 200, हेडर = {}, बॉडी = []) {| स्व | ...} स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 163
def initialize(status = 200, header = {}, body = [])
  super()

  @header = Header.new(self, header)

  self.body, self.status = body, status

  @cv           = new_cond
  @committed    = false
  @sending      = false
  @sent         = false

  prepare_cache_control!

  yield self if block_given?
end
सुपरक्लास विधि कहता है

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

# File actionpack/lib/action_dispatch/http/response.rb, line 368
def abort
  if stream.respond_to?(:abort)
    stream.abort
  elsif stream.respond_to?(:close)
    # `stream.close` should really be reserved for a close from the
    # other direction, but we must fall back to it for
    # compatibility.
    stream.close
  end
end
# File actionpack/lib/action_dispatch/http/response.rb, line 185
def await_commit
  synchronize do
    @cv.wait_until { @committed }
  end
end
# File actionpack/lib/action_dispatch/http/response.rb, line 191
def await_sent
  synchronize { @cv.wait_until { @sent } }
end
# File actionpack/lib/action_dispatch/http/response.rb, line 302
def body
  @stream.body
end

प्रतिक्रिया की सामग्री को एक स्ट्रिंग के रूप में लौटाता है। इसमें render करने के render किसी भी कॉल की सामग्री शामिल है।

# File actionpack/lib/action_dispatch/http/response.rb, line 311
def body=(body)
  if body.respond_to?(:to_path)
    @stream = body
  else
    synchronize do
      @stream = build_buffer self, munge_body_object(body)
    end
  end
end

आपको प्रतिक्रिया निकाय को मैन्युअल रूप से सेट या ओवरराइड करने की अनुमति देता है।

# File actionpack/lib/action_dispatch/http/response.rb, line 355
def body_parts
  parts = []
  @stream.each { |x| parts << x }
  parts
end
# File actionpack/lib/action_dispatch/http/response.rb, line 272
def charset
  header_info = parsed_content_type_header
  header_info.charset || self.class.default_charset
end

प्रतिक्रिया की शुरुआत। HTML उस सामग्री का एन्कोडिंग जानना चाहता है जो आप उन्हें दे रहे हैं, इसलिए हमें उसे साथ भेजने की आवश्यकता है।

charset = (चारसेट) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/response.rb, line 261
def charset=(charset)
  content_type = parsed_content_type_header.mime_type
  if false == charset
    set_content_type content_type, nil
  else
    set_content_type content_type, charset || self.class.default_charset
  end
end

HTTP वर्ण सेट करता है। nil पैरामीटर के मामले में यह डिफॉल्ट को default_charset सेट करता है।

response.charset = 'utf-16' # => 'utf-16'
response.charset = nil      # => 'utf-8'
# File actionpack/lib/action_dispatch/http/response.rb, line 364
def close
  stream.close if stream.respond_to?(:close)
end
# File actionpack/lib/action_dispatch/http/response.rb, line 283
def code
  @status.to_s
end

Net::HTTPResponse के साथ संगतता सुनिश्चित करने के लिए एक स्ट्रिंग लौटाता है।

प्रतिबद्ध! () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 195
def commit!
  synchronize do
    before_committed
    @committed = true
    @cv.broadcast
  end
end
प्रतिबद्ध? () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 219
def committed?; synchronize { @committed }; end
# File actionpack/lib/action_dispatch/http/response.rb, line 246
def content_type
  parsed_content_type_header.mime_type
end

HTTP प्रतिक्रिया की सामग्री MIME प्रकार सेट करता है। उदाहरण के लिए, नियंत्रक में आप इसे लिख सकते हैं:

response.content_type = "text/plain"

यदि इस प्रतिक्रिया के लिए एक वर्ण सेट परिभाषित किया गया है (charset = देखें) तो सामग्री प्रकार की जानकारी में वर्ण सेट जानकारी भी शामिल की जाएगी।

content_type = (content_type) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/response.rb, line 228
def content_type=(content_type)
  return unless content_type
  new_header_info = parse_content_type(content_type.to_s)
  prev_header_info = parsed_content_type_header
  charset = new_header_info.charset || prev_header_info.charset
  charset ||= self.class.default_charset unless prev_header_info.mime_type
  set_content_type new_header_info.mime_type, charset
end

HTTP सामग्री प्रकार सेट करता है।

# File actionpack/lib/action_dispatch/http/response.rb, line 392
def cookies
  cookies = {}
  if header = get_header(SET_COOKIE)
    header = header.split("\n") if header.respond_to?(:to_str)
    header.each do |cookie|
      if pair = cookie.split(";").first
        key, value = pair.split("=").map { |v| Rack::Utils.unescape(v) }
        cookies[key] = value
      end
    end
  end
  cookies
end

प्रतिक्रिया कुकीज़ को लौटाता है, (नाम => मान) जोड़े के Hash में परिवर्तित किया जाता है

assert_equal 'AuthorOfNewPage', r.cookies['author']
delete_header (कुंजी) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 183
def delete_header(key); headers.delete key; end
प्रत्येक (और ब्लॉक) दिखाएँ स्रोत
# File actionpack/lib/action_dispatch/http/response.rb, line 74
def each(&block)
  sending!
  x = @stream.each(&block)
  sent!
  x
end
get_header (कुंजी) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 181
def get_header(key);    headers[key];       end
has_header? (कुंजी) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/response.rb, line 180
def has_header?(key);   headers.key? key;   end
# File actionpack/lib/action_dispatch/http/response.rb, line 295
def message
  Rack::Utils::HTTP_STATUS_CODES[@status]
end

वर्तमान HTTP स्थिति कोड के लिए संबंधित संदेश लौटाता है:

response.status = 200
response.message # => "OK"

response.status = 404
response.message # => "Not Found"
इसके अलावा उपनाम: status_message
तैयार हो जाएं! ()
अन्य के लिए उपनाम: to_a
# File actionpack/lib/action_dispatch/http/response.rb, line 351
def reset_body!
  @stream = build_buffer(self, [])
end
# File actionpack/lib/action_dispatch/http/response.rb, line 278
def response_code
  @status
end

अनुरोध का प्रतिक्रिया कोड।

# File actionpack/lib/action_dispatch/http/response.rb, line 346
def send_file(path)
  commit!
  @stream = FileBody.new(path)
end

प्रतिक्रिया निकाय के रूप में path पर संग्रहीत फ़ाइल भेजें।

# File actionpack/lib/action_dispatch/http/response.rb, line 203
def sending!
  synchronize do
    before_sending
    @sending = true
    @cv.broadcast
  end
end
# File actionpack/lib/action_dispatch/http/response.rb, line 218
def sending?;   synchronize { @sending };   end
# File actionpack/lib/action_dispatch/http/response.rb, line 250
def sending_file=(v)
  if true == v
    self.charset = false
  end
end
भेज दिया! () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 211
def sent!
  synchronize do
    @sent = true
    @cv.broadcast
  end
end
भेज दिया? () स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 220
def sent?;      synchronize { @sent };      end
set_header (कुंजी, v) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/http/response.rb, line 182
def set_header(key, v); headers[key] = v;   end
स्टेटस = (स्थिति) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/response.rb, line 223
def status=(status)
  @status = Rack::Utils.status_code(status)
end

HTTP स्टेटस कोड सेट करता है।

status_message ()
अन्य के लिए उपनाम: message
# File actionpack/lib/action_dispatch/http/response.rb, line 383
def to_a
  commit!
  rack_response @status, @header.to_hash
end

Response को स्थिति, हेडर और बॉडी के रैक-संगत सरणी में बदल देता है। स्पष्ट विभाजन की अनुमति देता है:

status, headers, body = *response
के रूप में भी उपनाम: prepare!
लिखना (स्ट्रिंग) स्रोत दिखाएँ
# File actionpack/lib/action_dispatch/http/response.rb, line 306
def write(string)
  @stream.write string
end