evostream-event 1.0.0.pre.59 → 1.0.0.pre.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -0
  3. data/lib/evostream/cli/config.rb +2 -0
  4. data/lib/evostream/cli/option.rb +5 -84
  5. data/lib/evostream/cli/option/argument.rb +40 -0
  6. data/lib/evostream/cli/option/command.rb +24 -0
  7. data/lib/evostream/cli/option/config.rb +21 -0
  8. data/lib/evostream/cli/{help → option/help} +0 -0
  9. data/lib/evostream/cli/option/help.rb +25 -0
  10. data/lib/evostream/cli/option/host.rb +20 -0
  11. data/lib/evostream/cli/option/port.rb +20 -0
  12. data/lib/evostream/cli/option/search.rb +32 -0
  13. data/lib/evostream/cli/runner.rb +45 -17
  14. data/lib/evostream/cli/search.rb +12 -3
  15. data/lib/evostream/event/commands.rb +20 -0
  16. data/lib/evostream/event/commands/create.rb +2 -0
  17. data/lib/evostream/event/commands/create/dash.rb +2 -0
  18. data/lib/evostream/event/commands/create/hls.rb +2 -0
  19. data/lib/evostream/event/commands/destroy.rb +4 -2
  20. data/lib/evostream/event/commands/error.rb +14 -0
  21. data/lib/evostream/event/commands/get_stream_info.rb +2 -0
  22. data/lib/evostream/event/commands/list_config.rb +2 -0
  23. data/lib/evostream/event/commands/list_streams.rb +2 -0
  24. data/lib/evostream/event/commands/push_stream.rb +2 -0
  25. data/lib/evostream/event/commands/set_log_level.rb +2 -0
  26. data/spec/cli/argument/command_spec.rb +16 -0
  27. data/spec/evostream/commands/create_dash_spec.rb +12 -1
  28. data/spec/evostream/commands/create_hls_spec.rb +25 -14
  29. data/spec/evostream/commands/create_spec.rb +22 -25
  30. data/spec/evostream/commands/destroy_spec.rb +4 -5
  31. data/spec/evostream/commands/get_stream_info_spec.rb +3 -4
  32. data/spec/evostream/commands/list_stream_spec.rb +2 -3
  33. data/spec/evostream/commands/push_stream_spec.rb +4 -5
  34. data/spec/evostream/commands/set_log_level_spec.rb +2 -3
  35. data/spec/spec_helper.rb +2 -0
  36. data/spec/support/examples_commands.rb +20 -2
  37. metadata +12 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11e21c32b959d3c3a5036afe6c3c03bb3dc6070d
4
- data.tar.gz: ff51bfc42cf538c060f07fa1d7e45d6b6daffd4e
3
+ metadata.gz: 53872935638141a25ff53658fab7e36c55ce7b09
4
+ data.tar.gz: 181e0a17fb95652167cd7c4300163b807ffbc045
5
5
  SHA512:
6
- metadata.gz: 94b45eda4743b32592200a7b863c7d6f80947e080592175e9c1a49c352dc1364f992ec6656a5aeb3b39add4d019032fac7e9889925ec2399fb995a3cfc99fea4
7
- data.tar.gz: 4c586c822c22a4b4b38c4ff762228b27171ff0dff2b4d1b8316c0b1c0a363d223763d496140766628b6a8eb4856cc2617669330ef7e924a8fd4fa3c92cca352a
6
+ metadata.gz: f0ebb8baa0572b75f1e0f72bdb9c293f01023e259a1fb9ddfea9f5aff348c134079ba9d47891b0b17e9faaef394ac26b8cfa2745950f827bf49e9c53080ef745
7
+ data.tar.gz: 5228b5e83a3f222ebde719ee709d0668da3939ba0b11a36c54d0f27c13b5be6a585c25bd5385a1794395103a8bb7fa0ab4d03a7fb60c67ec2789a08e896ad5a9
data/README.md CHANGED
@@ -79,6 +79,27 @@ event.execute_action
79
79
 
80
80
  ### Usage in cli
81
81
 
82
+ Use this gem in CLI. For more explain use helper :
83
+
84
+ ```linux
85
+ evostream -h
86
+ ```
87
+
88
+ Example for delete a configuration :
89
+
90
+ ```linux
91
+ evostream removeConfig 'id: 565'
92
+ ```
93
+
94
+ Example for list configuration :
95
+
96
+ ```linux
97
+ # All configuration
98
+ evostream listConfig
99
+
100
+ # Just configuration number 42
101
+ evostream -s 'configId: 42' listConfig
102
+ ```
82
103
 
83
104
  ## Development
84
105
 
@@ -6,6 +6,8 @@ module Evostream
6
6
  module CLI
7
7
  # Configuration file for CLI
8
8
  class Config
9
+ include Singleton
10
+
9
11
  def initialize
10
12
  @options = @uri = nil
11
13
  load_file_configuration
