metabase_cli 0.1.3 → 0.1.4

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: 42ff688c1e101da2602bbfb2e42e10adcb935eebcc170146d96a28f76ea9efec
4
- data.tar.gz: 7df70df5397c51d693eed3c9d1123c25a48bd57505f25cbe715c9cf35c617e15
3
+ metadata.gz: 80a4352e6f206732eac4e08a4399e2a0768630e1986d5b435fc69e0c3d2315bc
4
+ data.tar.gz: 4ed0ab35134b0ad2db430611c41a60e5232a1e56925a6b3af520024ea5805ad2
5
5
  SHA512:
6
- metadata.gz: b93762bbc51c7700cf420a9ab9552c927c3ad9a711f81dbc9ad454305f06a25c83ce2901388eab03677b822def1afe6630a91f056640c82d70e43ea873ed8c29
7
- data.tar.gz: 401cd63f3e8be9368f28965c43b8858d472dc39bf4bf630b2a6d8937f5ecada7fda76523c588d46c9f0faaf9c24212d0b8e115b021fb1cd8f698310343211eae
6
+ metadata.gz: aa086b2c5d209cdbce6ac181376a605eda12b92ee99b2eb6c97a77522ad8a324e07e130f33fb9f64b423e772194e35f019823194625ba69fef691bf9fbf84076
7
+ data.tar.gz: 298902c9d7b5c7bdaee76c7a838f508d3f5e9960a6fa402f1e30266c04fde05df0a9b749f01593ea994edd9314056c4fbe6a24c8bcb906a4a2f669b6e11c4165
data/.rubocop.yml CHANGED
@@ -1,5 +1,6 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.6
2
+ SuggestExtensions: false
3
+ TargetRubyVersion: 2.7.5
3
4
 
4
5
  Style/StringLiterals:
5
6
  Enabled: true
@@ -11,3 +12,12 @@ Style/StringLiteralsInInterpolation:
11
12
 
12
13
  Layout/LineLength:
13
14
  Max: 120
15
+
16
+ Metrics/MethodLength:
17
+ Max: 20
18
+
19
+ Metrics/ParameterLists:
20
+ Max: 10
21
+
22
+ Style/Documentation:
23
+ Enabled: false
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in metabase_api.gemspec
6
6
  gemspec
7
7
 
8
- gem 'eventmachine', :git => 'git://github.com/eventmachine/eventmachine.git', :branch => 'master'
8
+ gem "eventmachine", git: "git://github.com/eventmachine/eventmachine.git", branch: "master"
data/Gemfile.lock CHANGED
@@ -8,7 +8,7 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- metabase_cli (0.1.3)
11
+ metabase_cli (0.1.4)
12
12
  eventmachine
13
13
  hash-deep-merge
14
14
  metabase
data/README.md CHANGED
@@ -19,7 +19,7 @@ DB_PASSWORD=your_database_password
19
19
 
20
20
  ### Create database with default permissions
21
21
 
22
- $ metabase_cli create
22
+ $ metabase_cli create_database
23
23
 
24
24
  ## Development
25
25
 
data/exe/metabase_cli CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require 'em/pure_ruby' if not defined?(EventMachine)
4
+ require "em/pure_ruby" unless defined?(EventMachine)
4
5
  require "metabase_cli"
5
6
 
6
7
  MetabaseCli::CLI.start(ARGV)
7
-
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "metabase"
4
+ require "hash_deep_merge"
5
+
6
+ module MetabaseCli
7
+ module Api
8
+ def self.client
9
+ raise "Missing url" unless ENV["METABASE_URL"]
10
+ raise "Missing username" unless ENV["METABASE_USERNAME"]
11
+ raise "Missing password" unless ENV["METABASE_PASSWORD"]
12
+
13
+ @client ||= Metabase::Client.new(
14
+ url: ENV.fetch("METABASE_URL", nil),
15
+ username: ENV.fetch("METABASE_USERNAME", nil),
16
+ password: ENV.fetch("METABASE_PASSWORD", nil)
17
+ ).tap(&:login)
18
+ end
19
+
20
+ def self.permissions_graph
21
+ # Due to Faraday we need to use a trick to get the string key as symbol
22
+ @permissions_graph ||= JSON.parse(JSON.dump(client.get("/api/permissions/graph")), symbolize_names: true)
23
+ end
24
+ end
25
+ end
@@ -1,17 +1,21 @@
1
- require 'thor'
1
+ # frozen_string_literal: true
2
+
3
+ require "thor"
2
4
  require "metabase_cli/database_service"
