eac_tools 0.80.0 → 0.81.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +25 -16
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/lib/avm/application_scms/base.rb +17 -6
  5. data/sub/avm/lib/avm/applications/base/auto_local_source_path.rb +24 -0
  6. data/sub/avm/lib/avm/applications/base/local_source.rb +1 -1
  7. data/sub/avm/lib/avm/applications/base/scm.rb +2 -2
  8. data/sub/avm/lib/avm/registry/application_scms.rb +2 -2
  9. data/sub/avm/lib/avm/version.rb +1 -1
  10. data/sub/avm/spec/lib/avm/applications/base/entries_spec.rb +4 -2
  11. data/sub/avm/spec/lib/avm/applications/base/entries_spec_files/config.yml +1 -0
  12. data/sub/avm-eac_github_base0/Gemfile +2 -2
  13. data/sub/avm-eac_github_base0/avm-eac_github_base0.gemspec +3 -2
  14. data/sub/avm-eac_github_base0/lib/avm/eac_github_base0/api/entity.rb +1 -1
  15. data/sub/avm-eac_github_base0/lib/avm/eac_github_base0/application_scms/base.rb +30 -2
  16. data/sub/avm-eac_github_base0/lib/avm/eac_github_base0/version.rb +1 -1
  17. data/sub/avm-eac_github_base0/spec/lib/avm/eac_github_base0/application_scms/base_spec.rb +40 -0
  18. data/sub/avm-eac_github_base0/spec/rubocop_spec.rb +1 -1
  19. data/sub/avm-eac_github_base0/spec/spec_helper.rb +1 -1
  20. data/sub/avm-eac_gitlab_base0/Gemfile +8 -0
  21. data/sub/avm-eac_gitlab_base0/avm-eac_gitlab_base0.gemspec +20 -0
  22. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/base_entity.rb +72 -0
  23. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/file.rb +33 -0
  24. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/group.rb +49 -0
  25. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/member.rb +25 -0
  26. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/node.rb +20 -0
  27. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/nodes_set.rb +118 -0
  28. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/project.rb +65 -0
  29. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api/root.rb +30 -0
  30. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/api.rb +43 -0
  31. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/application_scms/base.rb +13 -0
  32. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/application_scms.rb +11 -0
  33. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/instances/base.rb +18 -0
  34. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0/version.rb +7 -0
  35. data/sub/avm-eac_gitlab_base0/lib/avm/eac_gitlab_base0.rb +9 -0
  36. data/sub/avm-eac_gitlab_base0/spec/lib/avm/eac_gitlab_base0/application_scms/base_spec.rb +7 -0
  37. data/sub/avm-eac_gitlab_base0/spec/rubocop_spec.rb +3 -0
  38. data/sub/avm-eac_gitlab_base0/spec/spec_helper.rb +4 -0
  39. data/sub/avm-git/Gemfile +2 -2
  40. data/sub/avm-git/avm-git.gemspec +3 -4
  41. data/sub/avm-git/lib/avm/git/application_scms/base/assert_main_at.rb +49 -0
  42. data/sub/avm-git/lib/avm/git/application_scms/base.rb +21 -0
  43. data/sub/avm-git/lib/avm/git/application_scms.rb +11 -0
  44. data/sub/avm-git/lib/avm/git/issue/complete/commits.rb +2 -2
  45. data/sub/avm-git/lib/avm/git/issue/complete/push.rb +2 -2
  46. data/sub/avm-git/lib/avm/git/issue.rb +1 -1
  47. data/sub/avm-git/lib/avm/git/launcher/base/dirty_files.rb +4 -4
  48. data/sub/avm-git/lib/avm/git/launcher/base/subrepo.rb +1 -1
  49. data/sub/avm-git/lib/avm/git/launcher/base.rb +1 -0
  50. data/sub/avm-git/lib/avm/git/launcher/publish_base.rb +1 -2
  51. data/sub/avm-git/lib/avm/git/launcher/remote.rb +2 -2
  52. data/sub/avm-git/lib/avm/git/launcher/warp_base.rb +3 -2
  53. data/sub/avm-git/lib/avm/git/launcher_stereotypes/git_subrepo/warp.rb +2 -2
  54. data/sub/avm-git/lib/avm/git/organize/repository.rb +1 -1
  55. data/sub/avm-git/lib/avm/git/revision_test.rb +2 -2
  56. data/sub/avm-git/lib/avm/git/scms/git/change_tracker.rb +1 -0
  57. data/sub/avm-git/lib/avm/git/scms/git/commit.rb +1 -1
  58. data/sub/avm-git/lib/avm/git/scms/git/interval.rb +1 -1
  59. data/sub/avm-git/lib/avm/git/scms/git_subtree.rb +1 -1
  60. data/sub/avm-git/lib/avm/git/subrepo_check/show_result.rb +1 -1
  61. data/sub/avm-git/lib/avm/git/subrepo_checks.rb +1 -0
  62. data/sub/avm-git/lib/avm/git/version.rb +1 -1
  63. data/sub/avm-git/spec/lib/avm/git/commit/diff_tree_line_spec.rb +2 -2
  64. data/sub/avm-git/spec/lib/avm/git/commit_spec.rb +4 -4
  65. data/sub/avm-git/spec/lib/avm/git/launcher/base_spec.rb +10 -10
  66. data/sub/avm-git/spec/lib/avm/git/scms/git/commit/deploy_spec.rb +11 -11
  67. data/sub/avm-git/spec/lib/avm/git/scms/git_spec.rb +1 -1
  68. data/sub/avm-git/spec/lib/avm/git/scms/git_subrepo_spec.rb +1 -1
  69. data/sub/avm-git/spec/lib/avm/git/vendor/github_spec.rb +3 -3
  70. data/sub/avm-git/spec/rubocop_spec.rb +1 -1
  71. data/sub/avm-git/spec/spec_helper.rb +1 -1
  72. data/sub/avm-tools/avm-tools.gemspec +3 -3
  73. data/sub/avm-tools/lib/avm/tools/runner/application/info.rb +2 -1
  74. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  75. metadata +34 -17
  76. data/sub/avm-eac_github_base0/spec/avm/eac_github_base0/application_scms/base_spec.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c7d9d14e62f4976d146dd5a901953270551a16e154e5d08a7d525552848b706
