avmtrf1-tools 0.41.0 → 0.42.0

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
  SHA256:
3
- metadata.gz: 32ccec06864f6a302202ebb37a37c7bad52f3c9ee3d336cbd775069eb699ef9f
4
- data.tar.gz: 79845abb8223ddca954e98f2144de63756e07b1b1e3551071bed763eddc6c413
3
+ metadata.gz: 73ca9a438c2acc50c74bda3da77ac125188cde76748561f720fce83c98501594
4
+ data.tar.gz: abd8fb430e69bc6e79612950f519f390ac2ba1113642e6be8d615c16e25599e0
5
5
  SHA512:
6
- metadata.gz: b83e3b6b85b4047ee4e37aa83e73dee02846c454a4b7ca7704e94d0fe614fd0c95a2e0ac47700f107abb8dc897d4c7100c37f7bc1d23068daedfc252b0e3ed94
7
- data.tar.gz: 47dd7a59ec8f390e5ab61c4fbc5fcddc08da6b1889db15ef0bbcd90038f9b3816255c93e21d14d15aec7354ebb4da9c577e415729270db471e2c7f605a92775d
6
+ metadata.gz: 56891d5de729710444c7279ed072e826b5f2bb91fe575415d92bf40789187e8342e6db923c0faabd784ac175f6e2601ac8b14e503bcc27217ae0308b67126cb5
7
+ data.tar.gz: fa085736e91ce1b4064c4e2ca217810de040ccc44cac42476ed553ca729f757d0c633d56cfaaee2bef0f9c36b3f9909895879ff303e6313f0821beff9fabf088
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/msgraph/request_mixin'
4
+ require 'eac_rest/entity'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avmtrf1
8
+ module Tools
9
+ module Msgraph
10
+ class Api < ::EacRest::Api
11
+ class Entity < ::EacRest::Entity
12
+ def request_data(url_suffix, &block)
13
+ req = request_data_request(url_suffix, &block)
14
+ req.response.body_data_or_raise
15
+ rescue ::Avmtrf1::Tools::Msgraph::Error => e
16
+ raise e unless e.invalid_token?
17
+
18
+ api.clear_token_info
19
+ req.response.body_data_or_raise
20
+ end
21
+
22
+ private
23
+
24
+ # @return [EacRest::Request]
25
+ def request_data_request(url_suffix, &block)
26
+ req = api.request(url_suffix)
27
+ req = block.call(req) if block
28
+ req.singleton_class.prepend(::Avmtrf1::Tools::Msgraph::RequestMixin)
29
+ req
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_rest/entity'
3
+ require 'avmtrf1/tools/msgraph/api/entity'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avmtrf1
7
7
  module Tools
8
8
  module Msgraph
9
9
  class Api < ::EacRest::Api
10
- class Member < ::EacRest::Entity
10
+ class Member < ::Avmtrf1::Tools::Msgraph::Api::Entity
11
11
  %w[displayName email roles tenantId userId visibleHistoryStartDateTime]
12
12
  .each do |key|
13
13
  define_method key.underscore do
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avmtrf1/tools/msgraph/api/entity'
3
4
  require 'avmtrf1/tools/msgraph/api/team'
4
- require 'eac_rest/entity'
5
5
  require 'eac_ruby_utils/core_ext'
6
6
 
7
7
  module Avmtrf1
8
8
  module Tools
9
9
  module Msgraph
10
10
  class Api < ::EacRest::Api
11
- class Root < ::EacRest::Entity
11
+ class Root < ::Avmtrf1::Tools::Msgraph::Api::Entity
12
12
  # @return [Array<Avmtrf1::Tools::Msgraph::Api::Group>]
13
13
  def joined_teams
14
- api.request('/me/joinedTeams').response.body_data.fetch('value').map do |team_data|
14
+ request_data('/me/joinedTeams').map do |team_data|
15
15
  child_entity(::Avmtrf1::Tools::Msgraph::Api::Team, team_data)
16
16
  end