@@ -1,101 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # :reek:InstanceVariableAssumption
4
- # :reek:TooManyConstants
5
- # :reek:TooManyStatements
3
+ require 'option/argument'
6
4
 
7
5
  module Evostream
8
6
  module CLI
9
7
  # Class for parsing option used in CLI software
10
8
  class Options
11
- CASE_HELP = ['-h', '--help'].freeze
12
- CASE_CMD = ['-c', '--commands'].freeze
13
- CASE_HOST = ['--server'].freeze
14
- CASE_PORT = ['--port'].freeze
15
- CASE_SEARCH = ['-s', '--search'].freeze
16
- CASE_CONFIG = ['--config'].freeze
17
-
18
- attr_reader :search
19
-
20
- def initialize(configuration)
21
- @search = nil
22
- @file = File.read(File.join(__dir__, 'help'))
23
- @config = configuration
24
- end
25
-
26
- # Parse options and execute action if necessary
27
- # rubocop:disable Style/EmptyCaseCondition
28
- # rubocop:disable Metrics/PerceivedComplexity
29
- # rubocop:disable Metrics/CyclomaticComplexity
30
- # rubocop:disable Metrics/AbcSize
31
- def parse(argv)
32
- @command_line_args = argv
33
- case
34
- when include(CASE_HELP) then display_help
35
- when include(CASE_CMD) then display_command
36
- when include(CASE_HOST) then use_host
37
- when include(CASE_PORT) then use_port
38
- when include(CASE_SEARCH) then search_in_response
39
- when include(CASE_CONFIG) then use_config_file
40
- when @command_line_args.empty? then display_no_command
41
- end
9
+ def parse
10
+ Argument::Arg.descendants.each { |klass| klass.instance.used? }
11
+ display_no_command if ARGV.empty?
42
12
  end
43
- # rubocop:enable Style/EmptyCaseCondition
44
- # rubocop:enable Metrics/AbcSize
45
- # rubocop:enable Metrics/CyclomaticComplexity
46
- # rubocop:enable Metrics/PerceivedComplexity
47
13
 
48
14
  private
49
15
 
50
- def include(case_parse)
51
- case_parse.any? { |value| @command_line_args.include?(value) }
52
- end
53
-
54
- def display_help
55
- puts @file
56
- raise CodeError::Finished
57
- end
58
-
59
- def display_command
60
- puts 'Commands :'
61
- Evostream::Commands::Command.descendants.each do |cmd|
62
- puts " - #{cmd.to_s.split('::').last}"
63
- end
64
- raise CodeError::Finished
65
- end
66
-
67
- def use_host
68
- @config.change_host(parameter('--server'))
69
- end
70
-
71
- def use_port
72
- @config.change_port(parameter('--port'))
73
- end
74
-
75
- def search_in_response
76
- CASE_SEARCH.each do |search|
77
- @search = parameter(search) if args_has_present?(search)
78
- end
79
- end
80
-
81
- def use_config_file
82
- file = File.join(parameter('--config'))
83
- @config.load_custom_file(file)
84
- end
85
-
86
16
  def display_no_command
87
- display_help
17
+ Argument::Help.instance.send(:action)
88
18
  raise CodeError::Syntax::OptionInvalid
89
19
  end
90
-
91
- def parameter(search_case)
92
- param = @command_line_args.find_index(search_case)
93
- @command_line_args[param + 1]
94
- end
95
-
96
- def args_has_present?(ind)
97
- @command_line_args.find_index(ind)
98
- end
99
20
  end
100
21
  end
101
22
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Abstract class for all argument used with CLI command
7
+ class Arg
8
+ def self.descendants
9
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
10
+ end
11
+
12
+ def used?
13
+ action if use(self.class::KEY)
14
+ end
15
+
16
+ private
17
+
18
+ def use(argument_parsed)
19
+ argument_parsed.any? { |value| ARGV.include?(value) }
20
+ end
21
+
22
+ def action
23
+ raise CodeError::Finished
24
+ end
25
+
26
+ def parameter(search_case)
27
+ param = ARGV.find_index(search_case)
28
+ ARGV[param + 1]
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ require 'option/help'
36
+ require 'option/command'
37
+ require 'option/host'
38
+ require 'option/port'
39
+ require 'option/search'
40
+ require 'option/config'
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for listing command available in this software
7
+ class Command < Arg
8
+ include Singleton
9
+
10
+ KEY = ['-c', '--commands'].freeze
11
+
12
+ private
13
+
14
+ def action
15
+ $stdout.puts 'Commands :'
16
+ Evostream::Commands::Command.descendants.each do |cmd|
17
+ $stdout.puts " - #{cmd.to_s.split('::').last}"
18
+ end
19
+ super
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for precise configuration file used
7
+ class Config < Arg
8
+ include Singleton
9
+
10
+ KEY = ['--config'].freeze
11
+
12
+ private
13
+
14
+ def action
15
+ file = File.join(parameter('--config'))
16
+ CLI::Config.instance.load_custom_file(file)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
File without changes
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for display help
7
+ class Help < Arg
8
+ include Singleton
9
+
10
+ KEY = ['-h', '--help'].freeze
11
+
12
+ def initialize
13
+ @file = File.read(File.join(__dir__, 'help'))
14
+ end
15
+
16
+ private
17
+
18
+ def action
19
+ puts @file
20
+ super
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for change host used with command calling
7
+ class Host < Arg
8
+ include Singleton
9
+
10
+ KEY = ['--server'].freeze
11
+
12
+ private
13
+
14
+ def action
15
+ CLI::Config.instance.change_host(parameter('--server'))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for change port used with command
7
+ class Port < Arg
8
+ include Singleton
9
+
10
+ KEY = ['--port'].freeze
11
+
12
+ private
13
+
14
+ def action
15
+ CLI::Config.instance.change_host(parameter('--port'))
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ module Argument
6
+ # Argument for searching in response to command
7
+ class Search < Arg
8
+ include Singleton
9
+
10
+ KEY = ['-s', '--search'].freeze
11
+
12
+ attr_reader :search
13
+
14
+ def initialize
15
+ @search = nil
16
+ end
17
+
18
+ private
19
+
20
+ def action
21
+ KEY.each do |search|
22
+ @search = parameter(search) if args_has_present?(search)
23
+ end
24
+ end
25
+
26
+ def args_has_present?(ind)
27
+ ARGV.find_index(ind)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,19 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'singleton'
3
4
  require 'colorize'
