asterisk-ari-client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +85 -0
  6. data/Rakefile +54 -0
  7. data/asterisk-ari-client.gemspec +32 -0
  8. data/examples/list_channels.rb +14 -0
  9. data/examples/websocket.rb +33 -0
  10. data/lib/ari.rb +12 -0
  11. data/lib/ari/client.rb +124 -0
  12. data/lib/ari/generators/api.rb +23 -0
  13. data/lib/ari/generators/attribute.rb +35 -0
  14. data/lib/ari/generators/model.rb +38 -0
  15. data/lib/ari/generators/operation.rb +43 -0
  16. data/lib/ari/generators/parameter.rb +35 -0
  17. data/lib/ari/generators/property.rb +32 -0
  18. data/lib/ari/generators/resource_generator.rb +94 -0
  19. data/lib/ari/generators/templates/model.rb.erb +36 -0
  20. data/lib/ari/generators/templates/resource.rb.erb +97 -0
  21. data/lib/ari/list_resource.rb +23 -0
  22. data/lib/ari/model.rb +26 -0
  23. data/lib/ari/models.rb +47 -0
  24. data/lib/ari/models/.DS_Store +0 -0
  25. data/lib/ari/models/application_replaced.rb +17 -0
  26. data/lib/ari/models/asterisk_info.rb +35 -0
  27. data/lib/ari/models/bridge_attended_transfer.rb +63 -0
  28. data/lib/ari/models/bridge_blind_transfer.rb +35 -0
  29. data/lib/ari/models/bridge_created.rb +23 -0
  30. data/lib/ari/models/bridge_destroyed.rb +23 -0
  31. data/lib/ari/models/bridge_merged.rb +27 -0
  32. data/lib/ari/models/build_info.rb +19 -0
  33. data/lib/ari/models/caller_id.rb +19 -0
  34. data/lib/ari/models/channel_caller_id.rb +23 -0
  35. data/lib/ari/models/channel_created.rb +23 -0
  36. data/lib/ari/models/channel_destroyed.rb +23 -0
  37. data/lib/ari/models/channel_dialplan.rb +23 -0
  38. data/lib/ari/models/channel_dtmf_received.rb +23 -0
  39. data/lib/ari/models/channel_entered_bridge.rb +27 -0
  40. data/lib/ari/models/channel_hangup_request.rb +23 -0
  41. data/lib/ari/models/channel_left_bridge.rb +27 -0
  42. data/lib/ari/models/channel_state_change.rb +23 -0
  43. data/lib/ari/models/channel_talking_finished.rb +23 -0
  44. data/lib/ari/models/channel_talking_started.rb +23 -0
  45. data/lib/ari/models/channel_userevent.rb +35 -0
  46. data/lib/ari/models/channel_varset.rb +23 -0
  47. data/lib/ari/models/config_info.rb +27 -0
  48. data/lib/ari/models/device_state_changed.rb +23 -0
  49. data/lib/ari/models/dial.rb +31 -0
  50. data/lib/ari/models/dialed.rb +17 -0
  51. data/lib/ari/models/dialplan_cep.rb +19 -0
  52. data/lib/ari/models/endpoint_state_change.rb +23 -0
  53. data/lib/ari/models/format_lang_pair.rb +19 -0
  54. data/lib/ari/models/live_recording.rb +19 -0
  55. data/lib/ari/models/message.rb +19 -0
  56. data/lib/ari/models/missing_params.rb +19 -0
  57. data/lib/ari/models/playback_finished.rb +23 -0
  58. data/lib/ari/models/playback_started.rb +23 -0
  59. data/lib/ari/models/recording_failed.rb +23 -0
  60. data/lib/ari/models/recording_finished.rb +23 -0
  61. data/lib/ari/models/recording_started.rb +23 -0
  62. data/lib/ari/models/set_id.rb +19 -0
  63. data/lib/ari/models/stasis_end.rb +23 -0
  64. data/lib/ari/models/stasis_start.rb +27 -0
  65. data/lib/ari/models/status_info.rb +27 -0
  66. data/lib/ari/models/stored_recording.rb +19 -0
  67. data/lib/ari/models/system_info.rb +19 -0
  68. data/lib/ari/models/text_message.rb +23 -0
  69. data/lib/ari/models/text_message_received.rb +27 -0
  70. data/lib/ari/models/text_message_variable.rb +19 -0
  71. data/lib/ari/models/variable.rb +19 -0
  72. data/lib/ari/request_error.rb +8 -0
  73. data/lib/ari/resource.rb +37 -0
  74. data/lib/ari/resources.rb +11 -0
  75. data/lib/ari/resources/application.rb +101 -0
  76. data/lib/ari/resources/asterisk.rb +72 -0
  77. data/lib/ari/resources/bridge.rb +286 -0
  78. data/lib/ari/resources/channel.rb +610 -0
  79. data/lib/ari/resources/device_state.rb +98 -0
  80. data/lib/ari/resources/endpoint.rb +124 -0
  81. data/lib/ari/resources/event.rb +25 -0
  82. data/lib/ari/resources/mailbox.rb +99 -0
  83. data/lib/ari/resources/playback.rb +86 -0
  84. data/lib/ari/resources/recording.rb +241 -0
  85. data/lib/ari/resources/sound.rb +64 -0
  86. data/lib/ari/server_error.rb +8 -0
  87. data/lib/asterisk/ari/client.rb +10 -0
  88. data/lib/asterisk/ari/client/version.rb +7 -0
  89. data/test/fixtures/bridge_create.json +74 -0
  90. data/test/fixtures/bridge_get.json +74 -0
  91. data/test/fixtures/bridges_list.json +76 -0
  92. data/test/fixtures/channel_get.json +83 -0
  93. data/test/fixtures/channel_originate.json +83 -0
  94. data/test/fixtures/channel_originate_with_id.json +83 -0
  95. data/test/fixtures/channels_list.json +105 -0
  96. data/test/lib/asterisk-ari-client/.DS_Store +0 -0
  97. data/test/lib/asterisk-ari-client/bridge_test.rb +46 -0
  98. data/test/lib/asterisk-ari-client/channel_test.rb +59 -0
  99. data/test/test_helper.rb +42 -0
  100. metadata +265 -0
