adhearsion 2.3.5 → 2.4.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile +2 -0
  5. data/README.markdown +21 -2
  6. data/adhearsion.gemspec +5 -4
  7. data/features/cli_plugin.feature +41 -0
  8. data/features/cli_start.feature +12 -4
  9. data/features/step_definitions/cli_steps.rb +12 -0
  10. data/features/support/env.rb +1 -1
  11. data/features/support/utils.rb +0 -1
  12. data/lib/adhearsion.rb +4 -1
  13. data/lib/adhearsion/call.rb +92 -22
  14. data/lib/adhearsion/call_controller.rb +19 -15
  15. data/lib/adhearsion/call_controller/dial.rb +157 -25
  16. data/lib/adhearsion/call_controller/menu_dsl/menu_builder.rb +8 -0
  17. data/lib/adhearsion/call_controller/output/async_player.rb +1 -1
  18. data/lib/adhearsion/call_controller/output/formatter.rb +1 -1
  19. data/lib/adhearsion/call_controller/output/player.rb +1 -1
  20. data/lib/adhearsion/calls.rb +2 -0
  21. data/lib/adhearsion/cli_commands.rb +3 -163
  22. data/lib/adhearsion/cli_commands/ahn_command.rb +141 -0
  23. data/lib/adhearsion/cli_commands/plugin_command.rb +74 -0
  24. data/lib/adhearsion/cli_commands/thor_errors.rb +36 -0
  25. data/lib/adhearsion/console.rb +14 -6
  26. data/lib/adhearsion/generators/app/templates/spec/call_controllers/simon_game_spec.rb +36 -36
  27. data/lib/adhearsion/generators/controller/templates/spec/controller_spec.rb +1 -1
  28. data/lib/adhearsion/generators/plugin/templates/plugin-template.gemspec.tt +0 -1
  29. data/lib/adhearsion/generators/plugin/templates/spec/plugin-template/controller_methods_spec.rb.tt +1 -1
  30. data/lib/adhearsion/generators/plugin/templates/spec/spec_helper.rb.tt +0 -1
  31. data/lib/adhearsion/logging.rb +5 -1
  32. data/lib/adhearsion/outbound_call.rb +16 -0
  33. data/lib/adhearsion/punchblock_plugin.rb +0 -2
  34. data/lib/adhearsion/punchblock_plugin/initializer.rb +7 -12
  35. data/lib/adhearsion/version.rb +1 -1
  36. data/spec/adhearsion/call_controller/dial_spec.rb +785 -32
  37. data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +10 -0
  38. data/spec/adhearsion/call_controller/output/async_player_spec.rb +1 -1
  39. data/spec/adhearsion/call_controller/output/player_spec.rb +1 -1
  40. data/spec/adhearsion/call_controller/output_spec.rb +3 -3
  41. data/spec/adhearsion/call_controller/record_spec.rb +1 -1
  42. data/spec/adhearsion/call_controller_spec.rb +13 -9
  43. data/spec/adhearsion/call_spec.rb +216 -51
  44. data/spec/adhearsion/calls_spec.rb +1 -1
  45. data/spec/adhearsion/console_spec.rb +20 -9
  46. data/spec/adhearsion/outbound_call_spec.rb +40 -6
  47. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +9 -21
  48. data/spec/adhearsion/punchblock_plugin_spec.rb +1 -1
  49. data/spec/adhearsion/router_spec.rb +1 -1
  50. data/spec/spec_helper.rb +11 -15
  51. data/spec/support/call_controller_test_helpers.rb +2 -2
  52. data/spec/support/punchblock_mocks.rb +2 -2
  53. metadata +41 -16
@@ -125,7 +125,7 @@ module Adhearsion
125
125
 
126
126
  it "is sends a hangup command for the call" do
127
127
  call_id = call.id
128
- PunchblockPlugin.stub :client => mock('Client')
128
+ PunchblockPlugin.stub :client => double('Client')
129
129
  PunchblockPlugin.client.should_receive(:execute_command).once.with(Punchblock::Command::Hangup.new, :async => true, :call_id => call_id)
130
130
 
131
131
  subject << call
@@ -15,15 +15,17 @@ module Adhearsion
15
15
  end
16
16
  end
17
17
 
