Class: Azure::Storage::Table::TableService

Inherits:
StorageService
  • Object
show all
Defined in:
lib/azure/storage/table/table_service.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, &block) ⇒ TableService

Public: Initializes an instance of [Azure::Storage::Table::TableService]

Attributes

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :use_development_storage - TrueClass|FalseClass. Whether to use storage emulator.

  • :development_storage_proxy_uri - String. Used with :use_development_storage if emulator is hosted other than localhost.

  • :storage_connection_string - String. The storage connection string.

  • :storage_account_name - String. The name of the storage account.

  • :storage_access_key - Base64 String. The access key of the storage account.

  • :storage_sas_token - String. The signed access signature for the storage account or one of its service.

  • :storage_table_host - String. Specified Table serivce endpoint or hostname

  • :storage_dns_suffix - String. The suffix of a regional Storage Serivce, to

  • :default_endpoints_protocol - String. http or https

  • :use_path_style_uri - String. Whether use path style URI for specified endpoints

  • :ca_file - String. File path of the CA file if having issue with SSL

  • :user_agent_prefix - String. The user agent prefix that can identify the application calls the library

  • :client - Azure::Storage::Common::Client. The common client used to initalize the service.

The valid set of options include:

  • Storage Emulator: :use_development_storage required, :development_storage_proxy_uri optionally

  • Storage account name and key: :storage_account_name and :storage_access_key required, set :storage_dns_suffix necessarily

  • Storage account name and SAS token: :storage_account_name and :storage_sas_token required, set :storage_dns_suffix necessarily

  • Specified hosts and SAS token: At least one of the service host and SAS token. It’s up to user to ensure the SAS token is suitable for the serivce

  • Azure::Storage::Common::Client: The common client used to initalize the service. This client can be initalized and used repeatedly.

  • Anonymous Table: only :storage_table_host, if it is to only access tables within a container

Additional notes:

  • Specified hosts can be set when use account name with access key or sas token

  • :default_endpoints_protocol can be set if the scheme is not specified in hosts

  • Storage emulator always use path style URI

  • :ca_file is independent.

When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/azure/storage/table/table_service.rb', line 154

def initialize(options = {}, &block)
  service_options = options.clone
  client_config = service_options[:client] ||= Azure::Storage::Common::Client::create(service_options, &block)
  @user_agent_prefix = service_options[:user_agent_prefix] if service_options[:user_agent_prefix]
  @api_version = service_options[:api_version] || Azure::Storage::Table::Default::STG_VERSION
  signer = service_options[:signer] || client_config.signer || Auth::SharedKey.new(client_config., client_config.storage_access_key)
  signer.api_ver = @api_version if signer.is_a? Azure::Storage::Common::Core::Auth::SharedAccessSignatureSigner
  super(signer, client_config., service_options, &block)
  @storage_service_host[:primary] = client.storage_table_host
  @storage_service_host[:secondary] = client.storage_table_host true
end

Class Method Details

.create(options = {}, &block) ⇒ Azure::Storage::Table::TableService

Public: Creates an instance of [Azure::Storage::Table::TableService]

Attributes

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :use_development_storage - TrueClass|FalseClass. Whether to use storage emulator.

  • :development_storage_proxy_uri - String. Used with :use_development_storage if emulator is hosted other than localhost.

  • :storage_account_name - String. The name of the storage account.

  • :storage_access_key - Base64 String. The access key of the storage account.

  • :storage_sas_token - String. The signed access signature for the storage account or one of its service.

  • :storage_table_host - String. Specified Table service endpoint or hostname

  • :storage_dns_suffix - String. The suffix of a regional Storage Service, to

  • :default_endpoints_protocol - String. http or https

  • :use_path_style_uri - String. Whether use path style URI for specified endpoints

  • :ca_file - String. File path of the CA file if having issue with SSL

  • :ssl_version - Symbol. The ssl version to be used, sample: :TLSv1_1, :TLSv1_2, for the details, see github.com/ruby/openssl/blob/master/lib/openssl/ssl.rb

  • :ssl_min_version - Symbol. The min ssl version supported, only supported in Ruby 2.5+

  • :ssl_max_version - Symbol. The max ssl version supported, only supported in Ruby 2.5+

  • :user_agent_prefix - String. The user agent prefix that can identify the application calls the library