4
- require 'option'
5
- require 'config'
6
- require 'search'
7
5
  require 'timeout'
8
6
  require 'socket'
9
- require 'code_error'
10
7
  require 'yaml'
11
8
  require 'yaml/dbm'
12
9
 
10
+ $LOAD_PATH.unshift(__dir__)
11
+ require 'option'
12
+ require 'config'
13
+ require 'search'
14
+ require 'code_error'
15
+
13
16
  $LOAD_PATH.unshift("#{__dir__}/../")
14
17
  require 'event'
15
18
 
19
+ # :reek:FeatureEnvy
16
20
  # :reek:TooManyStatements
21
+ # :reek:DuplicateMethodCall
22
+ # :reek:NilCheck
17
23
 
18
24
  module Evostream
19
25
  # Execute CLI with this gem
@@ -27,17 +33,17 @@ module Evostream
27
33
  # Version #{Evostream::VERSION} \t\t #
28
34
  ##################################
29
35
  INFO
30
- puts txt.red
31
- @config = CLI::Config.new
32
- @options = CLI::Options.new(@config)
36
+ $stdout.puts txt.red
37
+ CLI::Config.instance
38
+ @options = CLI::Options.new
33
39
  end
34
40
 
35
41
  # rubocop:disable Metrics/MethodLength
36
42
  def run(args = ARGV)
37
- @options.parse(args)
43
+ @options.parse
38
44
 
39
45
  access_evostream?
40
- execute_runner(args.last) if args.count >= 1
46
+ execute_runner(two_last_arg(args)) if args.count >= 1
41
47
  rescue CodeError::Evostream::ConnectionFailed
42
48
  return 201
43
49
  rescue CodeError::Evostream::NoResult
@@ -46,6 +52,9 @@ module Evostream
46
52
  return 101
47
53
  rescue CodeError::Syntax::OptionInvalid
48
54
  return 100
55
+ rescue Evostream::Commands::Errors::MissingMandatory => error
56
+ $stdout.puts error.message.red
57
+ return 50
49
58
  rescue CodeError::Finished
50
59
  return 0
51
60
  end
@@ -61,7 +70,6 @@ module Evostream
61
70
  raise CodeError::Evostream::ConnectionFailed
62
71
  end
63
72
 
64
- # :reek:FeatureEnvy
65
73
  def test_server_started
66
74
  uri = URI.parse(Evostream::Service.uri_in.to_s)
67
75
  socket = TCPSocket.new(uri.host, uri.port)
@@ -72,23 +80,27 @@ module Evostream
72
80
 
73
81
  def execute_runner(cmd)
74
82
  test_command(cmd) do
75
- act = Evostream::Action.new
76
- interpret_response(act.execute_action(cmd)[:data])
83
+ payload = cmd.last == cmd.first ? {} : create_an_hash(cmd.last)
84
+ act = Evostream::Action.new(payload)
85
+ interpret_response(act.execute_action(cmd.first)[:data])
77
86
  end
78
87
  end
79
88
 
80
89
  def interpret_response(result)
81
- if @options.search.nil?
82
- puts result.to_yaml
90
+ if CLI::Argument::Search.instance.search.nil?
91
+ $stdout.puts result.to_yaml
83
92
  else
84
- CLI::Search.new(@options.search).search_node(result)
93
+ CLI::Search.new.search_node(result)
85
94
  end
86
95
  raise CodeError::Finished
87
96
  end
88
97
 
89
98
  def test_command(cmd)
