Class: Smplkit::ManagementClient::FlagsNamespace

Inherits:
Object
  • Object
show all
Defined in:
lib/smplkit/management/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_client) ⇒ FlagsNamespace

Returns a new instance of FlagsNamespace.



702
703
704
705
# File 'lib/smplkit/management/client.rb', line 702

def initialize(api_client)
  @api = SmplkitGeneratedClient::Flags::FlagsApi.new(api_client)
  @buffer = Management::FlagRegistrationBuffer.new
end

Instance Method Details

#_create_flag(flag) ⇒ Object



790
791
792
793
# File 'lib/smplkit/management/client.rb', line 790

def _create_flag(flag)
  response = ErrorMapping.call { @api.create_flag(flag_body(flag)) }
  flag_from_resource(ResourceShim.from_model(response.data))
end

#_update_flag(flag) ⇒ Object



795
796
797
798
# File 'lib/smplkit/management/client.rb', line 795

def _update_flag(flag)
  response = ErrorMapping.call { @api.update_flag(flag.id, flag_body(flag)) }
  flag_from_resource(ResourceShim.from_model(response.data))
end

#delete(id) ⇒ Object



757
758
759
760
# File 'lib/smplkit/management/client.rb', line 757

def delete(id)
  ErrorMapping.call { @api.delete_flag(id) }
  true
end

#fetch_flag(id) ⇒ Object



800
801
802
803
# File 'lib/smplkit/management/client.rb', line 800

def fetch_flag(id)
  response = ErrorMapping.call { @api.get_flag(id) }
  Smplkit::Flags::Helpers.flag_dict_from_json(ResourceShim.from_model(response.data))
end

#flushObject

POST pending declarations to the bulk endpoint.

Items remain in the buffer until the request succeeds, so a flush against an unhealthy service is automatically retried by the next flush call (lazy start retry, periodic background flush, or final flush on close). Raises on failure — callers decide whether to retry.



725
726
727
728
729
730
731
732
733
734
735
736
737
738
# File 'lib/smplkit/management/client.rb', line 725

def flush
  batch = @buffer.peek
  return if batch.empty?

  flag_items = batch.map do |entry|
    SmplkitGeneratedClient::Flags::FlagBulkItem.new(
      id: entry["id"], type: entry["type"], default: entry["default"],
      service: entry["service"], environment: entry["environment"]
    )
  end
  body = SmplkitGeneratedClient::Flags::FlagBulkRequest.new(flags: flag_items)
  ErrorMapping.call { @api.bulk_register_flags(body) }
  @buffer.commit(batch.map { |b| b["id"] })
end

#get(id) ⇒ Object



752
753
754
755
# File 'lib/smplkit/management/client.rb', line 752

def get(id)
  response = ErrorMapping.call { @api.get_flag(id) }
  flag_from_resource(ResourceShim.from_model(response.data))
end

#list(page_number: nil, page_size: nil) ⇒ Object



744
745
746
747
748
749
750
# File 'lib/smplkit/management/client.rb', line 744

def list(page_number: nil, page_size: nil)
  opts = {}
  opts[:page_number] = page_number unless page_number.nil?
  opts[:page_size] = page_size unless page_size.nil?
  response = ErrorMapping.call { @api.list_flags(opts) }
  (response.data || []).map { |r| flag_from_resource(ResourceShim.from_model(r)) }
end

#list_flagsObject

Runtime entry — walks every page so an account holding more than RUNTIME_PAGE_SIZE flags still gets a complete in-memory store.



807
808
809
810
# File 'lib/smplkit/management/client.rb', line 807

def list_flags
  rows = PaginatedFetch.collect { |opts| @api.list_flags(opts) }
  rows.map { |r| Smplkit::Flags::Helpers.flag_dict_from_json(ResourceShim.from_model(r)) }
end

#new_boolean_flag(id, default:, name: nil, description: nil, values: nil) ⇒ Object



762
763
764
765
766
767
# File 'lib/smplkit/management/client.rb', line 762

def new_boolean_flag(id, default:, name: nil, description: nil, values: nil)
  Smplkit::Flags::BooleanFlag.new(
    self, id: id, name: name || id, type: "BOOLEAN", default: default,
          description: description, values: values
  )
end

#new_json_flag(id, default:, name: nil, description: nil, values: nil) ⇒ Object



783
784
785
786
787
788
# File 'lib/smplkit/management/client.rb', line 783

def new_json_flag(id, default:, name: nil, description: nil, values: nil)
  Smplkit::Flags::JsonFlag.new(
    self, id: id, name: name || id, type: "JSON", default: default,
          description: description, values: values
  )
end

#new_number_flag(id, default:, name: nil, description: nil, values: nil) ⇒ Object



776
777
778
779
780
781
# File 'lib/smplkit/management/client.rb', line 776

def new_number_flag(id, default:, name: nil, description: nil, values: nil)
  Smplkit::Flags::NumberFlag.new(
    self, id: id, name: name || id, type: "NUMERIC", default: default,
          description: description, values: values
  )
end

#new_string_flag(id, default:, name: nil, description: nil, values: nil) ⇒ Object



769
770
771
772
773
774
# File 'lib/smplkit/management/client.rb', line 769

def new_string_flag(id, default:, name: nil, description: nil, values: nil)
  Smplkit::Flags::StringFlag.new(
    self, id: id, name: name || id, type: "STRING", default: default,
          description: description, values: values
  )
end

#pending_countObject



740
741
742
# File 'lib/smplkit/management/client.rb', line 740

def pending_count
  @buffer.pending_count
end

#register(declaration) ⇒ Object



707
708
709
710
711
712
713
714
715
716
# File 'lib/smplkit/management/client.rb', line 707

def register(declaration)
  @buffer.add(declaration)
  return unless @buffer.pending_count >= Management::FLAG_BATCH_FLUSH_SIZE

  begin
    flush
  rescue StandardError => e
    Smplkit.debug("registration", "threshold flag flush failed: #{e.class}: #{e.message}")
  end
end