yhara-lifelog 0.0.2 → 0.0.3

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