tweetwine 0.2.9 → 0.2.10

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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,9 @@
1
+ === 0.2.10 released 2010-02-28
2
+
3
+ * Fixed a bug in retrying connection upon connection failure: the last attempt
4
+ to connect, after 64 seconds, was missing
5
+ * Small implementation improvements
6
+
1
7
  === 0.2.9 released 2010-02-24
2
8
 
3
9
  * HTTP proxy support
@@ -13,7 +13,7 @@ Feature "show metadata" do
13
13
  end
14
14
 
15
15
  Then "version is shown" do
16
- @output.should =~ /\d\.\d\.\d$/
16
+ @output.should =~ /\d+\.\d+\.\d+$/
17
17
  @status.exitstatus.should == CLI::EXIT_VERSION
18
18
  end
19
19
  end
data/lib/tweetwine/cli.rb CHANGED
@@ -37,7 +37,7 @@ module Tweetwine
37
37
  @global_option_parser = create_global_option_parser(exec_name)
38
38
  @config = StartupConfig.new(Client::COMMANDS + [:help], Client::DEFAULT_COMMAND, extra_opts)
39
39
  @config.parse(args, config_file, [:http_proxy], &@global_option_parser)
40
- @client = Client.new(dependencies_blk.call(@config.options), @config.options) if @config.command != :help
40
+ @client = Client.new(yield(@config.options), @config.options) if @config.command != :help
41
41
  end
42
42
 
43
43
  def show_help_command_and_exit(args)
@@ -25,10 +25,17 @@ module Tweetwine
25
25
  @page_num = Util.parse_int_gt(options[:page_num], DEFAULT_PAGE_NUM, 1, "page number")
26
26
  @url_shortener = if options[:shorten_urls] && options[:shorten_urls][:enable]
27
27
  dependencies.url_shortener.call(options[:shorten_urls])
28
- else
29
- nil
30
28
  end
31
- @status_update_factory = StatusUpdateFactory.new(@io, @url_shortener)
29
+ end
30
+
31
+ def followers(args = [], options = nil)
32
+ response = get_from_rest_api("statuses/followers/#{@username}")
33
+ show_users_from_rest_api(*response)
34
+ end
35
+
36
+ def friends(args = [], options = nil)
37
+ response = get_from_rest_api("statuses/friends/#{@username}")
38
+ show_users_from_rest_api(*response)
32
39
  end
33
40
 
34
41
  def home(args = [], options = nil)
@@ -41,15 +48,15 @@ module Tweetwine
41
48
  show_statuses_from_rest_api(*response)
42
49
  end
43
50
 
44
- def user(args = [], options = nil)
45
- user = if args.empty? then @username else args.first end
46
- response = get_from_rest_api("statuses/user_timeline/#{user}", :num_statuses, :page)
47
- show_statuses_from_rest_api(*response)
51
+ def search(args = [], options = nil)
52
+ raise ArgumentError, "No search word" if args.empty?
53
+ query = if options && options[:bin_op] == :or then args.join(" OR ") else args.join(" ") end
54
+ response = get_from_search_api(query, :num_statuses, :page)
55
+ show_statuses_from_search_api(*response["results"])
48
56
  end
49
57
 
50
58
  def update(args = [], options = nil)
51
- new_status = if args.empty? then nil else args.join(" ") end
52
- new_status = @status_update_factory.create(new_status)
59
+ new_status = create_status_update(args.join(" "))
53
60
  completed = false
54
61
  unless new_status.empty?
55
62
  @io.show_status_preview(new_status)
@@ -63,21 +70,10 @@ module Tweetwine
63
70
  @io.info "Cancelled." unless completed
64
71
  end
65
72
 
66
- def friends(args = [], options = nil)
67
- response = get_from_rest_api("statuses/friends/#{@username}")
68
- show_users_from_rest_api(*response)
69
- end
70
-
71
- def followers(args = [], options = nil)
72
- response = get_from_rest_api("statuses/followers/#{@username}")
73
- show_users_from_rest_api(*response)
74
- end
75
-
76
- def search(args = [], options = nil)
77
- raise ArgumentError, "No search word" if args.empty?
78
- query = if options && options[:bin_op] == :or then args.join(" OR ") else args.join(" ") end
79
- response = get_from_search_api(query, :num_statuses, :page)
80
- show_statuses_from_search_api(*response["results"])
73
+ def user(args = [], options = nil)
74
+ user = if args.empty? then @username else args.first end
75
+ response = get_from_rest_api("statuses/user_timeline/#{user}", :num_statuses, :page)
76
+ show_statuses_from_rest_api(*response)
81
77
  end
