irwi 0.2.4 → 0.4.0

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.
Files changed (64) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/README.rdoc +9 -9
  3. data/app/views/base_wiki_pages/_wiki_page_info.html.erb +1 -1
  4. data/app/views/base_wiki_pages/compare.html.erb +1 -1
  5. data/app/views/base_wiki_pages/history.html.erb +1 -1
  6. data/app/views/base_wiki_pages/no.html.erb +1 -1
  7. data/lib/generators/irwi_wiki/irwi_wiki_generator.rb +29 -0
  8. data/{generators → lib/generators}/irwi_wiki/templates/controllers/wiki_pages_controller.rb +3 -3
  9. data/{generators → lib/generators}/irwi_wiki/templates/helpers/wiki_pages_helper.rb +1 -1
  10. data/{generators → lib/generators}/irwi_wiki/templates/migrate/create_wiki_pages.rb +15 -15
  11. data/{generators → lib/generators}/irwi_wiki/templates/models/wiki_page.rb +3 -3
  12. data/{generators → lib/generators}/irwi_wiki/templates/models/wiki_page_version.rb +3 -3
  13. data/lib/generators/irwi_wiki_attachments/irwi_wiki_attachments_generator.rb +22 -0
  14. data/{generators → lib/generators}/irwi_wiki_attachments/templates/migrate/create_wiki_page_attachments.rb +6 -6
  15. data/{generators → lib/generators}/irwi_wiki_attachments/templates/models/wiki_page_attachment.rb +1 -1
  16. data/lib/generators/irwi_wiki_views/irwi_wiki_views_generator.rb +13 -0
  17. data/lib/irwi.rb +34 -7
  18. data/lib/irwi/comparators/base.rb +6 -6
  19. data/lib/irwi/comparators/diff_lcs.rb +12 -12
  20. data/lib/irwi/comparators/spans/changed_span.rb +6 -6
  21. data/lib/irwi/comparators/spans/not_changed_span.rb +7 -7
  22. data/lib/irwi/config.rb +16 -14
  23. data/lib/irwi/extensions/controllers.rb +18 -0
  24. data/lib/irwi/extensions/controllers/wiki_page_attachments.rb +1 -1
  25. data/lib/irwi/extensions/controllers/wiki_pages.rb +47 -47
  26. data/lib/irwi/extensions/models.rb +24 -0
  27. data/lib/irwi/extensions/models/wiki_page.rb +16 -16
  28. data/lib/irwi/extensions/models/wiki_page_attachment.rb +4 -4
  29. data/lib/irwi/extensions/models/wiki_page_version.rb +17 -17
  30. data/lib/irwi/formatters/blue_cloth.rb +4 -4
  31. data/lib/irwi/formatters/red_cloth.rb +4 -4
  32. data/lib/irwi/helpers.rb +13 -0
  33. data/lib/irwi/helpers/wiki_page_attachments_helper.rb +4 -2
  34. data/lib/irwi/helpers/wiki_pages_helper.rb +36 -36
  35. data/lib/irwi/paginators/none.rb +6 -4
  36. data/lib/irwi/paginators/will_paginate.rb +4 -4
  37. data/lib/irwi/support/route_mapper.rb +22 -18
  38. data/lib/irwi/support/template_finder.rb +4 -4
  39. data/lib/irwi/version.rb +9 -0
  40. metadata +110 -81
  41. data/.document +0 -4
  42. data/.gitignore +0 -24
  43. data/Rakefile +0 -53
  44. data/VERSION +0 -1
  45. data/generators/irwi_wiki/irwi_wiki_generator.rb +0 -22
  46. data/generators/irwi_wiki_attachments/irwi_wiki_attachments_generator.rb +0 -18
  47. data/generators/irwi_wiki_views/irwi_wiki_views_generator.rb +0 -19
  48. data/irwi.gemspec +0 -120
  49. data/rails/init.rb +0 -44
  50. data/spec/comparators/diff_lcs_spec.rb +0 -45
  51. data/spec/config_spec.rb +0 -68
  52. data/spec/extensions/controllers/wiki_pages_spec.rb +0 -69
  53. data/spec/extensions/models/wiki_page_spec.rb +0 -79
  54. data/spec/formatters/red_cloth_spec.rb +0 -17
  55. data/spec/helpers/wiki_page_attachments_helper_spec.rb +0 -45
  56. data/spec/helpers/wiki_pages_helper_spec.rb +0 -158
  57. data/spec/paginators/none_spec.rb +0 -24
  58. data/spec/paginators/will_paginate_spec.rb +0 -28
  59. data/spec/rcov.opts +0 -2
  60. data/spec/spec.opts +0 -4
  61. data/spec/spec_helper.rb +0 -15
  62. data/spec/support/route_mapper_spec.rb +0 -66
  63. data/spec/support/template_finder_spec.rb +0 -33
  64. data/tasks/riwiki_tasks.rake +0 -4
