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

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72033db94983a8501bfa31d4feb6a2ff732cf3c2
4
- data.tar.gz: b7ea36205bb79549b04d337b11260d4dae2bf473
3
+ metadata.gz: 11e21c32b959d3c3a5036afe6c3c03bb3dc6070d
4
+ data.tar.gz: ff51bfc42cf538c060f07fa1d7e45d6b6daffd4e
5
5
  SHA512:
6
- metadata.gz: 589afbf4f87e26408dcc740ea0950de475d08043363b1f20dcbaa054da399e698c988860426a4f6fb250ab682f1d3a3a55185640912ded7ea188f924f85ba98f
7
- data.tar.gz: 18e2062161390d9753df4aae82f7aadf9d9e2987f687515d867620a572e2bca297a39bbac8edc0745aa8e27e92c5cc306b9047d5cc1abc7941d5e3177f060f91
6
+ metadata.gz: 94b45eda4743b32592200a7b863c7d6f80947e080592175e9c1a49c352dc1364f992ec6656a5aeb3b39add4d019032fac7e9889925ec2399fb995a3cfc99fea4
7
+ data.tar.gz: 4c586c822c22a4b4b38c4ff762228b27171ff0dff2b4d1b8316c0b1c0a363d223763d496140766628b6a8eb4856cc2617669330ef7e924a8fd4fa3c92cca352a
data/bin/evostream ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift("#{__dir__}/../lib/evostream/cli")
4
+
5
+ require 'bundler/setup'
6
+ require 'active_support/inflector'
7
+ require 'json'
8
+ require 'runner'
9
+ require 'benchmark'
10
+
11
+ cli = Evostream::Runner.new
12
+ result = 0
13
+
14
+ time = Benchmark.realtime do
15
+ result = cli.run
16
+ end
17
+
18
+ puts "Finished in #{time} seconds" if Evostream::Service.environment.eql?(:development)
19
+ exit result
File without changes
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CodeError
5
+ # Program finished correctly
6
+ class Finished < RuntimeError; end
7
+
8
+ # Error 1xx
9
+ module Syntax
10
+ # Syntax to command is invalid
11
+ class CommandInvalid < RuntimeError
12
+ def initialize
13
+ puts 'Command is invalid !!'.red
14
+ end
15
+ end
16
+
17
+ # Syntax to option is invalid
18
+ class OptionInvalid < RuntimeError
19
+ def initialize
20
+ puts 'No command executed !! No command precise.'.red
21
+ end
22
+ end
23
+ end
24
+
25
+ # Error 2xx
26
+ module Evostream
27
+ # Connection to Evostream failed
28
+ class ConnectionFailed < RuntimeError
29
+ def initialize
30
+ puts 'Connection to Evostream REFUSED !!'.red
31
+ end
32
+ end
33
+
34
+ # Response to evostream is empty
35
+ class NoResult < RuntimeError
36
+ def initialize
37
+ puts 'No result for this command.'.yellow
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+
5
+ module Evostream
6
+ module CLI
7
+ # Configuration file for CLI
8
+ class Config
9
+ def initialize
10
+ @options = @uri = nil
11
+ load_file_configuration
12
+ Evostream::Service.environment = :production
13
+ apply_uri
14
+ end
15
+
16
+ def change_host(host)
17
+ @uri.host = host
18
+ apply_uri
19
+ end
20
+
21
+ def change_port(port)
22
+ @uri.port = port
23
+ apply_uri
24
+ end
25
+
26
+ def load_custom_file(file)
27
+ load_yml(file)
28
+ save_uri
29
+ apply_uri
30
+ end
31
+
32
+ private
33
+
34
+ def apply_uri
35
+ Evostream::Service.uri_in = @uri
36
+ end
37
+
38
+ def load_yml(file)
39
+ @options = YAML.safe_load(ERB.new(File.read(file)).result)
40
+ end
41
+
42
+ def load_file_configuration
43
+ load_yml(File.join(ENV['HOME'], '.evostream-configuration.yml'))
44
+ save_uri
45
+ end
46
+
47
+ def save_uri
48
+ @uri = URI.parse("http://#{options_host}:#{options_port}")
49
+ end
50
+
51
+ def options_host
52
+ @options['evostream']['host']
53
+ end
54
+
55
+ def options_port
56
+ @options['evostream']['port']
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,14 +1,22 @@
1
1
  Usage :
2
- evostream [options] [command]
2
+ evostream [options] [command] [data]
3
3
 
4
4
  Example :
5
5
  ### List to configuration in evostream
6
6
  % evostream listConfig
7
7
 
8
+ Options :
8
9
  -h, --help Display this help.
9
10
 
10
11
  -c, --commands Display list command managed by this software.
11
12
 