4
- data.tar.gz: 7b2f94a28c65415e62cd6983b4b501dfff63a67265010c8e54e12f690073b519
3
+ metadata.gz: 0d2e685c6164fa7bbf8b6c8aff6f6b893482bb469306379210cc7d54d8ea3f05
4
+ data.tar.gz: acedb29f75ec68d89fe776ea05976050519ec549f9f328f4de56835109c32710
5
5
  SHA512:
6
- metadata.gz: 747cdfc35f0f0cfb9a2b783b857c41208b80a2e5b28683336b35258a34541b1ebf1bf90b201ce3eb1b71e97a16ba61008a0f19cbc73f8650c73cbd423fb4074d
7
- data.tar.gz: 53c4d156592347bbf7143ee2b5a0dc860d7d93aa6b5fb40cf6faec55dd4e2d7a7f529a99c1539495d1ad50cbfa659bdd4ee4218edc004e45f9a0a5d5f39e5fbc
6
+ metadata.gz: eb5a6a90e7655ac953173526517d7de438f76f25d8f11f9ecc0a64d013d260311cb8779595a773416e22dd3fc6fbf01f0002eefbcaf7eaf0df874c38e140b186
7
+ data.tar.gz: 45a9f8b13ac0a309fe00568f4ee4911a84eb9d8a9caaac14c3412c02f489d8802ce82362e2c4fd9e742e260d2bf5cfc56e61e05010f833e8bb327a1d7b87aee3
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eac_tools (0.80.0)
5
- avm (~> 0.81)
4
+ eac_tools (0.81.0)
5
+ avm (~> 0.82)
6
6
  avm-eac_asciidoctor_base0 (~> 0.19)
7
7
  avm-eac_generic_base0 (~> 0.12, >= 0.12.1)
