neufelry-twitter-sms 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/VERSION.yml +2 -2
  2. data/lib/twitter-sms.rb +55 -17
  3. metadata +1 -1
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 3
3
- :patch: 2
2
+ :minor: 4
3
+ :patch: 0
4
4
  :major: 0
data/lib/twitter-sms.rb CHANGED
@@ -4,6 +4,7 @@ require 'tlsmail'
4
4
  require 'optparse'
5
5
  require 'cgi'
6
6
  require 'net/pop'
7
+ require 'rmail'
7
8
 
8
9
  if RUBY_VERSION < "1.9"
9
10
  raise "Version too low. Please get Ruby 1.9"
@@ -48,12 +49,6 @@ class TwitterSms
48
49
  now = Time.now
49
50
  tweets = twitter.timeline(:friends, :since => @last_check)
50
51
  @last_check = now
51
-
52
- # Block own tweets if specified via settings
53
- tweets.reject! {|t| t.user.screen_name == @user['name']} unless @config['own_tweets']
54
- # Don't send messages from users under no_follow
55
- tweets.reject! {|t| @config['no_follow'].member?(t.user.screen_name) }
56
- tweets.reverse # reverse-chronological
57
52
  else
58
53
  putd "Your account has run out of API calls; call not made."
59
54
  end
@@ -62,6 +57,14 @@ class TwitterSms
62
57
  end
63
58
  end
64
59
 
60
+ def reduce_tweets(tweets)
61
+ # Block own tweets if specified via settings
62
+ tweets.reject! {|t| t.user.screen_name == @user['name']} unless @config['own_tweets']
63
+ # Don't send messages from users under no_follow
64
+ tweets.reject! {|t| @config['no_follow'].member?(t.user.screen_name) }
65
+ tweets.reverse # reverse-chronological
66
+ end
67
+
65
68
  # Email via Gmail SMTP any tweets to the desired cell phone
66
69
  def send(tweets)
67
70
  putd "Sending received tweets..."
@@ -83,6 +86,15 @@ class TwitterSms
83
86
  end
84
87
  end
85
88
 
89
+ def receive_messages
90
+ Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) # maybe verify...
91
+ Net::POP3.start('pop.gmail.com',995, @bot['email'], @bot['password']) do |pop|
92
+ pop.each_mail do |mail|
93
+ process_pop_message(mail.pop)
94
+ end
95
+ end
96
+ end
97
+
86
98
  private
87
99
 
88
100
  # Put Debug (prepend time) if debug printouts turned on
@@ -90,17 +102,39 @@ class TwitterSms
90
102
  puts "#{Time.now.strftime("(%b %d - %H:%M:%S)")} #{message}" if @config['debug']
91
103
  end
92
104
 
93
- def collect_pop_messages
94
- Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE) # maybe verify...
95
- Net::POP3.start('pop.gmail.com',995, @bot['email'], @bot['password']) do |pop|
96
- pop.each_mail do |mail|
97
- process_pop_message(mail)
105
+ # Verify syntax for dissecting pop message
106
+ def process_pop_message(msg)
107
+ TwitterSms::space_stripper!(msg) # Remove sometimes broken extra spaces
108
+ r_msg = RMail::Parser.read(msg)
109
+
110
+ #must be extracted before we reduce to plaintext
111
+ from = r_msg.header.from[0].address
112
+
113
+ plain = reduce_to_plaintext(r_msg)
114
+ body = plain.body
115
+
116
+ if from == @user['phone'] # must come from phone
117
+ # Extract this log later
118
+ if body =~ /^off\w*/i
119
+ @config['active'] = false
120
+ elsif body =~ /^on\w*/i
121
+ @config['active'] = true
122
+ else
123
+ body.scan(/ignore (\w+)/) {|_| @config['no_follow'] << $1 }
124
+ body.scan(/follow (\w+)/) {|_| @config['no_follow'] -= [$1] } # also set follow
98
125
  end
99
126
  end
100
127
  end
101
128
 
102
- def process_pop_message(msg)
103
- p mail.inspect
129
+ # Sometimes Rmail messages are multipart, we only want plaintext
130
+ def reduce_to_plaintext(r_msg)
131
+ if r_msg.multipart?
132
+ r_msg = r_msg.body.find do |part|
133
+ part.header.content_type == "text/plain"
134
+ end
135
+ else
136
+ r_msg
137
+ end
104
138
  end
105
139
 
106
140
  # Parse and store a config file (either as an initial load or as
@@ -172,6 +206,7 @@ class TwitterSms
172
206
  opts.parse!(args)
173
207
  end
174
208
 
209
+ # Config is stale if a newer version exists in the filesystem than last checked
175
210
  def config_stale?
176
211
  return File.mtime(@config_file['name']) > @config_file['modified_at']
177
212
  end
@@ -185,9 +220,12 @@ class TwitterSms
185
220
  "#{tweet.user.screen_name}: #{CGI.escapeHTML(tweet.text)}"
186
221
  end
187
222
 
188
- end
223
+ def self.filename(path)
224
+ path.split('/')[-1]
225
+ end
189
226
 
190
- def filename(path)
191
- path.split('/')[-1]
227
+ # RMail doesn't like parsing body properly if there is a mistaken ' ' between body and header
228
+ def self.space_stripper!(msg)
229
+ msg.gsub!(/^\s+$/,'')
230
+ end
192
231
  end
193
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neufelry-twitter-sms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Neufeld