labclient 0.3.0 → 0.3.1

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: a747d261d131d7f0a228cb02753e21798c951393941247d0d4252a9c253c5650
4
- data.tar.gz: 228a9181e7345f607e8d4ab6617d729f9b4b44ab7e1fdcd295db4ed3332a257d
3
+ metadata.gz: 0c77fa948bc39c9ec7d677340949a7bc52ed03999c4cb5286d125154edb06f9b
4
+ data.tar.gz: fa96ed5df9a9ddf7eea56cd7eb7a34832b4a9509d982159fd8069c5ae49de241
5
5
  SHA512:
6
- metadata.gz: 2d66d602d12ccd265ae6b1e5aa28c0cdeabbbcc0ee678c5be80a30c42ef342e7b9308acf0a075da04cd4bbb76c744ce32d52122e0f4b87c36c9a9faf09b7834a
7
- data.tar.gz: c3eaf2cb6c83effec491f071bf0e5de9f2638f68d0af5656ae146915245eb00b091d7a566ef6c28c88db562a9b71cf8b773798fd7890693b098fbc66bdfd9adb
6
+ metadata.gz: 2148330fb1c533956e2f51085729c7c8e96b8fc27e21b43bbbac2b492906047bc52d964b203fe42ac86fc2f041310ab6c6b4e7f90ae5935efcedaf11674a4363
7
+ data.tar.gz: 004cbd92b60fd45996a4ecd9ae38039b3bae703a22f4d804e34390a56662a0f0859992295a83bf0d53f7e4e6191e2c9f416fcc4b7618e54e1b944c73aa4478fc
@@ -857,6 +857,12 @@ require 'labclient/resource_labels/merge_requests/client'
857
857
  require 'labclient/resource_labels/merge_requests/list'
858
858
  require 'labclient/resource_labels/merge_requests/show'
859
859
 
860
+ # Feature Flags
861
+ require 'labclient/feature_flags/create'
862
+ require 'labclient/feature_flags/delete'
863
+ require 'labclient/feature_flags/list'
864
+ require 'labclient/feature_flags/feature_flag'
865
+
860
866
  require 'labclient/resource_labels/resource_label'
861
867
 
862
868
  # Generators
@@ -37,8 +37,8 @@ module LabClient
37
37
  discussions: Discussions,
38
38
  epics: Epics,
39
39
  events: Events,
40
+ feature_flags: FeatureFlags,
40
41
  files: Files,
41
- wizard: Generator::Wizard,
42
42
  groups: Groups,
43
43
  impersonation_tokens: ImpersonationTokens,
44
44
  issues: Issues,
@@ -69,7 +69,8 @@ module LabClient
69
69
  todos: Todos,
70
70
  users: Users,
71
71
  version: Version,
72
- wikis: Wikis
72
+ wikis: Wikis,
73
+ wizard: Generator::Wizard
73
74
  }
74
75
 
75
76
  @subclasses.each do |name, obj|
@@ -116,6 +117,10 @@ module LabClient
116
117
  self.http = HTTP.new(@settings)
117
118
  end
118
119
 
120
+ def base_url
121
+ "#{settings[:url]}/api/v4/"
122
+ end
123
+
119
124
  def prompt_for_url
120
125
  print 'Enter GitLab URL (e.g. https://gitlab.com): '
121
126
  @settings[:url] = $stdin.gets.chomp