@@ -1,20 +1,20 @@
1
1
  class Irwi::Comparators::Spans::NotChangedSpan
2
-
2
+
3
3
  attr_accessor :value
4
-
4
+
5
5
  def initialize( v )
6
6
  @value = v
7
7
  end
8
-
8
+
9
9
  def to_s
10
10
  @value.to_s
11
11
  end
12
-
12
+
13
13
  def action
14
14
  '='
15
15
  end
16
-
16
+
17
17
  alias_method :old_value, :value
18
18
  alias_method :new_value, :value
19
-
20
- end
19
+
20
+ end
@@ -1,47 +1,49 @@
1
+ require 'active_support'
2
+
1
3
  class Irwi::Config
2
-
4
+
3
5
  attr_accessor_with_default :controller_name, 'wiki_pages'
4
-
6
+
5
7
  attr_accessor_with_default :user_class_name, 'User'
6
-
8
+
7
9
  attr_accessor_with_default :page_class_name, 'WikiPage'
8
10
  attr_accessor_with_default :page_version_class_name, 'WikiPageVersion'
9
11
  attr_accessor_with_default :page_attachment_class_name do
10
- # Can be for example 'WikiPageAttachment'
12
+ # Can be for example 'WikiPageAttachment'
11
13
  nil
12
14
  end
13
-
15
+
14
16
  attr_accessor_with_default :page_version_foreign_key, 'page_id'
15
-
17
+
16
18
  # Object using to format content
17
19
  attr_accessor_with_default :formatter do
18
20
  require 'irwi/formatters/red_cloth'
19
21
 
20
22
  Irwi::Formatters::RedCloth.new
21
23
  end
22
-
24
+
23
25
  # Object using to compare pages
24
26
  attr_accessor_with_default :comparator do
25
27
  require 'irwi/comparators/diff_lcs'
26
28
 
27
29
  Irwi::Comparators::DiffLcs.new
28
30
  end
29
-
31
+
30
32
  # Object using to paginate collections
31
33
  attr_accessor_with_default :paginator do
32
34
  require 'irwi/paginators/none'
33
35
 
34
36
  Irwi::Paginators::None.new
35
37
  end
36
-
38
+
37
39
  def page_class
38
40
  page_class_name.constantize
39
41
  end
40
-
42
+
41
43
  def page_version_class
42
44
  page_version_class_name.constantize
43
45
  end
44
-
46
+
45
47
  def page_attachment_class
46
48
  page_attachment_class_name.constantize
47
49
  end
@@ -49,18 +51,18 @@ class Irwi::Config
49
51
  def user_class
50
52
  user_class_name.constantize
51
53
  end
52
-
54
+
53
55
  def system_pages
54
56
  @system_pages ||= {
55
57
  'all' => 'all'
56
58
  }
57
59
  end
58
-
60
+
59
61
  # Add system page
60
62
  # @param action [String,Symbol] controller action
61
63
  # @param path [String] path in routes
62
64
  def add_system_page( action, path )
63
65
  system_pages[ action.to_s ] = path.to_s
64
66
  end
65
-
67
+
66
68
  end
@@ -0,0 +1,18 @@
1
+ require 'action_controller'
2
+
3
+ module Irwi::Extensions::Controllers
4
+ autoload :WikiPages, 'irwi/extensions/controllers/wiki_pages'
5
+ autoload :WikiPageAttachments, 'irwi/extensions/controllers/wiki_page_attachments'
6
+ end
7
+
8
+ ActionController::Base.instance_eval do
9
+
10
+ # @param config [Hash] config for controller class
11
+ # @option page_class
12
+ #
13
+ def acts_as_wiki_pages_controller( config = {} )
14
+ include Irwi::Extensions::Controllers::WikiPages
15
+ include Irwi::Extensions::Controllers::WikiPageAttachments if Irwi::config.page_attachment_class_name
16
+ end
17
+
18
+ end
@@ -18,4 +18,4 @@ module Irwi::Extensions::Controllers::WikiPageAttachments
18
18
  Irwi.config.page_attachment_class
19
19
  end
20
20
 
21
- end
21
+ end
@@ -1,131 +1,131 @@
1
1
  module Irwi::Extensions::Controllers::WikiPages
2
-
2
+
3
3
  module ClassMethods
4
-
4
+
5
5
  def page_class
6
6
  @page_class ||= Irwi.config.page_class
7
7
  end
8
-
8
+
9
9
  def set_page_class(arg)
10
10
  @page_class = arg
11
11
  end
12
-
12
+
13
13
  end
14
-
14
+
15
15
  module InstanceMethods
16
-
16
+
17
17
  include Irwi::Extensions::Controllers::WikiPageAttachments
