File: common_field.rb

package info (click to toggle)
ruby-mail 2.8.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,704 kB
  • sloc: ruby: 73,709; makefile: 3
file content (77 lines) | stat: -rw-r--r-- 1,242 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# encoding: utf-8
# frozen_string_literal: true
require 'mail/constants'

module Mail
  class CommonField #:nodoc:
    def self.singular?
      false
    end

    def self.parse(*args)
      new(*args).tap(&:parse)
    end

    attr_accessor :name
    attr_reader :value
    attr_accessor :charset
    attr_reader :errors

    def initialize(name = nil, value = nil, charset = nil)
      @errors = []

      self.name = name
      self.value = value
      self.charset = charset || 'utf-8'
    end

    def singular?
      self.class.singular?
    end

    def value=(value)
      @element = nil
      @value = value.is_a?(Array) ? value : value.to_s
      parse
    end

    def parse
      tap(&:element)
    end

    def element
      nil
    end

    def to_s
      decoded.to_s
    end

    def default
      decoded
    end

    def decoded
      do_decode
    end

    def encoded
      do_encode
    end

    def responsible_for?(field_name)
      name.to_s.casecmp(field_name.to_s) == 0
    end

    private

    FILENAME_RE = /\b(filename|name)=([^;"\r\n]+\s[^;"\r\n]+)/
    def ensure_filename_quoted(value)
      if value.is_a?(String)
        value.sub FILENAME_RE, '\1="\2"'
      else
        value
      end
    end
  end
end