twat 0.5.4 → 0.6.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.
- data/lib/twat.rb +4 -2
- data/lib/twat/actions.rb +6 -6
- data/lib/twat/actions/follow.rb +40 -20
- data/lib/twat/actions/follow_user.rb +2 -2
- data/twat.gemspec +1 -0
- metadata +18 -7
    
        data/lib/twat.rb
    CHANGED
    
    | @@ -6,6 +6,8 @@ require 'yaml' | |
| 6 6 | 
             
            require 'optparse'
         | 
| 7 7 | 
             
            require 'oauth'
         | 
| 8 8 |  | 
| 9 | 
            +
            require 'readline-ng'
         | 
| 10 | 
            +
             | 
| 9 11 | 
             
            %w[config exceptions argparse actions migration options endpoint].each do |filename|
         | 
| 10 12 | 
             
              require "twat/#{filename}"
         | 
| 11 13 | 
             
            end
         | 
| @@ -48,8 +50,8 @@ end | |
| 48 50 |  | 
| 49 51 | 
             
            module Twat
         | 
| 50 52 | 
             
              VERSION_MAJOR = 0
         | 
| 51 | 
            -
              VERSION_MINOR =  | 
| 52 | 
            -
              VERSION_PATCH =  | 
| 53 | 
            +
              VERSION_MINOR = 6
         | 
| 54 | 
            +
              VERSION_PATCH = 0
         | 
| 53 55 |  | 
| 54 56 | 
             
              VERSION = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_PATCH}"
         | 
| 55 57 | 
             
              class Twat
         | 
    
        data/lib/twat/actions.rb
    CHANGED
    
    | @@ -22,17 +22,17 @@ module Twat | |
| 22 22 | 
             
                  idx = pad(idx) if idx
         | 
| 23 23 | 
             
                  text = deentitize(twt.text)
         | 
| 24 24 | 
             
                  if config.colors?
         | 
| 25 | 
            -
                     | 
| 25 | 
            +
                    buf = idx ? "#{idx.cyan}:" : ""
         | 
| 26 26 | 
             
                    if twt.user.screen_name == config.account_name.to_s
         | 
| 27 | 
            -
                       | 
| 27 | 
            +
                      buf += "#{twt.user.screen_name.bold.blue}: #{text}"
         | 
| 28 28 | 
             
                    elsif text.mentions?(config.account_name)
         | 
| 29 | 
            -
                       | 
| 29 | 
            +
                      buf += "#{twt.user.screen_name.bold.red}: #{text}"
         | 
| 30 30 | 
             
                    else
         | 
| 31 | 
            -
                       | 
| 31 | 
            +
                      buf += "#{twt.user.screen_name.bold.cyan}: #{text}"
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 | 
             
                  else
         | 
| 34 | 
            -
                     | 
| 35 | 
            -
                     | 
| 34 | 
            +
                    buf = idx ? "#{idx}: " : ""
         | 
| 35 | 
            +
                    buf += "#{twt.user.screen_name}: #{text}"
         | 
| 36 36 | 
             
                  end
         | 
| 37 37 | 
             
                end
         | 
| 38 38 |  | 
    
        data/lib/twat/actions/follow.rb
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            module Twat
         | 
| 2 | 
            +
              POLLING_RESOLUTION = 20
         | 
| 2 3 |  | 
| 3 4 | 
             
              class NoSuchTweet < Exception; end
         | 
| 4 5 |  | 
| @@ -42,10 +43,24 @@ module Twat | |
| 42 43 |  | 
| 43 44 | 
             
              class Actions
         | 
| 44 45 |  | 
| 46 | 
            +
                def initialize
         | 
| 47 | 
            +
                  @reader = ReadlineNG::Reader.new
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def @reader.filter
         | 
| 50 | 
            +
                    case @buf.length
         | 
| 51 | 
            +
                    when 140
         | 
| 52 | 
            +
                      _print "[31m"
         | 
| 53 | 
            +
                    when 139
         | 
| 54 | 
            +
                      _print "[39m"
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 45 59 | 
             
                def follow
         | 
| 46 | 
            -
                  #  | 
| 47 | 
            -
                   | 
| 48 | 
            -
                   | 
| 60 | 
            +
                  # Probably belongs to readline-ng
         | 
| 61 | 
            +
                  $stty_saved = `stty -g`
         | 
| 62 | 
            +
                  `stty -echo raw`
         | 
| 63 | 
            +
             | 
| 49 64 | 
             
                  twitter_auth
         | 
| 50 65 | 
             
                  failcount = 0
         | 
| 51 66 | 
             
                  @tweetstack = TweetStack.new
         | 
| @@ -55,30 +70,29 @@ module Twat | |
| 55 70 | 
             
                  while true do
         | 
| 56 71 | 
             
                    begin
         | 
| 57 72 | 
             
                      last_id = process_followed(tweets) if tweets.any?
         | 
| 58 | 
            -
                      config.polling_interval.times do
         | 
| 73 | 
            +
                      (config.polling_interval * POLLING_RESOLUTION).times do
         | 
| 59 74 | 
             
                        begin
         | 
| 60 | 
            -
                           | 
| 61 | 
            -
             | 
| 62 | 
            -
                          nil
         | 
