stratify-twitter 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stratify-twitter (0.1.0)
4
+ stratify-twitter (0.1.1)
5
5
  actionpack (~> 3.1.0.rc1)
6
6
  railties (~> 3.1.0.rc1)
7
7
  rinku (~> 1.0.0)
@@ -46,7 +46,7 @@ GEM
46
46
  faraday_middleware (0.6.3)
47
47
  faraday (~> 0.6.0)
48
48
  hashie (1.0.0)
49
- hike (1.0.0)
49
+ hike (1.1.0)
50
50
  i18n (0.6.0)
51
51
  mongo (1.3.1)
52
52
  bson (>= 1.3.1)
@@ -72,7 +72,7 @@ GEM
72
72
  rack-ssl (~> 1.3.2)
73
73
  rake (>= 0.8.7)
74
74
  thor (~> 0.14.6)
75
- rake (0.9.1)
75
+ rake (0.9.2)
76
76
  rash (0.3.0)
77
77
  hashie (~> 1.0.0)
78
78
  rinku (1.0.0)
@@ -103,7 +103,7 @@ GEM
103
103
  multi_xml (~> 0.2.0)
104
104
  rash (~> 0.3.0)
105
105
  simple_oauth (~> 0.1.5)
106
- tzinfo (0.3.27)
106
+ tzinfo (0.3.29)
107
107
  vcr (1.10.0)
108
108
 
109
109
  PLATFORMS
@@ -1,22 +1,30 @@
1
1
  require 'stratify-twitter/presenter'
2
+ require 'stratify-twitter/translation'
2
3
 
3
4
  module Stratify
4
5
  module Twitter
5
6
  class Activity < Stratify::Activity
7
+ extend Stratify::Twitter::Translation
8
+
6
9
  field :status_id, :type => Integer
7
10
  field :username
8
11
  field :text
12
+ field :retweeted_status
9
13
 
10
14
  natural_key :status_id
11
15
 
12
16
  validates_presence_of :status_id, :username, :text
13
-
17
+
18
+ def retweet?
19
+ retweeted_status.present?
20
+ end
21
+
14
22
  def permalink
15
23
  "http://twitter.com/#{username}/status/#{status_id}"
16
24
  end
17
25
 
18
26
  def to_html
19
- Stratify::Twitter::Presenter.new(self).text
27
+ Stratify::Twitter::Presenter.new(self).to_html
20
28
  end
21
29
  end
22
30
  end
@@ -1,4 +1,4 @@
1
- require 'stratify-twitter/query'
1
+ require 'twitter'
2
2
 
3
3
  module Stratify
4
4
  module Twitter
@@ -8,11 +8,15 @@ module Stratify
8
8
  configuration_fields :username => {:type => :string}
9
9
 
10
10
  def activities
11
- query.activities
11
+ activities_from_api.map do |activity_in_api_format|
12
+ Stratify::Twitter::Activity.from_api_hash(activity_in_api_format)
13
+ end
12
14
  end
13
15
 
14
- def query
15
- Stratify::Twitter::Query.new(username)
16
+ private
17
+
18
+ def activities_from_api
19
+ ::Twitter.user_timeline(username, :include_rts => true)
16
20
  end
17
21
  end
18
22
  end
@@ -11,7 +11,12 @@ module Stratify
11
11
  end
12
12
 
13
13
  def text
14
- linkify_usernames(linkify_urls(@activity.text))
14
+ return @activity.text unless @activity.retweet?
15
+ "RT @#{@activity.retweeted_status['username']} #{@activity.retweeted_status['text']}"
16
+ end
17
+
18
+ def to_html
19
+ linkify_usernames(linkify_urls(text))
15
20
  end
16
21
 
17
22
  private
