Class: MetabaseQuerySync::MetabaseState

Inherits:
Dry::Struct
  • Object
show all
Defined in:
lib/metabase_query_sync/metabase_state.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from_metabase_api(metabase_api, root_collection_id) ⇒ MetabaseState

Parameters:

  • metabase_api (MetabaseApi)
  • root_collection_id (Integer)

Returns:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/metabase_query_sync/metabase_state.rb', line 22

def self.from_metabase_api(metabase_api, root_collection_id)
  items = metabase_api.get_collection_items(root_collection_id)
  if items.failure?
    raise "No root collection (id: #{root_collection_id}) found"
  end

  acc = items.value!
    .filter { |i| i.card? || i.pulse? }
    .map do |item|
      if item.card?
        metabase_api.get_card(item.id).value!
      elsif item.pulse?
        metabase_api.get_pulse(item.id).value!
      else
        raise 'Unexpected item type.'
      end
    end
    .reduce({cards: [], pulses: []}) do |acc, item|
      case item
      when MetabaseApi::Card
        acc[:cards] << item
      when MetabaseApi::Pulse
        acc[:pulses] << item
      else
        raise 'Unexpected item type.'
      end
      acc
    end

  new(collections: [], cards: acc[:cards], pulses: acc[:pulses], databases: metabase_api.get_databases.value!)
end

Instance Method Details

#cardsArray<MetabaseApi::Card>

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/metabase_query_sync/metabase_state.rb', line 13

class MetabaseState < Dry::Struct
  attribute :collections, Types::Strict::Array.of(MetabaseApi::Collection)
  attribute :cards, Types::Strict::Array.of(MetabaseApi::Card)
  attribute :pulses, Types::Strict::Array.of(MetabaseApi::Pulse)
  attribute :databases, Types::Strict::Array.of(MetabaseApi::Database)

  # @param metabase_api [MetabaseApi]
  # @param root_collection_id [Integer]
  # @return [MetabaseState]
  def self.from_metabase_api(metabase_api, root_collection_id)
    items = metabase_api.get_collection_items(root_collection_id)
    if items.failure?
      raise "No root collection (id: #{root_collection_id}) found"
    end

    acc = items.value!
      .filter { |i| i.card? || i.pulse? }
      .map do |item|
        if item.card?
          metabase_api.get_card(item.id).value!
        elsif item.pulse?
          metabase_api.get_pulse(item.id).value!
        else
          raise 'Unexpected item type.'
        end
      end
      .reduce({cards: [], pulses: []}) do |acc, item|
        case item
        when MetabaseApi::Card
          acc[:cards] << item
        when MetabaseApi::Pulse
          acc[:pulses] << item
        else
          raise 'Unexpected item type.'
        end
        acc
      end

    new(collections: [], cards: acc[:cards], pulses: acc[:pulses], databases: metabase_api.get_databases.value!)
  end

  # @return self
  def with_card(card)
    new(cards: cards.concat([card]))
  end

  # @return self
  def with_pulse(pulse)
    new(pulses: pulses.concat([pulse]))
  end

  def empty?
    collections.empty? && cards.empty? && pulses.empty?
  end

  def database_by_name(name)
    databases.filter { |d| d.name.downcase == name.downcase }.first
  end
end

#collectionsArray<MetabaseApi::Collection>

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/metabase_query_sync/metabase_state.rb', line 13

class MetabaseState < Dry::Struct
  attribute :collections, Types::Strict::Array.of(MetabaseApi::Collection)
  attribute :cards, Types::Strict::Array.of(MetabaseApi::Card)
  attribute :pulses, Types::Strict::Array.of(MetabaseApi::Pulse)
  attribute :databases, Types::Strict::Array.of(MetabaseApi::Database)

  # @param metabase_api [MetabaseApi]
  # @param root_collection_id [Integer]
  # @return [MetabaseState]
  def self.from_metabase_api(metabase_api, root_collection_id)
    items = metabase_api.get_collection_items(root_collection_id)
    if items.failure?
      raise "No root collection (id: #{root_collection_id}) found"
    end

    acc = items.value!
      .filter { |i| i.card? || i.pulse? }
      .map do |item|
        if item.card?
          metabase_api.get_card(item.id).value!
        elsif item.pulse?
          metabase_api.get_pulse(item.id).value!
        else
          raise 'Unexpected item type.'
        end
      end
      .reduce({cards: [], pulses: []}) do |acc, item|
        case item
        when MetabaseApi::Card
          acc[:cards] << item
        when MetabaseApi::Pulse
          acc[:pulses] << item
        else
          raise 'Unexpected item type.'
        end
        acc
      end

    new(collections: [], cards: acc[:cards], pulses: acc[:pulses], databases: metabase_api.get_databases.value!)
  end

  # @return self
  def with_card(card)
    new(cards: cards.concat([card]))
  end

  # @return self
  def with_pulse(pulse)
    new(pulses: pulses.concat([pulse]))
  end

  def empty?
    collections.empty? && cards.empty? && pulses.empty?
  end

  def database_by_name(name)
    databases.filter { |d| d.name.downcase == name.downcase }.first
  end
