Class: Heathrow::Sources::Reddit
- Inherits:
-
Object
- Object
- Heathrow::Sources::Reddit
- Defined in:
- lib/heathrow/sources/reddit.rb
Instance Attribute Summary collapse
-
#last_fetch_time ⇒ Object
readonly
Returns the value of attribute last_fetch_time.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
Instance Method Summary collapse
- #can_reply? ⇒ Boolean
- #fetch_messages ⇒ Object
-
#initialize(source) ⇒ Reddit
constructor
A new instance of Reddit.
- #send_message(to, subject, body, in_reply_to = nil) ⇒ Object
- #test_connection ⇒ Object
Constructor Details
#initialize(source) ⇒ Reddit
Returns a new instance of Reddit.
15 16 17 18 19 20 21 |
# File 'lib/heathrow/sources/reddit.rb', line 15 def initialize(source) @source = source @config = source.config.is_a?(String) ? JSON.parse(source.config) : source.config @last_fetch_time = Time.now @access_token = nil @token_expires_at = nil end |
Instance Attribute Details
#last_fetch_time ⇒ Object (readonly)
Returns the value of attribute last_fetch_time.
13 14 15 |
# File 'lib/heathrow/sources/reddit.rb', line 13 def last_fetch_time @last_fetch_time end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
13 14 15 |
# File 'lib/heathrow/sources/reddit.rb', line 13 def source @source end |
Instance Method Details
#can_reply? ⇒ Boolean
71 72 73 74 |
# File 'lib/heathrow/sources/reddit.rb', line 71 def can_reply? # Can reply to PMs if we have username/password auth @config['username'] && @config['password'] end |
#fetch_messages ⇒ Object
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 |
# File 'lib/heathrow/sources/reddit.rb', line 23 def = [] begin # Get access token if needed ensure_access_token # Determine what to fetch based on mode mode = @config['mode'] || 'subreddit' case mode when 'subreddit' = fetch_subreddit_posts when 'messages' = else puts "Unknown Reddit mode: #{mode}" if ENV['DEBUG'] end rescue => e puts "Reddit fetch error: #{e.}" if ENV['DEBUG'] puts e.backtrace.join("\n") if ENV['DEBUG'] end end |
#send_message(to, subject, body, in_reply_to = nil) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/heathrow/sources/reddit.rb', line 76 def (to, subject, body, in_reply_to = nil) unless can_reply? return { success: false, message: "Reddit requires username/password authentication to send messages" } end begin ensure_access_token if in_reply_to # Reply to an existing message or comment send_reply(in_reply_to, body) else # Send a new private message (to, subject, body) end rescue => e { success: false, message: "Failed to send: #{e.}" } end end |
#test_connection ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/heathrow/sources/reddit.rb', line 50 def test_connection begin ensure_access_token # Test basic API access data = make_api_request('/api/v1/me') if data if data['name'] { success: true, message: "Connected as u/#{data['name']}" } else { success: true, message: "Connected with read-only access" } end else { success: false, message: "Failed to connect to Reddit API" } end rescue => e { success: false, message: "Connection test failed: #{e.}" } end end |