8
- avm-eac_github_base0 (~> 0.2)
8
+ avm-eac_github_base0 (~> 0.3)
9
9
  avm-eac_latex_base0 (~> 0.3, >= 0.3.1)
10
10
  avm-eac_php_base0 (~> 0.4, >= 0.4.2)
11
11
  avm-eac_postgresql_base0 (~> 0.5, >= 0.5.2)
@@ -17,8 +17,8 @@ PATH
17
17
  avm-eac_ruby_base1 (~> 0.33)
18
18
  avm-eac_webapp_base0 (~> 0.18, >= 0.18.2)
19
19
  avm-eac_wordpress_base0 (~> 0.3, >= 0.3.1)
20
- avm-git (~> 0.13, >= 0.13.4)
21
- avm-tools (~> 0.157)
20
+ avm-git (~> 0.14)
21
+ avm-tools (~> 0.158)
22
22
  eac_ruby_utils (~> 0.119, >= 0.119.2)
23
23
 
24
24
  PATH
@@ -41,11 +41,19 @@ PATH
41
41
  PATH
42
42
  remote: sub/avm-eac_github_base0
43
43
  specs:
44
- avm-eac_github_base0 (0.2.0)
45
- avm (~> 0.81)
44
+ avm-eac_github_base0 (0.3.0)
45
+ avm (~> 0.82)
46
+ avm-git (~> 0.14)
46
47
  eac_rest (~> 0.10)
47
48
  eac_ruby_utils (~> 0.119, >= 0.119.2)
48
49
 
50
+ PATH
51
+ remote: sub/avm-eac_gitlab_base0
52
+ specs:
53
+ avm-eac_gitlab_base0 (0.4.0)
54
+ avm-eac_github_base0 (~> 0.3)
55
+ eac_ruby_utils (~> 0.119, >= 0.119.2)
56
+
49
57
  PATH
50
58
  remote: sub/avm-eac_latex_base0
51
59
  specs:
@@ -162,23 +170,23 @@ PATH
162
170
  PATH
163
171
  remote: sub/avm-git
164
172
  specs:
165
- avm-git (0.13.4)
166
- avm (~> 0.79)
173
+ avm-git (0.14.0)
174
+ avm (~> 0.82)
167
175
  avm-files (~> 0.6, >= 0.6.2)
168
176
  eac_git (~> 0.14, >= 0.14.1)
169
- eac_ruby_utils (~> 0.119, >= 0.119.1)
177
+ eac_ruby_utils (~> 0.119, >= 0.119.2)
170
178
  git (~> 1.18)
171
179
 
172
180
  PATH
173
181
  remote: sub/avm-tools
174
182
  specs:
175
- avm-tools (0.157.0)
183
+ avm-tools (0.158.0)
176
184
  aranha-parsers (~> 0.21)
177
- avm (~> 0.81)
178
- avm-eac_ruby_base1 (~> 0.32, >= 0.32.1)
185
+ avm (~> 0.82)
186
+ avm-eac_ruby_base1 (~> 0.33)
179
187
  avm-eac_ubuntu_base0 (~> 0.5)
180
188
  avm-files (~> 0.6, >= 0.6.2)
181
- avm-git (~> 0.13, >= 0.13.4)
189
+ avm-git (~> 0.14)
182
190
  clipboard (~> 1.3, >= 1.3.6)
183
191
  curb (~> 0.9, >= 0.9.11)
184
192
  eac_git (~> 0.14, >= 0.14.1)
@@ -190,7 +198,7 @@ PATH
190
198
  PATH
191
199
  remote: sub/avm
192
200
  specs:
193
- avm (0.81.0)
201
+ avm (0.82.0)
194
202
  aranha-parsers (~> 0.21)
195
203
  eac_cli (~> 0.38)
196
204
  eac_config (~> 0.14, >= 0.14.1)
@@ -332,7 +340,7 @@ GEM
332
340
  racc
333
341
  parslet (2.0.0)
334
342
  public_suffix (5.0.3)
