rtlog 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,276 @@
1
+ require 'rtlog'
2
+ require 'erb'
3
+ require 'fileutils'
4
+
5
+ module Rtlog
6
+
7
+ class Page
8
+ include ERB::Util
9
+
10
+ attr_reader :config
11
+ attr_reader :log
12
+ attr_writer :logger
13
+
14
+ def initialize config, log
15
+ @config = config
16
+ @log = log
17
+ end
18
+
19
+ def logger
20
+ defined?(@logger) ? @logger : Rtlog.logger
21
+ end
22
+
23
+ def config_dir
24
+ File.expand_path( config['config_dir'] )
25
+ end
26
+
27
+ def parse file_name
28
+ # logger.debug("Template parsing: #{file_name}")
29
+ open(file_name) { |io| ERB.new( io.read ) }.result(binding)
30
+ rescue => ex
31
+ "<p>#{h(ex.to_s)}</p><pre class='error'>#{ex.backtrace.map{|m| h(m) }.join('<br />')}</pre>"
32
+ end
33
+
34
+ def generate options={}
35
+ options = { :layout => 'layout.html.erb' }.merge(options)
36
+
37
+ template = nil
38
+ if options[:layout]
39
+ template = File.join( config_dir, options[:layout] )
40
+ template = File.join( Rtlog.root, 'lib', 'rtlog', 'example', 'config', 'layout.html.erb' ) unless File.exist?(template)
41
+ end
42
+ template = template_path unless template
43
+ FileUtils.mkdir_p( File.dirname(file_path) ) unless File.exist?( File.dirname(file_path) )
44
+ open(file_path, "w") do |io|
45
+ io.write(parse(template))
46
+ end
47
+ logger.debug("#{self.class} is generated: #{file_path}")
48
+ end
49
+
50
+ def size
51
+ config['pages'][page_name]['size'] || 7
52
+ rescue
53
+ 7
54
+ end
55
+
56
+ def template_path
57
+ unless defined?(@template_path)
58
+ @template_path = nil
59
+ if config['pages'] && config['pages'][page_name] && config['pages'][page_name]['template']
60
+ @template_path = ::File.join(config_dir, config['pages'][page_name]['template'])
61
+ end
62
+ unless @template_path && File.exist?(@template_path)
63
+ @template_path = File.join( Rtlog.root, 'lib', 'rtlog', 'example', 'config', template_file_name )
64
+ end
65
+ end
66
+ @template_path
67
+ end
68
+
69
+ def template_file_name
70
+ class_name = self.class.name.split('::').last.gsub('Page', '').downcase
71
+ "#{class_name}.html.erb"
72
+ end
73
+
74
+ def month_pages
75
+ @month_pages = []
76
+ log.year_entries.each do |y|
77
+ y.month_entries.each do |m|
78
+ @month_pages << MonthPage.new(config, log, m)
79
+ end
80
+ end
81
+ @month_pages
82
+ end
83
+
84
+ def index_url
85
+ config['url_prefix']
86
+ end
87
+ end
88
+
89
+ class IndexPage < Page
90
+
91
+ def title
92
+ 'Index'
93
+ end
94
+
95
+ def file_path
96
+ File.expand_path( File.join(config['target_dir'], 'index.html') )
97
+ end
98
+
99
+ def url
100
+ config['url_prefix']
101
+ end
102
+
103
+ def page_name
104
+ 'index'
105
+ end
106
+
107
+ def recent_day_pages size
108
+ recent_day_pages = []
109
+ log.recent_day_entries(size).each do |d|
110
+ recent_day_pages << DayPage.new( config, log, d )
111
+ end
112
+ recent_day_pages
113
+ end
114
+ end
115
+
116
+ class RssPage < IndexPage
117
+ def url
118
+ config['url_prefix'] + '/feed/rss'
119
+ end
120
+
121
+ def file_path
122
+ File.expand_path( File.join(config['target_dir'], 'feed', 'rss.xml') )
123
+ end
124
+
125
+ def page_name
126
+ 'rss'
127
+ end
128
+
129
+ def generate
130
+ super(:layout => nil)
131
+ end
132
+
133
+ def template_file_name
134
+ 'rss.xml.erb'
135
+ end
136
+ end
137
+
138
+ class MonthPage < Page
139
+ attr_reader :month_entry
140
+ attr_accessor :current_page
141
+
142
+ def initialize config, log, month_entry
143
+ @config = config
144
+ @log = log
145
+ @month_entry = month_entry
146
+ @current_page = 1
147
+ end
148
+
149
+ def title
150
+ date.strftime('%Y-%m')
151
+ end
152
+
153
+ def date
154
+ @month_entry.date
155
+ end
156
+
157
+ def current_day_pages
158
+ current_day_pages = []
159
+ month_entry.day_entries[(current_page - 1) * per_page, per_page].each do |d|
160
+ current_day_pages << DayPage.new( config, log, d )
161
+ end
162
+ current_day_pages
163
+ end
164
+
165
+ def per_page
166
+ size
167
+ end
168
+
169
+ def total_entries
170
+ @total_entries ||= month_entry.day_entries.size
171
+ @total_entries
172
+ end
173
+
174
+ def total_tweets
175
+ month_entry.size
176
+ end
177
+
178
+ def total_pages
179
+ (Float.induced_from(total_entries)/Float.induced_from(per_page)).ceil
180
+ end
181
+
182
+ def previous
183
+ return false if current_page == 1
184
+ previous_page = self.clone
185
+ previous_page.current_page -= 1
186
+ previous_page
187
+ end
188
+
189
+ def next
190
+ return false if current_page == total_pages
191
+ next_page = self.clone
192
+ next_page.current_page += 1
193
+ next_page
194
+ end
195
+
196
+ def next_month_page
197
+ unless defined?(@next_month_page)
198
+ month = log.next_month_entry(self.month_entry)
199
+ return nil unless month
200
+ @next_month_page = MonthPage.new(config, log, month)
201
+ end
202
+ @next_month_page
203
+ end
204
+
205
+ def previous_month_page
206
+ unless defined?(@previous_month_page)
207
+ month = log.previous_month_entry(self.month_entry)
208
+ return nil unless month
209
+ @previous_month_page = MonthPage.new(config, log, month)
210
+ end
211
+ @previous_month_page
212
+ end
213
+
214
+ def file_path
215
+ page = current_page == 1 ? '' : "_#{current_page}"
216
+ File.expand_path( File.join(config['target_dir'], path, "index#{page}.html") )
217
+ end
218
+
219
+ def url(page=current_page)
220
+ page = page == 1 ? '' : "index_#{page}"
221
+ config['url_prefix'] + '/' + path + '/' + page
222
+ end
223
+
224
+ protected
225
+ def page_name
226
+ 'month'
227
+ end
228
+
229
+ def path
230
+ month_entry.date.strftime('%Y/%m')
231
+ end
232
+ end
233
+
234
+ class DayPage < Page
235
+ attr_reader :day_entry
236
+
237
+ def initialize config, log, day_entry
238
+ @config = config
239
+ @log = log
240
+ @day_entry = day_entry
241
+ end
242
+
243
+ def title
244
+ date.strftime('%Y-%m-%d')
245
+ end
246
+
247
+ def date
248
+ @day_entry.date
249
+ end
250
+
251
+ def tweets
252
+ @day_entry.tweets do |tw|
253
+ yield tw
254
+ end
255
+ end
256
+
257
+ def file_path
258
+ File.expand_path( File.join(config['target_dir'], path, 'index.html') )
259
+ end
260
+
261
+ def url
262
+ config['url_prefix'] + '/' + path
263
+ end
264
+
265
+ protected
266
+ def page_name
267
+ 'day'
268
+ end
269
+
270
+ def path
271
+ day_entry.date.strftime('%Y/%m/%d')
272
+ end
273
+ end
274
+
275
+ end
276
+
data/lib/rtlog.rb ADDED
@@ -0,0 +1,15 @@
1
+
2
+ module Rtlog
3
+ class << self
4
+ def logger=(logger)
5
+ @@logger = logger
6
+ end
7
+ def logger
8
+ @@logger
9
+ end
10
+
11
+ def root
12
+ File.join(File.dirname(__FILE__), '..')
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rtlog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - yuanying
8
+ autorequire: ""
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-08-30 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.4
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: json_pure
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.9
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: rubytter
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.8.0
44
+ version:
45
+ description: ""
46
+ email: yuanying at fraction dot jp
47
+ executables:
48
+ - rtlog-create
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.mdown
53
+ - ChangeLog
54
+ files:
55
+ - README.mdown
56
+ - ChangeLog
57
+ - Rakefile
58
+ - bin/rtlog-create
59
+ - lib/rtlog/archives.rb
60
+ - lib/rtlog/example/config/config.yml
61
+ - lib/rtlog/example/config/day.html.erb
62
+ - lib/rtlog/example/config/index.html.erb
63
+ - lib/rtlog/example/config/layout.html.erb
64
+ - lib/rtlog/example/config/month.html.erb
65
+ - lib/rtlog/example/config/rss.xml.erb
66
+ - lib/rtlog/example/public/styles/site.css
67
+ - lib/rtlog/pages.rb
68
+ - lib/rtlog.rb
69
+ has_rdoc: true
70
+ homepage: http://rtlog.rubyforge.org
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options:
75
+ - --title
76
+ - rtlog documentation
77
+ - --charset
78
+ - utf-8
79
+ - --opname
80
+ - index.html
81
+ - --line-numbers
82
+ - --main
83
+ - README.mdown
84
+ - --inline-source
85
+ - --exclude
86
+ - ^(examples|extras)/
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
100
+ version:
101
+ requirements: []
102
+
103
+ rubyforge_project: rtlog
104
+ rubygems_version: 1.3.5
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: ""
108
+ test_files: []
109
+