Completed
Push — master ( b7118a...c3970f )
by John
01:10
created

Fax.body()   A

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 3
rs 10
1
require 'base64'
2
require 'mime'
3
require 'mime/types'
4
require 'mime_builder'
5
require 'multi_json'
6
7
module RingCentralSdk::REST::Request
8
  class Fax < RingCentralSdk::REST::Request::Base
9
    attr_reader :msg
10
11
    attr_reader :account_id
12
    attr_reader :extension_id
13
14
    def initialize(opts={})
15
      @metadata_part_encode_base64 = true
16
17
      @msg = MIME::Multipart::Mixed.new
18
      @msg.headers.delete('Content-Id')
19
20
      add_path(opts)
21
      add_part_meta(opts)
22
      add_part_text(opts[:text])
23
      add_parts(opts[:files])
24
      add_parts(opts[:parts])
25
    end
26
27
    def add_path(opts={})
28
      if opts.has_key?(:accountId) && opts[:accountId].to_s.length>0
29
        @account_id = opts[:accountId]
30
      else
31
        @account_id = '~'
32
      end
33
      if opts.has_key?(:extensionId) && opts[:extensionId].to_s.length>0
34
        @extension_id = opts[:extensionId]
35
      else
36
        @extension_id = '~'
37
      end
38
    end
39
40
    def add_part_meta(opts={})
41
      meta = create_metadata opts
42
      json = MultiJson.encode meta
43
      json = Base64.encode64(json) if @metadata_part_encode_base64
44
      json_part = MIME::Text.new(json)
45
      json_part.headers.delete('Content-Id')
46
      json_part.headers.set('Content-Type', 'application/json')
47
      json_part.headers.set('Content-Transfer-Encoding', 'base64') if @metadata_part_encode_base64
48
      @msg.add(json_part)
49
      return true
50
    end
51
52
    def create_metadata(opts={})
53
      meta = {}
54
      return meta unless opts.is_a?(Hash)
55
56
      inf = RingCentralSdk::REST::Request::Inflator::ContactInfo.new
57
      meta[:to] = inf.inflate_to_array opts[:to]
58
59
      processed = {
60
        :accountId => 1,
61
        :extensionId => 1,
62
        :to    => 1,
63
        :text  => 1,
64
        :files => 1,
65
        :parts => 1
66
      }
67
68
      opts.each do |k,v|
69
        meta[k] = v unless processed.has_key?(k)
70
      end
71
72
      return meta
73
    end
74
75
    def add_part_text(text=nil, opts={})
76
      return unless !text.nil? && text.to_s.length>0
77
      opts[:content_id_disable] = true
78
      text_part = MIMEBuilder::Text.new(text, opts)
79
      @msg.add(text_part.mime)
80
    end
81
82
    def add_parts(parts=[])
83
      return if parts.nil?
84
      unless parts.is_a?(Array)
85
        raise 'invalid parameter[0]. needs to be an array'
86
      end
87
      parts.each do |part|
88
        if part.is_a?(String)
89
          file_part = MIMEBuilder::Filepath.new(part)
90
          @msg.add(file_part.mime)
91
        elsif part.is_a?(Hash)
92
          part[:content_id_disable] = true
93
          part[:is_attachment] = true
94
          if part.has_key(:filename)
95
            file_part = MIMEBuilder::Filepath.new(part[:filename], part)
96
            @msg.add(file_part.mime)
97
          elsif part.has_key?(:text)
98
            text_part = MIMEBuilder::Text.new(part[:text], part)
99
            @msg.add(text_part.mime)
100
          end
101
        end
102
      end
103
    end
104
105
    def method()
106
      return 'post'
107
    end
108
109
    def url()
110
      return "account/#{@account_id.to_s}/extension/#{@extension_id.to_s}/fax"
111
    end
112
113
    def content_type()
114
      return @msg.headers.get('Content-Type').to_s
115
    end
116
117
    def body()
118
      return @msg.body.to_s
119
    end
120
121
  end
122
end