tdiary 4.0.1 → 4.0.1.20130903

Sign up to get free protection for your applications and to get access to all the features.
@@ -34,7 +34,7 @@ RSpec.configure do |config|
34
34
  end
35
35
 
36
36
  config.after(:all) do
37
- FileUtils.rm_r work_conf
37
+ FileUtils.rm_rf work_conf
38
38
  end
39
39
 
40
40
  config.before(:each) do
@@ -42,7 +42,7 @@ RSpec.configure do |config|
42
42
  end
43
43
 
44
44
  config.after(:each) do
45
- FileUtils.rm_r work_data_dir
45
+ FileUtils.rm_rf work_data_dir
46
46
  end
47
47
 
48
48
  if ENV['TEST_MODE'] == 'rdb'
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ require 'tdiary'
4
+ require 'tdiary/configuration'
5
+
6
+ describe TDiary::Configuration do
7
+ let(:tdiary_conf) { File.expand_path("../../fixtures/tdiary.conf.webrick", __FILE__) }
8
+ let(:work_conf) { File.expand_path('../../../tdiary.conf', __FILE__) }
9
+
10
+ before do
11
+ FileUtils.cp_r tdiary_conf, work_conf, :verbose => false
12
+ end
13
+
14
+ after do
15
+ FileUtils.rm_rf work_conf
16
+ end
17
+
18
+ describe "TDiary.configuration" do
19
+ before do
20
+ @obj = TDiary.configuration
21
+ end
22
+
23
+ it { @obj.class.should eq TDiary::Configuration }
24
+ it "singleton" do
25
+ @obj.should eq TDiary.configuration
26
+ end
27
+ end
28
+
29
+ it "TDiary.configuration.attribute" do
30
+ TDiary.configuration.style.should == "Wiki"
31
+ end
32
+ end
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'misc/style/emptdiary/emptdiary_style'
6
6
 
7
- describe TDiary::EmptdiaryDiary do
7
+ describe TDiary::Style::EmptdiaryDiary do
8
8
  before do
9
- @diary = TDiary::EmptdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::EmptdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'misc/style/etdiary/etdiary_style'
6
6
 
7
- describe TDiary::EtdiaryDiary do
7
+ describe TDiary::Style::EtdiaryDiary do
8
8
  before do
9
- @diary = TDiary::EtdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::EtdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'misc/style/gfm/gfm_style'
6
6
 
7
- describe TDiary::GfmDiary do
7
+ describe TDiary::Style::GfmDiary do
8
8
  before do