18
- describe 'testing for libedit vs. readline' do
19
- it 'should return true when detecting readline' do
20
- Readline.should_receive(:emacs_editing_mode).once.and_return true
21
- Console.libedit?.should be false
22
- end
18
+ unless defined? JRUBY_VERSION # These tests are not valid on JRuby
19
+ describe 'testing for readline' do
20
+ it 'should return false when detecting readline' do
21
+ Readline.should_receive(:emacs_editing_mode).once.and_return true
22
+ Console.cruby_with_readline?.should be true
23
+ end
23
24
 
24
- it 'should return false when detecting libedit' do
25
- Readline.should_receive(:emacs_editing_mode).once.and_raise NotImplementedError
26
- Console.libedit?.should be true
25
+ it 'should return true when detecting libedit' do
26
+ Readline.should_receive(:emacs_editing_mode).once.and_raise NotImplementedError
27
+ Console.cruby_with_readline?.should be false
28
+ end
27
29
  end
28
30
  end
29
31
 
@@ -64,12 +66,21 @@ module Adhearsion
64
66
  end
65
67
  end
66
68
 
69
+ describe "#originate" do
70
+ it "should be an alias for Adhearsion::OutboundCall.originate" do
71
+ foo = nil
72
+ Adhearsion::OutboundCall.should_receive(:originate).once.with(:foo, :bar).and_yield
73
+ Console.originate(:foo, :bar) { foo = :bar}
74
+ foo.should == :bar
75
+ end
76
+ end
77
+
67
78
  describe "#take" do
68
79
  let(:call) { Call.new }
69
80
  let(:call_id) { rand.to_s }
70
81
 
71
82
  before do
72
- Adhearsion.active_calls.clear!
83
+ Adhearsion.active_calls.clear
73
84
  call.stub(:id => call_id)
74
85
  end
75
86
 
@@ -9,13 +9,14 @@ module Adhearsion
9
9
  its(:id) { should be_nil }
10
10
  its(:variables) { should be == {} }
11
11
 
12
- let(:mock_client) { mock 'Punchblock Client' }
12
+ let(:mock_client) { double 'Punchblock Client' }
13
13
 
14
14
  before do
15
15
  PunchblockPlugin::Initializer.client = mock_client
16
16
  end
17
17
 
18
18
  its(:client) { should be mock_client }
19
+ its(:start_time) { should be nil }
19
20
 
20
21
  describe ".originate" do
21
22
  let(:to) { 'sip:foo@bar.com' }
@@ -86,7 +87,7 @@ module Adhearsion
86
87
  end
87
88
 
88
89
  describe "event handlers" do
89
- let(:response) { mock 'Response' }
90
+ let(:response) { double 'Response' }
90
91
 
91
92
  describe "for answered events" do
92
93
  let(:event) { Punchblock::Event::Answered.new }
@@ -96,20 +97,43 @@ module Adhearsion
96
97
  subject.on_answer { |event| response.call event }
97
98
  subject << event
98
99
  end
100
+
101
+ it "should record the call start time" do
102
+ originate_time = Time.local(2008, 9, 1, 12, 0, 0)
103
+ Timecop.freeze originate_time
104
+ subject.duration.should == 0.0
105
+
106
+ mid_point_time = Time.local(2008, 9, 1, 12, 0, 20)
107
+ Timecop.freeze mid_point_time
108
+ subject.duration.should == 0.0
109
+
110
+ answer_time = Time.local(2008, 9, 1, 12, 0, 40)
111
+ Timecop.freeze answer_time
112
+ subject << event
113
+ subject.start_time.should == answer_time
114
+
115
+ later_time = Time.local(2008, 9, 1, 12, 0, 50)
116
+ Timecop.freeze later_time
117
+ subject.duration.should == 10.0
118
+ end
99
119
  end
100
120
  end
101
121
 
102
122
  describe "#dial" do
103
123
  def expect_message_waiting_for_response(message)
104
124
  subject.wrapped_object.should_receive(:write_and_await_response).once.with(message, 60).and_return do
125
+ message.transport = transport
105
126
  message.target_call_id = call_id
127
+ message.domain = domain
106
128
  message
107
129
  end
108
130
  end
109
131
 
110
- let(:call_id) { 'abc123' }
111
- let(:to) { '+1800 555-0199' }
112
- let(:from) { '+1800 555-0122' }
132
+ let(:transport) { 'footransport' }
133
+ let(:call_id) { 'abc123' }
134
+ let(:domain) { 'rayo.net' }
135
+ let(:to) { '+1800 555-0199' }
136
+ let(:from) { '+1800 555-0122' }
113
137
 