82
78
 
83
79
  private
@@ -158,57 +154,32 @@ module Tweetwine
158
154
  end
159
155
  end
160
156
 
161
- class StatusUpdateFactory
162
- def initialize(io, url_shortener)
163
- @io = io
164
- @url_shortener = url_shortener
165
- end
166
-
167
- def create(status)
168
- StatusUpdate.new(status, @io, @url_shortener).to_s
157
+ def create_status_update(status)
158
+ status = if status.nil? || status.empty?
159
+ @io.prompt("Status update")
160
+ else
161
+ status.dup
169
162
  end
163
+ status.strip!
164
+ shorten_urls_in(status) if @url_shortener
165
+ truncate_status(status) if status.length > MAX_STATUS_LENGTH
166
+ status
170
167
  end
171
168
 
172
- class StatusUpdate
173
- def initialize(status, io, url_shortener)
174
- @io = io
175
- @url_shortener = url_shortener
176
- @text = prepare(status)
177
- end
178
-
179
- def to_s
180
- @text.to_s
169
+ def shorten_urls_in(status)
170
+ url_pairs = URI.extract(status, ["http", "https"]).uniq.map do |url_to_be_shortened|
171
+ [url_to_be_shortened, @url_shortener.shorten(url_to_be_shortened)]
181
172
  end
182
-
183
- private
184
-
185
- def prepare(status)
186
- status = unless status
187
- @io.prompt("Status update")
188
- else
189
- status.dup
190
- end
191
- status.strip!
192
- shorten_urls!(status) if @url_shortener
193
- truncate!(status) if status.length > MAX_STATUS_LENGTH
194
- status
195
- end
196
-
197
- def truncate!(status)
198
- status.replace status[0...MAX_STATUS_LENGTH]
199
- @io.warn("Status will be truncated.")
173
+ url_pairs.reject { |pair| pair.last.nil? || pair.last.empty? }.each do |url_pair|
174
+ status.gsub!(url_pair.first, url_pair.last)
200
175
  end
176
+ rescue HttpError, LoadError => e
177
+ @io.warn "#{e}. Skipping URL shortening..."
178
+ end
201
179
 
202
- def shorten_urls!(status)
203
- url_pairs = URI.extract(status, ["http", "https"]).uniq.map do |url_to_be_shortened|
204
- [url_to_be_shortened, @url_shortener.shorten(url_to_be_shortened)]
205
- end
206
- url_pairs.reject { |pair| pair.last.nil? || pair.last.empty? }.each do |url_pair|
207
- status.gsub!(url_pair.first, url_pair.last)
208
- end
209
- rescue HttpError, LoadError => e
210
- @io.warn "#{e}. Skipping URL shortening..."
211
- end
180
+ def truncate_status(status)
181
+ status.replace status[0...MAX_STATUS_LENGTH]
182
+ @io.warn("Status will be truncated.")
212
183
  end
213
184
  end
214
185
  end
data/lib/tweetwine/io.rb CHANGED
@@ -46,7 +46,7 @@ module Tweetwine
46
46
  end
47
47
 
48
48
  def show_record(record)
49
- clean_record!(record)
49
+ clean_record(record)
50
50
  if record[:status]
51
51
  show_record_as_user_with_status(record)
52
52
  else
@@ -56,10 +56,10 @@ module Tweetwine
56
56
 
57
57
  private
58
58
 
59
- def clean_record!(record)
59
+ def clean_record(record)
60
60
  record.each_pair do |key, value|
61
61
  if value.is_a? Hash
62
- clean_record!(value)
62
+ clean_record(value)
63
63
  else
64
64
  unless value.nil?
65
65
  value = value.to_s