18
18
  include Irwi::Support::TemplateFinder
19
-
19
+
20
20
  def show
21
21
  return not_allowed unless show_allowed?
22
-
22
+
23
23
  render_template( @page.new_record? ? 'no' : 'show' )
24
24
  end
25
-
25
+
26
26
  def history
27
27
  return not_allowed unless history_allowed?
28
-
28
+
29
29
  @versions = Irwi.config.paginator.paginate( @page.versions, :page => params[:page] ) # Paginating them
30
-
30
+
31
31
  render_template( @page.new_record? ? 'no' : 'history' )
32
32
  end
33
-
33
+
34
34
  def compare
35
35
  return not_allowed unless history_allowed?
36
-
36
+
37
37
  if @page.new_record?
38
38
  render_template 'no'
39
39
  else
40
40
  new_num = params[:new].to_i || @page.last_version_number # Last version number
41
41
  old_num = params[:old].to_i || 1 # First version number
42
-
42
+
43
43
  old_num, new_num = new_num, old_num if new_num < old_num # Swapping them if last < first
44
-
44
+
45
45
  versions = @page.versions.between( old_num, new_num ) # Loading all versions between first and last
46
-
46
+
47
47
  @versions = Irwi.config.paginator.paginate( versions, :page => params[:page] ) # Paginating them
48
-
48
+
49
49
  @new_version = @versions.first.number == new_num ? @versions.first : versions.first # Loading next version
50
50
  @old_version = @versions.last.number == old_num ? @versions.last : versions.last # Loading previous version
51
-
51
+
52
52
  render_template 'compare'
53
53
  end
54
54
  end
55
-
55
+
56
56
  def new
57
57
  return not_allowed unless show_allowed? && edit_allowed?
58
-
58
+
59
59
  render_template 'new'
60
60
  end
61
-
61
+
62
62
  def edit
63
63
  return not_allowed unless show_allowed? && edit_allowed?
64
-
64
+
65
65
  render_template 'edit'
66
66
  end
67
-
67
+
68
68
  def update
69
69
  return not_allowed unless @page.new_record? || edit_allowed? # Check for rights (but not for new record, for it we will use second check only)
70
-
70
+
71
71
  @page.attributes = params[:page] # Assign new attributes
72
72
  @page.comment = params[:page][:comment]
73
-
73
+
74
74
  return not_allowed unless edit_allowed? # Double check: used beacause action may become invalid after attributes update
75
-
75
+
76
76
  @page.updator = @current_user # Assing user, which updated page
77
77
  @page.creator = @current_user if @page.new_record? # Assign it's creator if it's new page
78
-
78
+
79
79
  if !params[:preview] && (params[:cancel] || @page.save)
80
80
  redirect_to url_for( :action => :show, :path => @page.path.split('/') ) # redirect to new page's path (if it changed)
81
81
  else
82
82
  render_template 'edit'
83
83
  end
84
84
  end
85
-
85
+
86
86
  def destroy
87
87
  return not_allowed unless destroy_allowed?
88
-
88
+
89
89
  @page.destroy
90
-
90
+
91
91
  redirect_to url_for( :action => :show )
92
92
  end
93
-
93
+
94
94
  def all
95
95
  @pages = Irwi.config.paginator.paginate( page_class, :page => params[:page] ) # Loading and paginating all pages
96
-
96
+
97
97
  render_template 'all'
98
98
  end
99
-
99
+
100
100
  protected
101
-
101
+
102
102
  # Retrieves wiki_page_class for this controller
103
103
  def page_class
104
104
  self.class.page_class
105
105
  end
106
-
106
+
107
107
  # Renders user-specified or default template
108
108
  def render_template( template )
109
109
  render "#{template_dir template}/#{template}"
110
110
  end
111
-
111
+
112
112
  # Initialize @current_user instance variable
113
113
  def setup_current_user
114
114
  @current_user = respond_to?( :current_user, true ) ? current_user : nil # Find user by current_user method or return nil
115
115
  end
116
-
116
+
117
117
  # Initialize @page instance variable
118
118
  def setup_page
119
- @page = page_class.find_by_path_or_new( params[:path].join('/') ) # Find existing page by path or create new
119
+ @page = page_class.find_by_path_or_new( params[:path] || '' ) # Find existing page by path or create new
120
120
  end
121
-
122
- # Method, which called when user tries to visit
121
+
122
+ # Method, which called when user tries to visit
123
123
  def not_allowed
124
124
  render_template 'not_allowed'
125
125
  end
126
-
126
+
127
127
  # Check is it allowed for current user to see current page. Designed to be redefined by application programmer
128
- def show_allowed?
128
+ def show_allowed?
129
129
  true
130
130
  end
131
131
 
@@ -133,27 +133,27 @@ module Irwi::Extensions::Controllers::WikiPages
133
133
  def history_allowed?
