pilu-terror 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +5 -2
- data/VERSION.yml +2 -2
- data/config/terror.yml.default +6 -6
- data/lib/terror.rb +6 -20
- data/lib/terror/feed_fetcher.rb +1 -1
- data/lib/terror/helper.rb +1 -1
- data/lib/terror/post.rb +13 -5
- data/terror.gemspec +14 -5
- data/test/feeds/example.xml +2 -0
- data/test/post_test.rb +6 -1
- data/test/spec_helper.rb +6 -0
- data/test/terror_test.rb +2 -2
- data/views/feed.builder +2 -2
- metadata +34 -4
data/Rakefile
CHANGED
@@ -19,9 +19,12 @@ begin
|
|
19
19
|
gem.executables = ['terror']
|
20
20
|
gem.post_install_message = 'Run terror projectname and start aggregating.'
|
21
21
|
|
22
|
-
gem.add_dependency 'sinatra',
|
22
|
+
gem.add_dependency 'sinatra', ['>= 0.9.1.1']
|
23
23
|
gem.add_dependency 'feed-normalizer', ['>= 1.5.1']
|
24
|
-
gem.add_dependency '
|
24
|
+
gem.add_dependency 'dm-core', ['>= 0.9.10']
|
25
|
+
gem.add_dependency 'dm-validations', ['>= 0.9.10']
|
26
|
+
gem.add_dependency 'dm-aggregates', ['>= 0.9.10']
|
27
|
+
gem.add_dependency 'do_sqlite3', ['>= 0.9.11']
|
25
28
|
end
|
26
29
|
rescue LoadError
|
27
30
|
end
|
data/VERSION.yml
CHANGED
data/config/terror.yml.default
CHANGED
@@ -3,14 +3,14 @@ global:
|
|
3
3
|
subtitle: the micro aggregator
|
4
4
|
database:
|
5
5
|
development:
|
6
|
-
adapter: sqlite3
|
7
|
-
database: db/terror_dev.sqlite3
|
6
|
+
:adapter: sqlite3
|
7
|
+
:database: db/terror_dev.sqlite3
|
8
8
|
test:
|
9
|
-
adapter: sqlite3
|
10
|
-
database: ':memory:'
|
9
|
+
:adapter: sqlite3
|
10
|
+
:database: ':memory:'
|
11
11
|
production:
|
12
|
-
adapter: sqlite3
|
13
|
-
database: db/terror.sqlite3
|
12
|
+
:adapter: sqlite3
|
13
|
+
:database: db/terror.sqlite3
|
14
14
|
feeds:
|
15
15
|
- http://example.com/rss
|
16
16
|
- http://example.com/rss2
|
data/lib/terror.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
$LOAD_PATH << File.dirname(__FILE__) + '/terror'
|
2
2
|
require 'rubygems'
|
3
|
-
require '
|
3
|
+
require 'dm-core'
|
4
|
+
require 'dm-validations'
|
5
|
+
require 'dm-aggregates'
|
4
6
|
require 'sinatra'
|
5
7
|
require 'yaml'
|
6
8
|
require 'post'
|
@@ -23,27 +25,11 @@ module Terror
|
|
23
25
|
|
24
26
|
def self.init_database
|
25
27
|
init_database_connection
|
26
|
-
init_database_tables
|
27
28
|
end
|
28
29
|
|
29
30
|
def self.init_database_connection
|
30
|
-
|
31
|
+
DataMapper.setup(:default, self.config['database'][Sinatra::Application.environment.to_s])
|
32
|
+
DataMapper.auto_upgrade!
|
31
33
|
end
|
32
|
-
|
33
|
-
def self.init_database_tables
|
34
|
-
ActiveRecord::Schema.define do
|
35
|
-
create_table :posts do |t|
|
36
|
-
t.string :title
|
37
|
-
t.string :source
|
38
|
-
t.string :url
|
39
|
-
t.datetime :date
|
40
|
-
t.datetime :created_at
|
41
|
-
end
|
42
|
-
add_index :posts, :url
|
43
|
-
add_index :posts, :date
|
44
|
-
end
|
45
|
-
rescue ActiveRecord::StatementInvalid
|
46
|
-
# tables already exist
|
47
|
-
end
|
48
|
-
|
34
|
+
|
49
35
|
end
|
data/lib/terror/feed_fetcher.rb
CHANGED
data/lib/terror/helper.rb
CHANGED
data/lib/terror/post.rb
CHANGED
@@ -1,23 +1,31 @@
|
|
1
1
|
require 'feed_fetcher'
|
2
2
|
|
3
3
|
module Terror
|
4
|
-
class Post
|
4
|
+
class Post
|
5
|
+
include DataMapper::Resource
|
5
6
|
include FeedFetcher
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
property :id, Integer, :serial => true
|
9
|
+
property :title, String, :nullable => false, :length => 255
|
10
|
+
property :url, String, :nullable => false, :length => 255, :index => true, :format => /^http|https:\/\//
|
11
|
+
property :source, String, :length => 255
|
12
|
+
property :date, Time, :nullable => false
|
9
13
|
|
10
14
|
def self.paginate(options = {})
|
11
15
|
per_page = options[:per_page]
|
12
16
|
page = options[:page].to_i > 0 ? options[:page].to_i : 1
|
13
|
-
posts = self.
|
17
|
+
posts = self.all(:order => [:date.desc], :limit => per_page, :offset => per_page * (page - 1))
|
14
18
|
add_pagination_info(posts, per_page, page)
|
15
19
|
end
|
16
20
|
|
17
21
|
protected
|
18
22
|
|
19
23
|
def self.add_pagination_info(posts, per_page, page)
|
20
|
-
posts.
|
24
|
+
posts.instance_eval do
|
25
|
+
class << self
|
26
|
+
attr_accessor :current_page, :total_pages
|
27
|
+
end
|
28
|
+
end
|
21
29
|
posts.total_pages = (self.count.to_f / per_page).ceil
|
22
30
|
posts.current_page = page
|
23
31
|
posts
|
data/terror.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{terror}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.3.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Andrea Franz"]
|
9
|
-
s.date = %q{2009-03-
|
9
|
+
s.date = %q{2009-03-17}
|
10
10
|
s.default_executable = %q{terror}
|
11
11
|
s.email = %q{andrea@gravityblast.com}
|
12
12
|
s.executables = ["terror"]
|
@@ -27,15 +27,24 @@ Gem::Specification.new do |s|
|
|
27
27
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
28
|
s.add_runtime_dependency(%q<sinatra>, [">= 0.9.1.1"])
|
29
29
|
s.add_runtime_dependency(%q<feed-normalizer>, [">= 1.5.1"])
|
30
|
-
s.add_runtime_dependency(%q<
|
30
|
+
s.add_runtime_dependency(%q<dm-core>, [">= 0.9.10"])
|
31
|
+
s.add_runtime_dependency(%q<dm-validations>, [">= 0.9.10"])
|
32
|
+
s.add_runtime_dependency(%q<dm-aggregates>, [">= 0.9.10"])
|
33
|
+
s.add_runtime_dependency(%q<do_sqlite3>, [">= 0.9.11"])
|
31
34
|
else
|
32
35
|
s.add_dependency(%q<sinatra>, [">= 0.9.1.1"])
|
33
36
|
s.add_dependency(%q<feed-normalizer>, [">= 1.5.1"])
|
34
|
-
s.add_dependency(%q<
|
37
|
+
s.add_dependency(%q<dm-core>, [">= 0.9.10"])
|
38
|
+
s.add_dependency(%q<dm-validations>, [">= 0.9.10"])
|
39
|
+
s.add_dependency(%q<dm-aggregates>, [">= 0.9.10"])
|
40
|
+
s.add_dependency(%q<do_sqlite3>, [">= 0.9.11"])
|
35
41
|
end
|
36
42
|
else
|
37
43
|
s.add_dependency(%q<sinatra>, [">= 0.9.1.1"])
|
38
44
|
s.add_dependency(%q<feed-normalizer>, [">= 1.5.1"])
|
39
|
-
s.add_dependency(%q<
|
45
|
+
s.add_dependency(%q<dm-core>, [">= 0.9.10"])
|
46
|
+
s.add_dependency(%q<dm-validations>, [">= 0.9.10"])
|
47
|
+
s.add_dependency(%q<dm-aggregates>, [">= 0.9.10"])
|
48
|
+
s.add_dependency(%q<do_sqlite3>, [">= 0.9.11"])
|
40
49
|
end
|
41
50
|
end
|
data/test/feeds/example.xml
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
<id>http://example.com/post-1</id>
|
10
10
|
<link type="text/html" rel="alternate" href="http://example.com/post-1"/>
|
11
11
|
<updated>2009-03-15T01:11:33Z</updated>
|
12
|
+
<published>2009-03-15T01:11:33Z</published>
|
12
13
|
<title>Title 1</title>
|
13
14
|
<author>
|
14
15
|
<name>author</name>
|
@@ -19,6 +20,7 @@
|
|
19
20
|
<id>http://example.com/post-2</id>
|
20
21
|
<link type="text/html" rel="alternate" href="http://example.com/post-2"/>
|
21
22
|
<updated>2009-03-15T01:11:33Z</updated>
|
23
|
+
<published>2009-03-15T01:11:33Z</published>
|
22
24
|
<title>Title 2</title>
|
23
25
|
<author>
|
24
26
|
<name>author</name>
|
data/test/post_test.rb
CHANGED
@@ -23,11 +23,16 @@ describe 'Creating posts' do
|
|
23
23
|
post = Terror::Post.create(:url => 'example.com')
|
24
24
|
post.errors.on(:url).should_not be_nil
|
25
25
|
end
|
26
|
+
|
27
|
+
it 'should validate presence of date' do
|
28
|
+
@blank_post.errors.on(:date).should_not be_nil
|
29
|
+
end
|
26
30
|
|
27
31
|
it 'should create post' do
|
28
|
-
post = Terror::Post.create(:url => 'http://example.com/', :title => 'Example')
|
32
|
+
post = Terror::Post.create(:url => 'http://example.com/', :title => 'Example', :date => Time.now)
|
29
33
|
post.should be_valid
|
30
34
|
end
|
35
|
+
|
31
36
|
end
|
32
37
|
|
33
38
|
describe 'Fetching feed' do
|
data/test/spec_helper.rb
CHANGED
data/test/terror_test.rb
CHANGED
data/views/feed.builder
CHANGED
@@ -8,14 +8,14 @@ builder do |xml|
|
|
8
8
|
:rel => 'alternate'
|
9
9
|
xml.link :type => 'application/atom+xml',
|
10
10
|
:href => 'http://localhost:4567'
|
11
|
-
xml.updated(rfc_3339(@posts.first ? @posts.first.
|
11
|
+
xml.updated(rfc_3339(@posts.first ? @posts.first.date : Time.now))
|
12
12
|
@posts.each do |post|
|
13
13
|
xml.entry do |entry|
|
14
14
|
entry.id post.url
|
15
15
|
entry.link :type => 'text/html',
|
16
16
|
:href => post.url,
|
17
17
|
:rel => 'alternate'
|
18
|
-
entry.updated rfc_3339(post.
|
18
|
+
entry.updated rfc_3339(post.date)
|
19
19
|
entry.title post.title
|
20
20
|
entry.author do |author|
|
21
21
|
author.name post.source
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pilu-terror
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrea Franz
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-17 00:00:00 -07:00
|
13
13
|
default_executable: terror
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -33,14 +33,44 @@ dependencies:
|
|
33
33
|
version: 1.5.1
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: dm-core
|
37
37
|
type: :runtime
|
38
38
|
version_requirement:
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
43
|
+
version: 0.9.10
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: dm-validations
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.10
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: dm-aggregates
|
57
|
+
type: :runtime
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.9.10
|
64
|
+
version:
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: do_sqlite3
|
67
|
+
type: :runtime
|
68
|
+
version_requirement:
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 0.9.11
|
44
74
|
version:
|
45
75
|
description:
|
46
76
|
email: andrea@gravityblast.com
|