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 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