end

#database_by_name(name) ⇒ Object



68
69
70
# File 'lib/metabase_query_sync/metabase_state.rb', line 68

def database_by_name(name)
  databases.filter { |d| d.name.downcase == name.downcase }.first
end

#databasesArray<MetabaseApi::Database>

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/metabase_query_sync/metabase_state.rb', line 13

class MetabaseState < Dry::Struct
  attribute :collections, Types::Strict::Array.of(MetabaseApi::Collection)
  attribute :cards, Types::Strict::Array.of(MetabaseApi::Card)
  attribute :pulses, Types::Strict::Array.of(MetabaseApi::Pulse)
  attribute :databases, Types::Strict::Array.of(MetabaseApi::Database)

  # @param metabase_api [MetabaseApi]
  # @param root_collection_id [Integer]
  # @return [MetabaseState]
  def self.from_metabase_api(metabase_api, root_collection_id)
    items = metabase_api.get_collection_items(root_collection_id)
    if items.failure?
      raise "No root collection (id: #{root_collection_id}) found"
    end

    acc = items.value!
      .filter { |i| i.card? || i.pulse? }
      .map do |item|
        if item.card?
          metabase_api.get_card(item.id).value!
        elsif item.pulse?
          metabase_api.get_pulse(item.id).value!
        else
          raise 'Unexpected item type.'
        end
      end
      .reduce({cards: [], pulses: []}) do |acc, item|
        case item
        when MetabaseApi::Card
          acc[:cards] << item
        when MetabaseApi::Pulse
          acc[:pulses] << item
        else
          raise 'Unexpected item type.'
        end
        acc
      end

    new(collections: [], cards: acc[:cards], pulses: acc[:pulses], databases: metabase_api.get_databases.value!)
  end

  # @return self
  def with_card(card)
    new(cards: cards.concat([card]))
  end

  # @return self
  def with_pulse(pulse)
    new(pulses: pulses.concat([pulse]))
  end

  def empty?
    collections.empty? && cards.empty? && pulses.empty?
  end

  def database_by_name(name)
    databases.filter { |d| d.name.downcase == name.downcase }.first
  end
end

#empty?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/metabase_query_sync/metabase_state.rb', line 64

def empty?
  collections.empty? && cards.empty? && pulses.empty?
end

#pulsesArray<MetabaseApi::Pulse>

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/metabase_query_sync/metabase_state.rb', line 13

class MetabaseState < Dry::Struct
  attribute :collections, Types::Strict::Array.of(MetabaseApi::Collection)
  attribute :cards, Types::Strict::Array.of(MetabaseApi::Card)
  attribute :pulses, Types::Strict::Array.of(MetabaseApi::Pulse)
  attribute :databases, Types::Strict::Array.of(MetabaseApi::Database)

  # @param metabase_api [MetabaseApi]
  # @param root_collection_id [Integer]
  # @return [MetabaseState]
  def self.from_metabase_api(metabase_api, root_collection_id)
    items = metabase_api.get_collection_items(root_collection_id)
    if items.failure?
      raise "No root collection (id: #{root_collection_id}) found"
    end

    acc = items.value!
      .filter { |i| i.card? || i.pulse? }
      .map do |item|
        if item.card?
          metabase_api.get_card(item.id).value!
        elsif item.pulse?
          metabase_api.get_pulse(item.id).value!
        else
          raise 'Unexpected item type.'
        end
      end
      .reduce({cards: [], pulses: []}) do |acc, item|
        case item
        when MetabaseApi::Card
          acc[:cards] << item
        when MetabaseApi::Pulse
          acc[:pulses] << item
        else
          raise 'Unexpected item type.'
        end
        acc
      end

    new(collections: [], cards: acc[:cards], pulses: acc[:pulses], databases: metabase_api.get_databases.value!)
  end

  # @return self
  def with_card(card)
    new(cards: cards.concat([card]))
  end

  # @return self
  def with_pulse(pulse)
    new(pulses: pulses.concat([pulse]))
  end

  def empty?
    collections.empty? && cards.empty? && pulses.empty?
  end

  def database_by_name(name)
    databases.filter { |d| d.name.downcase == name.downcase }.first
  end
end

#with_card(card) ⇒ Object

Returns self.

Returns:

  • self



55
56
57
# File 'lib/metabase_query_sync/metabase_state.rb', line 55

def with_card(card)
  new(cards: cards.concat([card]))
end

#with_pulse(pulse) ⇒ Object

Returns self.

Returns:

  • self



60
61
62
# File 'lib/metabase_query_sync/metabase_state.rb', line 60

def with_pulse(pulse)
  new(pulses: pulses.concat([pulse]))
end