@@ -0,0 +1,24 @@
1
+ module Stratify
2
+ module Twitter
3
+ module Translation
4
+ def from_api_hash(api_hash)
5
+ activity = Stratify::Twitter::Activity.new
6
+
7
+ activity.status_id = api_hash.id
8
+ activity.username = api_hash.user.screen_name
9
+ activity.text = api_hash.text
10
+ activity.created_at = api_hash.created_at
11
+
12
+ if api_hash[:retweeted_status]
13
+ activity.retweeted_status = {
14
+ :status_id => api_hash[:retweeted_status].id,
15
+ :username => api_hash[:retweeted_status].user.screen_name,
16
+ :text => api_hash[:retweeted_status].text,
17
+ }
18
+ end
19
+
20
+ activity
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Stratify
2
2
  module Twitter
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -1,6 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stratify::Twitter::Activity do
4
+ describe "#retweet?" do
5
+ it "returns true when the tweet is a retweet" do
6
+ tweet = Stratify::Twitter::Activity.new(:retweeted_status => {:status_id => 123})
7
+ tweet.should be_retweet
8
+ end
9
+
10
+ it "returns false when the tweet is not a retweet" do
11
+ tweet = Stratify::Twitter::Activity.new(:retweeted_status => nil)
12
+ tweet.should_not be_retweet
13
+ end
14
+ end
15
+
4
16
  describe "#permalink" do
5
17
  it "returns the URL for this tweet on Twitter" do
6
18
  tweet = Stratify::Twitter::Activity.new(:status_id => 20595784953102338, :username => "jasonrudolph")
@@ -3,22 +3,31 @@ require 'spec_helper'
3
3
  describe "stratify-twitter" do
4
4
  use_vcr_cassette "twitter"
5
5
 
6
- it "collects and stores data from Twitter", :database => true do
6
+ it "collects and stores status updates from Twitter", :database => true do
7
7
  collector = Stratify::Twitter::Collector.create!(:username => "jasonrudolph")
8
8
  collector.run
9
9
 