114
138
  let(:expected_dial_command) { Punchblock::Command::Dial.new(:to => to, :from => from) }
115
139
 
@@ -126,11 +150,21 @@ module Adhearsion
126
150
  subject.dial_command.should be == expected_dial_command
127
151
  end
128
152
 
129
- it "should set the call ID from the dial command" do
153
+ it "should set the URI from the reference" do
154
+ subject.dial to, :from => from
155
+ subject.uri.should be == "footransport:abc123@rayo.net"
156
+ end
157
+
158
+ it "should set the call ID from the reference" do
130
159
  subject.dial to, :from => from
131
160
  subject.id.should be == call_id
132
161
  end
133
162
 
163
+ it "should set the call domain from the reference" do
164
+ subject.dial to, :from => from
165
+ subject.domain.should be == domain
166
+ end
167
+
134
168
  it "should set the to from the dial command" do
135
169
  subject.dial to, :from => from
136
170
  subject.to.should be == to
@@ -15,8 +15,6 @@ module Adhearsion
15
15
  config.port = nil
16
16
  config.certs_directory = nil
17
17
  config.root_domain = nil
18
- config.calls_domain = nil
19
- config.mixers_domain = nil
20
18
  config.connection_timeout = 60
21
19
  config.reconnect_attempts = 1.0/0.0
22
20
  config.reconnect_timer = 5
@@ -36,8 +34,6 @@ module Adhearsion
36
34
  config.port = options[:port] if options.has_key?(:port)
37
35
  config.certs_directory = options[:certs_directory] if options.has_key?(:certs_directory)
38
36
  config.root_domain = options[:root_domain] if options.has_key?(:root_domain)
39
- config.calls_domain = options[:calls_domain] if options.has_key?(:calls_domain)
40
- config.mixers_domain = options[:mixers_domain] if options.has_key?(:mixers_domain)
41
37
  config.connection_timeout = options[:connection_timeout] if options.has_key?(:connection_timeout)
42
38
  config.reconnect_attempts = options[:reconnect_attempts] if options.has_key?(:reconnect_attempts)
43
39
  config.reconnect_timer = options[:reconnect_timer] if options.has_key?(:reconnect_timer)
@@ -52,7 +48,7 @@ module Adhearsion
52
48
  let(:call_id) { rand }
53
49
  let(:offer) { Punchblock::Event::Offer.new :target_call_id => call_id }
54
50
  let(:mock_call) { Call.new }
55
- let(:mock_client) { mock 'Client' }
51
+ let(:mock_client) { double 'Client' }
56
52
 
57
53
  before do
58
54
  mock_call.stub :id => call_id
@@ -90,14 +86,6 @@ module Adhearsion
90
86
  subject.root_domain.should be_nil
91
87
  end
92
88
 
93
- it "should set properly the calls_domain value" do
94
- subject.calls_domain.should be_nil
95
- end
96
-
97
- it "should set properly the mixers_domain value" do
98
- subject.mixers_domain.should be_nil
99
- end
100
-
101
89
  it "should properly set the reconnect_attempts value" do
102
90
  subject.reconnect_attempts.should be == 1.0/0.0
103
91
  end
@@ -123,14 +111,14 @@ module Adhearsion
123
111
  end
124
112
 
125
113
  it "starts the client with any overridden settings" do
126
- Punchblock::Connection::XMPP.should_receive(:new).once.with(username: 'userb@127.0.0.1/foo', password: '123', host: 'foo.bar.com', port: 200, certs: '/foo/bar', connection_timeout: 20, root_domain: 'foo.com', calls_domain: 'call.foo.com', mixers_domain: 'mixer.foo.com', media_engine: :swift, default_voice: :hal).and_return mock_client
127
- initialize_punchblock username: 'userb@127.0.0.1/foo', password: '123', host: 'foo.bar.com', port: 200, certs_directory: '/foo/bar', connection_timeout: 20, root_domain: 'foo.com', calls_domain: 'call.foo.com', mixers_domain: 'mixer.foo.com', media_engine: :swift, default_voice: :hal
114
+ Punchblock::Connection::XMPP.should_receive(:new).once.with(username: 'userb@127.0.0.1/foo', password: '123', host: 'foo.bar.com', port: 200, certs: '/foo/bar', connection_timeout: 20, root_domain: 'foo.com', media_engine: :swift, default_voice: :hal).and_return mock_client
115
+ initialize_punchblock username: 'userb@127.0.0.1/foo', password: '123', host: 'foo.bar.com', port: 200, certs_directory: '/foo/bar', connection_timeout: 20, root_domain: 'foo.com', media_engine: :swift, default_voice: :hal
128
116
  end