The valid set of options include:

  • Storage Emulator: :use_development_storage required, :development_storage_proxy_uri optionally

  • Storage account name and key: :storage_account_name and :storage_access_key required, set :storage_dns_suffix necessarily

  • Storage account name and SAS token: :storage_account_name and :storage_sas_token required, set :storage_dns_suffix necessarily

  • Specified hosts and SAS token: At least one of the service host and SAS token. It’s up to user to ensure the SAS token is suitable for the serivce

  • Anonymous Table: only :storage_table_host, if it is to only access tables within a container

Additional notes:

  • Specified hosts can be set when use account name with access key or sas token

  • :default_endpoints_protocol can be set if the scheme is not specified in hosts

  • Storage emulator always use path style URI

  • :ca_file is independent.

When empty options are given, it will try to read settings from Environment Variables. Refer to [Azure::Storage::Common::ClientOptions.env_vars_mapping] for the mapping relationship



76
77
78
79
80
# File 'lib/azure/storage/table/table_service.rb', line 76

def create(options = {}, &block)
  service_options = { client: Azure::Storage::Common::Client::create(options, &block), api_version: Azure::Storage::Table::Default::STG_VERSION }
  service_options[:user_agent_prefix] = options[:user_agent_prefix] if options[:user_agent_prefix]
  Azure::Storage::Table::TableService.new(service_options, &block)
end

.create_development(proxy_uri = nil, &block) ⇒ Azure::Storage::Table::TableService

Public: Creates an instance of [Azure::Storage::Table::TableService] with Storage Emulator

Attributes

  • proxy_uri - String. Used with :use_development_storage if emulator is hosted other than localhost.



89
90
91
92
# File 'lib/azure/storage/table/table_service.rb', line 89

def create_development(proxy_uri = nil, &block)
  service_options = { client: Azure::Storage::Common::Client::create_development(proxy_uri, &block), api_version: Azure::Storage::Table::Default::STG_VERSION }
  Azure::Storage::Table::TableService.new(service_options, &block)
end

.create_from_connection_string(connection_string, &block) ⇒ Azure::Storage::Table::TableService

Public: Creates an instance of [Azure::Storage::Table::TableService] from Environment Variables

Attributes



109
110
111
112
# File 'lib/azure/storage/table/table_service.rb', line 109

def create_from_connection_string(connection_string, &block)
  service_options = { client: Azure::Storage::Common::Client::create_from_connection_string(connection_string, &block), api_version: Azure::Storage::Table::Default::STG_VERSION }
  Azure::Storage::Table::TableService.new(service_options, &block)
end

.create_from_env(&block) ⇒ Azure::Storage::Table::TableService

Public: Creates an instance of [Azure::Storage::Table::TableService] from Environment Variables



97
98
99
100
# File 'lib/azure/storage/table/table_service.rb', line 97

def create_from_env(&block)
  service_options = { client: Azure::Storage::Common::Client::create_from_env(&block), api_version: Azure::Storage::Table::Default::STG_VERSION }
  Azure::Storage::Table::TableService.new(service_options, &block)
end

Instance Method Details

#create_table(table_name, options = {}) ⇒ nil

Public: Creates new table in the storage account

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :accept - String. Specifies the accepted content-type of the response payload. Possible values are:

    :no_meta
    :min_meta
    :full_meta
    
  • :prefer - String. Specifies whether the response should include the inserted entity in the payload. Possible values are:

    Azure::Storage::Common::HeaderConstants::PREFER_CONTENT
    Azure::Storage::Common::HeaderConstants::PREFER_NO_CONTENT
    

See msdn.microsoft.com/en-us/library/azure/dd135729