@@ -0,0 +1,23 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class RecordingFailed < Event
14
+
15
+ attr_reader :recording
16
+
17
+ def recording=(val)
18
+ @recording ||= LiveRecording.new(val)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class RecordingFinished < Event
14
+
15
+ attr_reader :recording
16
+
17
+ def recording=(val)
18
+ @recording ||= LiveRecording.new(val)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class RecordingStarted < Event
14
+
15
+ attr_reader :recording
16
+
17
+ def recording=(val)
18
+ @recording ||= LiveRecording.new(val)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class SetId < Model
14
+
15
+ attr_reader :user, :group
16
+
17
+
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class StasisEnd < Event
14
+
15
+ attr_reader :channel
16
+
17
+ def channel=(val)
18
+ @channel ||= Channel.new(val)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class StasisStart < Event
14
+
15
+ attr_reader :args, :channel, :replace_channel
16
+
17
+ def channel=(val)
18
+ @channel ||= Channel.new(val)
19
+ end
20
+
21
+ def replace_channel=(val)
22
+ @replace_channel ||= Channel.new(val)
23
+ end
24
+
25
+
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class StatusInfo < Model
14
+
15
+ attr_reader :startup_time, :last_reload_time
16
+
17
+ def startup_time=(val)
18
+ @startup_time ||= Time.parse(val)
19
+ end
20
+
21
+ def last_reload_time=(val)
22
+ @last_reload_time ||= Time.parse(val)
23
+ end
24
+
25
+
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class StoredRecording < Model
14
+
15
+ attr_reader :name, :format
16
+
17
+
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class SystemInfo < Model
14
+
15
+ attr_reader :version, :entity_id
16
+
17
+
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class TextMessage < Model
14
+
15
+ attr_reader :from, :to, :body, :variables
16
+
17
+ def variables=(val)
18
+ @variables ||= TextMessageVariable.new(val)
19
+ end
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class TextMessageReceived < Event
14
+
15
+ attr_reader :message, :endpoint
16
+
17
+ def message=(val)
18
+ @message ||= TextMessage.new(val)
19
+ end
20
+
21
+ def endpoint=(val)
22
+ @endpoint ||= Endpoint.new(val)
23
+ end
24
+
25
+
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class TextMessageVariable < Model
14
+
15
+ attr_reader :key, :value
16
+
17
+
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class Variable < Model
14
+
15
+ attr_reader :value
16
+
17
+
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ module Ari
2
+ class RequestError < StandardError
3
+ attr_reader :code
4
+ def initialize(code)
5
+ @code = code
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,37 @@
1
+ module Ari
2
+ class Resource < Model
3
+
4
+ def client(options = {})
5
+ return @client if @client
6
+ self.class.client(options)
7
+ end
8
+
9
+ def self.client(options = {})
10
+ client = options.fetch(:client, nil)
11
+ return client if client
12
+ Ari.client
13
+ end
14
+
15
+ def add_listener(type, params = {}, &block)
16
+ client.class.instance_listeners[type.to_sym] ||= []
17
+ client.class.instance_listeners[type.to_sym] << self
18
+ client.add_listener "#{type}-#{self.id}", params, &block
19
+ end
20
+ alias_method :on, :add_listener
21
+
22
+ def remove_listener(type)
23
+ client.class.instance_listeners[type.to_sym] ||= []
24
+ client.class.instance_listeners[type].delete_if { |i| i.id == self.id }
25
+ client.remove_listener "#{type}-#{self.id}"
26
+ end
27
+ alias_method :off, :remove_listener
28
+
29
+ def remove_all_listeners!
30
+ client.class.instance_listeners.each do |type, _|
31
+ remove_listener type
32
+ end
33
+ end
34
+ alias_method :off_all!, :remove_all_listeners!
35
+
36
+ end
37
+ end
@@ -0,0 +1,11 @@
1
+ require 'ari/resources/application'
2
+ require 'ari/resources/asterisk'
3
+ require 'ari/resources/bridge'
4
+ require 'ari/resources/channel'
5
+ require 'ari/resources/device_state'
6
+ require 'ari/resources/endpoint'
7
+ require 'ari/resources/event'
8
+ require 'ari/resources/mailbox'
9
+ require 'ari/resources/playback'
10
+ require 'ari/resources/recording'
11
+ require 'ari/resources/sound'
@@ -0,0 +1,101 @@
1
+ #------------------------------------------------------------------------------
2
+ #
3
+ # WARNING !
4
+ #
5
+ # This is a generated file. DO NOT EDIT THIS FILE! Your changes will
6
+ # be lost the next time this file is regenerated.
7
+ #
8
+ # This file was generated using asterisk-ari-client ruby gem.
9
+ #
10
+ #------------------------------------------------------------------------------
11
+
12
+ module Ari
13
+ class Application < Resource
14
+
15
+ attr_reader :name, :channel_ids, :bridge_ids, :endpoint_ids, :device_names
16
+
17
+
18
+ # GET /applications
19
+ #
20
+ # Stasis applications
21
+ #
22
+ #
23
+ def self.list(options = {})
24
+ path = '/applications'
25
+ response = client(options).get(path, options)
26
+ response.map { |hash| Application.new(hash.merge(client: options[:client])) }
27
+ end
28
+
29
+ # GET /applications/%{applicationName}
30
+ #
31
+ # Stasis application
32
+ #
33
+ #
34
+ # Parameters:
35
+ #
36
+ # applicationName (required) - Application's name
37
+ #
38
+ def self.get(options = {})
39
+ raise ArgumentError.new("Parameter applicationName must be passed in options hash.") unless options[:applicationName]
40
+ path = '/applications/%{applicationName}' % options
41
+ response = client(options).get(path, options)
42
+ Application.new(response.merge(client: options[:client]))
43
+ end
44
+
45
+ def get(options = {})
46
+ self.class.get(options.merge(applicationName: self.id, client: @client))
47
+ end
48
+
49
+ # POST /applications/%{applicationName}/subscription
50
+ #
51
+ # Stasis application
52
+ #
53
+ #
54
+ # Parameters:
55
+ #
56
+ # applicationName (required) - Application's name
57
+ # eventSource (required) - URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}
58
+ #
59
+ def self.subscribe(options = {})
60
+ raise ArgumentError.new("Parameter applicationName must be passed in options hash.") unless options[:applicationName]
61
+ raise ArgumentError.new("Parameter eventSource must be passed in options hash.") unless options[:eventSource]
62
+ path = '/applications/%{applicationName}/subscription' % options
63
+ response = client(options).post(path, options)
64
+ Application.new(response.merge(client: options[:client]))
65
+ end
66
+
67
+ def subscribe(options = {})
68
+ self.class.subscribe(options.merge(applicationName: self.id, client: @client))
69
+ end
70
+
71
+ # DELETE /applications/%{applicationName}/subscription
72
+ #
73
+ # Stasis application
74
+ #
75
+ #
76
+ # Parameters:
77
+ #
78
+ # applicationName (required) - Application's name
79
+ # eventSource (required) - URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}
80
+ #
81
+ def self.unsubscribe(options = {})
82
+ raise ArgumentError.new("Parameter applicationName must be passed in options hash.") unless options[:applicationName]
83
+ raise ArgumentError.new("Parameter eventSource must be passed in options hash.") unless options[:eventSource]
84
+ path = '/applications/%{applicationName}/subscription' % options
85
+ response = client(options).delete(path, options)
86
+ Application.new(response.merge(client: options[:client]))
87
+ rescue Ari::RequestError => e
88
+ raise unless e.code == '404'
89
+ end
90
+
91
+ def unsubscribe(options = {})
92
+ self.class.unsubscribe(options.merge(applicationName: self.id, client: @client))
93
+ end
94
+
95
+
96
+ end
97
+ end
98
+
99
+ Ari::Client.send :define_method, 'applications' do
100
+ Ari::ListResource.new(self, Ari::Application)
101
+ end