fms-admin-api 0.1 → 0.2

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.
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+ - rbx-19mode
@@ -8,12 +8,15 @@ PATH
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activesupport (3.1.3)
11
+ activesupport (3.2.3)
12
+ i18n (~> 0.6)
12
13
  multi_json (~> 1.0)
13
14
  addressable (2.2.6)
14
15
  colorize (0.5.8)
15
16
  crack (0.3.1)
16
- multi_json (1.0.4)
17
+ i18n (0.6.0)
18
+ multi_json (1.3.5)
19
+ rake (0.9.2.2)
17
20
  webmock (1.7.8)
18
21
  addressable (~> 2.2, > 2.2.5)
19
22
  crack (>= 0.1.7)
@@ -23,4 +26,5 @@ PLATFORMS
23
26
 
24
27
  DEPENDENCIES
25
28
  fms-admin-api!
29
+ rake
26
30
  webmock
data/README.md CHANGED
@@ -1,8 +1,13 @@
1
- Flash Media Server Administration API
1
+ Flash Media Server Administration API ![Build status](https://secure.travis-ci.org/igorsobreira/fms-admin-api.png?branch=master)
2
2
  =====================================
3
3
 
4
4
  Command line interface to [Flash Media Server Administration API][fmsapi]:
5
5
 
6
+ Instalation
7
+ -----------
8
+
9
+ $ gem install fms-admin-api
10
+
6
11
  Usage
7
12
  -----
8
13
 
@@ -21,20 +26,37 @@ Ruby client usage
21
26
 
22
27
  You can use the ruby client directly on you code:
23
28
 
24
- require 'fms'
29
+ ```ruby
30
+ require 'fms'
25
31
 
26
- client = FMS::Client.new(:host => 'fms.example.com',
27
- :auser => 'fms',
28
- :apswd => 'secret') # you can use :port here, 1111 is default
32
+ client = FMS::Client.new(:host => 'fms.example.com',
33
+ :auser => 'fms',
34
+ :apswd => 'secret') # you can use :port here, 1111 is default
35
+ ```
29
36
 
30
37
  now just call any method defined in the [FMS Admin API][fmsapi]:
31
38
 
32
- client.reload_app(:app_inst => 'live/cam1')
33
- client.get_apps(:force => true, :verbose => true)
39
+ ```ruby
40
+ client.reload_app(:app_inst => 'live/cam1')
41
+ client.get_apps(:force => true, :verbose => true)
42
+ ```
34
43
 
35
44
  just note that the methods name and parameters are used with ruby_default_notation
36
45
  instead of camelCase as documented.
37
46
 
47
+ The return value from all api method calls is a `FMS::Response`, on which you may want to call `.to_xml`
48
+ to get a `REXML::Document` instance:
49
+
50
+ ```ruby
51
+ require 'rexml/xpath'
52
+
53
+ xml_resp = client.get_live_stream_stats(:app_inst => 'live', :stream => 'cam1').to_xml
54
+ puts REXML::XPath.first(xml_resp, '/result/data/publisher/name').text
55
+
56
+ ```
57
+
58
+ there is also a `to_s` method on `FMS::Response`.
59
+
38
60
  Take a look in the tests/ folder for more detailed specification.
39
61
 
40
62
  [fmsapi]: http://help.adobe.com/en_US/flashmediaserver/adminapi/WSa4cb07693d12388431df580a12a34991ebc-8000.html
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
- require "fms"
4
+ require "fms/version"
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fms-admin-api"
@@ -22,4 +22,5 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency "activesupport"
23
23
  s.add_runtime_dependency "colorize"
24
24
  s.add_development_dependency "webmock"
25
+ s.add_development_dependency "rake"
25
26
  end
@@ -1,4 +1,5 @@
1
1
  require 'net/http'
2
+ require 'rexml/document'
2
3
  require 'active_support'
3
4
 
4
5
  module FMS
@@ -24,17 +25,17 @@ module FMS
24
25
  else
25
26
  params = {}
26
27
  end
27
- do_get(meth, camelize_params(params))
28
+ Response.new do_get(meth, camelize_params(params)).strip
28
29
  end
29
30
 
30
- private
31
+ private
31
32
 
32
33
  def do_get(action, params = {})
33
34
  resp = Net::HTTP.get_response(build_url(action, params))
34
35
  raise NoMethodError, "#{action.inspect} is not a valid API method" unless resp.code == "200"
35
36
  resp.body
36
37
  end
37
-
38
+
38
39
  def build_url(method, extra_params = {})
39
40
  url = URI("http://#{@host}:#{@port}/admin/#{method}")
40
41
  url.query = URI.encode_www_form(@base_params.merge(extra_params))
@@ -50,4 +51,21 @@ module FMS
50
51
  end
51
52
 
52
53
  end
54
+
55
+ class Response
56
+
57
+ def initialize(content)
58
+ @content = content
59
+ end
60
+
61
+ def to_xml
62
+ REXML::Document.new @content
63
+ end
64
+
65
+ def to_s
66
+ @content
67
+ end
68
+
69
+ end
70
+
53
71
  end
@@ -74,7 +74,7 @@ module FMS
74
74
  init_params = filter_init_params params
75
75
  begin
76
76
  c = FMS::Client.new(init_params)
77
- Output.stdout c.send(method.to_sym, params)
77
+ Output.stdout c.send(method.to_sym, params).to_s
78
78
  rescue ArgumentError => error
79
79
  Output.stderr error.message.gsub(':','--')
80
80
  rescue NoMethodError => error
@@ -1,3 +1,3 @@
1
1
  module FMS
2
- VERSION = "0.1"
3
- end
2
+ VERSION = "0.2"
3
+ end
@@ -1,3 +1,4 @@
1
+ require 'rexml/xpath'
1
2
  require 'tests_helper'
2
3
 
3
4
  class ClientTests < BaseTestCase
@@ -32,4 +33,52 @@ class ClientTests < BaseTestCase
32
33
  assert_requested(:get, "http://fms.example.com:1111/admin/reloadApp?appInst=live/cam1&apswd=fms&auser=fms")
33
34
  end
34
35
 
36
+ def test_should_return_response_as_xml
37
+ url = "http://fms.example.com:1111/admin/getLiveStreamStats?appInst=live&apswd=fms&auser=fms&stream=cam1"
38
+ stub_request(:get, url).to_return(:body => GET_LIVE_STREAM_STATS)
39
+
40
+ c = FMS::Client.new(:host => 'fms.example.com')
41
+ xml_resp = c.get_live_stream_stats(:app_inst => 'live', :stream => 'cam1').to_xml
42
+
43
+ assert_requested(:get, url)
44
+ assert_equal "cam1", REXML::XPath.first(xml_resp, '/result/data/publisher/name').text
45
+ end
46
+
47
+ def test_should_return_response_as_raw_string
48
+ url = "http://fms.example.com:1111/admin/getLiveStreamStats?appInst=live&apswd=fms&auser=fms&stream=cam1"
49
+ stub_request(:get, url).to_return(:body => GET_LIVE_STREAM_STATS)
50
+
51
+ c = FMS::Client.new(:host => 'fms.example.com')
52
+ str_resp = c.get_live_stream_stats(:app_inst => 'live', :stream => 'cam1').to_s
53
+
54
+ assert_requested(:get, url)
55
+ assert str_resp.include?('<name>cam1</name>')
56
+ end
57
+
35
58
  end
59
+
60
+ # Stub responses
61
+
62
+ GET_LIVE_STREAM_STATS = %Q{
63
+ <?xml version="1.0" encoding="utf-8"?>
64
+ <result>
65
+ <level>status</level>
66
+ <code>NetConnection.Call.Success</code>
67
+ <timestamp>Mon May 14 22:44:35 2012</timestamp>
68
+ <data>
69
+ <name>_defaultRoot_:_defaultVHost_:::_0</name>
70
+ <publisher>
71
+ <name>cam1</name>
72
+ <time>Mon May 14 22:43:39 2012</time>
73
+ <type>publishing</type>
74
+ <client>oAACAAAA</client>
75
+ <stream_id>ACACAAAA</stream_id>
76
+ <client_type>normal</client_type>
77
+ <diffserv_bits>0x0</diffserv_bits>
78
+ <publish_time>Mon May 14 22:43:39 2012</publish_time>
79
+ </publisher>
80
+ <subscribers>
81
+ </subscribers>
82
+ </data>
83
+ </result>
84
+ }
@@ -63,6 +63,16 @@ class CommandLineTests < BaseTestCase
63
63
  assert_help_message
64
64
  end
65
65
 
66
+ def test_should_return_response_as_string
67
+ url = "http://fms.example.com:1111/admin/getLiveStreams?appInst=live&apswd=fms&auser=fms"
68
+ stub_request(:get, url).to_return(:body => GET_LIVE_STREAMS)
69
+
70
+ run_command ["get_live_streams", "--host=fms.example.com", "--app_inst=live"]
71
+ assert_requested(:get, url)
72
+ assert_command_stdout_contains GET_LIVE_STREAMS.strip
73
+ end
74
+
75
+
66
76
  def run_command(argv)
67
77
  FMS::CmdLine.parse(argv)
68
78
  end
@@ -95,3 +105,17 @@ class CommandLineTests < BaseTestCase
95
105
  end
96
106
 
97
107
  end
108
+
109
+ GET_LIVE_STREAMS = %Q{
110
+ <?xml version="1.0" encoding="utf-8"?>
111
+ <result>
112
+ <level>status</level>
113
+ <code>NetConnection.Call.Success</code>
114
+ <timestamp>Mon May 14 22:47:45 2012</timestamp>
115
+ <name>_defaultRoot_:_defaultVHost_:::_0</name>
116
+ <data>
117
+ <_0>stream1</_0>
118
+ <_1>stream1</_2>
119
+ </data>
120
+ </result>
121
+ }
metadata CHANGED
@@ -1,11 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fms-admin-api
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- version: "0.1"
4
+ prerelease:
5
+ version: "0.2"
9
6
  platform: ruby
10
7
  authors:
11
8
  - Igor Sobreira
@@ -13,8 +10,7 @@ autorequire:
13
10
  bindir: bin
14
11
  cert_chain: []
15
12
 
16
- date: 2011-12-11 00:00:00 -02:00
17
- default_executable:
13
+ date: 2012-05-17 00:00:00 Z
18
14
  dependencies:
19
15
  - !ruby/object:Gem::Dependency
20
16
  name: activesupport
@@ -24,8 +20,6 @@ dependencies:
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
23
  version: "0"
30
24
  type: :runtime
31
25
  version_requirements: *id001
@@ -37,8 +31,6 @@ dependencies:
37
31
  requirements:
38
32
  - - ">="
39
33
  - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
34
  version: "0"
43
35
  type: :runtime
44
36
  version_requirements: *id002
@@ -50,11 +42,20 @@ dependencies:
50
42
  requirements:
51
43
  - - ">="
52
44
  - !ruby/object:Gem::Version
53
- segments:
54
- - 0
55
45
  version: "0"
56
46
  type: :development
57
47
  version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id004
58
59
  description: Ruby client and command line interface to Flash Media Server Administration API
59
60
  email:
60
61
  - igor@igorsobreira.com
@@ -66,12 +67,14 @@ extra_rdoc_files: []
66
67
 
67
68
  files:
68
69
  - .rvmrc
70
+ - .travis.yml
69
71
  - Gemfile
70
72
  - Gemfile.lock
71
73
  - README.md
72
74
  - Rakefile
73
75
  - bin/fmsapi
74
76
  - fms-admin-api.gemspec
77
+ - gems/fms-admin-api-0.1.gem
75
78
  - lib/fms.rb
76
79
  - lib/fms/client.rb
77
80
  - lib/fms/cmdline.rb
@@ -79,7 +82,6 @@ files:
79
82
  - tests/client_tests.rb
80
83
  - tests/cmdline_tests.rb
81
84
  - tests/tests_helper.rb
82
- has_rdoc: true
83
85
  homepage: http://github.com/igorsobreira/fms-admin-api
84
86
  licenses: []
85
87
 
@@ -93,21 +95,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
95
  requirements:
94
96
  - - ">="
95
97
  - !ruby/object:Gem::Version
96
- segments:
97
- - 0
98
98
  version: "0"
99
99
  required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  none: false
101
101
  requirements:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
- segments:
105
- - 0
106
104
  version: "0"
107
105
  requirements: []
108
106
 
109
107
  rubyforge_project: fms-admin-api
110
- rubygems_version: 1.3.7
108
+ rubygems_version: 1.8.21
111
109
  signing_key:
112
110
  specification_version: 3
113
111
  summary: Ruby client and command line interface to Flash Media Server Administration API