login | register
Tue 07 of Oct, 2008 [17:59 UTC]

voip-info.org

Asterisk Realtime - Ruby on Rails Migrations & Models

Created by: muppetmaster,Last modification on Thu 01 of Feb, 2007 [16:25 UTC]

Asterisk RealTime - Ruby on Rails Migrations & Models


Using Ruby on Rails Migrations the below will support any combination of database that ActiveRecord and Asterisk Realtime Architecture support, including of course MySQL and Postgres.

Ruby on Rails Models are then provided to be dropped into any Ruby on Rails application that requires the ability to configure Asterisk via the Asterisk Realtime Architecture.

Migrations (db/schema.rb)


ActiveRecord::Schema.define() do

 #Use the same table for IAX2 and SIP configuration
 create_table "devices", :force => true do |t|
   t.column :name,               :string, :limit => 80
   t.column :accountcode,        :string, :limit => 20
   t.column :amaflags,           :string, :limit => 13
   t.column :callgroup,          :string, :limit => 10
   t.column :callerid,           :string, :limit => 80
   t.column :canreinvite,        :string, :limit => 3, :default => 'yes'
   t.column :context,            :string, :limit => 80
   t.column :defaultip,          :string, :limit => 15
   t.column :dtmfmode,           :string, :limit => 7
   t.column :fromuser,           :string, :limit => 80
   t.column :fromdomain,         :string, :limit => 80
   t.column :fullcontact,        :string, :limit => 80
   t.column :host,               :string, :limit => 31, :default => 'dynamic'
   t.column :insecure,           :string, :limit => 4
   t.column :language,           :string, :limit => 2
   t.column :mailbox,            :string, :limit => 50
   t.column :md5secret,          :string, :limit => 80
   t.column :nat,                :string, :limit => 5, :default => 'no'
   t.column :deny,               :string, :limit => 95
   t.column :permit,             :string, :limit => 95
   t.column :mask,               :string, :limit => 95
   t.column :pickupgroup,        :string, :limit => 10
   t.column :port,               :string, :limit => 5, :default => ''
   t.column :qualify,            :string, :limit => 3
   t.column :restrictcid,        :string, :limit => 1
   t.column :rtptimeout,         :string, :limit => 3
   t.column :rtpholdtimeout,     :string, :limit => 3
   t.column :secret,             :string, :limit => 80
   t.column :type,               :string, :limit => 6, :default => 'friend'
   t.column :username,           :string, :limit => 80
   t.column :disallow,           :string, :limit => 100
   t.column :allow,              :string, :limit => 100
   t.column :musiconhold,        :string, :limit => 100
   t.column :regseconds,         :integer, :limit => 11, :default => 0
   t.column :ipaddr,             :string, :limit => 15, :default => '0'
   t.column :regexten,           :string, :limit => 80
   t.column :cancallforward,     :string, :limit => 3, :default => 'yes'
   t.column :setvar,             :string, :limit => 100
   #Additional fields for IAX2
   t.column :dbsecret,           :string, :limit => 100
   t.column :inkeys,             :string, :limit => 100
   t.column :outkey,             :string, :limit => 100
   t.column :auth,               :string, :limit => 100
 end
 
 #Asterisk extensions table
 create_table "extensions", :force => true do |t|
   t.column :context,                :string, :limit => 20, :null => false
   t.column :exten,                  :string, :limit => 20, :null => false
   t.column :priority,               :integer, :limit => 4, :default => 0
   t.column :app,                    :string, :limit => 20, :null => false
   t.column :appdata,                :string, :limit => 128, :null => false
 end
 
 #Asterisk queues table
 create_table "callqueues", :force => true do |t|
   t.column :name,                   :string, :limit => 128
   t.column :musiconhold,            :string, :limit => 128
   t.column :announce,               :string, :limit => 128
   t.column :timeout,                :integer, :limit => 11
   t.column :monitor_join,           :boolean
   t.column :monitor_format,         :string, :limit => 128
   t.column :queue_youarenext,       :string, :limit => 128
   t.column :queue_thereare,         :string, :limit => 128
   t.column :queue_callswaiting,     :string, :limit => 128
   t.column :queue_holdtime,         :string, :limit => 128
   t.column :queue_minutes,          :string, :limit => 128
   t.column :queue_seconds,          :string, :limit => 128
   t.column :queue_lessthan,         :string, :limit => 128
   t.column :queue_thankyou,         :string, :limit => 128
   t.column :queue_reporthold,       :string, :limit => 128
   t.column :announce_frequency,     :integer, :limit => 11
   t.column :announce_round_seconds, :integer, :limit => 11
   t.column :announce_holdtime,      :string, :limit => 128
   t.column :retry,                  :integer, :limit => 11
   t.column :wrapuptime,             :integer, :limit => 11
   t.column :maxlen,                 :integer, :limit => 11
   t.column :servicelevel,           :integer, :limit => 11
   t.column :strategy,               :string, :limit => 128
   t.column :joinempty,              :string, :limit => 128
   t.column :leavewhenempty,         :string, :limit => 128
   t.column :eventmemberstatus,      :boolean
   t.column :eventwhencalled,        :boolean
   t.column :reportholdtime,         :boolean
   t.column :memberdelay,            :integer, :limit => 11
   t.column :weight,                 :integer, :limit => 11
   t.column :timeoutrestart,         :boolean
 end

 #Asterisk voicemail extended table
 create_table "voicemailboxes", :force => true do |t|
   t.column :customer_id,            :string, :limit => 11, :null => false
   t.column :context,                :string, :limit => 50, :default => '0'
   t.column :mailbox,                :string, :limit => 11, :null => false
   t.column :password,               :integer, :limit => 5, :default => '0'
   t.column :fullname,               :string, :limit => 150, :null => false
   t.column :email,                  :string, :limit => 50, :null => false
   t.column :pager,                  :string, :limit => 50, :default => ''
   t.column :tz,                     :string, :limit => 10, :default => 'central'
   t.column :attach,                 :string, :limit => 4, :default => 'yes'
   t.column :saycid,                 :string, :limit => 4, :default => 'yes'
   t.column :dialout,                :string, :limit => 10, :default => ''
   t.column :callback,               :string, :limit => 10, :default => ''
   t.column :review,                 :string, :limit => 4, :default => 'no'
   t.column :operator,               :string, :limit => 4, :default => 'no'
   t.column :envelope,               :string, :limit => 4, :default => 'no'
   t.column :sayduration,            :string, :limit => 4, :default => 'no'
   t.column :saydurationm,           :integer, :limit => 4, :default => 1
   t.column :sendvoicemail,          :string, :limit => 4, :default => 'no'
   t.column :delete,                 :string, :limit => 4, :default => 'no'
   t.column :nextaftercmd,           :integer, :limit => 4, :default => 'yes'
   t.column :forcename,              :integer, :limit => 4, :default => 'no'
   t.column :forcegreetings,         :integer, :limit => 4, :default => 'no'
   t.column :hidefromdir,            :string, :limit => 4, :default => 'yes'
   t.column :stamp,                  :timestamp
 end

 #Asterisk voicemail extended table
 create_table "voicemailmessages", :force => true do |t|
   t.column :msgnum,                 :integer, :limit => 11, :default => 0
   t.column :dir,                    :string, :limit => 80, :default => ''
   t.column :context,                :string, :limit => 80, :default => ''
   t.column :macrocontext,           :string, :limit => 80, :default => ''
   t.column :callerid,               :string, :limit => 40, :default => ''
   t.column :origtime,               :string, :limit => 40, :default => ''
   t.column :duration,               :string, :limit => 20, :default => ''
   t.column :mailboxuser,            :string, :limit => 80, :default => ''
   t.column :mailboxcontext,         :string, :limit => 80, :default => ''
   t.column :recording,              :longblob
 end
   
end



Models (app/models/)


app/models/callqueue.rb

class Callqueue < ActiveRecord::Base
  validates_presence_of :name
  validates_uniqueness_of :name
end


app/models/device.rb

class Device < ActiveRecord::Base
  validates_presence_of :name, :context
  validates_uniqueness_of :name
end


app/models/extension.rb

class Extension < ActiveRecord::Base
 validates_presence_of :context, :exten, :priority, :app, :appdata
end


app/models/voicemailbox.rb

class Voicemailbox < ActiveRecord::Base
 validates_presence_of :customer_id
 validates_uniqueness_of :customer_id
end


app/models/voicemessage.rb

class Voicemailmessage < ActiveRecord::Base
end




See Also



Comments