90
- raise CodeError::Syntax::CommandInvalid \
91
- if cmd.start_with?('-', '--') || cmd_exist?(cmd)
99
+ cmd.each_with_index do |one_arg, index|
100
+ raise CodeError::Syntax::CommandInvalid \
101
+ if one_arg.start_with?('-', '--') ||
102
+ (cmd_exist?(one_arg) if index.zero?)
103
+ end
92
104
  yield
93
105
  end
94
106
 
@@ -97,5 +109,21 @@ module Evostream
97
109
  command.to_s.split('::').last.casecmp(cmd).zero?
98
110
  end
99
111
  end
112
+
113
+ def create_an_hash(arguments)
114
+ super_hash = {}
115
+ arguments.split(': ').each_with_index do |value, index|
116
+ if (index % 2).zero?
117
+ super_hash[value] = nil
118
+ else
119
+ super_hash[super_hash.keys[index - 1]] = value
120
+ end
121
+ end
122
+ super_hash
123
+ end
124
+
125
+ def two_last_arg(args)
126
+ [args.first, args.last]
127
+ end
100
128
  end
101
129
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :reek:NilCheck
4
+
3
5
  module Evostream
4
6
  module CLI
5
7
  # Search data in evostream result
6
8
  class Search
7
9
  def initialize(yaml_search)
10
+ @response = nil
8
11
  YAML.load(yaml_search).each do |key, value|
9
12
  @search = [key.to_sym, value]
10
13
  end
@@ -14,15 +17,21 @@ module Evostream
14
17
  YAML.load(result.to_yaml).each do |_key, value|
15
18
  inspect_array(value) if value.is_a?(Array) && !value.empty?
16
19
  end
20
+
21
+ puts @response.nil? ? "No node equal to #{@search}" : @response
17
22
  end
18
23
 
19
24
  private
20
25
 
21
26
  def inspect_array(evostream_response)
22
27
  evostream_response.each do |value|
23
- value.each do |hash_value|
24
- puts value.to_yaml if hash_value == @search
25
- end
28
+ inspect_hash(value)
29
+ end
30
+ end
31
+
32
+ def inspect_hash(evostream_response)
33
+ evostream_response.each do |hash_value|
34
+ puts value.to_yaml if hash_value == @search
26
35
  end
27
36
  end
28
37
  end
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+
3
5
  # :reek:UncommunicativeMethodName
6
+ # :reek:NestedIterators
7
+ # :reek:DuplicateMethodCall
4
8
 
5
9
  module Evostream
6
10
  # Manage command
@@ -12,6 +16,7 @@ module Evostream
12
16
  commands.each do |command_name, command_param|
13
17
  @command.push send(command_name, command_param)
14
18
  end
19
+ test_missing_parameter
15
20
  end
16
21
 
17
22
  def cmd
@@ -28,10 +33,25 @@ module Evostream
28
33
  def encode_64
29
34
  Base64.strict_encode64(@command.join(' '))
30
35
  end