10
10
  Stratify::Twitter::Activity.where(
11
- :status_id => 28832200464011265,
12
- :username => "jasonrudolph",
13
- :text => %Q{"I'm afraid for the state of the nation. ... I wouldn't hire you to sweep my floors." @dhh tells it like it is. http://t.co/8Wk7j8C #hiring},
14
- :created_at => Time.parse("2011-01-22T15:11:46Z")
11
+ :created_at => Time.parse("2011-06-08T16:22:40Z"),
12
+ :status_id => 78497177902657536,
13
+ :username => "jasonrudolph",
14
+ :text => "Google finds it economically infeasible to support IE 6 & 7. You have less money than Google. Apply transitive law here. http://t.co/3lWZA2O",
15
+ :retweeted_status => nil
15
16
  ).should exist
17
+ end
18
+
19
+ it "collects and stores retweets from Twitter", :database => true do
20
+ collector = Stratify::Twitter::Collector.create!(:username => "jasonrudolph")
21
+ collector.run
16
22
 
17
- Stratify::Twitter::Activity.where(
18
- :status_id => 20595784953102338,
19
- :username => "jasonrudolph",
20
- :text => %Q{"Live as though it were the early days of a better nation." -- @doctorow},
21
- :created_at => Time.parse("2010-12-30T21:43:12Z")
23
+ activity = Stratify::Twitter::Activity.where(
24
+ "created_at" => Time.parse("2011-06-21T02:10:44Z"),
25
+ "status_id" => 82993823143297024,
26
+ "username" => "jasonrudolph",
27
+ "text" => %Q{RT @timoreilly: Love it: @edd in email: "Programmers don't aspire to a BMW, they aspire to write a clojure program that other people won ...},
28
+ "retweeted_status.status_id" => 82942860218994688,
29
+ "retweeted_status.username" => "timoreilly",
30
+ "retweeted_status.text" => %Q{Love it: @edd in email: "Programmers don't aspire to a BMW, they aspire to write a clojure program that other people won't laugh at"},
22
31
  ).should exist
23
32
  end
24
33
  end
@@ -2,24 +2,45 @@ require 'spec_helper'
2
2
 
3
3
  describe Stratify::Twitter::Presenter do
4
4
  describe "#text" do
5
+ context "when the tweet is a retweet" do
6
+ it "prepends 'RT' and the original author's @username to the beginning of a tweet" do
7
+ activity = Stratify::Twitter::Activity.new(
8
+ :retweeted_status => {
9
+ "text" => "foo bar",
10
+ "username" => "wittydude"
11
+ }
12
+ )
13
+ presenter = Stratify::Twitter::Presenter.new(activity)
14
+ presenter.text.should == 'RT @wittydude foo bar'
15
+ end
16
+ end
17
+
18
+ context "when the tweet is not a retweet" do
19
+ it "returns the tweet's text without any modifications" do
20
+ activity = Stratify::Twitter::Activity.new(:text => "foo bar")
21
+ presenter = Stratify::Twitter::Presenter.new(activity)
22
+ presenter.text.should == 'foo bar'
23
+ end
24
+ end
25
+ end
26
+
27
+ describe "#to_html" do
5
28
  it "wraps a Twitter @username with a link" do
6
29
  activity = Stratify::Twitter::Activity.new(:text => "foo @jasonrudolph bar")
7
30
  presenter = Stratify::Twitter::Presenter.new(activity)
8
- presenter.text.should == 'foo <a href="http://twitter.com/jasonrudolph">@jasonrudolph</a> bar'
31
+ presenter.to_html.should == 'foo <a href="http://twitter.com/jasonrudolph">@jasonrudolph</a> bar'
9
32
  end
10
33
 
11
34
  it "wraps each Twitter @username with a link when a tweet contains multiple @usernames" do
12
35
  activity = Stratify::Twitter::Activity.new(:text => "foo @jasonrudolph bar @thinkrelevance baz")
13
36
  presenter = Stratify::Twitter::Presenter.new(activity)
14
- presenter.text.should == 'foo <a href="http://twitter.com/jasonrudolph">@jasonrudolph</a> bar <a href="http://twitter.com/thinkrelevance">@thinkrelevance</a> baz'
37
+ presenter.to_html.should == 'foo <a href="http://twitter.com/jasonrudolph">@jasonrudolph</a> bar <a href="http://twitter.com/thinkrelevance">@thinkrelevance</a> baz'
15
38
  end
16
39
 
17
40
  it "adds a link when a tweet contains a URL" do
18
41
  activity = Stratify::Twitter::Activity.new(:text => "foo http://google.com bar")
19
42
  presenter = Stratify::Twitter::Presenter.new(activity)
20
- presenter.text.should == 'foo <a href="http://google.com">http://google.com</a> bar'
43
+ presenter.to_html.should == 'foo <a href="http://google.com">http://google.com</a> bar'
21
44
  end
22
45
  end
23
46
  end
24
-
25
-
@@ -2,40 +2,44 @@
2
2
  - !ruby/struct:VCR::HTTPInteraction
3
3
  request: !ruby/struct:VCR::Request
4
4
  method: :get
5
- uri: https://api.twitter.com:443/1/statuses/user_timeline.json?screen_name=jasonrudolph
5
+ uri: https://api.twitter.com:443/1/statuses/user_timeline.json?include_rts=true&screen_name=jasonrudolph
6
6
  body:
7
7
  headers:
8
8
  accept:
9
9
  - application/json
10
10
  user-agent:
11
- - Twitter Ruby Gem 1.0.0
11
+ - Twitter Ruby Gem 1.5.0
12
+ accept-encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
14
  response: !ruby/struct:VCR::Response
13
15
  status: !ruby/struct:VCR::ResponseStatus
14
16
  code: 200
15
17
  message: OK
16
18
  headers:
17
19
  date:
18
- - Mon, 24 Jan 2011 01:01:30 GMT
20
+ - Sat, 02 Jul 2011 23:57:26 GMT
19
21
  server:
20
22
  - hi
21
23
  status:
22
24
  - 200 OK
23
25
  x-transaction:
24
- - 1295830889-38307-3583
26
+ - 1309651046-78606-29628
25
27
  x-ratelimit-limit:
26
28
  - "150"
27
29
  etag:
28
- - "\"e9f88e3b66e34f99f089ddfcdbf8197c\""
30
+ - "\"2ed2bd074a816eb72eb0b8e1bb802272\"-gzip"
31
+ x-frame-options:
32
+ - SAMEORIGIN
29
33
  last-modified:
30
- - Mon, 24 Jan 2011 01:01:30 GMT
34
+ - Sat, 02 Jul 2011 23:57:26 GMT
31
35
  x-ratelimit-remaining:
32
- - "146"
36
+ - "143"
33
37
  x-runtime:
34
- - "0.03269"
38
+ - "0.05163"
39
+ x-transaction-mask:
40
+ - a6183ffa5f8ca943ff1b53b5644ef1144d1160fd
35
41
  content-type:
36
42
  - application/json; charset=utf-8
37
- content-length:
38
- - "26139"
39
43
  pragma:
40
44
  - no-cache
41
45
  x-ratelimit-class:
@@ -46,13 +50,155 @@
46
50
  - Tue, 31 Mar 1981 05:00:00 GMT
47
51
  cache-control:
48
52
  - no-cache, no-store, must-revalidate, pre-check=0, post-check=0
53
+ x-mid:
54
+ - 664f93b9dd0e62b436dea81ad854e7310d6f4c9c
49
55
  x-ratelimit-reset:
50
- - "1295832697"
56
+ - "1309651839"
51
57
  set-cookie:
52
- - k=24.136.206.3.1295830889991683; path=/; expires=Mon, 31-Jan-11 01:01:29 GMT; domain=.twitter.com
53
- - guest_id=129583088999599378; path=/; expires=Wed, 23 Feb 2011 01:01:29 GMT
54
- - _twitter_sess=BAh7CDoHaWQiJTI5ZDVlMjc3NTY4ZTI3NjVhODZkMGM2ZGM4MTIyZTkxIgpm%250AbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAG%250AOgpAdXNlZHsAOg9jcmVhdGVkX2F0bCsIDDaKtS0B--8fe758c1a15a762f7b3c45276ddb68c131d4897e; domain=.twitter.com; path=/
58
+ - k=24.136.206.3.1309651046043740; path=/; expires=Sat, 09-Jul-11 23:57:26 GMT; domain=.twitter.com
59
+ - guest_id=v1%3A130965104604816168; domain=.twitter.com; path=/; expires=Tue, 02 Jul 2013 11:57:26 GMT
60
+ - _twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCKIOSe0wAToHaWQiJTRhNTE1OWU3NjRkZDgz%250AYzEyODk2Zjk5ZTJiZDc1NzMzIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVy%250AOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--a0082ed72f3eb78dd6573a5f7d9aae68a6287f10; domain=.twitter.com; path=/; HttpOnly
55
61
  vary:
56
62
  - Accept-Encoding
57
- body: "[{\"in_reply_to_user_id_str\":null,\"text\":\"\\\"I'm afraid for the state of the nation. ... I wouldn't hire you to sweep my floors.\\\" @dhh tells it like it is. http:\\/\\/t.co\\/8Wk7j8C #hiring\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"\\u003Ca href=\\\"http:\\/\\/itunes.apple.com\\/us\\/app\\/twitter\\/id409789998?mt=12\\\" rel=\\\"nofollow\\\"\\u003ETwitter for Mac\\u003C\\/a\\u003E\",\"id_str\":\"28832200464011265\",\"in_reply_to_user_id\":null,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"friends_count\":71,\"description\":\"\",\"follow_request_sent\":false,\"following\":false,\"location\":\"Raleigh, NC\",\"statuses_count\":532,\"profile_link_color\":\"005ab4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"show_all_inline_media\":false,\"verified\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"contributors_enabled\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"id\":14188383,\"is_translator\":false,\"lang\":\"en\",\"geo_enabled\":false,\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":28832200464011265,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"created_at\":\"Sat Jan 22 15:11:46 +0000 2011\"},{\"in_reply_to_user_id_str\":\"1476511\",\"text\":\"@shayfrendt I heard that such a thing was in the works. I suspect it will be sufficiently neutered for safe American consumption. :-\\/\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":27199444852146178,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"27206056148996097\",\"in_reply_to_user_id\":1476511,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"27199444852146178\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":27206056148996097,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"shayfrendt\",\"created_at\":\"Tue Jan 18 03:30:03 +0000 2011\"},{\"in_reply_to_user_id_str\":null,\"text\":\"http:\\/\\/candorville.com\\/2011\\/01\\/16\\/quotes-2\\/\\n\\nDon't be \\\"that guy.\\\" ;-)\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"web\",\"id_str\":\"26662832850341888\",\"in_reply_to_user_id\":null,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":true,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":26662832850341888,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"created_at\":\"Sun Jan 16 15:31:29 +0000 2011\"},{\"in_reply_to_user_id_str\":null,\"text\":\"PlainText + @dropbox + TextMate feels nice. http:\\/\\/t.co\\/U8KRP3c \\n\\nPlainText is missing 10% of @simplenoteapp's elegance, but I'll live.\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"\\u003Ca href=\\\"http:\\/\\/itunes.apple.com\\/us\\/app\\/twitter\\/id409789998?mt=12\\\" rel=\\\"nofollow\\\"\\u003ETwitter for Mac\\u003C\\/a\\u003E\",\"id_str\":\"26654420448055296\",\"in_reply_to_user_id\":null,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":26654420448055296,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"created_at\":\"Sun Jan 16 14:58:03 +0000 2011\"},{\"text\":\"Reference point for teams tasked with providing \\\"five nines\\\" - RT @gmail Gmail was available 99.984% of the time in 2010 http:\\/\\/goo.gl\\/nLdlf\",\"id_str\":\"26312110145282049\",\"place\":null,\"truncated\":false,\"in_reply_to_status_id\":null,\"favorited\":false,\"source\":\"web\",\"in_reply_to_status_id_str\":null,\"contributors\":null,\"in_reply_to_screen_name\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"geo\":null,\"retweeted\":false,\"retweet_count\":0,\"user\":{\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"id_str\":\"14188383\",\"listed_count\":43,\"description\":\"\",\"following\":false,\"profile_use_background_image\":false,\"location\":\"Raleigh, NC\",\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"is_translator\":false,\"statuses_count\":531,\"favourites_count\":53,\"profile_text_color\":\"333333\",\"followers_count\":347,\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"protected\":false,\"follow_request_sent\":false,\"notifications\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"verified\":false,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_link_color\":\"005ab4\",\"screen_name\":\"jasonrudolph\"},\"id\":26312110145282049,\"coordinates\":null,\"created_at\":\"Sat Jan 15 16:17:50 +0000 2011\"},{\"in_reply_to_user_id_str\":\"194185273\",\"text\":\"@ErgoBibamus6512 #bandnamegame seems to be some weird derivative of Solitaire. Are you winning? ;-)\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":25597915607080960,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"25600708489252865\",\"in_reply_to_user_id\":194185273,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"25597915607080960\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":25600708489252865,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"ErgoBibamus6512\",\"created_at\":\"Thu Jan 13 17:10:59 +0000 2011\"},{\"in_reply_to_user_id_str\":\"83468155\",\"text\":\"@billysixstring First Git, and now Rails and MongoDB? Rock on!\\n\\nBy the way, what Mongo library are you using? I recommend mongoid.\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":25021694351515648,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"25156558581145600\",\"in_reply_to_user_id\":83468155,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"25021694351515648\",\"user\":{\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":true,\"location\":\"Raleigh, NC\",\"listed_count\":43,\"profile_link_color\":\"005ab4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"contributors_enabled\":false,\"statuses_count\":532,\"geo_enabled\":false,\"profile_use_background_image\":false,\"followers_count\":347,\"is_translator\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"friends_count\":71,\"id\":14188383,\"show_all_inline_media\":false,\"follow_request_sent\":false,\"lang\":\"en\",\"verified\":false,\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":25156558581145600,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"billysixstring\",\"created_at\":\"Wed Jan 12 11:46:05 +0000 2011\"},{\"in_reply_to_user_id_str\":\"1566201\",\"text\":\"@zapnap RailsRumble app waiting to happen: Submit your Google Voice transcriptions. Compare transcriptions to reality. Laugh. Lather. Repeat\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":24972816671580160,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"24982275036811264\",\"in_reply_to_user_id\":1566201,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"24972816671580160\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":24982275036811264,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"zapnap\",\"created_at\":\"Wed Jan 12 00:13:33 +0000 2011\"},{\"in_reply_to_user_id_str\":\"11166162\",\"text\":\"@spicycode I've been seeing similar wonkiness yesterday and today.\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":24894332775436288,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"24900954553847808\",\"in_reply_to_user_id\":11166162,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"24894332775436288\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":24900954553847808,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"spicycode\",\"created_at\":\"Tue Jan 11 18:50:24 +0000 2011\"},{\"in_reply_to_user_id_str\":\"6141442\",\"text\":\"@rsanheim Methinks you have a few more weeks of anticipation before that shiny new unicorn is actually in your hands.\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":24600180359692288,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"24605159568965633\",\"in_reply_to_user_id\":6141442,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"24600180359692288\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":24605159568965633,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"rsanheim\",\"created_at\":\"Mon Jan 10 23:15:01 +0000 2011\"},{\"in_reply_to_user_id_str\":\"931471\",\"text\":\"@michellerudolph It's the hardest part of a human or of *you*? I'm not qualified to comment on the former; I shouldn't on the latter. ;-)\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":24534278922575872,\"source\":\"\\u003Ca href=\\\"http:\\/\\/itunes.apple.com\\/us\\/app\\/twitter\\/id409789998?mt=12\\\" rel=\\\"nofollow\\\"\\u003ETwitter for Mac\\u003C\\/a\\u003E\",\"id_str\":\"24573822304788480\",\"in_reply_to_user_id\":931471,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"24534278922575872\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":24573822304788480,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"michellerudolph\",\"created_at\":\"Mon Jan 10 21:10:30 +0000 2011\"},{\"in_reply_to_user_id_str\":\"74635622\",\"text\":\"@rotatedtoenails I'm well aware of the \\\"Secure Text Entry\\\" option. I've always had it disabled. NV still intermittently breaks TextExpander\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":22491620704260097,\"source\":\"\\u003Ca href=\\\"http:\\/\\/twitter.com\\/\\\" rel=\\\"nofollow\\\"\\u003ETwitter for iPhone\\u003C\\/a\\u003E\",\"id_str\":\"22494553978179584\",\"in_reply_to_user_id\":74635622,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":\"22491620704260097\",\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":22494553978179584,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"rotatedtoenails\",\"created_at\":\"Wed Jan 05 03:28:14 +0000 2011\"},{\"in_reply_to_user_id_str\":null,\"text\":\"Notational Velocity + Simplenote is elegant simplicity (http:\\/\\/is.gd\\/k7TXg). But NV keeps breaking TextExpander, so NV's gotta go. #sadpanda\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"web\",\"id_str\":\"22485166844809216\",\"in_reply_to_user_id\":null,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":null,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":null,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":null,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":22485166844809216,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"created_at\":\"Wed Jan 05 02:50:56 +0000 2011\"},{\"in_reply_to_user_id_str\":null,\"text\":\"\\\"Live as though it were the early days of a better nation.\\\" -- @doctorow\",\"retweeted\":false,\"retweet_count\":1,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"web\",\"id_str\":\"20595784953102338\",\"in_reply_to_user_id\":null,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":20595784953102338,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":null,\"created_at\":\"Thu Dec 30 21:43:12 +0000 2010\"},{\"in_reply_to_user_id_str\":\"5676102\",\"text\":\"@shanselman Congrats on yet another great episode. The second half of 1.1.0 was *very* familiar. Thanks for sharing that conversation.\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"web\",\"id_str\":\"20497377014054912\",\"in_reply_to_user_id\":5676102,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":20497377014054912,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"shanselman\",\"created_at\":\"Thu Dec 30 15:12:10 +0000 2010\"},{\"in_reply_to_user_id_str\":\"226246919\",\"text\":\"A timely episode on disconnecting and the importance of being \\\"present\\\" with your loved ones.\\n\\n@thisdevslife 1.1.0 http:\\/\\/is.gd\\/jJr9O\",\"retweeted\":false,\"retweet_count\":0,\"place\":null,\"in_reply_to_status_id\":null,\"source\":\"web\",\"id_str\":\"20497095169409024\",\"in_reply_to_user_id\":226246919,\"truncated\":false,\"geo\":null,\"favorited\":false,\"in_reply_to_status_id_str\":null,\"user\":{\"friends_count\":71,\"profile_sidebar_fill_color\":\"e5e8e3\",\"url\":\"http:\\/\\/jasonrudolph.com\",\"follow_request_sent\":false,\"profile_background_tile\":false,\"time_zone\":\"Quito\",\"description\":\"\",\"following\":false,\"verified\":false,\"location\":\"Raleigh, NC\",\"profile_link_color\":\"005ab4\",\"show_all_inline_media\":false,\"geo_enabled\":false,\"profile_sidebar_border_color\":\"BDDCAD\",\"id_str\":\"14188383\",\"listed_count\":43,\"profile_use_background_image\":false,\"followers_count\":347,\"contributors_enabled\":false,\"profile_background_color\":\"ff6c1f\",\"protected\":false,\"notifications\":false,\"profile_background_image_url\":\"http:\\/\\/a3.twimg.com\\/a\\/1295051201\\/images\\/themes\\/theme9\\/bg.gif\",\"profile_image_url\":\"http:\\/\\/a2.twimg.com\\/profile_images\\/52658686\\/twitter_normal.png\",\"name\":\"Jason Rudolph\",\"is_translator\":false,\"statuses_count\":532,\"id\":14188383,\"lang\":\"en\",\"utc_offset\":-18000,\"favourites_count\":53,\"created_at\":\"Fri Mar 21 00:19:18 +0000 2008\",\"profile_text_color\":\"333333\",\"screen_name\":\"jasonrudolph\"},\"id\":20497095169409024,\"contributors\":null,\"coordinates\":null,\"in_reply_to_screen_name\":\"thisdevslife\",\"created_at\":\"Thu Dec 30 15:11:02 +0000 2010\"}]"
63
+ content-encoding:
64
+ - gzip
65
+ content-length:
66
+ - "6051"
67
+ body: !binary |
68
+ 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
202
+ sB4ae+eb8afH3v//D83CeXjlywAA
203
+
58
204
  http_version: "1.1"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: stratify-twitter
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jason Rudolph
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-26 00:00:00 Z
13
+ date: 2011-07-04 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack
@@ -135,7 +135,7 @@ files:
135
135
  - lib/stratify-twitter/collector.rb
136
136
  - lib/stratify-twitter/engine.rb
137
137
  - lib/stratify-twitter/presenter.rb
138
- - lib/stratify-twitter/query.rb
138
+ - lib/stratify-twitter/translation.rb
139
139
  - lib/stratify-twitter/version.rb
140
140
  - spec/mongoid.yml
141
141
  - spec/spec_helper.rb
@@ -1,32 +0,0 @@
1
- require 'twitter'
2
-
3
- module Stratify
4
- module Twitter
5
- class Query
6
- attr_reader :username
7
-
8
- def initialize(username)
9
- @username = username
10
- end
11
-
12
- def activities
13
- raw_activities.map {|raw_activity| build_activity_from_raw_data(raw_activity)}
14
- end
15
-
16
- private
17
-
18
- def raw_activities
19
- ::Twitter.user_timeline(username)
20
- end
21
-
22
- def build_activity_from_raw_data(raw_activity)
23
- Stratify::Twitter::Activity.new({
24
- :status_id => raw_activity.id,
25
- :username => raw_activity.user.screen_name,
26
- :text => raw_activity.text,
27
- :created_at => raw_activity.created_at
28
- })
29
- end
30
- end
31
- end
32
- end