17
17
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/msgraph/api/entity'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ module Msgraph
9
+ class Api < ::EacRest::Api
10
+ class Team < ::Avmtrf1::Tools::Msgraph::Api::Entity
11
+ class MemberAdd
12
+ acts_as_instance_method
13
+
14
+ common_constructor :team, :user_id
15
+
16
+ # @return [Hash]
17
+ def result
18
+ team.members_request do |req|
19
+ req.verb(:post).header('Content-type', 'application/json')
20
+ .body_data(body_hash.to_json)
21
+ end
22
+ end
23
+
24
+ # @return [Hash]
25
+ def body_hash
26
+ {
27
+ '@odata.type' => '#microsoft.graph.aadUserConversationMember',
28
+ 'user@odata.bind' => "https://graph.microsoft.com/v1.0/users('#{user_id}')"
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_rest/entity'
3
+ require 'avmtrf1/tools/msgraph/api/entity'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avmtrf1
7
7
  module Tools
8
8
  module Msgraph
9
9
  class Api < ::EacRest::Api
10
- class Team < ::EacRest::Entity
10
+ class Team < ::Avmtrf1::Tools::Msgraph::Api::Entity
11
11
  %w[classification createdDateTime description discoverySettings displayName funSettings
12
12
  guestSettings internalId isArchived isMembershipLimitedToOwners memberSettings
13
13
  messagingSettings specialization summary tenantId visibility webUrl].each do |key|
@@ -21,11 +21,17 @@ module Avmtrf1
21
21
  end
22
22
 
23
23
  def members
24
- api.request("/teams/#{id}/members").response.body_data.fetch('value')
25
- .map do |member_data|
24
+ members_request.map do |member_data|
26
25
  child_entity(::Avmtrf1::Tools::Msgraph::Api::Member, member_data)
27
26
  end
28
27
  end
28
+
29
+ # @return [EacRest::Request]
30
+ def members_request(&block)
31
+ request_data("/teams/#{id}/members", &block)
32
+ end
33
+
34
+ require_sub __FILE__, require_mode: :kernel
29
35
  end
30
36
  end
31
37
  end
@@ -17,6 +17,12 @@ module Avmtrf1
17
17
  token_info.fetch(:token).fetch(:accessToken)
18
18
  end
19
19
 
20
+ # @return [void]
21
+ def clear_token_info
22
+ token_info_cache.clear
23
+ reset_cache(:token_info)
24
+ end
25
+
20
26
  # @return [EacRest::Request]
21
27
  def request(service_url_suffix, headers = {}, &body_data_proc)
22
28
  super(service_url_suffix, headers, &body_data_proc)
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/error'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ module Msgraph
9
+ class Error < ::EacRest::Error
10
+ INVALID_TOKEN_CODE = 'InvalidAuthenticationToken'
11
+
12
+ attr_reader :data
13
+
14
+ def initialize(data)
15
+ @data = data
16
+ super(data.pretty_inspect)
17
+ end
18
+
19
+ # @return [String]
20
+ def code
21
+ data.fetch('code')
22
+ end
23
+
24
+ # @return [Boolean]
25
+ def invalid_token?
26
+ code == INVALID_TOKEN_CODE
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/msgraph/response_mixin'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ module Msgraph
9
+ module RequestMixin
10
+ def response
11
+ r = super
12
+ r.singleton_class.prepend(::Avmtrf1::Tools::Msgraph::ResponseMixin)
13
+ r
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/response'
4
+ require 'avmtrf1/tools/msgraph/error'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avmtrf1
8
+ module Tools
9
+ module Msgraph
10
+ module ResponseMixin
11
+ ERROR_KEY = 'error'
12
+ VALUE_KEY = 'value'
13
+
14
+ def body_data_or_raise
15
+ r = super
16
+ r.is_a?(::Hash) && r.key?(VALUE_KEY) ? r.fetch(VALUE_KEY) : r
17
+ rescue ::EacRest::Response => e
18
+ raise ::Avmtrf1::Tools::Msgraph::Error, e.body_data.fetch(ERROR_KEY)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -8,7 +8,9 @@ module Avmtrf1
8
8
  class Runner
9
9
  class Msgraph
10
10
  class JoinedTeams
11
- runner_with :help, :output do
11
+ LIST_COLUMNS = %w[id display_name].freeze
12
+
13
+ runner_with :help, :output_list do
12
14
  desc 'Lista as próprias equipes no MS Teams.'
13
15
  end
14
16
 
@@ -17,12 +19,16 @@ module Avmtrf1
17
19
  run_output
18
20
  end
19
21
 
20
- private
22
+ def list_columns
23
+ LIST_COLUMNS
24
+ end
21
25
 
22
- def output_content
23
- teams.map { |t| "#{t.id}|#{t.display_name}\n" }.join
26
+ def list_rows
27
+ teams
24
28
  end
25
29
 
30
+ private
31
+
26
32
  def teams_uncached
27
33
  api.root_entity.joined_teams.sort_by { |t| [t.display_name, t.id] }
28
34
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+ require 'avmtrf1/tools/msgraph/error'
5
+
6
+ module Avmtrf1
7
+ module Tools
8
+ class Runner
9
+ class Msgraph
10
+ class Team
11
+ class Member
12
+ class Add
13
+ runner_with :help, :output_item
14
+
15
+ def run
16
+ start_banner
17
+ add_member
18
+ run_output
19
+ fatal_error error.code if error.present?
20
+ end
21
+
22
+ private
23
+
24
+ attr_accessor :error, :result_data
25
+
26
+ def add_member
27
+ self.error = nil
28
+ self.result_data = team.member_add(member_id)
29
+ rescue ::Avmtrf1::Tools::Msgraph::Error => e
30
+ self.error = e
31
+ self.result_data = error.data
32
+ end
33
+
34
+ def start_banner
35
+ infov 'Team', team.id
36
+ infov 'Member ID', member_id
37
+ end
38
+
39
+ def item_hash
40
+ result_data
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Tools
7
+ class Runner
8
+ class Msgraph
9
+ class Team
10
+ class Member
11
+ runner_with :help, :subcommands do
12
+ pos_arg :member_id
13
+ subcommands
14
+ end
15
+ for_context :member_id
16
+
17
+ delegate :member_id, to: :parsed
18
+
19
+ require_sub __FILE__
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -8,25 +8,27 @@ module Avmtrf1
8
8
  class Msgraph
9
9
  class Team
10
10
  class Members
11
- runner_with :help, :output
11
+ LIST_COLUMNS = %w[id email display_name].freeze
12
+
13
+ runner_with :help, :output_list
12
14
 
13
15
  def run
14
16
  infov 'Found', members.count
15
17
  run_output
16
18
  end
17
19
 
18
- private
19
-
20
- def members_uncached
21
- team.members.sort_by { |m| [m.email, m.id] }
20
+ def list_columns
21
+ LIST_COLUMNS
22
22
  end
23
23
 
24
- def format_member(member)
25
- %w[email display_name].map { |k| member.send(k) }.join('|')
24
+ def list_rows
25
+ members
26
26
  end
27
27
 
28
- def output_content
29
- members.map { |member| "#{format_member(member)}\n" }.join
28
+ private
29
+
30
+ def members_uncached
31
+ team.members.sort_by { |m| [m.email || '_BLANK_', m.id] }
30
32
  end
31
33
  end
32
34
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avmtrf1
4
4
  module Tools
5
- VERSION = '0.41.0'
5
+ VERSION = '0.42.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avmtrf1-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.41.0
4
+ version: 0.42.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-19 00:00:00.000000000 Z
11
+ date: 2023-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-selenium
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '0.18'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 0.18.1
36
+ version: 0.18.2
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0.18'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.18.1
46
+ version: 0.18.2
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: avm-tools
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -64,20 +64,14 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0.9'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 0.9.1
67
+ version: '0.10'
71
68
  type: :runtime
72
69
  prerelease: false
73
70
  version_requirements: !ruby/object:Gem::Requirement
74
71
  requirements:
75
72
  - - "~>"
76
73
  - !ruby/object:Gem::Version
77
- version: '0.9'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 0.9.1
74
+ version: '0.10'
81
75
  - !ruby/object:Gem::Dependency
82
76
  name: inifile
83
77
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +95,7 @@ dependencies:
101
95
  version: '1.15'
102
96
  - - ">="
103
97
  - !ruby/object:Gem::Version
104
- version: 1.15.3
98
+ version: 1.15.4
105
99
  type: :runtime
106
100
  prerelease: false
107
101
  version_requirements: !ruby/object:Gem::Requirement
@@ -111,7 +105,7 @@ dependencies:
111
105
  version: '1.15'
112
106
  - - ">="
113
107
  - !ruby/object:Gem::Version
114
- version: 1.15.3
108
+ version: 1.15.4
115
109
  - !ruby/object:Gem::Dependency
116
110
  name: recursive-open-struct
117
111
  requirement: !ruby/object:Gem::Requirement
@@ -318,9 +312,14 @@ files:
318
312
  - lib/avmtrf1/tools/core_ext.rb
319
313
  - lib/avmtrf1/tools/msgraph.rb
320
314
  - lib/avmtrf1/tools/msgraph/api.rb
315
+ - lib/avmtrf1/tools/msgraph/api/entity.rb
321
316
  - lib/avmtrf1/tools/msgraph/api/member.rb
322
317
  - lib/avmtrf1/tools/msgraph/api/root.rb
323
318
  - lib/avmtrf1/tools/msgraph/api/team.rb
319
+ - lib/avmtrf1/tools/msgraph/api/team/member_add.rb
320
+ - lib/avmtrf1/tools/msgraph/error.rb
321
+ - lib/avmtrf1/tools/msgraph/request_mixin.rb
322
+ - lib/avmtrf1/tools/msgraph/response_mixin.rb
324
323
  - lib/avmtrf1/tools/msgraph/token_retrieve.rb
325
324
  - lib/avmtrf1/tools/runner.rb
326
325
  - lib/avmtrf1/tools/runner/check_point.rb
@@ -344,6 +343,8 @@ files:
344
343
  - lib/avmtrf1/tools/runner/msgraph/joined_teams.rb
345
344
  - lib/avmtrf1/tools/runner/msgraph/request.rb
346
345
  - lib/avmtrf1/tools/runner/msgraph/team.rb
346
+ - lib/avmtrf1/tools/runner/msgraph/team/member.rb
347
+ - lib/avmtrf1/tools/runner/msgraph/team/member/add.rb
347
348
  - lib/avmtrf1/tools/runner/msgraph/team/members.rb
348
349
  - lib/avmtrf1/tools/runner/msgraph/token.rb
349
350
  - lib/avmtrf1/tools/runner/node_js.rb