9
- @diary = TDiary::GfmDiary.new(Time.at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::GfmDiary.new(Time.at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'misc/style/rd/rd_style'
6
6
 
7
- describe TDiary::RdDiary do
7
+ describe TDiary::Style::RdDiary do
8
8
  before do
9
- @diary = TDiary::RdDiary.new(Time::at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::RdDiary.new(Time::at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'tdiary/style/tdiary_style'
6
6
 
7
- describe TDiary::TdiaryDiary do
7
+ describe TDiary::Style::TdiaryDiary do
8
8
  before do
9
- @diary = TDiary::TdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::TdiaryDiary.new(Time::at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
@@ -4,9 +4,9 @@ require 'spec_helper'
4
4
  require 'tdiary'
5
5
  require 'tdiary/style/wiki_style'
6
6
 
7
- describe TDiary::WikiDiary do
7
+ describe TDiary::Style::WikiDiary do
8
8
  before do
9
- @diary = TDiary::WikiDiary.new(Time.at( 1041346800 ), "TITLE", "")
9
+ @diary = TDiary::Style::WikiDiary.new(Time.at( 1041346800 ), "TITLE", "")
10
10
  end
11
11
 
12
12
  describe '#append' do
data/tdiary.rb CHANGED
@@ -34,7 +34,8 @@ module TDiary
34
34
  PATH = File::dirname( __FILE__ ).untaint
35
35
 
36
36
  # tDiary configuration class, initialize tdiary.conf and stored configuration.
37
- autoload :Config, 'tdiary/config'
37
+ autoload :Configuration, 'tdiary/configuration'
38
+ autoload :Config, 'tdiary/configuration'
38
39
  # tDiary plugin class, loading all Plugin and eval plugins in view context.
39
40
  autoload :Plugin, 'tdiary/plugin'
40
41
  # tDiary Filter class, all filters is loaded by in TDiaryView.
@@ -46,10 +47,7 @@ module TDiary
46
47
  autoload :Application, 'tdiary/application'
47
48
 
48
49
  # Diary model class
49
- autoload :DiaryBase, 'tdiary/style'
50
- autoload :SectionBase, 'tdiary/style'
51
- autoload :CategorizableDiary, 'tdiary/style'
52
- autoload :UncategorizableDiary, 'tdiary/style'
50
+ autoload :Style, 'tdiary/style'
53
51
  autoload :Comment, 'tdiary/comment'
54
52
  autoload :CommentManager, 'tdiary/comment_manager'
55
53
  autoload :RefererManager, 'tdiary/referer_manager'
@@ -130,6 +128,10 @@ module TDiary
130
128
  def server_root
131
129
  Dir.pwd
132
130
  end
131
+
132
+ def configuration
133
+ @@configuration ||= Configuration.new
134
+ end
133
135
  end
134
136
  end
135
137
 
@@ -1,10 +1,10 @@
1
- # -*- coding: utf-8; -*-
1
+ # -*- coding: utf-8 -*-
2
2
  #
3
- # class Config
3
+ # class Configuration
4
4
  # configuration class
5
5
  #
6
6
  module TDiary
7
- class Config
7
+ class Configuration
8
8
  attr_reader :database_url
9
9
 
10
10
  def initialize( cgi = nil, request = nil )
@@ -24,6 +24,22 @@ module TDiary
24
24
  @io_class.save_cgi_conf(self, result)
25
25
  end
26
26
 
27
+ #
28
+ # get/set/delete plugin options
29
+ #
30
+ def []( key )
31
+ @options[key]
32
+ end
33
+
34
+ def []=( key, val )
35
+ @options2[key] = @options[key] = val
36
+ end
37
+
38
+ def delete( key )
39
+ @options.delete( key )
40
+ @options2.delete( key )
41
+ end
42
+
27
43
  # backword compatibility, you can use @cgi.mobile_agent?
28
44
  def mobile_agent?
29
45
  @request.mobile_agent?
@@ -49,22 +65,6 @@ module TDiary
49
65
  end
50
66
  end
51
67
 
52
- #
53
- # get/set/delete plugin options
54
- #
55
- def []( key )
56
- @options[key]
57
- end
58
-
59
- def []=( key, val )
60
- @options2[key] = @options[key] = val
61
- end
62
-
63
- def delete( key )
64
- @options.delete( key )
65
- @options2.delete( key )
66
- end
67
-
68
68
  def to_native( str, charset = nil )
69
69
  str = str.dup
70
70
  if str.encoding == Encoding::ASCII_8BIT
@@ -80,6 +80,55 @@ module TDiary
80
80
  end
81
81
 
82
82
  private
83
+
84
+ # loading tdiary.conf in @data_path.
85
+ def load_cgi_conf
86
+ def_vars1 = ''
87
+ def_vars2 = ''
88
+ [
89
+ :tdiary_version,
90
+ :html_title, :author_name, :author_mail, :index_page, :hour_offset,
91
+ :description, :icon, :banner, :x_frame_options,
92
+ :header, :footer,
93
+ :section_anchor, :comment_anchor, :date_format, :latest_limit, :show_nyear,
94
+ :theme, :css,
95
+ :show_comment, :comment_limit, :comment_limit_per_day,
96
+ :mail_on_comment, :mail_header,
97
+ :show_referer, :no_referer2, :only_volatile2, :referer_table2,
98
+ :options2,
99
+ ].each do |var|
100
+ def_vars1 << "#{var} = nil\n"
101
+ def_vars2 << "@#{var} = #{var} unless #{var} == nil\n"
102
+ end
103
+
104
+ unless @io_class
105
+ require 'tdiary/io/cache/file'
106
+ require 'tdiary/io/default'
107
+ @io_class = DefaultIO
108
+ end
109
+
110
+ cgi_conf = @io_class.load_cgi_conf(self)
111
+ cgi_conf.untaint unless @secure
112
+
113
+ b = binding.taint
114
+ eval( def_vars1, b )
115
+ Safe::safe( @secure ? 4 : 1 ) do
116
+ begin
117
+ eval( cgi_conf, b, "(TDiary::Config#load_cgi_conf)", 1 )
118
+ rescue SyntaxError
119
+ enc = case @lang
120
+ when 'en'
121
+ 'UTF-8'
122
+ else
123
+ 'EUC-JP'
124
+ end
125
+ cgi_conf.force_encoding( enc )
126
+ retry
127
+ end
128
+ end if cgi_conf
129
+ eval( def_vars2, b )
130
+ end
131
+
83
132
  # loading tdiary.conf in current directory
84
133
  def configure_attrs
85
134
  @secure = true unless @secure
@@ -149,56 +198,6 @@ module TDiary
149
198
  @section_anchor = @paragraph_anchor unless @section_anchor
150
199
  end
151
200
 
152
- # loading tdiary.conf in @data_path.
153
- def load_cgi_conf
154
- def_vars1 = ''
155
- def_vars2 = ''
156
- [
157
- :tdiary_version,
158
- :html_title, :author_name, :author_mail, :index_page, :hour_offset,
159
- :description, :icon, :banner, :x_frame_options,
160
- :header, :footer,
161
- :section_anchor, :comment_anchor, :date_format, :latest_limit, :show_nyear,
162
- :theme, :css,
163
- :show_comment, :comment_limit, :comment_limit_per_day,
164
- :mail_on_comment, :mail_header,
165
- :show_referer, :no_referer2, :only_volatile2, :referer_table2,
166
- :options2,
167
- ].each do |var|
168
- def_vars1 << "#{var} = nil\n"
169
- def_vars2 << "@#{var} = #{var} unless #{var} == nil\n"
170
- end
171
-
172
- unless @io_class
173
- require 'tdiary/io/cache/file'
174
- require 'tdiary/io/default'
175
- @io_class = DefaultIO
176
- end
177
-
178
- cgi_conf = @io_class.load_cgi_conf(self)
179
- cgi_conf.untaint unless @secure
180
-
181
- b = binding.taint
182
- eval( def_vars1, b )
183
- Safe::safe( @secure ? 4 : 1 ) do
184
- begin
185
- eval( cgi_conf, b, "(TDiary::Config#load_cgi_conf)", 1 )
186
- rescue SyntaxError
187
- enc = case @lang
188
- when 'en'
189
- 'UTF-8'
190
- else
191
- 'EUC-JP'
192
- end
193
- cgi_conf.force_encoding( enc )
194
- retry
195
- end
196
- end if cgi_conf
197
- eval( def_vars2, b )
198
- end
199
-
200
- private
201
-
202
201
  def setup_attr_accessor_to_all_ivars
203
202
  names = instance_variables().collect {|ivar| ivar.to_s.sub(/@/, '') }
204
203
  (class << self; self; end).class_eval { attr_accessor *names }
@@ -227,6 +226,9 @@ module TDiary
227
226
  nil
228
227
  end
229
228
  end
229
+
230
+ # backword compatibility
231
+ Config = Configuration
230
232
  end
231
233
 
232
234
  # Local Variables:
@@ -46,7 +46,7 @@ module TDiary
46
46
  Dir.glob("#{path}/*_style.rb") do |style_file|
47
47
  require style_file.untaint
48
48
  style = File.basename(style_file).sub(/_style\.rb$/, '')
49
- @styles[style] = TDiary.const_get("#{style.capitalize}Diary")
49
+ @styles[style] = TDiary::Style.const_get("#{style.capitalize}Diary")
50
50
  end
51
51
  end
52
52
  end
@@ -132,7 +132,7 @@ end
132
132
  Management a day of diary
133
133
  =end
134
134
  class Diary
135
- include TDiary::DiaryBase
135
+ include TDiary::BaseDiary
136
136
  include TDiary::UncategorizableDiary
137
137
 
138
138
  def initialize( date, title, body )
@@ -1,187 +1,181 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module TDiary
3
- #
4
- # module SectionBase
5
- # Base module of Section.
6
- #
7
- module SectionBase
8
-
9
- attr_reader :subtitle, :author
10
- attr_reader :categories, :stripped_subtitle
11
- attr_reader :subtitle_to_html, :stripped_subtitle_to_html, :body_to_html
12
-
13
- def body
14
- @body.dup
15
- end
3
+ module Style
4
+ module BaseSection
16
5
 
17
- def body=(str)
18
- @body = str
19
- end
6
+ attr_reader :subtitle, :author
7
+ attr_reader :categories, :stripped_subtitle
8
+ attr_reader :subtitle_to_html, :stripped_subtitle_to_html, :body_to_html
20
9
 
21
- def html4(date, idx, opt)
22
- r = %Q[<div class="section">\n]
23
- r << %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
24
- r << do_html4( date, idx, opt )
25
- r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
26
- r << "</div>\n"
27
- end
10
+ def body
11
+ @body.dup
12
+ end
28
13
 
29
- def chtml(date, idx, opt)
30
- r = %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
31
- r << do_html4( date, idx, opt )
32
- r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
33
- end
14
+ def body=(str)
15
+ @body = str
16
+ end
34
17
 
35
- def to_s
36
- to_src
37
- end
18
+ def html4(date, idx, opt)
19
+ r = %Q[<div class="section">\n]
20
+ r << %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
21
+ r << do_html4( date, idx, opt )
22
+ r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
23
+ r << "</div>\n"
24
+ end
38
25
 
39
- def categories_to_string
40
- @categories = categories
41
- cat_str = ""
42
- categories.each {|cat| cat_str << "[#{cat}]"}
43
- cat_str << " " unless cat_str.empty?
44
- end
45
- end
26
+ def chtml(date, idx, opt)
27
+ r = %Q[<%=section_enter_proc( Time.at( #{date.to_i} ) )%>\n]
28
+ r << do_html4( date, idx, opt )
29
+ r << %Q[<%=section_leave_proc( Time.at( #{date.to_i} ) )%>\n]
30
+ end
46
31
 
47
- #
48
- # module DiaryBase
49
- # Base module of Diary.
50
- #
51
- module DiaryBase
52
- include ERB::Util
53
- include CommentManager
54
- include RefererManager
55
-
56
- def init_diary
57
- init_comments
58
- init_referers
59
- @show = true
60
- end
32
+ def to_s
33
+ to_src
34
+ end
61
35
 
62
- def date
63
- @date
36
+ def categories_to_string
37
+ @categories = categories
38
+ cat_str = ""
39
+ categories.each {|cat| cat_str << "[#{cat}]"}
40
+ cat_str << " " unless cat_str.empty?
41
+ end
64
42
  end
65
43
 
66
- def set_date( date )
67
- if date.class == String then
68
- y, m, d = date.scan( /^(\d{4})(\d\d)(\d\d)$/ )[0]
69
- raise ArgumentError::new( 'date string needs YYYYMMDD format.' ) unless y
70
- @date = Time::local( y, m, d )
71
- else
72
- @date = date
44
+ module BaseDiary
45
+ include ERB::Util
46
+ include CommentManager
47
+ include RefererManager
48
+
49
+ def init_diary
50
+ init_comments
51
+ init_referers
52
+ @show = true
73
53
  end
74
- end
75
54
 
76
- def title
77
- @title || ''
78
- end
55
+ def date
56
+ @date
57
+ end
79
58
 
80
- def set_title( title )
81
- @title = title
82
- @last_modified = Time::now
83
- end
59
+ def set_date( date )
60
+ if date.class == String then
61
+ y, m, d = date.scan( /^(\d{4})(\d\d)(\d\d)$/ )[0]
62
+ raise ArgumentError::new( 'date string needs YYYYMMDD format.' ) unless y
63
+ @date = Time::local( y, m, d )
64
+ else
65
+ @date = date
66
+ end
67
+ end
84
68
 
85
- def last_modified
86
- # 日本語を含むツッコミを入れると diary.last_modified が String になる (原因不明)
87
- # (PStore 保存前は Time だが, 保存後に String となる)
88
- # 暫定的に String だったら Time へ変換する
89
- if @last_modified.instance_of? String
90
- @last_modified = Time.at(0)
91
- elsif @last_modified
92
- @last_modified
93
- else
94
- Time::at( 0 )
69
+ def title
70
+ @title || ''
95
71
  end
96
- end
97
72
 
98
- def last_modified=( lm )
99
- @last_modified = lm
100
- end
73
+ def set_title( title )
74
+ @title = title
75
+ @last_modified = Time::now
76
+ end
101
77
 
102
- def visible?
103
- @show != false;
104
- end
78
+ def last_modified
79
+ # 日本語を含むツッコミを入れると diary.last_modified が String になる (原因不明)
80
+ # (PStore 保存前は Time だが, 保存後に String となる)
81
+ # 暫定的に String だったら Time へ変換する
82
+ if @last_modified.instance_of? String
83
+ @last_modified = Time.at(0)
84
+ elsif @last_modified
85
+ @last_modified
86
+ else
87
+ Time::at( 0 )
88
+ end
89
+ end
105
90
 
106
- def show( s )
107
- @show = s
108
- end
91
+ def last_modified=( lm )
92
+ @last_modified = lm
93
+ end
109
94
 
110
- def replace(date, title, body)
111
- set_date( date )
112
- set_title( title )
113
- @sections = []
114
- append( body )
115
- end
95
+ def visible?
96
+ @show != false;
97
+ end
116
98
 
117
- def each_section
118
- @sections.each do |section|
119
- yield section
99
+ def show( s )
100
+ @show = s
120
101
  end
121
- end
122
102
 
123
- def delete_section(index)
124
- @sections.delete_at(index - 1)
125
- end
103
+ def replace(date, title, body)
104
+ set_date( date )
105
+ set_title( title )
106
+ @sections = []
107
+ append( body )
108
+ end
126
109
 
127
- def eval_rhtml( opt, path = '.' )
128
- ERB.new(File.read("#{path}/skel/#{opt['prefix']}diary.rhtml").untaint).result(binding)
129
- end
110
+ def each_section
111
+ @sections.each do |section|
112
+ yield section
113
+ end
114
+ end
130
115
 
131
- def to_src
132
- r = ''
133
- each_section do |section|
134
- r << section.to_src
116
+ def delete_section(index)
117
+ @sections.delete_at(index - 1)
135
118
  end
136
- r
137
- end
138
119
 
139
- def to_html( opt = {}, mode = :HTML )
140
- case mode
141
- when :CHTML
142
- to_chtml( opt )
143
- else
144
- to_html4( opt )
120
+ def eval_rhtml( opt, path = '.' )
121
+ ERB.new(File.read("#{path}/skel/#{opt['prefix']}diary.rhtml").untaint).result(binding)
145
122
  end
146
- end
147
123
 
148
- def to_html4(opt)
149
- r = ''
150
- idx = 1
151
- each_section do |section|
152
- r << section.html4( date, idx, opt )
153
- idx += 1
124
+ def to_src
125
+ r = ''
126
+ each_section do |section|
127
+ r << section.to_src
128
+ end
129
+ r
154
130
  end
155
- r
156
- end
157
131
 
158
- def to_chtml( opt )
159
- r = ''
160
- idx = 1
161
- each_section do |section|
162
- r << section.chtml( date, idx, opt )
163
- idx += 1
132
+ def to_html( opt = {}, mode = :HTML )
133
+ case mode
134
+ when :CHTML
135
+ to_chtml( opt )
136
+ else
137
+ to_html4( opt )
138
+ end
139
+ end
140
+
141
+ def to_html4(opt)
142
+ r = ''
143
+ idx = 1
144
+ each_section do |section|
145
+ r << section.html4( date, idx, opt )
146
+ idx += 1
147
+ end
148
+ r
149
+ end
150
+
151
+ def to_chtml( opt )
152
+ r = ''
153
+ idx = 1
154
+ each_section do |section|
155
+ r << section.chtml( date, idx, opt )
156
+ idx += 1
157
+ end
158
+ r
164
159
  end
165
- r
166
- end
167
160
 
168
- def to_s
169
- "date=#{date.strftime('%Y%m%d')}, title=#{title}, body=[#{@sections.join('][')}]"
161
+ def to_s
162
+ "date=#{date.strftime('%Y%m%d')}, title=#{title}, body=[#{@sections.join('][')}]"
163
+ end
170
164
  end
171
- end
172
165
 
173
- #
174
- # module CategorizableDiary
175
- #
176
- module CategorizableDiary
177
- def categorizable?; true; end
178
- end
166
+ #
167
+ # module CategorizableDiary
168
+ #
169
+ module CategorizableDiary
170
+ def categorizable?; true; end
171
+ end
179
172
 
180
- #
181
- # module UncategorizableDiary
182
- #
183
- module UncategorizableDiary
184
- def categorizable?; false; end
173
+ #
174
+ # module UncategorizableDiary
175
+ #
176
+ module UncategorizableDiary
177
+ def categorizable?; false; end
178
+ end
185
179
  end
186
180
  end
187
181