Class: Heathrow::Sources::Reddit

Inherits:
Object
  • Object
show all
Defined in:
lib/heathrow/sources/reddit.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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_timeObject (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

#sourceObject (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

Returns:

  • (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_messagesObject



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 fetch_messages
  messages = []
  
  begin
    # Get access token if needed
    ensure_access_token
    
    # Determine what to fetch based on mode
    mode = @config['mode'] || 'subreddit'
    
    case mode
    when 'subreddit'
      messages = fetch_subreddit_posts
    when 'messages'
      messages = fetch_private_messages
    else
      puts "Unknown Reddit mode: #{mode}" if ENV['DEBUG']
    end
    
  rescue => e
    puts "Reddit fetch error: #{e.message}" if ENV['DEBUG']
    puts e.backtrace.join("\n") if ENV['DEBUG']
  end
  
  messages
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 send_message(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
      send_private_message(to, subject, body)
    end
  rescue => e
    { success: false, message: "Failed to send: #{e.message}" }
  end
end

#test_connectionObject



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.message}" }
  end
end