134
134
  show_allowed?
135
135
  end
136
-
136
+
137
137
  # Check is it allowed for current user edit current page. Designed to be redefined by application programmer
138
138
  def edit_allowed?
139
139
  show_allowed?
140
140
  end
141
-
141
+
142
142
  # Check is it allowed for current user destroy current page. Designed to be redefined by application programmer
143
143
  def destroy_allowed?
144
144
  edit_allowed?
145
145
  end
146
-
146
+
147
147
  end
148
148
 
149
149
  def self.included( base )
150
150
  base.send :extend, Irwi::Extensions::Controllers::WikiPages::ClassMethods
151
151
  base.send :include, Irwi::Extensions::Controllers::WikiPages::InstanceMethods
152
-
152
+
153
153
  base.before_filter :setup_current_user # Setup @current_user instance variable before each action
154
154
  # Setup @page instance variable before each action
155
155
  base.before_filter :setup_page, :only => [ :show, :history, :compare, :new, :edit, :update, :destroy, :add_attachment ]
156
156
  base.helper_method :show_allowed?, :edit_allowed?, :history_allowed?, :destroy_allowed? # Access control methods are avaliable in views
157
157
  end
158
-
158
+
159
159
  end
@@ -0,0 +1,24 @@
1
+ require 'active_record'
2
+
3
+ module Irwi::Extensions::Models
4
+ autoload :WikiPage, 'irwi/extensions/models/wiki_page'
5
+ autoload :WikiPageVersion, 'irwi/extensions/models/wiki_page_version'
6
+ autoload :WikiPageAttachment, 'irwi/extensions/models/wiki_page_attachment'
7
+ end
8
+
9
+ ActiveRecord::Base.instance_eval do
10
+
11
+ def acts_as_wiki_page( config = {} )
12
+ include Irwi::Extensions::Models::WikiPage
13
+ end
14
+
15
+ def acts_as_wiki_page_version( config = {} )
16
+ include Irwi::Extensions::Models::WikiPageVersion
17
+ end
18
+
19
+ def acts_as_wiki_page_attachment
20
+ include Irwi::Extensions::Models::WikiPageAttachment
21
+ yield if block_given?
22
+ end
23
+
24
+ end
@@ -1,51 +1,51 @@
1
1
  module Irwi::Extensions::Models::WikiPage
2
-
2
+
3
3
  module ClassMethods
4
-
4
+
5
5
  def find_by_path_or_new( path )
6
6
  self.find_by_path( path ) || self.new( :path => path, :title => path )
7
7
  end
8
-
8
+
9
9
  end
10
-
10
+
11
11
  module InstanceMethods
12
-
12
+
13
13
  # Retrieve number of last version
14
14
  def last_version_number
15
15
  last = versions.first
16
16
  last ? last.number : 0
17
17
  end
18
-
18
+
19
19
  protected
20
-
20
+
21
21
  def create_new_version
22
22
  n = last_version_number
23
-
23
+
24
24
  v = versions.build
25
25
  v.attributes = attributes.slice( *v.attribute_names )
26
26
  v.comment = comment
27
27
  v.number = n + 1
28
28
  v.save!
29
29
  end
30
-
30
+
31
31
  end
32
-
32
+
33
33
  def self.included( base )
34
34
  base.send :extend, Irwi::Extensions::Models::WikiPage::ClassMethods
35
35
  base.send :include, Irwi::Extensions::Models::WikiPage::InstanceMethods
36
-
36
+
37
37
  base.send :attr_accessor, :comment, :previous_version_number
38
-
38
+
39
39
  base.belongs_to :creator, :class_name => Irwi.config.user_class_name
40
40
  base.belongs_to :updator, :class_name => Irwi.config.user_class_name
41
-
41
+
42
42
  base.has_many :versions, :class_name => Irwi.config.page_version_class_name, :foreign_key => Irwi.config.page_version_foreign_key, :order => 'id DESC'
43
43
 
44
44
  if Irwi::config.page_attachment_class_name
45
45
  base.has_many :attachments, :class_name => Irwi.config.page_attachment_class_name, :foreign_key => Irwi.config.page_version_foreign_key
46
46
  end
47
-
47
+
48
48
  base.after_save :create_new_version
49
49
  end
50
-
51
- end
50
+
51
+ end
@@ -1,9 +1,9 @@
1
1
  module Irwi::Extensions::Models::WikiPageAttachment
2
-
2
+
3
3
  DEFAULT_PAPERCLIP_OPTIONS = {:styles => { :medium => "300x300>", :thumb => "100x100>" }}
4
-
4
+
5
5
  def self.included( base )
6
6
  base.belongs_to :page, :class_name => Irwi.config.page_class_name
7
7
  end
8
-
9
- end
8
+
9
+ end