yhara-lifelog 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,6 +4,11 @@ LifeLog
4
4
  Install
5
5
  -------
6
6
 
7
+ Do not install :-) or you may lose your data.
8
+ This is early alpha release.
9
+
10
+ If you're brave enough, try:
11
+
7
12
  $ sudo gem install ramaze datamapper do_sqlite3
8
13
  $ sudo gem install yhara-lifelog
9
14
 
data/Rakefile CHANGED
@@ -15,3 +15,8 @@ Jeweler::Tasks.new do |gemspec|
15
15
  gemspec.add_dependency('dm-core')
16
16
  gemspec.add_dependency('do_sqlite3')
17
17
  end
18
+
19
+ desc "install current source as gem"
20
+ task :dogfood => [:gemspec, :build] do
21
+ sh "sudo gem install pkg/lifelog-#{File.read("VERSION").chomp}.gem"
22
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/controller/main.rb CHANGED
@@ -9,11 +9,33 @@ class Main < Controller
9
9
  end
10
10
 
11
11
  def say
12
- Post.create({
12
+ post = Post.create({
13
13
  :posted_at => Time.now,
14
14
  :message => request.params["message"],
15
15
  })
16
+ raise "failed to save post" if post.id.nil?
16
17
 
17
18
  redirect '/'
18
19
  end
20
+
21
+ def search(type, value)
22
+ case type
23
+ when "tag"
24
+ @pager = paginate(Post.all({
25
+ "taggings.tag_id" => Tag.first(:name => value).id,
26
+ :order => [:posted_at.desc]
27
+ }))
28
+ render_view :index
29
+ else
30
+ raise "unknown search type: #{type}"
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def format_message(msg)
37
+ msg.gsub(/#(\S+)/){
38
+ self.anchor("##{$1}", :search, :tag, $1)
39
+ }
40
+ end
19
41
  end
data/lifelog.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{lifelog}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Yutaka HARA"]
9
- s.date = %q{2009-05-24}
9
+ s.date = %q{2009-05-26}
10
10
  s.default_executable = %q{lifelog}
11
11
  s.description = %q{A lifelogging tool written in Ramaze}
12
12
  s.email = %q{yutaka.hara/at/gmail.com}
@@ -25,7 +25,8 @@ Gem::Specification.new do |s|
25
25
  "lifelog.gemspec",
26
26
  "model/init.rb",
27
27
  "model/migrations.rb",
28
- "model/models.rb",
28
+ "model/post.rb",
29
+ "model/tag.rb",
29
30
  "view/index.ges"
30
31
  ]
31
32
  s.has_rdoc = true
data/model/init.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require 'dm-core'
2
+ require 'dm-validations'
2
3
  DataMapper.setup(:default, "sqlite3://#{LifeLog.options[:db]}")
3
4
 
5
+ require __DIR__('./post.rb')
6
+ require __DIR__('./tag.rb')
4
7
  require __DIR__('./migrations.rb')
5
- require __DIR__('./models.rb')
6
8
 
7
9
  #
8
10
  # ramaze paginate for datamapper
data/model/migrations.rb CHANGED
@@ -1,23 +1,3 @@
1
- require 'migration_runner'
2
-
3
- if LifeLog.options[:no_create_post_table]
4
- migration 1, :create_posts do
5
- up {}
6
- down {}
7
- end
8
- else
9
- migration 1, :create_posts do
10
- up do
11
- create_table :posts do
12
- column :id, Integer, :serial => true
13
- column :posted_at, DateTime
14
- column :message, String
15
- end
16
- end
17
- down do
18
- drop_table :posts
19
- end
20
- end
21
- end
22
-
23
- migrate_up!
1
+ # Note: decided not use migraion,
2
+ # until first beta release.
3
+ DataMapper.auto_upgrade!
data/model/post.rb ADDED
@@ -0,0 +1,57 @@
1
+ #require 'dm-timestamps'
2
+
3
+ class Post
4
+ include DataMapper::Resource
5
+
6
+ REXP_TAG = /#(\S+)/
7
+
8
+ property :id, Serial
9
+
10
+ property :posted_at, DateTime
11
+ validates_present :posted_at
12
+
13
+ property :message, String, :length => (1..420)
14
+
15
+ has n, :taggings
16
+ has n, :tags, :through => :taggings, :mutable => true
17
+
18
+ before :save, :create_tags
19
+ after :save, :add_tags
20
+
21
+ def time_str
22
+ self.posted_at.strftime("%Y-%m-%d %H:%M:%S")
23
+ end
24
+
25
+ def create_tags
26
+ if includes_tag?
27
+ scrape_tags.each do |tag_name|
28
+ if Tag.first(:name => tag_name).nil?
29
+ tag = Tag.create(:name => tag_name)
30
+ raise "failed to save tag" if tag.id.nil?
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def add_tags
37
+ if includes_tag?
38
+ scrape_tags.each do |tag_name|
39
+ tag = Tag.first(:name => tag_name)
40
+ raise "<BUG> tag not found" if tag.nil?
41
+
42
+ tagging = Tagging.create(:post => self, :tag => tag)
43
+ raise "failed to save tagging" if tagging.id.nil?
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def includes_tag?
51
+ REXP_TAG =~ self.message
52
+ end
53
+
54
+ def scrape_tags
55
+ self.message.scan(REXP_TAG).flatten
56
+ end
57
+ end
data/model/tag.rb ADDED
@@ -0,0 +1,29 @@
1
+ class Tag
2
+ include DataMapper::Resource
3
+
4
+ property :id, Serial
5
+
6
+ property :name, String, :length => (1..100)
7
+ validates_is_unique :name
8
+
9
+ has n, :taggings
10
+ has n, :post, :through => :taggings, :mutable => true
11
+ end
12
+
13
+ class Tagging
14
+ include DataMapper::Resource
15
+
16
+ property :id, Serial
17
+
18
+ belongs_to :post
19
+ belongs_to :tag
20
+
21
+ validates_with_block do
22
+ if Tagging.first(:post_id => post_id, :tag_id => tag_id)
23
+ [false, "Tagging for (#{post_id}, #{tag_id}) already exists"]
24
+ else
25
+ true
26
+ end
27
+ end
28
+
29
+ end
data/view/index.ges CHANGED
@@ -15,7 +15,7 @@ table do
15
15
  h post.time_str
16
16
  }
17
17
  td(:class => "message"){
18
- h post.message
18
+ format_message(h post.message)
19
19
  }
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yhara-lifelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yutaka HARA
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-24 00:00:00 -07:00
12
+ date: 2009-05-26 00:00:00 -07:00
13
13
  default_executable: lifelog
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -61,7 +61,8 @@ files:
61
61
  - lifelog.gemspec
62
62
  - model/init.rb
63
63
  - model/migrations.rb
64
- - model/models.rb
64
+ - model/post.rb
65
+ - model/tag.rb
65
66
  - view/index.ges
66
67
  has_rdoc: true
67
68
  homepage: http://github.com/yhara/lifelog
data/model/models.rb DELETED
@@ -1,12 +0,0 @@
1
- #require 'dm-timestamps'
2
-
3
- class Post
4
- include DataMapper::Resource
5
- property :id, Serial
6
- property :posted_at, DateTime
7
- property :message, String
8
-
9
- def time_str
10
- self.posted_at.strftime("%Y-%m-%d %H:%M:%S")
11
- end
12
- end