Class: Smash::CloudPowers::Synapse::Queue::Board
- Inherits:
-
Object
- Object
- Smash::CloudPowers::Synapse::Queue::Board
- Includes:
- AwsResources, Helper, Smash::CloudPowers::Synapse::Queue, Zenv
- Defined in:
- lib/cloud_powers/synapse/queue/board.rb
Overview
The Queue::Board class helps wrap up information and functionality of a Queue on SQS. It is basically just an abstraction to make using SQS simpler
Instance Attribute Summary collapse
-
#address ⇒ Object
Gives the Queue address (URL).
-
#name ⇒ Object
The name the Aws::SQS::Queue uses.
-
#sqs ⇒ Object
An Aws::SQS::Client.
Class Method Summary collapse
-
.build(name, this_sqs = nil) ⇒ Object
Builds a Queue::Board object and returns it.
-
.create!(name, this_sqs = nil) ⇒ Object
Builds then Creates the Object and makes the API call to SQS to create the queue.
Instance Method Summary collapse
-
#best_guess_address ⇒ Object
Gives a best guess at the URL that points toward this Board’s Queue.
-
#create_queue! ⇒ Object
Creates an actual Queue in SQS using the standard format for this queue name (camel case).
-
#destroy! ⇒ Object
Deletes an actual Queue from SQS.
-
#exists? ⇒ Boolean
Predicate method to query SQS for the queue.
-
#i_var ⇒ Object
Gives back a string representation of the instance variable for this board.
-
#initialize(name, this_sqs = sqs) ⇒ Board
constructor
Creates a Board object.
-
#message_count ⇒ Object
Gets the approximate message count for a Queue using the ‘ApproximateMessageCount’ attribute.
-
#pluck_message ⇒ Object
Retrieves a message from the Queue and deletes it from the Queue in SQS.
-
#poller ⇒ Object
Gets a QueuePoller for the Queue attached to this Board instance.
-
#save! ⇒ Object
This method creates the queue in SQS for the given Board instance It can be coupled with the #build() method in order to use a queue without making the call to create it on AWS.
-
#send_message(message) ⇒ Object
Sends the given message to the queue.
Methods included from Zenv
#env_vars, #file_tree_search, #i_vars, #project_root, #project_root=, #system_vars, #zfind
Methods included from Helper
#attr_map!, #available_resources, #called_from, #create_logger, #deep_modify_keys_with, #format_error_message, #log_file, #logger, #modify_keys_with, #smart_retry, #task_exist?, #task_home, #task_path, #task_require_path, #to_camel, #to_hyph, #to_i_var, #to_pascal, #to_ruby_file_name, #to_snake, #update_message_body, #valid_json?, #valid_url?
Methods included from Smash::CloudPowers::Synapse::Queue
#board_name, #build_queue, #delete_queue_message, #get_queue_message_count, #pluck_queue_message, #poll, #queue_exists?, #queue_poller, #queue_search, #send_queue_message
Methods included from AwsResources
#ec2, #image, #kinesis, #region, #s3, #sns
Methods included from Auth
Constructor Details
#initialize(name, this_sqs = sqs) ⇒ Board
Creates a Board object. The #new() method is wrapped in #build() and #create!() but isn’t private so #new() can be used instead of build. The Board doesn’t create Queue(s) or any other API calls until it is instructed to.
Parameters
-
name
String- the name of the board can be used to find its arn/url etc
Returns Queue::Board
30 31 32 33 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 30 def initialize(name, this_sqs = sqs) @sqs = this_sqs @name = name end |
Instance Attribute Details
#address ⇒ Object
Gives the Queue address (URL). First the environment is searched, using Zenv and if nothing is found, the best guess attempt at the correct address is used.
Returns
* queue address <String>
52 53 54 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 52 def address zfind(@name) || best_guess_address end |
#name ⇒ Object
The name the Aws::SQS::Queue uses
16 17 18 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 16 def name @name end |
#sqs ⇒ Object
An Aws::SQS::Client. See #Smash::CloudPowers::AwsResources.sqs()
18 19 20 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 18 def sqs @sqs end |
Class Method Details
.build(name, this_sqs = nil) ⇒ Object
Builds a Queue::Board object and returns it. No API calls are sent using this method. This is handy if you need to use a Queue but you don’t want to create any resources in AWS.
Parameters name String
Returns Queue::Board
Example
exp_board = Board.build('exampleBoard')
puts exp_board.best_guess_address
# => 'https://sqs.us-west-2.amaz.....'
78 79 80 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 78 def self.build(name, this_sqs = nil) new(name, this_sqs) end |
.create!(name, this_sqs = nil) ⇒ Object
Builds then Creates the Object and makes the API call to SQS to create the queue
Parameters
-
name <String>
Returns Queue::Board with an actual Queue in SQS
Example
exp_board = Board.create!('exampleBoard')
queue_search(exp_board.name)
# => ['https://sqs.us-west-2.amazonaws.com/81234567890/exampleBoard']
94 95 96 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 94 def self.create!(name, this_sqs = nil) build(name, this_sqs).create_queue! end |
Instance Method Details
#best_guess_address ⇒ Object
Gives a best guess at the URL that points toward this Board’s Queue. It uses a couple params to build a standard URL for SQS. The only problem with using this last resort is you may need to use a Queue from a different region, account or name but it can be a handy catch-all for the URLs for most cases.
Returns String
63 64 65 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 63 def best_guess_address "https://sqs.#{zfind(:aws_region)}.amazonaws.com/#{zfind(:account_number)}/#{@name}" end |
#create_queue! ⇒ Object
Creates an actual Queue in SQS using the standard format for this queue name (camel case)
Returns Queue::Board
102 103 104 105 106 107 108 109 110 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 102 def create_queue! begin sqs.create_queue(queue_name: to_camel(@name)) self rescue Aws::SQS::Errors::QueueDeletedRecently sleep 5 retry end end |
#destroy! ⇒ Object
Deletes an actual Queue from SQS
113 114 115 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 113 def destroy! sqs.delete_queue(queue_url: address) end |
#exists? ⇒ Boolean
126 127 128 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 126 def exists? queue_exists?(@name) end |
#i_var ⇒ Object
43 44 45 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 43 def i_var "@#{@name}" end |
#message_count ⇒ Object
Gets the approximate message count for a Queue using the ‘ApproximateMessageCount’ attribute
Returns Integer
134 135 136 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 134 def (address) end |
#pluck_message ⇒ Object
Retrieves a message from the Queue and deletes it from the Queue in SQS
152 153 154 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 152 def (@name) end |
#poller ⇒ Object
Gets a QueuePoller for the Queue attached to this Board instance.
Returns Aws::SQS::QueuePoller
Notes
-
Provide an existing SQS Client if one exists. This is used to sort out development
production work.
146 147 148 149 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 146 def poller args = @sqs.nil? ? address : [address, { client: sqs }] @poller ||= Aws::SQS::QueuePoller.new(*args) end |
#save! ⇒ Object
167 168 169 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 167 def save! create_queue! end |
#send_message(message) ⇒ Object
Sends the given message to the queue
Parameters
-
message - used as JSON or converted into it
175 176 177 178 179 |
# File 'lib/cloud_powers/synapse/queue/board.rb', line 175 def () ( address, (valid_json?() ? : .to_json), sqs ) end |