129
117
 
130
118
  describe "#connect" do
131
119
  it 'should block until the connection is established' do
132
120
  reset_default_config
133
- mock_connection = mock :mock_connection
121
+ mock_connection = double :mock_connection
134
122
  mock_connection.should_receive(:register_event_handler).once
135
123
  Punchblock::Client.should_receive(:new).once.and_return mock_connection
136
124
  mock_connection.should_receive(:run).once
@@ -184,7 +172,7 @@ module Adhearsion
184
172
  end
185
173
 
186
174
  describe 'using Asterisk' do
187
- let(:overrides) { {:username => 'test', :password => '123', :host => 'foo.bar.com', :port => 200, :certs => nil, :connection_timeout => 20, :root_domain => 'foo.com', :calls_domain => 'call.foo.com', :mixers_domain => 'mixer.foo.com', :media_engine => :swift, :default_voice => :hal} }
175
+ let(:overrides) { {:username => 'test', :password => '123', :host => 'foo.bar.com', :port => 200, :certs => nil, :connection_timeout => 20, :root_domain => 'foo.com', :media_engine => :swift, :default_voice => :hal} }
188
176
 
189
177
  it 'should start an Asterisk PB connection' do
190
178
  Punchblock::Connection::Asterisk.should_receive(:new).once.with(overrides).and_return mock_client
@@ -193,7 +181,7 @@ module Adhearsion
193
181
  end
194
182
 
195
183
  describe 'using FreeSWITCH' do
196
- let(:overrides) { {:username => 'test', :password => '123', :host => 'foo.bar.com', :port => 200, :certs => nil, :connection_timeout => 20, :root_domain => 'foo.com', :calls_domain => 'call.foo.com', :mixers_domain => 'mixer.foo.com', :media_engine => :swift, :default_voice => :hal} }
184
+ let(:overrides) { {:username => 'test', :password => '123', :host => 'foo.bar.com', :port => 200, :certs => nil, :connection_timeout => 20, :root_domain => 'foo.com', :media_engine => :swift, :default_voice => :hal} }
197
185
 
198
186
  it 'should start a FreeSWITCH PB connection' do
199
187
  Punchblock::Connection::Freeswitch.should_receive(:new).once.with(overrides).and_return mock_client
@@ -255,8 +243,8 @@ module Adhearsion
255
243
  end
256
244
 
257
245
  describe "dispatching a component event" do
258
- let(:component) { mock 'ComponentNode' }
259
- let(:mock_event) { mock 'Event' }
246
+ let(:component) { double 'ComponentNode' }
247
+ let(:mock_event) { double 'Event' }
260
248
 
261
249
  before { mock_event.stub target_call_id: call_id, source: component }
262
250
 
@@ -271,7 +259,7 @@ module Adhearsion
271
259
  end
272
260
 
273
261
  describe "dispatching a call event" do
274
- let(:mock_event) { mock 'Event' }
262
+ let(:mock_event) { double 'Event' }
275
263
 
276
264
  before { mock_event.stub target_call_id: call_id }
277
265
 
@@ -13,7 +13,7 @@ module Adhearsion
13
13
  describe '#execute_component' do
14
14
  let(:message) { Punchblock::Command::Accept.new }
15
15
  let(:response) { :foo }
16
- let(:mock_client) { mock 'Client' }
16
+ let(:mock_client) { double 'Client' }
17
17
 
18
18
  let(:execute_expectation) { PunchblockPlugin.client.should_receive(:execute_command).once }
19
19
 
@@ -9,7 +9,7 @@ module Adhearsion
9
9
  describe 'a new router' do
10
10
  subject { Router.new {} }
11
11
 
12
- let(:call) { mock 'Adhearsion::Call' }
12
+ let(:call) { double 'Adhearsion::Call' }
13
13
  before { call.stub id: 'abc123' }
14
14
 
15
15
  it "should make the router available to the block" do
@@ -2,27 +2,15 @@
2
2
 