36
+
37
+ def test_missing_parameter
38
+ missing = self.class::MANDATORY.empty? ? false : missing_parameter
39
+ raise Errors::MissingMandatory.new(self.class::MANDATORY, self.class) \
40
+ if missing
41
+ end
42
+
43
+ def missing_parameter
44
+ self.class::MANDATORY.none? do |method|
45
+ @command.any? do |part_payload|
46
+ part_payload.match?(/#{method}/)
47
+ end
48
+ end
49
+ end
31
50
  end
32
51
  end
33
52
  end
34
53
 
54
+ require 'evostream/event/commands/error'
35
55
  require 'evostream/event/commands/create'
36
56
  require 'evostream/event/commands/destroy'
37
57
  require 'evostream/event/commands/get_stream_info'
@@ -5,6 +5,8 @@ module Evostream
5
5
  module Commands
6
6
  # Abstract class for create element
7
7
  class Create < Command
8
+ MANDATORY = %w[localStreamNames targetFolder].freeze
9
+
8
10
  def initialize(commands = {})
9
11
  super(commands)
10
12
  end
@@ -4,6 +4,8 @@ module Evostream
4
4
  module Commands
5
5
  # Create flux DASH
6
6
  class CreateDASH < Create
7
+ MANDATORY = %w[localStreamNames targetFolder].freeze
8
+
7
9
  # Call default command for create DASH Stream
8
10
  def initialize(commands = {
9
11
  local_stream_names: 'null', target_folder: 'null'
@@ -6,6 +6,8 @@ module Evostream
6
6
  module Commands
7
7
  # Create flux HLS
8
8
  class CreateHLS < Create
9
+ MANDATORY = %w[localStreamNames targetFolder].freeze
10
+
9
11
  # Call default command for create DASH Stream
10
12
  def initialize(commands = {
11
13
  local_stream_names: 'null', target_folder: 'null'
@@ -4,7 +4,9 @@ module Evostream
4
4
  # Concern all command sending to evoStream
5
5
  module Commands
6
6
  # Abstract class for create element
7
- class Destroy < Command
7
+ class RemoveConfig < Command
8
+ MANDATORY = %w[id].freeze
9
+
8
10
  def initialize(commands = { group_name: 'null', remove_hls_hds_files: 1 })
9
11
  super(commands)
10
12
  end
@@ -40,6 +42,6 @@ module Evostream
40
42
  end
41
43
 
42
44
  # Alias to Destroy class
43
- RemoveConfig = Destroy
45
+ Destroy = RemoveConfig
44
46
  end
45
47
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module Commands
5
+ module Errors
6
+ # Exception if command have no mandatory parameter
7
+ class MissingMandatory < StandardError
8
+ def initialize(arg_mandatory, klass)
9
+ super "Parameter missing(s) #{arg_mandatory} in #{klass}"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -4,6 +4,8 @@ module Evostream
4
4
  module Commands
5
5
  # Returns a detailed set of information about a stream.
6
6
  class GetStreamInfo < Command
7
+ MANDATORY = %w[id].freeze
8
+
7
9
  def initialize(commands = {})
8
10
  super(commands)
9
11
  end
@@ -12,6 +12,8 @@ module Evostream
12
12
  #
13
13
  # This function has no parameters.
14
14
  class ListConfig < Command
15
+ MANDATORY = [].freeze
16
+
15
17
  def initialize(commands = {})
16
18
  super(commands)
17
19
  end
@@ -4,6 +4,8 @@ module Evostream
4
4
  module Commands
5
5
  # Provides a detailed description of all active streams.
6
6
  class ListStreams < Command
7
+ MANDATORY = [].freeze
8
+
7
9
  def initialize(commands = {})
8
10
  super(commands)
9
11
  end
@@ -6,6 +6,8 @@ module Evostream
6
6
  # pushed stream can only use the RTMP, RTSP or MPEG-TS unicast/multicast
7
7
  # protocol.
8
8
  class PushStream < Command
9
+ MANDATORY = %w[uri].freeze
10
+
9
11
  def initialize(commands = {})
10
12
  super(commands)
11
13
  end
@@ -4,6 +4,8 @@ module Evostream
4
4
  module Commands
5
5
  # Returns a detailed set of information about a stream.
6
6
  class SetLogLevel < Command
7
+ MANDATORY = %w[level].freeze
8
+
7
9
  def initialize(commands = {})
8
10
  super(commands)
9
11
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Evostream::CLI::Argument::Command do
6
+ let(:runner) { Evostream::Runner.new }
7
+
8
+ it do
9
+ ARGV << '-c'
10
+ expect(runner.run).to eql(0)
11
+ end
12
+
13
+ it do
14
+ expect { runner.run }.to output(/.*Commands :.*/).to_stdout
15
+ end
16
+ end
@@ -3,12 +3,23 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::CreateDASH do
6
- let(:command) { Evostream::Commands::CreateDASH.new(cmd) }
6
+ let(:command) { Evostream::Commands::CreateDASH }
7
7
 
8
8
  context 'manifest_name' do
9
9
  let(:arg_value) { Faker::Pokemon.name }
10
10
  let(:argument) { 'manifest_name' }
11
11
 
12
+ include_examples 'command raise'
13
+ end
14
+
15
+ context 'with mandatory argument(s)' do
16
+ let(:cmd) do
17
+ {
18
+ local_stream_names: Faker::Pokemon.name,
19
+ target_folder: Faker::File.file_name('/path/to')
20
+ }
21
+ end
22
+
12
23
  include_examples 'command'
13
24
  end
14
25
  end
@@ -3,103 +3,114 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::CreateHLS do
6
- let(:command) { Evostream::Commands::CreateHLS.new(cmd) }
6
+ let(:command) { Evostream::Commands::CreateHLS }
7
7
 
8
8
  context 'create_master_playlist' do
9
9
  let(:arg_value) { Faker::Number.between(0, 1) }
10
10
  let(:argument) { 'create_master_playlist' }
11
11
 
12
- include_examples 'command'
12
+ include_examples 'command raise'
13
13
  end
14
14
 
15
15
  context 'playlist_name' do
16
16
  let(:arg_value) { Faker::Pokemon.name }
17
17
  let(:argument) { 'playlist_name' }
18
18
 
19
- include_examples 'command'
19
+ include_examples 'command raise'
20
20
  end
21
21
 
22
22
  context 'max_chunk_length' do
23
23
  let(:arg_value) { Faker::Number.between(0, 1) }
24
24
  let(:argument) { 'max_chunk_length' }
25
25
 
26
- include_examples 'command'
26
+ include_examples 'command raise'
27
27
  end
28
28
 
29
29
  context 'chunk_base_name' do
30
30
  let(:arg_value) { Faker::Pokemon.name }
31
31
  let(:argument) { 'chunk_base_name' }
32
32
 
33
- include_examples 'command'
33
+ include_examples 'command raise'
34
34
  end
35
35
 
36
36
  context 'drm_type' do
37
37
  let(:arg_value) { Faker::Pokemon.name }
38
38
  let(:argument) { 'drm_type' }
39
39
 
40
- include_examples 'command'
40
+ include_examples 'command raise'
41
41
  end
42
42
 
43
43
  context 'aes_key_count', broken: true do
44
44
  let(:arg_value) { Faker::Number.between(1, 99) }
45
45
  let(:argument) { 'aes_key_count' }
46
46
 
47
- include_examples 'command'
47
+ include_examples 'command raise'
48
48
  end
49
49
 
50
50
  context 'audio_only' do
51
51
  let(:arg_value) { Faker::Number.between(0, 1) }
52
52
  let(:argument) { 'audio_only' }
53
53
 
54
- include_examples 'command'
54
+ include_examples 'command raise'
55
55
  end
56
56
 
57
57
  context 'hls_resume' do
58
58
  let(:arg_value) { Faker::Number.between(0, 1) }
59
59
  let(:argument) { 'hls_resume' }
60
60
 
61
- include_examples 'command'
61
+ include_examples 'command raise'
62
62
  end
63
63
 
64
64
  context 'cleanup_on_close' do
65
65
  let(:arg_value) { Faker::Number.between(0, 1) }
66
66
  let(:argument) { 'cleanup_on_close' }
67
67
 
68
- include_examples 'command'
68
+ include_examples 'command raise'
69
69
  end
70
70
 
71
71
  context 'use_byte_range' do
72
72
  let(:arg_value) { Faker::Number.between(0, 1) }
73
73
  let(:argument) { 'use_byte_range' }
74
74
 
75
- include_examples 'command'
75
+ include_examples 'command raise'
76
76
  end
77
77
 
78
78
  context 'file_length' do
79
79
  let(:arg_value) { Faker::Number.between(0, 1) }
80
80
  let(:argument) { 'file_length' }
81
81
 
82
- include_examples 'command'
82
+ include_examples 'command raise'
83
83
  end
84
84
 
85
85
  context 'use_system_time' do
86
86
  let(:arg_value) { Faker::Number.between(0, 1) }
87
87
  let(:argument) { 'use_system_time' }
88
88
 
89
- include_examples 'command'
89
+ include_examples 'command raise'
90
90
  end
91
91
 
92
92
  context 'offset_time' do
93
93
  let(:arg_value) { Faker::Number.between(0, 1) }
94
94
  let(:argument) { 'offset_time' }
95
95
 
96
- include_examples 'command'
96
+ include_examples 'command raise'
97
97
  end
98
98
 
99
99
  context 'start_offset' do
100
100
  let(:arg_value) { Faker::Number.between(0, 1) }
101
101
  let(:argument) { 'start_offset' }
102
102
 
103
+ include_examples 'command raise'
104
+ end
105
+
106
+ context 'with mandatory argument(s)' do
107
+ let(:cmd) do
108
+ {
109
+ local_stream_names: Faker::Pokemon.name,
110
+ target_folder: Faker::File.file_name('/path/to')
111
+ }
112
+ end
113
+
103
114
  include_examples 'command'
104
115
  end
105
116
  end
@@ -3,96 +3,93 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::Create do
6
- let(:command) { Evostream::Commands::Create.new(cmd) }
7
-
8
- context 'local_stream_names' do
9
- let(:arg_value) { Faker::Pokemon.name }
10
- let(:argument) { 'local_stream_names' }
11
-
12
- include_examples 'command'
13
- end
14
-
15
- context 'target_folder' do
16
- let(:arg_value) { Faker::Pokemon.name }
17
- let(:argument) { 'target_folder' }
18
-
19
- include_examples 'command'
20
- end
6
+ let(:command) { Evostream::Commands::Create }
21
7
 
22
8
  context 'bandwidths' do
23
9
  let(:arg_value) { Faker::Number.between(1, 99) }
24
10
  let(:argument) { 'bandwidths' }
25
11
 
26
- include_examples 'command'
12
+ include_examples 'command raise'
27
13
  end
28
14
 
29
15
  context 'group_name' do
30
16
  let(:arg_value) { Faker::Pokemon.name }
31
17
  let(:argument) { 'group_name' }
32
18
 
33
- include_examples 'command'
19
+ include_examples 'command raise'
34
20
  end
35
21
 
36
22
  context 'playlist_type' do
37
23
  let(:arg_value) { %w[appending rolling].sample }
38
24
  let(:argument) { 'playlist_type' }
39
25
 
40
- include_examples 'command'
26
+ include_examples 'command raise'
41
27
  end
42
28
 
43
29
  context 'playlist_length' do
44
30
  let(:arg_value) { Faker::Number.between(1, 99) }
45
31
  let(:argument) { 'playlist_length' }
46
32
 
47
- include_examples 'command'
33
+ include_examples 'command raise'
48
34
  end
49
35
 
50
36
  context 'chunk_length' do
51
37
  let(:arg_value) { Faker::Number.between(1, 99) }
52
38
  let(:argument) { 'chunk_length' }
53
39
 
54
- include_examples 'command'
40
+ include_examples 'command raise'
55
41
  end
56
42
 
57
43
  context 'chunk_on_idr', broken: true do
58
44
  let(:arg_value) { Faker::Number.between(0, 1) }
59
45
  let(:argument) { 'chunk_on_idr' }
60
46
 
61
- include_examples 'command'
47
+ include_examples 'command raise'
62
48
  end
63
49
 
64
50
  context 'keep_alive' do
65
51
  let(:arg_value) { Faker::Number.between(0, 1) }
66
52
  let(:argument) { 'keep_alive' }
67
53
 
68
- include_examples 'command'
54
+ include_examples 'command raise'
69
55
  end
70
56
 
71
57
  context 'overwrite_destination' do
72
58
  let(:arg_value) { Faker::Number.between(0, 1) }
73
59
  let(:argument) { 'overwrite_destination' }
74
60
 
75
- include_examples 'command'
61
+ include_examples 'command raise'
76
62
  end
77
63
 
78
64
  context 'stale_retention_count' do
79
65
  let(:arg_value) { Faker::Number.between(1, 99) }
80
66
  let(:argument) { 'stale_retention_count' }
81
67
 
82
- include_examples 'command'
68
+ include_examples 'command raise'
83
69
  end
84
70
 
85
71
  context 'cleanup_destination' do
86
72
  let(:arg_value) { Faker::Number.between(0, 1) }
87
73
  let(:argument) { 'cleanup_destination' }
88
74
 
89
- include_examples 'command'
75
+ include_examples 'command raise'
90
76
  end
91
77
 
92
78
  context 'dynamic_profile' do
93
79
  let(:arg_value) { Faker::Number.between(0, 1) }
94
80
  let(:argument) { 'dynamic_profile' }
95
81
 
82
+ include_examples 'command raise'
83
+ end
84
+
85
+ context 'with mandatory argument(s)' do
86
+ let(:cmd) do
87
+ {
88
+ local_stream_names: Faker::Pokemon.name,
89
+ target_folder: Faker::File.file_name('/path/to')
90
+ }
91
+ end
92
+
96
93
  include_examples 'command'
97
94
  end
98
95
  end
@@ -3,11 +3,10 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::Destroy do
6
- let(:command) { Evostream::Commands::Destroy.new(cmd) }
6
+ let(:command) { Evostream::Commands::Destroy }
7
7
 
8
8
  context 'id' do
9
- let(:arg_value) { Faker::Number.between(1, 99) }
10
- let(:argument) { 'id' }
9
+ let(:cmd) { { id: Faker::Number.between(1, 99).to_s } }
11
10
 
12
11
  include_examples 'command'
13
12
  end
@@ -16,13 +15,13 @@ describe Evostream::Commands::Destroy do
16
15
  let(:arg_value) { Faker::Number.between(0, 1) }
17
16
  let(:argument) { 'remove_hls_hds_files' }
18
17
 
19
- include_examples 'command'
18
+ include_examples 'command raise'
20
19
  end
21
20
 
22
21
  context 'group_name' do
23
22
  let(:arg_value) { Faker::Pokemon.name }
24
23
  let(:argument) { 'group_name' }
25
24
 
26
- include_examples 'command'
25
+ include_examples 'command raise'
27
26
  end
28
27
  end
@@ -3,11 +3,10 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::GetStreamInfo do
6
- let(:command) { Evostream::Commands::GetStreamInfo.new(cmd) }
6
+ let(:command) { Evostream::Commands::GetStreamInfo }
7
7
 
8
8
  context 'id' do
9
- let(:arg_value) { Faker::Number.between(1, 999) }
10
- let(:argument) { 'id' }
9
+ let(:cmd) { { id: Faker::Number.between(1, 999).to_s } }
11
10
 
12
11
  include_examples 'command'
13
12
  end
@@ -16,6 +15,6 @@ describe Evostream::Commands::GetStreamInfo do
16
15
  let(:arg_value) { Faker::Pokemon.name }
17
16
  let(:argument) { 'local_stream_name' }
18
17
 
19
- include_examples 'command'
18
+ include_examples 'command raise'
20
19
  end
21
20
  end
@@ -3,11 +3,10 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::ListStreams do
6
- let(:command) { Evostream::Commands::ListStreams.new(cmd) }
6
+ let(:command) { Evostream::Commands::ListStreams }
7
7
 
8
8
  context 'disable_internal_streams' do
9
- let(:arg_value) { Faker::Boolean.boolean }
10
- let(:argument) { 'disable_internal_streams' }
9
+ let(:cmd) { { disable_internal_streams: Faker::Boolean.boolean.to_s } }
11
10
 
12
11
  include_examples 'command'
13
12
  end
@@ -3,11 +3,10 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::Destroy do
6
- let(:command) { Evostream::Commands::PushStream.new(cmd) }
6
+ let(:command) { Evostream::Commands::PushStream }
7
7
 
8
8
  context 'uri' do
9
- let(:arg_value) { 'rtmp://de.pscp.tv:80/x/31' }
10
- let(:argument) { 'uri' }
9
+ let(:cmd) { { uri: 'rtmp://de.pscp.tv:80/x/31' } }
11
10
 
12
11
  include_examples 'command'
13
12
  end
@@ -16,13 +15,13 @@ describe Evostream::Commands::Destroy do
16
15
  let(:arg_value) { Faker::Pokemon.name }
17
16
  let(:argument) { 'local_stream_name' }
18
17
 
19
- include_examples 'command'
18
+ include_examples 'command raise'
20
19
  end
21
20
 
22
21
  context 'target_stream_name' do
23
22
  let(:arg_value) { Faker::Pokemon.name }
24
23
  let(:argument) { 'target_stream_name' }
25
24
 
26
- include_examples 'command'
25
+ include_examples 'command raise'
27
26
  end
28
27
  end
@@ -3,11 +3,10 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Evostream::Commands::SetLogLevel do
6
- let(:command) { Evostream::Commands::SetLogLevel.new(cmd) }
6
+ let(:command) { Evostream::Commands::SetLogLevel }
7
7
 
8
8
  context 'level' do
9
- let(:arg_value) { Faker::Number.between(0, 6) }
10
- let(:argument) { 'level' }
9
+ let(:cmd) { { level: Faker::Number.between(0, 6).to_s } }
11
10
 
12
11
  include_examples 'command'
13
12
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support'
4
+ require 'evostream/action/action'
5
+ require 'evostream/cli/runner'
4
6
  require 'evostream/event'
5
7
  require 'faker'
6
8
  require 'json'
@@ -3,10 +3,28 @@
3
3
  require 'active_support/core_ext/string'
4
4
 
5
5
  RSpec.shared_examples 'command' do
6
+ let(:test) do
7
+ test = []
8
+ var = command.new(cmd).instance_variable_get(:@command)
9
+ cmd.each_with_index do |_value, index|
10
+ test << var[index].split('=').last
11
+ end
12
+ test
13
+ end
14
+ let(:to) do
15
+ to = []
16
+ cmd.each { |value| to << value.last }
17
+ to
18
+ end
19
+
20
+ it { expect(test).to eql(to) }
21
+ end
22
+
23
+ RSpec.shared_examples 'command raise' do
6
24
  let(:cmd) { { argument => arg_value } }
7
- let(:result) { "#{argument.camelize(:lower)}=#{arg_value} " }
8
25
 
9
26
  it do
10
- expect(command.instance_variable_get(:@command)[0] + ' ').to eql(result)
27
+ expect { command.new(cmd) }.to \
28
+ raise_error(Evostream::Commands::Errors::MissingMandatory)
11
29
  end
12
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evostream-event
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.59
4
+ version: 1.0.0.pre.65
5
5
  platform: ruby
6
6
  authors:
7
7
  - VAILLANT Jeremy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-18 00:00:00.000000000 Z
11
+ date: 2017-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -295,8 +295,15 @@ files:
295
295
  - lib/evostream/action/action.rb
296
296
  - lib/evostream/cli/code_error.rb
297
297
  - lib/evostream/cli/config.rb
298
- - lib/evostream/cli/help
299
298
  - lib/evostream/cli/option.rb
299
+ - lib/evostream/cli/option/argument.rb
300
+ - lib/evostream/cli/option/command.rb
301
+ - lib/evostream/cli/option/config.rb
302
+ - lib/evostream/cli/option/help
303
+ - lib/evostream/cli/option/help.rb
304
+ - lib/evostream/cli/option/host.rb
305
+ - lib/evostream/cli/option/port.rb
306
+ - lib/evostream/cli/option/search.rb
300
307
  - lib/evostream/cli/runner.rb
301
308
  - lib/evostream/cli/search.rb
302
309
  - lib/evostream/event.rb
@@ -305,6 +312,7 @@ files:
305
312
  - lib/evostream/event/commands/create/dash.rb
306
313
  - lib/evostream/event/commands/create/hls.rb
307
314
  - lib/evostream/event/commands/destroy.rb
315
+ - lib/evostream/event/commands/error.rb
308
316
  - lib/evostream/event/commands/get_stream_info.rb
309
317
  - lib/evostream/event/commands/list_config.rb
310
318
  - lib/evostream/event/commands/list_streams.rb
@@ -320,6 +328,7 @@ files:
320
328
  - lib/evostream/event/response/response.rb
321
329
  - lib/evostream/event/service.rb
322
330
  - lib/generators/evostream/initializer_generator.rb
331
+ - spec/cli/argument/command_spec.rb
323
332
  - spec/evostream/action/action_spec.rb
324
333
  - spec/evostream/commands/create_dash_spec.rb
325
334
  - spec/evostream/commands/create_hls_spec.rb