Class: BlueFactory::OutputGenerator
- Inherits:
-
Object
- Object
- BlueFactory::OutputGenerator
- Defined in:
- lib/blue_factory/output_generator.rb
Constant Summary collapse
- AT_URI_REGEXP =
%r(^at://did:(plc:[a-z0-9]+|web:[a-z0-9\-]+(\.[a-z0-9\-]+)+)/app\.bsky\.feed\.post/[a-z0-9]+$)
Instance Method Summary collapse
- #generate(response) ⇒ Object
- #process_post_element(object) ⇒ Object
- #process_post_hash(object) ⇒ Object
- #process_post_reason(reason) ⇒ Object
- #validate_uri(uri) ⇒ Object
Instance Method Details
#generate(response) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/blue_factory/output_generator.rb', line 7 def generate(response) output = {} raise InvalidResponseError, ":posts key is missing" unless response.has_key?(:posts) raise InvalidResponseError, ":posts should be an array" unless response[:posts].is_a?(Array) output[:feed] = response[:posts].map { |x| process_post_element(x) } if cursor = response[:cursor] output[:cursor] = cursor.to_s end if req_id = response[:req_id] output[:reqId] = req_id.to_s end output end |
#process_post_element(object) ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/blue_factory/output_generator.rb', line 26 def process_post_element(object) if object.is_a?(String) validate_uri(object) { post: object } elsif object.is_a?(Hash) process_post_hash(object) else raise InvalidResponseError, "Invalid post entry, expected string or hash: #{object.inspect}" end end |
#process_post_hash(object) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/blue_factory/output_generator.rb', line 37 def process_post_hash(object) post = {} if object[:post] validate_uri(object[:post]) post[:post] = object[:post] else raise InvalidResponseError, "Post hash is missing a :post key" end if object[:reason] post[:reason] = process_post_reason(object[:reason]) end if object[:context] post[:feedContext] = object[:context].to_s end post end |
#process_post_reason(reason) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/blue_factory/output_generator.rb', line 58 def process_post_reason(reason) raise InvalidResponseError, "Invalid post reason: #{reason.inspect}" unless reason.is_a?(Hash) if reason[:repost] { "$type" => "app.bsky.feed.defs#skeletonReasonRepost", "repost" => reason[:repost] } elsif reason[:pin] { "$type" => "app.bsky.feed.defs#skeletonReasonPin" } else raise InvalidResponseError, "Invalid post reason: #{reason.inspect}" end end |
#validate_uri(uri) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/blue_factory/output_generator.rb', line 75 def validate_uri(uri) if !uri.is_a?(String) raise InvalidResponseError, "Post URI should be a string: #{uri.inspect}" elsif uri !~ AT_URI_REGEXP raise InvalidResponseError, "Invalid post URI: #{uri.inspect}" end end |