HitFox/cm-sms

View on GitHub
lib/cm_sms/messenger.rb

Summary

Maintainability
A
0 mins
Test Coverage
module CmSms
  class Messenger
    attr_accessor :from, :to, :body, :dcs, :reference

    def initialize(attributes = {})
      self.class.default_params ||= {}
      @from = attributes[:from] || self.class.default_params[:from]
      @to   = attributes[:to] || self.class.default_params[:to]
      @dcs  = attributes[:dcs] || self.class.default_params[:dcs]
      @body = attributes[:body]
      @reference = attributes[:reference]
    end

    def content(attributes = {})
      attributes.each { |attr, value| send("#{attr}=", value) }
      self
    end

    def message
      @message ||= CmSms::Message.new(from: from, to: to, dcs: dcs, body: body, reference: reference)
    end

    class << self
      def method_missing(method_name, *args) # :nodoc:
        if new.respond_to?(method_name.to_s)
          CmSms::MessageDelivery.new(self, method_name, *args)
        else
          super
        end
      end

      def respond_to_missing?(method_name, *args) # :nodoc:
        new.respond_to?(method_name.to_s) || super
      end

      def default_params
        @default_params ||= CmSms.config.defaults
      end

      def default_params=(params = {})
        @default_params = params || {}
      end

      def default(hash = {})
        self.default_params = CmSms.config.defaults.merge(hash).freeze
      end
    end
  end
end