@@ -0,0 +1,48 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class FeatureFlags < Common
5
+ doc 'Create' do
6
+ title 'Set or create a feature'
7
+ example 'client.feature_flags.create(:create_eks_clusters, value: true)'
8
+ result <<~DOC
9
+ => #<FeatureFlag name: create_eks_clusters, state: on
10
+ DOC
11
+ end
12
+
13
+ doc 'Attributes' do
14
+ desc 'Register a new Application'
15
+ markdown <<~DOC
16
+ | Attribute | Type | Required | Description |
17
+ | --------- | ---- | -------- | ----------- |
18
+ | name | string | yes | Name of the feature to create or update |
19
+ | value | integer/string | yes | `true` or `false` to enable/disable, or an integer for percentage of time |
20
+ | feature_group | string | no | A Feature group name |
21
+ | user | string | no | A GitLab username |
22
+ | group | string | no | A GitLab group's path, for example gitlab-org |
23
+ | project | string | no | A projects path, for example gitlab-org/gitlab-foss |
24
+
25
+ Note that you can enable or disable a feature for a `feature_group`, a `user`,
26
+ a `group`, and a `project` in a single API call.
27
+ DOC
28
+ end
29
+
30
+ doc 'Create' do
31
+ example <<~DOC
32
+ client.applications.create(
33
+ name: "Grafana",
34
+ redirect_uri: "https://gitlab.com/-/grafana/login/gitlab",
35
+ scopes: "email"
36
+ )
37
+ DOC
38
+ result <<~DOC
39
+ #<Application id: 11, Grafana>
40
+ DOC
41
+ end
42
+
43
+ # Create
44
+ def create(name, query = {})
45
+ client.request(:post, "features/#{name}", FeatureFlag, query)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,23 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class FeatureFlags < Common
5
+ doc 'Delete' do
6
+ title 'Delete a feature'
7
+ example 'client.feature_flags.delete(:name)'
8
+ end
9
+
10
+ doc 'Delete' do
11
+ desc 'Delete via FeatureFlag'
12
+ example <<~DOC
13
+ feature = client.feature_flags.list.first
14
+ feature.delete
15
+ DOC
16
+ end
17
+
18
+ # Delete
19
+ def delete(name)
20
+ client.request(:delete, "features/#{name}")
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Inspect Helper
4
+ class FeatureFlag < Klass
5
+ include ClassHelpers
6
+ def inspect
7
+ "#<FeatureFlag name: #{name}, state: #{state}>"
8
+ end
9
+
10
+ def delete
11
+ client.feature_flags.delete name
12
+ end
13
+
14
+ def update(query)
15
+ update_self client.feature_flags.create(name, query)
16
+ end
17
+
18
+ def toggle
19
+ if state == 'off'
20
+ update(value: true)
21
+ else
22
+ update(value: false)
23
+ end
24
+ end
25
+
26
+ date_time_attrs %i[created_at]
27
+
28
+ help do
29
+ subtitle 'Feature Flag'
30
+ option 'delete', 'Delete this specific feature flag'
31
+ option 'toggle', 'Disable / Turn on feature'
32
+ option 'update', 'Create flag / Update with values [Hash]'
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,49 @@
1
+ # Top namespace
2
+ module LabClient
3
+ # Specifics
4
+ class FeatureFlags < Common
5
+ doc 'List' do
6
+ title 'List all features'
7
+ desc 'Get a list of all persisted features, with its gate values.'
8
+ example 'client.feature_flags.list'
9
+ result <<~DOC
10
+ => [#<Feature name: create_eks_clusters, state: on>]
11
+ DOC
12
+ end
13
+
14
+ doc 'List' do
15
+ title 'View detail of features'
16
+ desc 'Retrieve detailed information of feature flags'
17
+ example 'client.feature_flags.list.each(&:verbose)'
18
+ result <<~DOC
19
+ LabClient::Feature {
20
+ :name => "create_eks_clusters",
21
+ :state => "on",
22
+ :gates => [
23
+ [0] OpenStruct {
24
+ :key => "boolean",
25
+ :value => true
26
+ }
27
+ ]
28
+ }
29
+ => [#<Feature name: create_eks_clusters, state: on>]
30
+ DOC
31
+ end
32
+
33
+ doc 'List' do
34
+ title 'Toggle all features on or off'
35
+ example <<~DOC
36
+ client.feature_flags.list.each(&:toggle)
37
+ DOC
38
+ result <<~DOC
39
+ [#<Feature name: create_eks_clusters, state: off>,
40
+ #<Feature name: merge_train1, state: off>,
41
+ #<Feature name: merge_train2, state: off>]
42
+ DOC
43
+ end
44
+
45
+ def list
46
+ client.request(:get, 'features', FeatureFlag)
47
+ end
48
+ end
49
+ end
@@ -26,6 +26,16 @@ module LabClient
26
26
  example 'gem install faker'
27
27
  end
28
28
 
29
+ doc 'Wizard' do
30
+ title 'Quickstart'
31
+ desc 'To run, create the client/wizard and run!'
32
+ example <<~DOC
33
+ require 'labclient'
34
+ client = LabClient::Client.new(url: 'https://labclient', token: 'super_secret')
35
+ client.wizard.run!
36
+ DOC
37
+ end
38
+
29
39
  doc 'Wizard' do
30
40
  title 'Client'
31
41
  desc <<-DOC
@@ -61,7 +61,12 @@ module LabClient
61
61
 
62
62
  # TODO: Combine all of these?
63
63
  def collect_project_id(position = 1)
64
- response.path.split('/')[position]
64
+ # Check if Path / Pagination will be blank
65
+ if response.path.nil?
66
+ response.request.base_url.split(@client.base_url, 2)[position]
67
+ else
68
+ response.path.split('/')[position]
69
+ end
65
70
  end
66
71
 
67
72
  alias collect_group_id collect_project_id
@@ -8,11 +8,20 @@ module LabClient
8
8
  doc 'Overview' do
9
9
  title 'About'
10
10
  markdown <<~DOC
11
- Labclient is another Gitlab API Gem. A focus on ease of use and helpers and snippets.
11
+ LabClient is a Gitlab API Gem. Focusing on ease of use, documentation, helpers, and snippets.
12
12
 
13
- <a href="https://github.com/NARKOZ/gitlab">Gitlab</a> is an excellent gem, and is nearly complete in its implementation. While this is still a work in progress and you are looking for general use you should use it.
13
+ - Objects for resources (User, Project)
14
+ - Method Chaining ( project.branch(:master).pipelines )
15
+
16
+ Lots of Helpers
17
+
18
+ - Pagination
19
+ - IRB/Pry
20
+ - Setup: credentials file, profiles, and prompt
21
+ - Permission Levels
22
+ - Curl generator
14
23
 
15
- Here's a quick whirlwind example of some of the features:
24
+ Here is a quick whirlwind example of some of the features:
16
25
  DOC
17
26
 
18
27
  demo '350689'
@@ -1,3 +1,3 @@
1
1
  module LabClient
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: labclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davin Walker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-17 00:00:00.000000000 Z
11
+ date: 2020-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -398,6 +398,10 @@ files:
398
398
  - lib/labclient/events/list.rb
399
399
  - lib/labclient/events/project.rb
400
400
  - lib/labclient/events/user.rb
401
+ - lib/labclient/feature_flags/create.rb
402
+ - lib/labclient/feature_flags/delete.rb
403
+ - lib/labclient/feature_flags/feature_flag.rb
404
+ - lib/labclient/feature_flags/list.rb
401
405
  - lib/labclient/files/create.rb
402
406
  - lib/labclient/files/delete.rb
403
407
  - lib/labclient/files/show.rb
@@ -909,7 +913,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
909
913
  - !ruby/object:Gem::Version
910
914
  version: '0'
911
915
  requirements: []
912
- rubygems_version: 3.0.3
916
+ rubygems_version: 3.1.4
913
917
  signing_key:
914
918
  specification_version: 4
915
919
  summary: Gitlab API Client