Returns:

  • (nil)

    on success



191
192
193
194
195
196
197
198
199
200
# File 'lib/azure/storage/table/table_service.rb', line 191

def create_table(table_name, options = {})
  headers = {
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(options[:accept]),
  }
  headers[Azure::Storage::Common::HeaderConstants::PREFER] = options[:prefer] unless options[:prefer].nil?
  body = Serialization.hash_to_json("TableName" => table_name)

  call(:post, collection_uri(new_query(options)), body, headers, options)
  nil
end

#delete_entity(table_name, partition_key, row_key, options = {}) ⇒ Object

Public: Deletes an existing entity in the table.

Attributes

  • table_name - String. The table name

  • partition_key - String. The partition key

  • row_key - String. The row key

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :if_match - String. A matching condition which is required for update (optional, Default=“*”)

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/dd135727

Returns nil on success



603
604
605
606
607
608
609
# File 'lib/azure/storage/table/table_service.rb', line 603

def delete_entity(table_name, partition_key, row_key, options = {})
  if_match = "*"
  if_match = options[:if_match] if options[:if_match]

  call(:delete, entities_uri(table_name, partition_key, row_key, new_query(options)), nil, { "If-Match" => if_match }, options)
  nil
end

#delete_table(table_name, options = {}) ⇒ Object

Public: Deletes the specified table and any data it contains.

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/dd179387

Returns nil on success



219
220
221
222
# File 'lib/azure/storage/table/table_service.rb', line 219

def delete_table(table_name, options = {})
  call(:delete, table_uri(table_name, new_query(options)), nil, {}, options)
  nil
end

#entities_uri(table_name, partition_key = nil, row_key = nil, query = {}, options = {}) ⇒ Object



704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
# File 'lib/azure/storage/table/table_service.rb', line 704

def entities_uri(table_name, partition_key = nil, row_key = nil, query = {}, options = {})
  return table_name if table_name.kind_of? ::URI

  path = if partition_key && row_key
    "%s(PartitionKey='%s',RowKey='%s')" % [
      table_name.encode("UTF-8"), encodeODataUriValue(partition_key.encode("UTF-8")), encodeODataUriValue(row_key.encode("UTF-8"))
    ]
         else
           "%s()" % table_name.encode("UTF-8")
         end

  uri = generate_uri(path, query, options)
  qs = []
  if query
    query.each do | key, val |
      key = key.encode("UTF-8")
      val = val.encode("UTF-8")

      if key[0] == "$"
        qs.push "#{key}#{::URI.encode_www_form("" => val)}"
      else
        qs.push ::URI.encode_www_form(key => val)
      end
    end
  end
  uri.query = qs.join "&" if qs.length > 0
  uri
end

#execute_batch(batch, options = {}) ⇒ Object

Public: Executes a batch of operations.

Attributes

  • batch - The Azure::Storage::Table::Batch instance to execute.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    

See msdn.microsoft.com/en-us/library/azure/dd894038

Returns an array of results, one for each operation in the batch



630
631
632
633
634
635
636
637
638
639
640
641
642
643
# File 'lib/azure/storage/table/table_service.rb', line 630

def execute_batch(batch, options = {})
  headers = {
    Azure::Storage::Common::HeaderConstants::CONTENT_TYPE => "multipart/mixed; boundary=#{batch.batch_id}",
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(options[:accept]),
    "Accept-Charset" => "UTF-8"
  }

  body = batch.to_body(self)
  options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
  response = call(:post, generate_uri("/$batch", new_query(options), options), body, headers, options, true)
  batch.parse_response(response)
rescue => e
  raise_with_response(e, response)
end

#get_entity(table_name, partition_key, row_key, options = {}) ⇒ Object

Public: Gets an existing entity in the table.

Attributes

  • table_name - String. The table name

  • partition_key - String. The partition key

  • row_key - String. The row key

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    

Returns an Azure::Storage::Table::Entity instance on success



