tdiary 4.0.1 → 4.0.1.20130903

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.
@@ -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