| 75 | 
            +
                          @reader.tick
         | 
| 76 | 
            +
                          @reader.each_line { |inp| handle_input(inp) }
         | 
| 63 77 | 
             
                        rescue TweetTooLong
         | 
| 64 78 | 
             
                          puts "Too long".red
         | 
| 65 79 | 
             
                        end
         | 
| 66 | 
            -
                        sleep 1
         | 
| 80 | 
            +
                        sleep 1.0/POLLING_RESOLUTION
         | 
| 67 81 | 
             
                      end
         | 
| 68 82 | 
             
                      tweets = Twitter.home_timeline(:since_id => last_id)
         | 
| 69 83 | 
             
                      failcount = 0
         | 
| 70 84 | 
             
                    rescue Interrupt
         | 
| 71 85 | 
             
                      break
         | 
| 72 | 
            -
                    rescue Twitter::ServiceUnavailable
         | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 86 | 
            +
                    # rescue Twitter::ServiceUnavailable
         | 
| 87 | 
            +
                    #   if failcount > 2
         | 
| 88 | 
            +
                    #     puts "3 consecutive failures, giving up"
         | 
| 89 | 
            +
                    #   else
         | 
| 90 | 
            +
                    #     sleeptime = 60 * (failcount + 1)
         | 
| 91 | 
            +
                    #     print "(__-){".red
         | 
| 92 | 
            +
                    #     puts ": the fail whale has been rolled out, sleeping for #{sleeptime} seconds"
         | 
| 93 | 
            +
                    #     sleep sleeptime
         | 
| 94 | 
            +
                    #     failcount += 1
         | 
| 95 | 
            +
                    #   end
         | 
| 82 96 | 
             
                    rescue Errno::ECONNRESET
         | 
| 83 97 | 
             
                    rescue Errno::ETIMEDOUT
         | 
| 84 98 | 
             
                      if failcount > 2
         | 
| @@ -88,6 +102,8 @@ module Twat | |
| 88 102 | 
             
                      end
         | 
| 89 103 | 
             
                    end
         | 
| 90 104 | 
             
                  end
         | 
| 105 | 
            +
                ensure
         | 
| 106 | 
            +
                  `stty #{$stty_saved}`
         | 
| 91 107 | 
             
                end
         | 
| 92 108 |  | 
| 93 109 | 
             
                private
         | 
| @@ -102,7 +118,7 @@ module Twat | |
| 102 118 | 
             
                  tweets.reverse.each do |tweet|
         | 
| 103 119 | 
             
                    id = @tweetstack << tweet
         | 
| 104 120 | 
             
                    beep if config.beep? && tweet.text.mentions?(config.account_name)
         | 
| 105 | 
            -
                    format(tweet, @tweetstack.last)
         | 
| 121 | 
            +
                    @reader.puts_above format(tweet, @tweetstack.last)
         | 
| 106 122 | 
             
                    last_id = tweet.id
         | 
| 107 123 | 
             
                  end
         | 
| 108 124 |  | 
| @@ -115,8 +131,12 @@ module Twat | |
| 115 131 | 
             
                    begin
         | 
| 116 132 | 
             
                      retweet($1.to_i)
         | 
| 117 133 | 
             
                    rescue NoSuchTweet
         | 
| 118 | 
            -
                       | 
| 134 | 
            +
                      print "No such tweet\n".red
         | 
| 119 135 | 
             
                    end
         | 
| 136 | 
            +
                  when /follow (.*)/
         | 
| 137 | 
            +
                    follow_user($1)
         | 
| 138 | 
            +
                  when /test/
         | 
| 139 | 
            +
                    @reader.puts_above "Testline!"
         | 
| 120 140 | 
             
                  else
         | 
| 121 141 | 
             
                    # Assume they want to tweet something
         | 
| 122 142 | 
             
                    raise TweetTooLong if inp.length > 140
         | 
    
        data/twat.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: twat
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-02-11 00:00:00. | 
| 12 | 
            +
            date: 2012-02-11 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: twitter
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &10151740 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *10151740
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: oauth
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &10150460 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,7 +32,18 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *10150460
         | 
| 36 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 37 | 
            +
              name: readline-ng
         | 
| 38 | 
            +
              requirement: &10149800 !ruby/object:Gem::Requirement
         | 
| 39 | 
            +
                none: false
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ! '>='
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '0'
         | 
| 44 | 
            +
              type: :runtime
         | 
| 45 | 
            +
              prerelease: false
         | 
| 46 | 
            +
              version_requirements: *10149800
         | 
| 36 47 | 
             
            description: Command line tool for tweeting and whatnot
         | 
| 37 48 | 
             
            email:
         | 
| 38 49 | 
             
            - richo@psych0tik.net
         | 
| @@ -91,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 91 102 | 
             
                  version: '0'
         | 
| 92 103 | 
             
            requirements: []
         | 
| 93 104 | 
             
            rubyforge_project: 
         | 
| 94 | 
            -
            rubygems_version: 1.8. | 
| 105 | 
            +
            rubygems_version: 1.8.10
         | 
| 95 106 | 
             
            signing_key: 
         | 
| 96 107 | 
             
            specification_version: 3
         | 
| 97 108 | 
             
            summary: Command line tool for tweeting and whatnot
         |