metabase_cli 0.1.0 → 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: cea14db47d6ae0d434d29957c0ca89e2f20078be65eba75a9bc6608a0c88affc
4
- data.tar.gz: e79cd54a30da2f002c8535c1006644bc77f8e44e28c545ba1c0777af42367dab
3
+ metadata.gz: 80a4352e6f206732eac4e08a4399e2a0768630e1986d5b435fc69e0c3d2315bc
4
+ data.tar.gz: 4ed0ab35134b0ad2db430611c41a60e5232a1e56925a6b3af520024ea5805ad2
5
5
  SHA512:
6
- metadata.gz: 364064299b8b5a5f425839304a11d0e1951a608a345e30771409cc100de1c4a5e7b152ba940f76ffa0aa96a8696c1e85c1b00035dfe31327c82d1c987c079496
7
- data.tar.gz: 9648d46f497dbf32208010bfc7f71843934da2334a2d6461de623d450556af25fb5e615679d9025225e19ef9f6f730449c4439f1fff48788a64cf70e566f66f5
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,8 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- metabase_cli (0.1.0)
11
+ metabase_cli (0.1.4)
12
+ eventmachine
12
13
  hash-deep-merge
13
14
  metabase
14
15
  thor
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.0"
4
+ VERSION = "0.1.4"
5
5
  end
data/metabase_cli.gemspec CHANGED
@@ -8,11 +8,10 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Armand Fardeau"]
9
9
  spec.email = ["fardeauarmand@gmail.com"]
10
10
 
11
- spec.summary = "Write a short summary, because RubyGems requires one."
12
- spec.description = "Write a longer description or delete this line."
13
- spec.homepage = "https://google.com"
11
+ spec.summary = "Cli for Metabase API"
12
+ spec.homepage = "https://github.com/armandfardeau/metabase_cli"
14
13
  spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.6.0"
14
+ spec.required_ruby_version = ">= 2.7.5"
16
15
 
17
16
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
18
17
 
@@ -31,14 +30,15 @@ Gem::Specification.new do |spec|
31
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
31
  spec.require_paths = ["lib"]
33
32
 
34
- spec.add_dependency 'thor'
35
- spec.add_dependency 'metabase'
36
- spec.add_dependency 'hash-deep-merge'
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,17 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metabase_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Armand Fardeau
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-17 00:00:00.000000000 Z
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
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hash-deep-merge
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
@@ -39,7 +53,7 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: hash-deep-merge
56
+ name: thor
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
@@ -53,7 +67,7 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rspec
70
+ name: byebug
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -81,7 +95,7 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rubocop
98
+ name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: byebug
112
+ name: rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="
@@ -108,7 +122,7 @@ dependencies:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
- description: Write a longer description or delete this line.
125
+ description:
112
126
  email:
113
127
  - fardeauarmand@gmail.com
114
128
  executables:
@@ -129,18 +143,21 @@ files:
129
143
  - bin/setup
130
144
  - exe/metabase_cli
131
145
  - lib/metabase_cli.rb
146
+ - lib/metabase_cli/api.rb
132
147
  - lib/metabase_cli/cli.rb
133
148
  - lib/metabase_cli/database_service.rb
149
+ - lib/metabase_cli/group_service.rb
150
+ - lib/metabase_cli/user_service.rb
134
151
  - lib/metabase_cli/version.rb
135
152
  - metabase_cli.gemspec
136
- homepage: https://google.com
153
+ homepage: https://github.com/armandfardeau/metabase_cli
137
154
  licenses:
138
155
  - MIT
139
156
  metadata:
140
157
  allowed_push_host: https://rubygems.org
141
- homepage_uri: https://google.com
142
- source_code_uri: https://google.com
143
- changelog_uri: https://google.com
158
+ homepage_uri: https://github.com/armandfardeau/metabase_cli
159
+ source_code_uri: https://github.com/armandfardeau/metabase_cli
160
+ changelog_uri: https://github.com/armandfardeau/metabase_cli
144
161
  post_install_message:
145
162
  rdoc_options: []
146
163
  require_paths:
@@ -149,7 +166,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
166
  requirements:
150
167
  - - ">="
151
168
  - !ruby/object:Gem::Version
152
- version: 2.6.0
169
+ version: 2.7.5
153
170
  required_rubygems_version: !ruby/object:Gem::Requirement
154
171
  requirements:
155
172
  - - ">="
@@ -159,5 +176,5 @@ requirements: []
159
176
  rubygems_version: 3.1.6
160
177
  signing_key:
161
178
  specification_version: 4
162
- summary: Write a short summary, because RubyGems requires one.
179
+ summary: Cli for Metabase API
163
180
  test_files: []