335
- racc (1.7.1)
343
+ racc (1.7.3)
336
344
  rack (3.0.8)
337
345
  rainbow (3.1.1)
338
346
  rchardet (1.8.0)
@@ -394,6 +402,7 @@ DEPENDENCIES
394
402
  avm-eac_asciidoctor_base0!
395
403
  avm-eac_generic_base0!
396
404
  avm-eac_github_base0!
405
+ avm-eac_gitlab_base0!
397
406
  avm-eac_latex_base0!
398
407
  avm-eac_php_base0!
399
408
  avm-eac_postgresql_base0!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTools
4
- VERSION = '0.80.0'
4
+ VERSION = '0.81.0'
5
5
  end
@@ -5,6 +5,8 @@ require 'eac_ruby_utils/core_ext'
5
5
  module Avm
6
6
  module ApplicationScms
7
7
  class Base
8
+ acts_as_abstract
9
+
8
10
  class << self
9
11
  # @return [String]
10
12
  def type_name
@@ -12,16 +14,25 @@ module Avm
12
14
  end
13
15
  end
14
16
 
15
- # !method initialize(url)
16
- # @param url [Addressable::URI]
17
- common_constructor :url do
18
- self.url = url.to_uri
19
- end
17
+ # !method initialize(application)
18
+ # @param application [Avm::Application::Base]
19
+ common_constructor :application
20
20
  delegate :type_name, to: :class
21
21
 
22
+ # @param path [Pathname]
23
+ # @return [Pathname]
24
+ def assert_main_at(path) # rubocop:disable Lint/UnusedMethodArgument
25
+ raise_abstract_method __method__
26
+ end
27
+
22
28
  # @return [String]
23
29
  def to_s
24
- "#{type_name}[#{url}]"
30
+ "#{type_name}[#{to_s_type_specific}]"
31
+ end
32
+
33
+ # @return [String]
34
+ def to_s_type_specific
35
+ ''
25
36
  end
26
37
  end
27
38
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_fs/core_ext'
4
+
5
+ module Avm
6
+ module Applications
7
+ class Base
8
+ class AutoLocalSourcePath
9
+ acts_as_instance_method
10
+ common_constructor :application
11
+
12
+ # @return [Pathname]
13
+ def result
14
+ application.scm.assert_main_at(fs_cache.path.to_pathname)
15
+ end
16
+
17
+ # @return [String]
18
+ def fs_object_id
19
+ application.id.to_s.parameterize
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -10,7 +10,7 @@ module Avm
10
10
  module LocalSource
11
11
  # @return [Pathname]
12
12
  def local_source_path
13
- local_source_path_entry.value!.to_pathname
13
+ (local_source_path_entry.value || auto_local_source_path).to_pathname
14
14
  end
15
15
 
16
16
  # @return [EacConfig::Entry]
@@ -8,12 +8,12 @@ module Avm
8
8
  class Base
9
9
  module Scm
10
10
  common_concern do
11
- uri_components_entries_values 'scm', %w[repos_path type]
11
+ uri_components_entries_values 'scm', %w[repos_path ssh_username type]
12
12
  end
13
13
 
14
14
  # @return [Avm::ApplicationScms::Base]
15
15
  def scm
16
- @scm ||= ::Avm::Registry.application_scms.detect(scm_type, scm_url)
16
+ @scm ||= ::Avm::Registry.application_scms.detect(self)
17
17
  end
18
18
 
19
19
  # @param value [String]
@@ -6,9 +6,9 @@ module Avm
6
6
  module Registry
7
7
  class ApplicationScms < ::Avm::Registry::FromGems
8
8
  def class_detect(klass, detect_args)
9
- return nil unless klass.type_name == detect_args[0]
9
+ return nil unless klass.type_name == detect_args.fetch(0).scm_type
10
10
 
11
- klass.new(*detect_args[1..-1])
11
+ klass.new(*detect_args)
12
12
  end
13
13
  end
14
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Avm
4
- VERSION = '0.81.0'
4
+ VERSION = '0.82.0'
5
5
  end