664
665
666
667
668
669
# File 'lib/azure/storage/table/table_service.rb', line 664

def get_entity(table_name, partition_key, row_key, options = {})
  options[:partition_key] = partition_key
  options[:row_key] = row_key
  results = query_entities(table_name, options)
  results.length > 0 ? results[0] : nil
end

#get_table(table_name, options = {}) ⇒ Object

Public: Gets the table.

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    

Returns the last updated time for the table



241
242
243
244
245
246
247
248
249
250
# File 'lib/azure/storage/table/table_service.rb', line 241

def get_table(table_name, options = {})
  headers = {
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(:full_meta),
  }
  options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
  response = call(:get, table_uri(table_name, new_query(options), options), nil, headers, options)
  Serialization.table_entries_from_json(response.body)
rescue => e
  raise_with_response(e, response)
end

#get_table_acl(table_name, options = {}) ⇒ Object

Public: Gets the access control list (ACL) for the table.

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    

See msdn.microsoft.com/en-us/library/azure/jj159100

Returns a list of Azure::Storage::Entity::SignedIdentifier instances



315
316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/azure/storage/table/table_service.rb', line 315

def get_table_acl(table_name, options = {})
  query = new_query(options)
  query[Azure::Storage::Common::QueryStringConstants::COMP] = Azure::Storage::Common::QueryStringConstants::ACL

  options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
  response = call(:get, generate_uri(table_name, query, options), nil, { "x-ms-version" => "2012-02-12" }, options)

  signed_identifiers = []
  signed_identifiers = Serialization.signed_identifiers_from_xml response.body unless response.body == nil || response.body.length < 1
  signed_identifiers
rescue => e
  raise_with_response(e, response)
end

#insert_entity(table_name, entity_values, options = {}) ⇒ Object

Public: Inserts new entity to the table.

Attributes

  • table_name - String. The table name

  • entity_values - Hash. A hash of the name/value pairs for the entity.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :accept - String. Specifies the accepted content-type of the response payload. Possible values are:

    :no_meta
    :min_meta
    :full_meta
    

See msdn.microsoft.com/en-us/library/azure/dd179433

Returns a Azure::Storage::Entity::Table::Entity



382
383
384
385
386
387
388
389
390
391
392
393
394
# File 'lib/azure/storage/table/table_service.rb', line 382

def insert_entity(table_name, entity_values, options = {})
  body = Serialization.hash_to_json(entity_values)
  #time = EdmType::to_edm_time(Time.now)
  headers = {
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(options[:accept])
  }
  response = call(:post, entities_uri(table_name, nil, nil, new_query(options)), body, headers, options)
  result = Serialization.entity_from_json(response.body)
  result.etag = response.headers[Azure::Storage::Common::HeaderConstants::ETAG] if result.etag.nil?
  result
rescue => e
  raise_with_response(e, response)
end

#insert_or_merge_entity(table_name, entity_values, options = {}) ⇒ Object

Public: Inserts or updates an existing entity within a table by merging new property values into the entity.

Attributes

  • table_name - String. The table name

  • entity_values - Hash. A hash of the name/value pairs for the entity.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/hh452241

Returns the ETag for the entity on success



555
556
557
558
# File 'lib/azure/storage/table/table_service.rb', line 555

def insert_or_merge_entity(table_name, entity_values, options = {})
  options[:create_if_not_exists] = true
  merge_entity(table_name, entity_values, options)
end

#insert_or_replace_entity(table_name, entity_values, options = {}) ⇒ Object

Public: Inserts or updates a new entity into a table.

Attributes

  • table_name - String. The table name

  • entity_values - Hash. A hash of the name/value pairs for the entity.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/hh452242

Returns the ETag for the entity on success



578
579
580
581
# File 'lib/azure/storage/table/table_service.rb', line 578

def insert_or_replace_entity(table_name, entity_values, options = {})
  options[:create_if_not_exists] = true
  update_entity(table_name, entity_values, options)
end

#merge_entity(table_name, entity_values, options = {}) ⇒ Object