5
+ require "metabase_cli/user_service"
6
+ require "metabase_cli/group_service"
3
7
 
4
8
  module MetabaseCli
5
9
  class CLI < Thor
6
- desc 'version', 'Prints the version'
10
+ desc "version", "Prints the version"
7
11
 
8
12
  def version
9
13
  puts "MetabaseApi version #{MetabaseCli::VERSION}"
10
14
  end
11
15
 
12
- desc 'create', 'Create a database'
16
+ desc "create_database", "Create a database"
13
17
 
14
- def create
18
+ def create_database
15
19
  client_name = ask("Client name: ")
16
20
  dbname = ask("Database name: ")
17
21
  engine = ask("Database engine: ", default: "postgres")
@@ -30,5 +34,45 @@ module MetabaseCli
30
34
  password: password
31
35
  ).create_database.set_default_permissions
32
36
  end
37
+
38
+ desc "create_user", "Create a user"
39
+
40
+ def create_user(group_id = nil)
41
+ first_name = ask("First name: ")
42
+ last_name = ask("Last name: ")
43
+ email = ask("Email: ")
44
+ group_wanted = ask("Group wanted: ", default: (group_id || "1"))
45
+
46
+ MetabaseCli::UserService.new(
47
+ first_name: first_name,
48
+ last_name: last_name,
49
+ email: email,
50
+ group_wanted: group_wanted
51
+ ).create_user
52
+ .invite_again
53
+ end
54
+
55
+ desc "create_group", "Create a group"
56
+
57
+ def create_group
58
+ name = ask("Group name: ")
59
+
60
+ MetabaseCli::GroupService.new(
61
+ name: name
62
+ ).create_group
63
+ end
64
+
65
+ desc "create_grouped_user", "Create a user and a group"
66
+
67
+ def create_grouped_user
68
+ group_id = create_group
69
+ create_user(group_id)
70
+ end
71
+
72
+ desc "create", "Create database, user and a group"
73
+ def create
74
+ create_database
75
+ create_grouped_user
76
+ end
33
77
  end
34
78
  end
@@ -1,8 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "metabase"
2
4
  require "hash_deep_merge"
5
+ require_relative "api"
3
6
 
4
7
  module MetabaseCli
5
8
  class DatabaseService
9
+ include MetabaseCli::Api
10
+
6
11
  def initialize(client_name:, dbname:, engine:, host:, port:, dbusername:, password:)
7
12
  @client_name = client_name
8
13
  @dbname = dbname
@@ -15,7 +20,7 @@ module MetabaseCli
15
20
  end
16
21
 
17
22
  def create_database
18
- response = metabase_client.post("/api/database", database_params)
23
+ response = MetabaseCli::Api.client.post("/api/database", database_params)
19
24
  @database_id = response.fetch("id")
20
25
  puts "Successfully created database with id: #{@database_id}"
21
26
 
@@ -23,9 +28,9 @@ module MetabaseCli
23
28
  end
24
29
 
25
30
  def set_default_permissions
26
- response = metabase_client.put("/api/permissions/graph", default_permissions)
31
+ response = MetabaseCli::Api.client.put("/api/permissions/graph", default_permissions)
27
32
 
28
- puts "Successfully set default permissions" if permissions_graph[:"revision"] != response["revision"]
33
+ puts "Successfully set default permissions" if permissions_graph[:revision] != response["revision"]
29
34
  end
30
35
 
31
36
  private
@@ -45,12 +50,12 @@ module MetabaseCli
45
50
  end
46
51
 
47
52
  def default_permissions
