pilu-terror 0.2.2 → 0.3.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/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', ['>= 0.9.1.1']
22
+ gem.add_dependency 'sinatra', ['>= 0.9.1.1']
23
23
  gem.add_dependency 'feed-normalizer', ['>= 1.5.1']
24
- gem.add_dependency 'activerecord', ['>= 2.2.2']
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
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 2
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 2
4
+ :minor: 3
@@ -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
@@ -1,6 +1,8 @@
1
1
  $LOAD_PATH << File.dirname(__FILE__) + '/terror'
2
2
  require 'rubygems'
3
- require 'activerecord'
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
- ActiveRecord::Base.establish_connection(self.config['database'][Sinatra::Application.environment.to_s])
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
@@ -21,7 +21,7 @@ module Terror
21
21
  :url => entry.url,
22
22
  :source => feed.title,
23
23
  :date => entry.date_published
24
- ) unless Post.exists?(:url => entry.url)
24
+ ) unless self.first(:url => entry.url)
25
25
  end
26
26
  end
27
27
 
@@ -12,7 +12,7 @@ module Terror
12
12
  end
13
13
 
14
14
  def rfc_3339(time)
15
- time.strftime("%Y-%m-%dT%H:%M:%SZ")
15
+ time.strftime("%Y-%m-%dT%H:%M:%SZ") if time
16
16
  end
17
17
 
18
18
  def newer_page?
@@ -1,23 +1,31 @@
1
1
  require 'feed_fetcher'
2
2
 
3
3
  module Terror
4
- class Post < ActiveRecord::Base
4
+ class Post
5
+ include DataMapper::Resource
5
6
  include FeedFetcher
6
7
 
7
- validates_presence_of :title, :url
8
- validates_format_of :url, :with => /^http|https:\/\//
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.find(:all, :order => 'date DESC', :limit => per_page, :offset => per_page * (page - 1))
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.class_eval { attr_accessor :current_page, :total_pages }
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
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{terror}
5
- s.version = "0.2.2"
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-16}
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<activerecord>, [">= 2.2.2"])
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<activerecord>, [">= 2.2.2"])
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<activerecord>, [">= 2.2.2"])
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
@@ -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>
@@ -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
@@ -3,4 +3,10 @@ require 'sinatra'
3
3
  require 'sinatra/test'
4
4
  require 'spec'
5
5
  require 'spec/interop/test'
6
+
7
+ disable :run
8
+ disable :reload
9
+ set :environment, :test
10
+ set :root, File.dirname(__FILE__) + '/../'
11
+
6
12
  require File.dirname(__FILE__) + '/../terror_aggregator'
@@ -1,11 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
- describe 'Test' do
3
+ describe 'Getting pages' do
4
4
  include Sinatra::Test
5
5
 
6
6
  it 'should show posts' do
7
7
  get '/'
8
- response.should be_ok
8
+ response.should be_ok
9
9
  end
10
10
 
11
11
  it 'should show feed' do
@@ -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.created_at : Time.now))
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.created_at)
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.2.2
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-16 00:00:00 -07:00
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: activerecord
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: 2.2.2
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