12
- -s, --server Evostream URL (http://1.2.3.4:7777)
13
+ --server Evostream URL.
14
+ default : localhost
13
15
 
14
- -e, --environment Type of environment to send command (default :production).
16
+ --port Evostream PORT.
17
+ default : 7777
18
+
19
+ -s, --search Search a node in result to request.
20
+
21
+ --config Use customize file configuration
22
+ default : ~/.evostream-configuration.yml
@@ -1,26 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :reek:InstanceVariableAssumption
4
+ # :reek:TooManyConstants
5
+ # :reek:TooManyStatements
6
+
3
7
  module Evostream
4
8
  module CLI
9
+ # Class for parsing option used in CLI software
5
10
  class Options
6
- CASE_HELP = ['-h', '--help']
7
- CASE_CMD = ['-c', '--commands']
8
- CASE_SERVER = ['-s', '--server']
9
- CASE_ENV = ['-e', '--environment']
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
10
19
 
11
- def initialize
20
+ def initialize(configuration)
21
+ @search = nil
12
22
  @file = File.read(File.join(__dir__, 'help'))
23
+ @config = configuration
13
24
  end
14
25
 
15
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
16
31
  def parse(argv)
17
32
  @command_line_args = argv
18
33
  case
19
34
  when include(CASE_HELP) then display_help
20
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
21
40
  when @command_line_args.empty? then display_no_command
22
41
  end
23
42
  end
43
+ # rubocop:enable Style/EmptyCaseCondition
44
+ # rubocop:enable Metrics/AbcSize
45
+ # rubocop:enable Metrics/CyclomaticComplexity
46
+ # rubocop:enable Metrics/PerceivedComplexity
24
47
 
25
48
  private
26
49
 
@@ -30,6 +53,7 @@ module Evostream
30
53
 
31
54
  def display_help
32
55
  puts @file
56
+ raise CodeError::Finished
33
57
  end
34
58
 
35
59
  def display_command
@@ -37,11 +61,40 @@ module Evostream
37
61
  Evostream::Commands::Command.descendants.each do |cmd|
38
62
  puts " - #{cmd.to_s.split('::').last}"
39
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)
40
84
  end
41
85
 
42
86
  def display_no_command
43
- puts 'No command executed !!'.red
44
87
  display_help
88
+ raise CodeError::Syntax::OptionInvalid
89
+ 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)
45
98
  end
46
99
  end
47
100
  end
@@ -2,13 +2,22 @@
2
2
 
3
3
  require 'colorize'
4
4
  require 'option'
5
+ require 'config'
6
+ require 'search'
7
+ require 'timeout'
8
+ require 'socket'
9
+ require 'code_error'
10
+ require 'yaml'
11
+ require 'yaml/dbm'
5
12
 
6
13
  $LOAD_PATH.unshift("#{__dir__}/../")
7
14
  require 'event'
8
15
 
16
+ # :reek:TooManyStatements
17
+
9
18
  module Evostream
19
+ # Execute CLI with this gem
10
20
  class Runner
11
-
12
21
  attr_reader :options
13
22
 
14
23
  def initialize
@@ -19,38 +28,73 @@ module Evostream
19
28
  ##################################
20
29
  INFO
21
30
  puts txt.red
22
- @options = {}
23
- prepare_configuration
31
+ @config = CLI::Config.new
32
+ @options = CLI::Options.new(@config)
24
33
  end
25
34
 
35
+ # rubocop:disable Metrics/MethodLength
26
36
  def run(args = ARGV)
27
- @options = CLI::Options.new
28
37
  @options.parse(args)
29
38
 
39
+ access_evostream?
30
40
  execute_runner(args.last) if args.count >= 1
31
- ensure
41
+ rescue CodeError::Evostream::ConnectionFailed
42
+ return 201
43
+ rescue CodeError::Evostream::NoResult
44
+ return 200
45
+ rescue CodeError::Syntax::CommandInvalid
46
+ return 101
47
+ rescue CodeError::Syntax::OptionInvalid
48
+ return 100
49
+ rescue CodeError::Finished
32
50
  return 0
33
51
  end
52
+ # rubocop:enable Metrics/MethodLength
34
53
 
35
54
  private
36
55
 
37
- def prepare_configuration
38
- Evostream::Service.uri_in = 'http://192.168.203.122:7777'
39
- Evostream::Service.uri_out = 'http://192.168.203.122:80'
40
- Evostream::Service.name = 'dazzl_'
41
- Evostream::Service.web_root = '/var/www/html'
42
- Evostream::Service.model = 'Channel'
43
- Evostream::Service.model_id = '_id'
44
- Evostream::Service.environment = :production
56
+ def access_evostream?
57
+ Timeout.timeout(1) do
58
+ test_server_started
59
+ end
60
+ rescue Timeout::Error
61
+ raise CodeError::Evostream::ConnectionFailed
62
+ end
63
+
64
+ # :reek:FeatureEnvy
65
+ def test_server_started
66
+ uri = URI.parse(Evostream::Service.uri_in.to_s)
67
+ socket = TCPSocket.new(uri.host, uri.port)
68
+ socket.close
69
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
70
+ raise CodeError::Evostream::ConnectionFailed
45
71
  end
46
72
 
47
73
  def execute_runner(cmd)
