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|
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
class_eval "def \#{field.first}=(value)\nself.\#{sms_service_provider_options[:accessor_name]}=value\nself.\#{field.first}\nend\n", __FILE__, __LINE__
code
end
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