@@ -10,7 +10,8 @@ RSpec.describe ::Avm::Applications::Base do
10
10
  'scm.id' => 'app1',
11
11
  'scm.type' => 'ScmX',
12
12
  'scm.url' => 'http://nowhere.net/anypath',
13
- 'scm.repos_path' => 'mygroup/app0'
13
+ 'scm.repos_path' => 'mygroup/app0',
14
+ 'scm.ssh_username' => 'myuser'
14
15
  },
15
16
  'app1' => {
16
17
  'name' => nil,
@@ -18,7 +19,8 @@ RSpec.describe ::Avm::Applications::Base do
18
19
  'scm.id' => nil,
19
20
  'scm.type' => 'ScmX',
20
21
  'scm.url' => 'http://nowhere.net/anypath',
21
- 'scm.repos_path' => 'mygroup'
22
+ 'scm.repos_path' => 'mygroup',
23
+ 'scm.ssh_username' => 'myuser'
22
24
  }
23
25
  }
24
26
 
@@ -9,3 +9,4 @@ app1:
9
9
  url: http://nowhere.net/anypath
10
10
  type: ScmX
11
11
  repos_path: mygroup
12
+ ssh_username: myuser
@@ -4,5 +4,5 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
- local_gemfile = ::File.join(::File.dirname(__FILE__), 'Gemfile.local')
8
- eval_gemfile local_gemfile if ::File.exist?(local_gemfile)
7
+ local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if File.exist?(local_gemfile)
@@ -13,9 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.files = Dir['{lib}/**/*']
14
14
  s.required_ruby_version = '>= 2.7'
15
15
 
16
- s.add_dependency 'avm', '~> 0.81'
16
+ s.add_dependency 'avm', '~> 0.82'
17
+ s.add_dependency 'avm-git', '~> 0.14'
17
18
  s.add_dependency 'eac_rest', '~> 0.10'
18
19
  s.add_dependency 'eac_ruby_utils', '~> 0.119', '>= 0.119.2'
19
20
 
20
- s.add_development_dependency 'eac_ruby_gem_support', '~> 0.8', '>= 0.8.2'
21
+ s.add_development_dependency 'eac_ruby_gem_support', '~> 0.9'
21
22
  end
@@ -13,7 +13,7 @@ module Avm
13
13
  while url_suffix.present?
14
14
  response = api.request_json(url_suffix).response
15
15
  r += response.body_data_or_raise
16
- .map { |child_data| child_entity(entity_class, child_data) }
16
+ .map { |child_data| child_entity(entity_class, child_data) }
17
17
  url_suffix = response.link('next')
18
18
  end
19
19
  r
@@ -1,12 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/application_scms/base'
3
+ require 'avm/git/application_scms/base'
4
4
  require 'eac_ruby_utils/core_ext'
5
5
 
6
6
  module Avm
7
7
  module EacGithubBase0
8
8
  module ApplicationScms
9
- class Base < ::Avm::ApplicationScms::Base
9
+ class Base < ::Avm::Git::ApplicationScms::Base
10
+ REPOSITORY_URL_SUFFIX = '.git'
11
+
12
+ # @return [Addressable::URI]
13
+ def git_https_url
14
+ r = web_url.dup
15
+ r.path = "#{r.path}#{REPOSITORY_URL_SUFFIX}"
16
+ r
17
+ end
18
+
19
+ # @return [Addressable::URI]
20
+ def git_ssh_url
21
+ ::Addressable::URI.new(
22
+ scheme: 'ssh',
23
+ user: application.scm_ssh_username,
24
+ host: web_url.host,
25
+ path: "#{application.scm_repos_path}#{REPOSITORY_URL_SUFFIX}"
26
+ )
27
+ end
28
+
29
+ # @return [String]
30
+ def to_s_type_specific
31
+ web_url.to_s
32
+ end
33
+
34
+ # @return [Addressable::URI]
35
+ def web_url
36
+ application.scm_url.to_uri + application.scm_repos_path.to_s
37
+ end
10
38
  end