@@ -1,3 +1,3 @@
1
1
  module Tweetwine
2
- VERSION = "0.2.9".freeze
2
+ VERSION = "0.2.10".freeze
3
3
  end
@@ -27,13 +27,13 @@ module Tweetwine
27
27
  private
28
28
 
29
29
  def do_with_retries
30
- tries = 0
30
+ retries = 0
31
31
  begin
32
- tries += 1
33
32
  yield
34
33
  rescue Errno::ECONNRESET, RestClient::RequestTimeout => e
35
- if tries < MAX_RETRIES
36
- timeout = RETRY_BASE_WAIT_TIMEOUT**tries
34
+ if retries < MAX_RETRIES
35
+ retries += 1
36
+ timeout = RETRY_BASE_WAIT_TIMEOUT**retries
37
37
  @io.warn("Could not connect -- retrying in #{timeout} seconds") if @io
38
38
  sleep timeout
39
39
  retry
@@ -29,7 +29,7 @@ module Tweetwine
29
29
  end
30
30
 
31
31
  def parse_cmdline_args(args, &cmd_option_parser)
32
- cmd_option_parser.call(args)
32
+ yield args
33
33
  end
34
34
 
35
35
  def parse_config_file(config_file)
@@ -71,7 +71,7 @@ module Tweetwine
71
71
 
72
72
  def self.find_hash_path(hash, path)
73
73
  return nil if hash.nil?
74
- path = [path] if !path.is_a? Array
74
+ path = [path] unless path.is_a? Array
75
75
  path.inject(hash) do |result, key|
76
76
  return hash.default if key.nil? || result.nil?
77
77
  result[key]
data/test/client_test.rb CHANGED
@@ -220,6 +220,7 @@ class ClientTest < Test::Unit::TestCase
220
220
 
221
221
  should "cancel a status update via argument, when empty status" do
222
222
  @http_resource.expects(:[]).never
223
+ @io.expects(:prompt).with("Status update").returns("")
223
224
  @io.expects(:confirm).never
224
225
  @io.expects(:info).with("Cancelled.")
225
226
  @io.expects(:show_record).never
@@ -68,10 +68,10 @@ class ClientTest < Test::Unit::TestCase
68
68
  should "retry connection a maximum of certain number of times, case #{error_class}" do
69
69
  retrying_calls = sequence("Retrying Client calls")
70
70
  io_calls = sequence("IO")
71
- Client::MAX_RETRIES.times do
71
+ (Client::MAX_RETRIES + 1).times do
72
72
  RestClient.expects(:get).with("https://unresponsive.org").in_sequence(retrying_calls).raises(error_class)
73
73
  end
74
- (Client::MAX_RETRIES - 1).times do
74
+ Client::MAX_RETRIES.times do
75
75
  @io.expects(:warn).in_sequence(io_calls)
76
76
  end
77
77
  assert_raise(HttpError) { @client.get("https://unresponsive.org") }
@@ -131,10 +131,10 @@ class ResourceTest < Test::Unit::TestCase
131
131
  should "retry connection a maximum of certain number of times, case #{error_class}" do
132
132
  retrying_calls = sequence("Retrying Resource calls")
133
133
  io_calls = sequence("IO")
134
- Resource::MAX_RETRIES.times do
134
+ (Resource::MAX_RETRIES + 1).times do
135
135
  @wrapped.expects(:get).in_sequence(retrying_calls).raises(error_class)
136
136
  end
137
- (Resource::MAX_RETRIES - 1).times do
137
+ Resource::MAX_RETRIES.times do
138
138
  @io.expects(:warn).in_sequence(io_calls)
139
139
  end
140
140
  assert_raise(HttpError) { @resource.get }
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 9
9
- version: 0.2.9
8
+ - 10
9
+ version: 0.2.10
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tuomas Kareinen
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-02-24 00:00:00 +02:00
17
+ date: 2010-02-28 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -91,7 +91,7 @@ licenses: []
91
91
  post_install_message:
92
92
  rdoc_options:
93
93
  - --title
94
- - tweetwine 0.2.9
94
+ - tweetwine 0.2.10
95
95
  - --main
96
96
  - README.rdoc
97
97
  - --exclude