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 +5 -0
- data/Rakefile +5 -0
- data/VERSION +1 -1
- data/controller/main.rb +23 -1
- data/lifelog.gemspec +4 -3
- data/model/init.rb +3 -1
- data/model/migrations.rb +3 -23
- data/model/post.rb +57 -0
- data/model/tag.rb +29 -0
- data/view/index.ges +1 -1
- metadata +4 -3
- data/model/models.rb +0 -12
data/README.md
CHANGED
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.
|
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.
|
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-
|
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/
|
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
|
-
|
2
|
-
|
3
|
-
|
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
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.
|
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-
|
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/
|
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