11
39
  end
12
40
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module EacGithubBase0
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_github_base0/application_scms/base'
4
+
5
+ RSpec.describe Avm::EacGithubBase0::ApplicationScms::Base do
6
+ let(:stub_application) do
7
+ {
8
+ scm_url: 'https://github.com'.to_uri,
9
+ scm_repos_path: 'esquilo-azul/eac_tools'.to_pathname,
10
+ scm_ssh_username: 'git'
11
+ }.to_struct
12
+ end
13
+ let(:instance) { described_class.new(stub_application) }
14
+
15
+ include_examples 'in_avm_registry', 'application_scms'
16
+
17
+ describe '#git_https_url' do
18
+ it do
19
+ expect(instance.git_https_url).to(
20
+ eq(Addressable::URI.parse('https://github.com/esquilo-azul/eac_tools.git'))
21
+ )
22
+ end
23
+ end
24
+
25
+ describe '#git_ssh_url' do
26
+ it do
27
+ expect(instance.git_ssh_url).to(
28
+ eq(Addressable::URI.parse('ssh://git@github.com/esquilo-azul/eac_tools.git'))
29
+ )
30
+ end
31
+ end
32
+
33
+ describe '#web_url' do
34
+ it do
35
+ expect(instance.web_url).to(
36
+ eq(Addressable::URI.parse('https://github.com/esquilo-azul/eac_tools'))
37
+ )
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ::EacRubyUtils::Rspec.default_setup.describe_rubocop
3
+ EacRubyUtils::Rspec.default_setup.describe_rubocop
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/rspec/default_setup'
4
- ::EacRubyUtils::Rspec.default_setup_create(::File.expand_path('..', __dir__))
4
+ EacRubyUtils::Rspec.default_setup_create(File.expand_path('..', __dir__))
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ local_gemfile = File.join(File.dirname(__FILE__), 'Gemfile.local')
8
+ eval_gemfile local_gemfile if File.exist?(local_gemfile)
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+
5
+ require 'avm/eac_gitlab_base0/version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = 'avm-eac_gitlab_base0'
9
+ s.version = Avm::EacGitlabBase0::VERSION
10
+ s.authors = ['Put here the authors']
11
+ s.summary = 'Put here de description.'
12
+
13
+ s.files = Dir['{lib}/**/*']
14
+ s.required_ruby_version = '>= 2.7'
15
+
16
+ s.add_dependency 'avm-eac_github_base0', '~> 0.3'
17
+ s.add_dependency 'eac_ruby_utils', '~> 0.119', '>= 0.119.2'
18
+
19
+ s.add_development_dependency 'eac_ruby_gem_support', '~> 0.9'
20
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/api'
4
+ require 'eac_rest/entity'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacGitlabBase0
9
+ class Api < ::EacRest::Api
10
+ class BaseEntity < ::EacRest::Entity
11
+ enable_simple_cache
12
+
13
+ def delete(url_suffix)
14
+ api.request(url_suffix).verb(:delete).response.body_data
15
+ end
16
+
17
+ def encode_id(id)
18
+ return id if id.is_a?(::Integer)
19
+
20
+ ::CGI.escape(id.to_s)
21
+ end
22
+
23
+ def fetch_entity(suffix, klass, not_found_message = nil)
24
+ validate_response_data(
25
+ dump_response(api.request_json(suffix).response),
26
+ not_found_message
27
+ ).if_present { |v| klass.new(api, v) }
28
+ end
29
+
30
+ def fetch_entities(suffix, klass)
31
+ r = []
32
+ request = api.request_json(suffix)
33
+ while request
34
+ response = request.response
35
+ r += validate_response_data(response).map { |rr| klass.new(api, rr) }
36
+ request = response.link('next').if_present do |v|
37
+ api.request_json(v)
38
+ end
39
+ end
40
+ r
41
+ end
42
+
43
+ def dump_response(response)
44
+ basename = response.url.to_s.variableize[0..99]
45
+ { data: response.body_data, headers: response.headers, links: response.links }
46
+ .each { |part, value| dump_debug("#{basename}_#{part}", value) }
47
+ response
48
+ end
49
+
50
+ def dump_debug(basename, data)
51
+ file = ::Pathname.new('/tmp').join('gitlab_temp', "#{basename}.yaml")
52
+ file.parent.mkpath
53
+ ::EacRubyUtils::Yaml.dump_file(file, data)
54
+ end
55
+
56
+ def validate_response_data(response, not_found_message = nil)
57
+ if response.body_data.is_a?(::Hash)
58
+ response.body_data['error'].if_present do |v|
59
+ raise "URL: #{response.url}, Data: #{v}"
60
+ end
61
+
62
+ response.body_data['message'].if_present do |v|
63
+ return nil if v == not_found_message
64
+ end
65
+ end
66
+
67
+ response.body_data
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_gitlab_base0/api/base_entity'
4
+ require 'eac_rest/api'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacGitlabBase0
9
+ class Api < ::EacRest::Api
10
+ class File < ::Avm::EacGitlabBase0::Api::BaseEntity
11
+ FIELDS = %w[file_name file_path size encoding content_sha256 ref blob_id commit_id
12
+ last_commit_id].freeze
13
+
14
+ FIELDS.each do |field|
15
+ define_method field do
16
+ data.fetch(field)
17
+ end
18
+ end
19
+
20
+ def content
21
+ case encoding
22
+ when 'base64' then ::Base64.decode64(encoded_content)
23
+ else nyi("Unmapped encoding: #{encoding}")
24
+ end
25
+ end
26
+
27
+ def encoded_content
28
+ data.fetch('content')
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_gitlab_base0/api/node'
4
+ require 'avm/eac_gitlab_base0/api/project'
5
+ require 'eac_rest/api'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module EacGitlabBase0
10
+ class Api < ::EacRest::Api
11
+ class Group < ::Avm::EacGitlabBase0::Api::Node
12
+ FIELDS = %w[id web_url name path description visibility share_with_group_lock
13
+ require_two_factor_authentication two_factor_grace_period project_creation_level
14
+ auto_devops_enabled subgroup_creation_level emails_disabled lfs_enabled
15
+ avatar_url request_access_enabled full_name full_path parent_id].freeze
16
+
17
+ FIELDS.each do |field|
18
+ define_method field do
19
+ data.fetch(field)
20
+ end
21
+ end
22
+
23
+ def api_prefix
24
+ "/groups/#{encode_id(id)}"
25
+ end
26
+
27
+ def to_s
28
+ full_path
29
+ end
30
+
31
+ private
32
+
33
+ def members_uncached
34
+ fetch_entities(
35
+ "#{api_prefix}/members",
36
+ ::Avm::EacGitlabBase0::Api::Member
37
+ )
38
+ end
39
+
40
+ def projects_uncached
41
+ fetch_entities(
42
+ "#{api_prefix}/projects?order_by=path&sort=asc&per_page=9999",
43
+ ::Avm::EacGitlabBase0::Api::Project
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_gitlab_base0/api/base_entity'
4
+ require 'eac_rest/api'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module EacGitlabBase0
9
+ class Api < ::EacRest::Api
10
+ class Member < ::Avm::EacGitlabBase0::Api::BaseEntity
11
+ FIELDS = %w[id name username state avatar_url web_url access_level expires_at].freeze
12
+
13
+ FIELDS.each do |field|
14
+ define_method field do
15
+ data.fetch(field)
16
+ end
17
+ end
18
+
19
+ def to_s
20
+ [name, username, state, access_level].join(' / ')
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_gitlab_base0/api/base_entity'
4
+ require 'avm/eac_gitlab_base0/api/file'
5
+ require 'eac_rest/api'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module EacGitlabBase0
10
+ class Api < ::EacRest::Api
11
+ class Node < ::Avm::EacGitlabBase0::Api::BaseEntity
12
+ compare_by :id
13
+
14
+ def remove_member(user_id)
15
+ delete("#{api_prefix}/members/#{encode_id(user_id)}")
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end