siyelo-tweetify 0.1.2

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.
@@ -0,0 +1,12 @@
1
+ == 0.1.0
2
+
3
+ * initial commit
4
+
5
+ * enhancements
6
+ * n/a
7
+
8
+ * bug fix
9
+ * n/a
10
+
11
+ * deprecation
12
+ * none
@@ -0,0 +1,20 @@
1
+ Copyright 2010 Siyelo. http://www.siyelo.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,70 @@
1
+ == Tweetify
2
+
3
+ A Rails engine for embedding Twitter extracts
4
+
5
+ == Dependencies
6
+
7
+ Tweetify needs;
8
+
9
+ dancroak-twitter-search
10
+
11
+ == Installation
12
+
13
+ All gems are on gemcutter, so you need to add gemcutter to your sources if you havent yet:
14
+
15
+ sudo gem sources -a http://gemcutter.org/
16
+
17
+ Install required gem if you dont already have them
18
+
19
+ sudo gem install dancroak-twitter-search
20
+
21
+ Install the tweetify gem:
22
+
23
+ sudo gem install siyelo-tweetify
24
+
25
+ Configure gems inside your app:
26
+
27
+ config.gem 'rufus-scheduler'
28
+ config.gem 'dancroak-twitter-search', :lib => "twitter_search"
29
+ config.gem 'siyelo-tweetify', :lib => "tweetify"
30
+
31
+ Run the generator:
32
+
33
+ ruby script/generate tweetify
34
+
35
+ The generator will install an initializer which describes Tweetify's configuration options. Be sure to update this with your own Twitter search string and 'search agent' name.
36
+
37
+ == Basic Usage
38
+
39
+ Once the rufus scheduler task is running, it will go off and cache your last N (Tweet.tweet_limit) twitter serach matches.
40
+
41
+ Inside your relevant controller, all you need to do is read the cached posts from your database.
42
+
43
+ @tweets = Tweet.find(:all, :limit => 3)
44
+
45
+ And render them in your view as you wish
46
+
47
+ For convenience, some partials are included
48
+
49
+ = render :partial => '/tweets/list', :locals => { :tweets => @tweets }
50
+
51
+ == TODO
52
+
53
+ Please refer to TODO file.
54
+
55
+ == Maintainers
56
+
57
+ * Glenn Roberts
58
+
59
+ == Contributors
60
+
61
+ Check them in the CHANGELOG or do `git shortlog -s -n` in the cloned repository.
62
+
63
+ == Bugs and Feedback
64
+
65
+ If you discover any bugs or want to drop a line, feel free to create an issue on
66
+ GitHub.
67
+
68
+ http://github.com/siyelo/tweetify/issues
69
+
70
+ MIT License. Copyright 2010. Siyelo Software CC. http://www.siyelo.com
@@ -0,0 +1,41 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "siyelo-tweetify"
9
+ gem.summary = %Q{A Rails engine for embedding Twitter extracts}
10
+ gem.description = %Q{A Rails engine for embedding Twitter extracts}
11
+ gem.email = "glenn.roberts@siyelo.com"
12
+ gem.homepage = "http://github.com/siyelo/siyelo-tweetify"
13
+ gem.authors = ["Glenn Roberts"]
14
+ gem.add_dependency 'edgar-twitter-search', '>=0.5.10'
15
+ gem.files = FileList["[A-Z]*", "{app,config,generators,lib}/**/*", "init.rb"]
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ desc 'Run Tweetify unit tests.'
24
+ Rake::TestTask.new(:test) do |t|
25
+ t.libs << 'lib'
26
+ t.libs << 'test'
27
+ t.pattern = 'test/**/*_test.rb'
28
+ t.verbose = true
29
+ end
30
+
31
+ desc 'Generate documentation for Tweetify.'
32
+ Rake::RDocTask.new(:rdoc) do |rdoc|
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = 'Tweetify'
35
+ rdoc.options << '--line-numbers' << '--inline-source'
36
+ rdoc.rdoc_files.include('README.rdoc')
37
+ rdoc.rdoc_files.include('lib/**/*.rb')
38
+ end
39
+
40
+ desc 'Default: run unit tests.'
41
+ task :default => :test
data/TODO ADDED
@@ -0,0 +1,2 @@
1
+
2
+ write tests
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.2
@@ -0,0 +1,65 @@
1
+ class Tweet < ActiveRecord::Base
2
+
3
+ cattr_accessor :search_string
4
+ @@search_string = "siyelo OR \"siyelo software\""
5
+
6
+ cattr_accessor :search_agent
7
+ @@search_agent = 'tweetify_agent'
8
+
9
+ cattr_accessor :read_timeout
10
+ @@read_timeout = 5.seconds
11
+
12
+ cattr_accessor :tweet_limit
13
+ @@tweet_limit = 3
14
+
15
+ attr_accessible :tweet_created_at,
16
+ :text,
17
+ :from_user,
18
+ :tweet_id,
19
+ :link
20
+
21
+ def self.cache_tweets
22
+ tweets = self.read_tweets
23
+ self.update_tweets(tweets)
24
+ end
25
+
26
+ protected
27
+
28
+ def self.read_tweets
29
+ tweets = []
30
+ begin
31
+ timeout(read_timeout) do
32
+ client = TwitterSearch::Client.new(search_agent)
33
+ tweets = client.query(:q => search_string, :rpp => tweet_limit, :page => '1')
34
+ end
35
+ rescue TimeoutError
36
+ logger.warn("Timeout accessing Twitter: #{$!}, #{$@}")
37
+ rescue
38
+ unless $!.message.match /302 Moved Temporarily/ #then no search results returned.
39
+ logger.warn("Error accessing Twitter: #{$!}")
40
+ end
41
+ end
42
+
43
+ tweets.nil? ? [] : tweets
44
+ end
45
+
46
+ def self.update_tweets(tweets)
47
+ unless tweets.empty?
48
+ old_tweets = Tweet.find(:all, :order => 'tweet_created_at')
49
+
50
+ tweets.each do |t|
51
+ n = self.create(:tweet_created_at => t.created_at.to_time,
52
+ :text => t.text,
53
+ :from_user => t.from_user,
54
+ :tweet_id => t.id,
55
+ :link => "http://twitter.com/#{t.from_user}/status/#{t.id}")
56
+
57
+ # expire oldest tweet
58
+ old_tweets.pop.destroy unless old_tweets.empty?
59
+ end
60
+ else
61
+ logger.info("No new tweets found.")
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,5 @@
1
+ .tweets
2
+ - tweets.each do |t|
3
+ .tweet
4
+ .title= link_to time_ago_in_words(t.tweet_created_at) + " ago by #{h t.from_user}", t.link
5
+ .body= auto_link t.text
@@ -0,0 +1,4 @@
1
+ To copy a Tweetify initializer & migration & partials to your Rails App, with some configuration values, just do:
2
+
3
+ script/generate tweetify_install
4
+
@@ -0,0 +1,15 @@
1
+
2
+ ===============================================================================
3
+
4
+ Some setup you must do manually if you haven't yet:
5
+
6
+ 1. Ensure you have defined your Twitter user name in config/tweetify.rb
7
+
8
+ 2. Ensure you have defined your Twitter search agent in config/tweetify.rb
9
+
10
+ 3. Run rake db:migrate to create the Tweets table.
11
+
12
+ Note: the initializer creates its own Rufus scheduler task - so if you have
13
+ other Rufus tasks, you may want to consolidate them.
14
+
15
+ ===============================================================================
@@ -0,0 +1,18 @@
1
+ class CreateTweets < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :tweets do |t|
4
+ t.string :type
5
+ t.datetime :tweet_created_at
6
+ t.string :from_user
7
+ t.text :text
8
+ t.string :tweet_id
9
+ t.string :link
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+
15
+ def self.down
16
+ drop_table :tweets
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ Tweet.search_string = "siyelo OR \"siyelo software\""
2
+ Tweet.search_agent = "SOME_UNIQUE_IDENTIFIER"
3
+
4
+ require 'rubygems'
5
+ require 'rufus/scheduler'
6
+
7
+ scheduler = Rufus::Scheduler.start_new(:frequency => 900.0)
8
+
9
+ scheduler.every '1h' do
10
+ Tweet.cache_tweets
11
+ end
@@ -0,0 +1,15 @@
1
+
2
+ class TweetifyInstallGenerator < Rails::Generator::Base
3
+
4
+ def manifest
5
+ record do |m|
6
+
7
+ m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "tweetify_create_blog_posts"
8
+
9
+ m.directory "config/initializers"
10
+ m.template "tweetify.rb", "config/initializers/tweetify.rb"
11
+
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,3 @@
1
+ To copy the view partialsfrom tweetify to your app just run the following command:
2
+
3
+ script/generate tweetify_views
@@ -0,0 +1,21 @@
1
+ class TweetifyViewsGenerator < Rails::Generator::Base
2
+
3
+ def initialize(*args)
4
+ super
5
+ @source_root = options[:source] || File.join(spec.path, '..', '..')
6
+ end
7
+
8
+ def manifest
9
+ record do |m|
10
+ m.directory "app/views"
11
+
12
+ Dir[File.join(@source_root, "app", "views", "**/*.haml")].each do |file|
13
+ file = file.gsub(@source_root, "")[1..-1]
14
+
15
+ m.directory File.dirname(file)
16
+ m.file file, file
17
+ end
18
+ end
19
+ end
20
+
21
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'tweetify'
@@ -0,0 +1,14 @@
1
+ begin
2
+ require 'twitter_search'
3
+ rescue
4
+ gem 'dancroak-twitter-search'
5
+ require 'twitter_search'
6
+ end
7
+
8
+
9
+ begin
10
+ require 'rufus/scheduler'
11
+ rescue
12
+ gem 'rufus-scheduler'
13
+ require 'rufus/scheduler'
14
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionController::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Transactional fixtures accelerate your tests by wrapping each test method
7
+ # in a transaction that's rolled back on completion. This ensures that the
8
+ # test database remains unchanged so your fixtures don't have to be reloaded
9
+ # between every test method. Fewer database queries means faster tests.
10
+ #
11
+ # Read Mike Clark's excellent walkthrough at
12
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
13
+ #
14
+ # Every Active Record database supports transactions except MyISAM tables
15
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
16
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
17
+ # is recommended.
18
+ #
19
+ # The only drawback to using transactional fixtures is when you actually
20
+ # need to test transactions. Since your test is bracketed by a transaction,
21
+ # any transactions started in your code will be automatically rolled back.
22
+ self.use_transactional_fixtures = true
23
+
24
+ # Instantiated fixtures are slow, but give you @david where otherwise you
25
+ # would need people(:david). If you don't want to migrate your existing
26
+ # test cases which use the @david style and don't mind the speed hit (each
27
+ # instantiated fixtures translates to a database query per test method),
28
+ # then set this back to true.
29
+ self.use_instantiated_fixtures = false
30
+
31
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
32
+ #
33
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
34
+ # -- they do not yet inherit this setting
35
+ fixtures :all
36
+
37
+ # Add more helper methods to be used by all tests here...
38
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class BlogPostTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: siyelo-tweetify
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
11
+ platform: ruby
12
+ authors:
13
+ - Glenn Roberts
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-06-04 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: edgar-twitter-search
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 31
30
+ segments:
31
+ - 0
32
+ - 5
33
+ - 10
34
+ version: 0.5.10
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ description: A Rails engine for embedding Twitter extracts
38
+ email: glenn.roberts@siyelo.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - README.rdoc
45
+ - TODO
46
+ files:
47
+ - CHANGELOG
48
+ - MIT-LICENSE
49
+ - README.rdoc
50
+ - Rakefile
51
+ - TODO
52
+ - VERSION
53
+ - app/models/tweet.rb
54
+ - app/views/tweets/_list.html.haml
55
+ - generators/tweetify_install/USAGE
56
+ - generators/tweetify_install/templates/README
57
+ - generators/tweetify_install/templates/migration.rb
58
+ - generators/tweetify_install/templates/tweetify.rb
59
+ - generators/tweetify_install/tweetify_install_generator.rb
60
+ - generators/tweetify_views/USAGE
61
+ - generators/tweetify_views/tweetify_views_generator.rb
62
+ - init.rb
63
+ - lib/tweetify.rb
64
+ - test/performance/browsing_test.rb
65
+ - test/test_helper.rb
66
+ - test/unit/blog_post_test.rb
67
+ has_rdoc: true
68
+ homepage: http://github.com/siyelo/siyelo-tweetify
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options:
73
+ - --charset=UTF-8
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project:
97
+ rubygems_version: 1.3.7
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: A Rails engine for embedding Twitter extracts
101
+ test_files:
102
+ - test/performance/browsing_test.rb
103
+ - test/test_helper.rb
104
+ - test/unit/blog_post_test.rb