3
3
  $testing = true
4
4
 
5
- unless ENV['SKIP_RCOV']
6
- require 'simplecov'
7
- require 'simplecov-rcov'
8
- class SimpleCov::Formatter::MergedFormatter
9
- def format(result)
10
- SimpleCov::Formatter::HTMLFormatter.new.format(result)
11
- SimpleCov::Formatter::RcovFormatter.new.format(result)
12
- end
13
- end
14
- SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
15
- SimpleCov.start do
16
- add_filter "/vendor/"
17
- add_filter "/spec/"
18
- end
19
- end
5
+ require 'coveralls'
6
+ Coveralls.wear!
20
7
 
21
8
  %w{
22
9
  bundler/setup
23
10
  active_support
24
11
  stringio
25
12
  countdownlatch
13
+ timecop
26
14
  adhearsion
27
15
  }.each { |f| require f }
28
16
 
@@ -39,6 +27,10 @@ RSpec.configure do |config|
39
27
  config.run_all_when_everything_filtered = true
40
28
  config.color_enabled = true
41
29
 
30
+ config.mock_with :rspec do |mocks|
31
+ mocks.add_stub_and_should_receive_to Celluloid::AbstractProxy, ThreadSafeArray
32
+ end
33
+
42
34
  config.before :suite do
43
35
  Adhearsion::Logging.start Adhearsion::Logging.default_appenders, :trace, Adhearsion.config.platform.logging.formatter
44
36
  end
@@ -46,6 +38,10 @@ RSpec.configure do |config|
46
38
  config.before :each do
47
39
  Adhearsion.router = nil
48
40
  end
41
+
42
+ config.after :each do
43
+ Timecop.return
44
+ end
49
45
  end
50
46
 
51
47
  Adhearsion::Events.exeption do |e|
@@ -11,7 +11,7 @@ module CallControllerTestHelpers
11
11
  test_case.subject { controller }
12
12
 
13
13
  test_case.before do
14
- call.stub :write_command => true, :id => call_id
14
+ call.wrapped_object.stub :write_command => true, :id => call_id
15
15
  end
16
16
  end
17
17
 
@@ -50,7 +50,7 @@ module CallControllerTestHelpers
50
50
 
51
51
  def expect_input_component_complete_event(utterance)
52
52
  complete_event = Punchblock::Event::Complete.new
53
- complete_event.stub reason: mock(utterance: utterance, name: :input)
53
+ complete_event.stub reason: double(utterance: utterance, name: :input)
54
54
  Punchblock::Component::Input.any_instance.stub(complete?: true, complete_event: complete_event)
55
55
  end
56
56
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  def mock_offer(id = nil, headers = {})
4
4
  id ||= rand
5
- mock("Offer: #{id}").tap do |offer|
6
- offer.stub :call_id => id, :headers_hash => headers
5
+ double("Offer: #{id}").tap do |offer|
6
+ offer.stub :call_id => id, :headers => headers
7
7
  offer.as_null_object
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adhearsion
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.5
4
+ version: 2.4.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Phillips
@@ -11,22 +11,28 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-06-06 00:00:00.000000000 Z
14
+ date: 2013-08-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
- version: '3.0'
22
+ version: 3.0.0
23
+ - - <
24
+ - !ruby/object:Gem::Version
25
+ version: 5.0.0
23
26
  type: :runtime
24
27
  prerelease: false
25
28
  version_requirements: !ruby/object:Gem::Requirement
26
29
  requirements:
27
- - - ~>
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ - - <
28
34
  - !ruby/object:Gem::Version
29
- version: '3.0'
35
+ version: 5.0.0
30
36
  - !ruby/object:Gem::Dependency
31
37
  name: adhearsion-loquacious
32
38
  requirement: !ruby/object:Gem::Requirement
@@ -173,14 +179,14 @@ dependencies:
173
179
  requirements:
174
180
  - - ~>
175
181
  - !ruby/object:Gem::Version
176
- version: '1.4'
182
+ version: 2.0.0.beta1
177
183
  type: :runtime
178
184
  prerelease: false
179
185
  version_requirements: !ruby/object:Gem::Requirement
180
186
  requirements:
181
187
  - - ~>
182
188
  - !ruby/object:Gem::Version
183
- version: '1.4'
189
+ version: 2.0.0.beta1
184
190
  - !ruby/object:Gem::Dependency
185
191
  name: rake