48
- permissions_graph.dup.deep_merge(
53
+ MetabaseCli::Api.permissions_graph.dup.deep_merge(
49
54
  {
50
55
  "groups":
51
56
  {
52
57
  "1": {
53
- "#{@database_id.to_s}": {
58
+ "#{@database_id}": {
54
59
  "native": "none",
55
60
  "schemas": "none"
56
61
  }
@@ -59,22 +64,5 @@ module MetabaseCli
59
64
  }
60
65
  )
61
66
  end
62
-
63
- def permissions_graph
64
- # Due to Faraday we need to use a trick to get the string key as symbol
65
- @permissions_graph ||= JSON.parse(JSON.dump(metabase_client.get("/api/permissions/graph")), symbolize_names: true)
66
- end
67
-
68
- def metabase_client
69
- raise "Missing url" unless ENV["METABASE_URL"]
70
- raise "Missing username" unless ENV["METABASE_USERNAME"]
71
- raise "Missing password" unless ENV["METABASE_PASSWORD"]
72
-
73
- @metabase_client ||= Metabase::Client.new(
74
- url: ENV.fetch("METABASE_URL", nil),
75
- username: ENV.fetch("METABASE_USERNAME", nil),
76
- password: ENV.fetch("METABASE_PASSWORD", nil)
77
- ).tap { |client| client.login }
78
- end
79
67
  end
80
- end
68
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "metabase"
4
+ require "hash_deep_merge"
5
+ require_relative "api"
6
+
7
+ module MetabaseCli
8
+ class GroupService
9
+ include MetabaseCli::Api
10
+
11
+ def initialize(name:)
12
+ @name = name
13
+ @group_id = nil
14
+ end
15
+
16
+ def create_group
17
+ response = MetabaseCli::Api.client.post("/api/permissions/group", {
18
+ "name": @name
19
+ })
20
+
21
+ @group_id = response["id"]
22
+ puts "Group created with id: #{@group_id}"
23
+
24
+ @group_id
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "metabase"
4
+ require "hash_deep_merge"
5
+ require "securerandom"
6
+ require_relative "api"
7
+
8
+ module MetabaseCli
9
+ class UserService
10
+ def initialize(last_name:, first_name:, email:, group_wanted:)
11
+ @last_name = last_name
12
+ @first_name = first_name
13
+ @email = email
14
+ @group_wanted = group_wanted
15
+ @user_id = nil
16
+ end
17
+
18
+ def create_user
19
+ response = MetabaseCli::Api.client.post("/api/user", user_params)
20
+ @user_id = response.fetch("id")
21
+
22
+ puts "Successfully created user with id: #{@user_id}"
23
+
24
+ self
25
+ end
26
+
27
+ def invite_again
28
+ MetabaseCli::Api.client.post("/api/user/#{@user_id}/send_invite")
29
+ puts "Successfully invited user with id: #{@user_id}"
30
+
31
+ self
32
+ end
33
+
34
+ private
35
+
36
+ def user_params
37
+ {
38
+ "first_name": @first_name,
39
+ "last_name": @last_name,
40
+ "email": @email,
41
+ "password": SecureRandom.alphanumeric(32),
42
+ "group_ids": group_wanted_ids,
43
+ "login_attributes": nil,
44
+ "locale": "fr"
45
+ }
46
+ end
47
+
48
+ def group_wanted_ids
49
+ return [1] if @group_wanted.nil?
50
+ return [1] if @group_wanted == "1"
51
+
52
+ [1, @group_wanted.to_i]
53
+ end
54
+ end
55
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MetabaseCli
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
data/metabase_cli.gemspec CHANGED
@@ -30,15 +30,15 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_dependency 'thor'
34
- spec.add_dependency 'metabase'
35
- spec.add_dependency 'hash-deep-merge'
36
- spec.add_dependency 'eventmachine'
33
+ spec.add_dependency "eventmachine"
34
+ spec.add_dependency "hash-deep-merge"
35
+ spec.add_dependency "metabase"
36
+ spec.add_dependency "thor"
37
37
 
38
- spec.add_development_dependency "rspec"
38
+ spec.add_development_dependency "byebug"
39
39
  spec.add_development_dependency "rake"
40
+ spec.add_development_dependency "rspec"
40
41
  spec.add_development_dependency "rubocop"
41
- spec.add_development_dependency "byebug"
42
42
 
43
43
  # Uncomment to register a new dependency of your gem
44
44
  # spec.add_dependency "example-gem", "~> 1.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metabase_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Armand Fardeau
@@ -11,7 +11,7 @@ cert_chain: []
11
11
  date: 2022-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: thor
14
+ name: eventmachine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: metabase
28
+ name: hash-deep-merge
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: hash-deep-merge
42
+ name: metabase
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: eventmachine
56
+ name: thor
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: byebug
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rubocop
98
+ name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: byebug
112
+ name: rubocop
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -143,8 +143,11 @@ files:
143
143
  - bin/setup
144
144
  - exe/metabase_cli
145
145
  - lib/metabase_cli.rb
146
+ - lib/metabase_cli/api.rb
146
147
  - lib/metabase_cli/cli.rb
147
148
  - lib/metabase_cli/database_service.rb
149
+ - lib/metabase_cli/group_service.rb
150
+ - lib/metabase_cli/user_service.rb
148
151
  - lib/metabase_cli/version.rb
149
152
  - metabase_cli.gemspec
150
153
  homepage: https://github.com/armandfardeau/metabase_cli