Public: Updates an existing entity by updating the entity’s properties. This operation does not replace the existing entity, as the update_entity operation does.

Attributes

  • table_name - String. The table name

  • entity_values - Hash. A hash of the name/value pairs for the entity.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :if_match - String. A matching condition which is required for update (optional, Default=“*”)

  • :create_if_not_exists - Boolean. If true, and partition_key and row_key do not reference and existing entity,

    that entity will be inserted. If false, the operation will fail. (optional, Default=false)
    
  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/dd179392

Returns the ETag for the entity on success



518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
# File 'lib/azure/storage/table/table_service.rb', line 518

def merge_entity(table_name, entity_values, options = {})
  if_match = "*"
  if_match = options[:if_match] if options[:if_match]

  uri = entities_uri(table_name,
    entity_values[:PartitionKey] || entity_values["PartitionKey"],
    entity_values[:RowKey] || entity_values["RowKey"], new_query(options))

  headers = { "X-HTTP-Method" => "MERGE" }
  headers["If-Match"] = if_match || "*" unless options[:create_if_not_exists]

  body = Serialization.hash_to_json(entity_values)

  response = call(:post, uri, body, headers, options)
  response.headers["etag"]
rescue => e
  raise_with_response(e, response)
end

#query_entities(table_name, options = {}) ⇒ Object

Public: Queries entities for the given table name

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :partition_key - String. The partition key (optional)

  • :row_key - String. The row key (optional)

  • :select - Array. An array of property names to return (optional)

  • :filter - String. A filter expression (optional)

  • :top - Integer. A limit for the number of results returned (optional)

  • :continuation_token - Hash. The continuation token.

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    
  • :accept - String. Specifies the accepted content-type of the response payload. Possible values are:

    :no_meta
    :min_meta
    :full_meta
    

See msdn.microsoft.com/en-us/library/azure/dd179421

Returns an array with an extra continuation_token property on success



425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
# File 'lib/azure/storage/table/table_service.rb', line 425

def query_entities(table_name, options = {})
  query = new_query(options)
  query[Azure::Storage::Common::QueryStringConstants::SELECT] = options[:select].join "," if options[:select]
  query[Azure::Storage::Common::QueryStringConstants::FILTER] = options[:filter] if options[:filter]
  query[Azure::Storage::Common::QueryStringConstants::TOP] = options[:top].to_s if options[:top] unless options[:partition_key] && options[:row_key]
  query[Azure::Storage::Common::QueryStringConstants::NEXT_PARTITION_KEY] = options[:continuation_token][:next_partition_key] if options[:continuation_token] && options[:continuation_token][:next_partition_key]
  query[Azure::Storage::Common::QueryStringConstants::NEXT_ROW_KEY] = options[:continuation_token][:next_row_key] if options[:continuation_token] && options[:continuation_token][:next_row_key]

  options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
  uri = entities_uri(table_name, options[:partition_key], options[:row_key], query, options)

  headers = {
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(options[:accept])
  }

  response = call(:get, uri, nil, headers, options)

  entities = Azure::Storage::Common::Service::EnumerationResults.new.push(*Serialization.entities_from_json(response.body))

  entities.continuation_token = nil
  entities.continuation_token = {
    next_partition_key: response.headers[TableConstants::CONTINUATION_NEXT_PARTITION_KEY],
    next_row_key: response.headers[TableConstants::CONTINUATION_NEXT_ROW_KEY]
  } if response.headers[TableConstants::CONTINUATION_NEXT_PARTITION_KEY]

  entities
rescue => e
  raise_with_response(e, response)
end

#query_tables(options = {}) ⇒ Object

Public: Gets a list of all tables on the account.

Attributes

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :next_table_token - String. A token used to enumerate the next page of results, when the list of tables is

    larger than a single operation can return at once. (optional)
    
  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    
  • :location_mode - LocationMode. Specifies the location mode used to decide

    which location the request should be sent to.
    
  • :accept - String. Specifies the accepted content-type of the response payload. Possible values are:

    :no_meta
    :min_meta
    :full_meta
    