48
- unless cmd.start_with?('-') || cmd.start_with?('--')
49
- puts 'Prepare command'
50
- act = Evostream::Action.new()
51
- puts 'Sending command'
52
- result = JSON.parse(act.execute_action(cmd))
53
- puts "Result : #{result}"
74
+ test_command(cmd) do
75
+ act = Evostream::Action.new
76
+ interpret_response(act.execute_action(cmd)[:data])
77
+ end
78
+ end
79
+
80
+ def interpret_response(result)
81
+ if @options.search.nil?
82
+ puts result.to_yaml
83
+ else
84
+ CLI::Search.new(@options.search).search_node(result)
85
+ end
86
+ raise CodeError::Finished
87
+ end
88
+
89
+ def test_command(cmd)
90
+ raise CodeError::Syntax::CommandInvalid \
91
+ if cmd.start_with?('-', '--') || cmd_exist?(cmd)
92
+ yield
93
+ end
94
+
95
+ def cmd_exist?(cmd)
96
+ Evostream::Commands::Command.descendants.none? do |command|
97
+ command.to_s.split('::').last.casecmp(cmd).zero?
54
98
  end
55
99
  end
56
100
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Evostream
4
+ module CLI
5
+ # Search data in evostream result
6
+ class Search
7
+ def initialize(yaml_search)
8
+ YAML.load(yaml_search).each do |key, value|
9
+ @search = [key.to_sym, value]
10
+ end
11
+ end
12
+
13
+ def search_node(result)
14
+ YAML.load(result.to_yaml).each do |_key, value|
15
+ inspect_array(value) if value.is_a?(Array) && !value.empty?
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def inspect_array(evostream_response)
22
+ evostream_response.each do |value|
23
+ value.each do |hash_value|
24
+ puts value.to_yaml if hash_value == @search
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -5,7 +5,7 @@ require 'evostream/event/info'
5
5
  require 'evostream/event/service'
6
6
  require 'evostream/event/commands'
7
7
  require 'evostream/event/event'
8
- require 'evostream/event/action'
8
+ require 'evostream/action/action'
9
9
  require 'evostream/event/response/response'
10
10
  require 'net/http'
11
11
  require 'evostream/event/response/mock'
@@ -50,7 +50,7 @@ module Evostream
50
50
  if @request.key?(:hlsSettings)
51
51
  :hlsSettings
52
52
  elsif @request.key?(:dashSettings)
53
- :dashSettings
53
+ :dashSettings
54
54
  elsif @request.key?(:pushSettings)
55
55
  :pushSettings
56
56
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/hash_with_indifferent_access'
4
+
3
5
  module Evostream
4
6
  # Create a response
5
7
  class Responses
@@ -34,7 +34,7 @@ describe Evostream::Commands::Create do
34
34
  end
35
35
 
36
36
  context 'playlist_type' do
37
- let(:arg_value) { %w(appending rolling).sample }
37
+ let(:arg_value) { %w[appending rolling].sample }
38
38
  let(:argument) { 'playlist_type' }
39
39
 
40
40
  include_examples 'command'
@@ -54,7 +54,7 @@ describe Evostream::Events::OutStreamCreated do
54
54
  overwriteDestination: true,
55
55
  playlistLength: 5,
56
56
  playlistName: "#{Faker::Lorem.word}.#{Faker::Lorem.word}",
57
- playlistType: %w(rolling appending).sample,
57
+ playlistType: %w[rolling appending].sample,
58
58
  staleRetentionCount: 5,
59
59
  startOffset: 0,
60
60
  targetFolder: Faker::File.file_name(Faker::Lorem.word,
@@ -151,7 +151,7 @@ describe Evostream::Events::OutStreamCreated do
151
151
  operationType: 6,
152
152
  overwriteDestination: true,
153
153
  playlistLength: 5,
154
- playlistType: %w(rolling appending).sample,
154
+ playlistType: %w[rolling appending].sample,
155
155
  staleRetentionCount: 5,
156
156
  targetFolder: Faker::File.file_name(Faker::Lorem.word,
157
157
  Faker::GameOfThrones.city,
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.58
4
+ version: 1.0.0.pre.59
5
5
  platform: ruby
6
6
  authors:
7
7
  - VAILLANT Jeremy
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-15 00:00:00.000000000 Z
11
+ date: 2017-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -282,7 +282,8 @@ description: |2
282
282
  Manipulate event evostream and send actions to evostream server.
283
283
  email:
284
284
  - jeremy@dazzl.tv
285
- executables: []
285
+ executables:
286
+ - evostream
286
287
  extensions: []
287
288
  extra_rdoc_files: []
288
289
  files:
@@ -290,11 +291,15 @@ files:
290
291
  - LICENSE
291
292
  - README.md
292
293
  - Rakefile
294
+ - bin/evostream
295
+ - lib/evostream/action/action.rb
296
+ - lib/evostream/cli/code_error.rb
297
+ - lib/evostream/cli/config.rb
293
298
  - lib/evostream/cli/help
294
299
  - lib/evostream/cli/option.rb
295
300
  - lib/evostream/cli/runner.rb
301
+ - lib/evostream/cli/search.rb
296
302
  - lib/evostream/event.rb
297
- - lib/evostream/event/action.rb
298
303
  - lib/evostream/event/commands.rb
299
304
  - lib/evostream/event/commands/create.rb
300
305
  - lib/evostream/event/commands/create/dash.rb