# File lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb, line 28
        def has_a_sms_service_provider(options={})
          self.sms_service_provider_options = options||{}

          sms_service_provider_options[:accessor_name]||= 'sms_service_provider'

          accessors =
            { sms_service_provider_options[:accessor_name] + '_id' => :provider_id,
              sms_service_provider_options[:accessor_name] + '_name'=> :name}


          key_field = nil
          if sms_service_provider_options[:type]
            key_field = sms_service_provider_options[:accessor_name]
            key_field << '_'
            key_field << sms_service_provider_options[:type]
          end

          set_instance_code = accessors.inject('') do |code, field|


            # column fields use write_attribute to update the data
            # non column field look up the service providers real name
            if respond_to?(:column_names) && self.column_names.include?(field.first)
              key_field ||= field.first
              code << "write_attribute(#{field.first.inspect}, (@provider.#{field.last} if @provider))"
            else
              class_eval "def \#{field.first}\nif (p=\#{sms_service_provider_options[:accessor_name]})\np.send \#{field.last.inspect}\nend\nend\n", __FILE__, __LINE__
            end

            #define the setter function to call the service_provider instance setter
            class_eval "def \#{field.first}=(value)\nself.\#{sms_service_provider_options[:accessor_name]}=value\nself.\#{field.first}\nend\n", __FILE__, __LINE__
            code
          end

          #define the setter and getter codes for service provider
          class_eval "def \#{sms_service_provider_options[:accessor_name]}\nunless @provider\nvalue = self.send(\#{key_field.inspect})\nself.\#{sms_service_provider_options[:accessor_name]}=value\nend\n@provider\nend\n\ndef \#{sms_service_provider_options[:accessor_name]}=(value)\n@provider = SmsOnRails::ServiceProviders::Base.get_service_provider(value)\n\#{set_instance_code}\n@provider\nend\n\ndef default_service_provider; SmsOnRails::ServiceProviders::Base.default_service_provider; end\ndef self.sms_service_provider_map; SmsOnRails::ServiceProviders::Base.provider_map; end\ndef self.sms_service_provider_list; SmsOnRails::ServiceProviders::Base.provider_list; end\n", __FILE__, __LINE__
        end