186
192
  requirement: !ruby/object:Gem::Requirement
@@ -201,14 +207,14 @@ dependencies:
201
207
  requirements:
202
208
  - - ~>
203
209
  - !ruby/object:Gem::Version
204
- version: '1.0'
210
+ version: '2.0'
205
211
  type: :runtime
206
212
  prerelease: false
207
213
  version_requirements: !ruby/object:Gem::Requirement
208
214
  requirements:
209
215
  - - ~>
210
216
  - !ruby/object:Gem::Version
211
- version: '1.0'
217
+ version: '2.0'
212
218
  - !ruby/object:Gem::Dependency
213
219
  name: thor
214
220
  requirement: !ruby/object:Gem::Requirement
@@ -308,7 +314,7 @@ dependencies:
308
314
  - !ruby/object:Gem::Version
309
315
  version: '2.11'
310
316
  - !ruby/object:Gem::Dependency
311
- name: ruby_gntp
317
+ name: simplecov
312
318
  requirement: !ruby/object:Gem::Requirement
313
319
  requirements:
314
320
  - - '>='
@@ -322,7 +328,7 @@ dependencies:
322
328
  - !ruby/object:Gem::Version
323
329
  version: '0'
324
330
  - !ruby/object:Gem::Dependency
325
- name: simplecov
331
+ name: simplecov-rcov
326
332
  requirement: !ruby/object:Gem::Requirement
327
333
  requirements:
328
334
  - - '>='
@@ -336,7 +342,7 @@ dependencies:
336
342
  - !ruby/object:Gem::Version
337
343
  version: '0'
338
344
  - !ruby/object:Gem::Dependency
339
- name: simplecov-rcov
345
+ name: yard
340
346
  requirement: !ruby/object:Gem::Requirement
341
347
  requirements:
342
348
  - - '>='
@@ -350,7 +356,21 @@ dependencies:
350
356
  - !ruby/object:Gem::Version
351
357
  version: '0'
352
358
  - !ruby/object:Gem::Dependency
353
- name: yard
359
+ name: coveralls
360
+ requirement: !ruby/object:Gem::Requirement
361
+ requirements:
362
+ - - '>='
363
+ - !ruby/object:Gem::Version
364
+ version: '0'
365
+ type: :development
366
+ prerelease: false
367
+ version_requirements: !ruby/object:Gem::Requirement
368
+ requirements:
369
+ - - '>='
370
+ - !ruby/object:Gem::Version
371
+ version: '0'
372
+ - !ruby/object:Gem::Dependency
373
+ name: timecop
354
374
  requirement: !ruby/object:Gem::Requirement
355
375
  requirements:
356
376
  - - '>='
@@ -389,6 +409,7 @@ files:
389
409
  - features/cli_create.feature
390
410
  - features/cli_daemon.feature
391
411
  - features/cli_generate.feature
412
+ - features/cli_plugin.feature
392
413
  - features/cli_restart.feature
393
414
  - features/cli_start.feature
394
415
  - features/cli_stop.feature
@@ -423,6 +444,9 @@ files:
423
444
  - lib/adhearsion/calls.rb
424
445
  - lib/adhearsion/cli.rb
425
446
  - lib/adhearsion/cli_commands.rb
447
+ - lib/adhearsion/cli_commands/ahn_command.rb
448
+ - lib/adhearsion/cli_commands/plugin_command.rb
449
+ - lib/adhearsion/cli_commands/thor_errors.rb
426
450
  - lib/adhearsion/configuration.rb
427
451
  - lib/adhearsion/console.rb
428
452
  - lib/adhearsion/events.rb
@@ -547,9 +571,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
547
571
  version: '0'
548
572
  required_rubygems_version: !ruby/object:Gem::Requirement
549
573
  requirements:
550
- - - '>='
574
+ - - '>'
551
575
  - !ruby/object:Gem::Version
552
- version: '0'
576
+ version: 1.3.1
553
577
  requirements: []
554
578
  rubyforge_project:
555
579
  rubygems_version: 2.0.3
@@ -562,6 +586,7 @@ test_files:
562
586
  - features/cli_create.feature
563
587
  - features/cli_daemon.feature
564
588
  - features/cli_generate.feature
589
+ - features/cli_plugin.feature
565
590
  - features/cli_restart.feature
566
591
  - features/cli_start.feature
567
592
  - features/cli_stop.feature