See msdn.microsoft.com/en-us/library/azure/dd179405

Returns an array with an extra continuation_token property on success



276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
# File 'lib/azure/storage/table/table_service.rb', line 276

def query_tables(options = {})
  query = new_query(options)
  query[TableConstants::NEXT_TABLE_NAME] = options[:next_table_token] if options[:next_table_token]

  options[:request_location_mode] = Azure::Storage::Common::RequestLocationMode::PRIMARY_OR_SECONDARY
  uri = collection_uri(query, options)

  headers = {
    Azure::Storage::Common::HeaderConstants::ACCEPT => Serialization.get_accept_string(options[:accept]),
  }

  response = call(:get, uri, nil, headers, options)
  entries = Serialization.table_entries_from_json(response.body) || []
  values = Azure::Storage::Common::Service::EnumerationResults.new(entries)
  values.continuation_token = response.headers[TableConstants::CONTINUATION_NEXT_TABLE_NAME]
  values
rescue => e
  raise_with_response(e, response)
end

#set_table_acl(table_name, options = {}) ⇒ Object

Public: Sets the access control list (ACL) for the table.

Attributes

  • table_name - String. The table name

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :signed_identifiers - Array. A list of Azure::Storage::Entity::SignedIdentifier instances

  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/jj159102

Returns nil on success



347
348
349
350
351
352
353
354
355
356
357
# File 'lib/azure/storage/table/table_service.rb', line 347

def set_table_acl(table_name, options = {})
  query = new_query(options)
  query[Azure::Storage::Common::QueryStringConstants::COMP] = Azure::Storage::Common::QueryStringConstants::ACL

  uri = generate_uri(table_name, query)
  body = nil
  body = Serialization.signed_identifiers_to_xml options[:signed_identifiers] if options[:signed_identifiers] && options[:signed_identifiers].length > 0

  call(:put, uri, body, { "x-ms-version" => "2012-02-12" }, options)
  nil
end

#table_uri(name, query = {}, options = {}) ⇒ Object



687
688
689
690
# File 'lib/azure/storage/table/table_service.rb', line 687

def table_uri(name, query = {}, options = {})
  return name if name.kind_of? ::URI
  generate_uri("Tables('#{name}')", query, options)
end

#update_entity(table_name, entity_values, options = {}) ⇒ Object

Public: Updates an existing entity in a table. The Update Entity operation replaces the entire entity and can be used to remove properties.

Attributes

  • table_name - String. The table name

  • entity_values - Hash. A hash of the name/value pairs for the entity.

  • options - Hash. Optional parameters.

Options

Accepted key/value pairs in options parameter are:

  • :if_match - String. A matching condition which is required for update (optional, Default=“*”)

  • :create_if_not_exists - Boolean. If true, and partition_key and row_key do not reference and existing entity,

    that entity will be inserted. If false, the operation will fail. (optional, Default=false)
    
  • :timeout - Integer. A timeout in seconds.

  • :request_id - String. Provides a client-generated, opaque value with a 1 KB character limit that is recorded

    in the analytics logs when storage analytics logging is enabled.
    

See msdn.microsoft.com/en-us/library/azure/dd179427

Returns the ETag for the entity on success



477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
# File 'lib/azure/storage/table/table_service.rb', line 477

def update_entity(table_name, entity_values, options = {})
  if_match = "*"
  if_match = options[:if_match] if options[:if_match]

  uri = entities_uri(table_name,
    entity_values[:PartitionKey] || entity_values["PartitionKey"],
    entity_values[:RowKey] || entity_values["RowKey"], new_query(options))

  headers = {}
  headers["If-Match"] = if_match || "*" unless options[:create_if_not_exists]

  body = Serialization.hash_to_json(entity_values)

  response = call(:put, uri, body, headers, options)
  response.headers["etag"]
rescue => e
  raise_with_response(e, response)
end