irwi 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/.document CHANGED
@@ -1,5 +1,4 @@
1
1
  README.rdoc
2
2
  lib/**/*.rb
3
3
  bin/*
4
- features/**/*.feature
5
- LICENSE
4
+ MIT-LICENSE
data/.gitignore CHANGED
@@ -17,5 +17,8 @@ tmtags
17
17
  coverage
18
18
  rdoc
19
19
  pkg
20
+ doc
20
21
 
21
22
  ## PROJECT::SPECIFIC
23
+
24
+ .yardoc
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
@@ -9,7 +9,7 @@
9
9
  <td><%=wt 'Author' %></td>
10
10
  <td><%=wt 'Comment' %></td>
11
11
  </tr>
12
- <% versions.reverse.each do |v| %>
12
+ <% versions.each do |v| %>
13
13
  <tr>
14
14
  <td>
15
15
  <%=v.number%>
@@ -0,0 +1,11 @@
1
+ <%= wiki_page_style -%>
2
+
3
+ <h1><%=wt 'All pages' %></h1>
4
+
5
+ <ul>
6
+ <% wiki_paginate @pages do -%>
7
+ <% @pages.each do |page| -%>
8
+ <li><%= link_to page.title, wiki_page_path( page ) %></li>
9
+ <% end -%>
10
+ <% end -%>
11
+ </ul>
@@ -4,7 +4,9 @@
4
4
 
5
5
  <%=wt 'Changes list:' %>
6
6
 
7
- <%= wiki_page_history @page, @versions[1..-1] %>
7
+ <% wiki_paginate @versions do%>
8
+ <%= wiki_page_history @page, @versions %>
9
+ <% end %>
8
10
 
9
11
  <%=wt 'Changes in content:' %>
10
12
 
@@ -4,4 +4,7 @@
4
4
 
5
5
  <%= wiki_page_info %>
6
6
  <%= wiki_page_actions %>
7
- <%= wiki_page_history %>
7
+
8
+ <% wiki_paginate @versions do%>
9
+ <%= wiki_page_history %>
10
+ <% end %>
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{irwi}
8
- s.version = "0.1.4"
8
+ s.version = "0.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alexey Noskov"]
12
- s.date = %q{2009-10-27}
12
+ s.date = %q{2009-11-01}
13
13
  s.description = %q{Irwi is Ruby on Rails plugin which adds wiki functionality to your application. }
14
14
  s.email = %q{alexey.noskov@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "app/views/base_wiki_pages/_wiki_page_history.html.erb",
27
27
  "app/views/base_wiki_pages/_wiki_page_info.html.erb",
28
28
  "app/views/base_wiki_pages/_wiki_page_style.html.erb",
29
+ "app/views/base_wiki_pages/all.html.erb",
29
30
  "app/views/base_wiki_pages/compare.html.erb",
30
31
  "app/views/base_wiki_pages/edit.html.erb",
31
32
  "app/views/base_wiki_pages/history.html.erb",
@@ -51,6 +52,8 @@ Gem::Specification.new do |s|
51
52
  "lib/irwi/formatters/blue_cloth.rb",
52
53
  "lib/irwi/formatters/red_cloth.rb",
53
54
  "lib/irwi/helpers/wiki_pages_helper.rb",
55
+ "lib/irwi/paginators/none.rb",
56
+ "lib/irwi/paginators/will_paginate.rb",
54
57
  "lib/irwi/support/route_mapper.rb",
55
58
  "lib/irwi/support/template_finder.rb",
56
59
  "rails/init.rb",
@@ -59,6 +62,8 @@ Gem::Specification.new do |s|
59
62
  "spec/extensions/controllers/wiki_pages_spec.rb",
60
63
  "spec/formatters/red_cloth_spec.rb",
61
64
  "spec/helpers/wiki_pages_helper_spec.rb",
65
+ "spec/paginators/none_spec.rb",
66
+ "spec/paginators/will_paginate_spec.rb",
62
67
  "spec/rcov.opts",
63
68
  "spec/spec.opts",
64
69
  "spec/spec_helper.rb",
@@ -79,7 +84,9 @@ Gem::Specification.new do |s|
79
84
  "spec/formatters/red_cloth_spec.rb",
80
85
  "spec/extensions/controllers/wiki_pages_spec.rb",
81
86
  "spec/helpers/wiki_pages_helper_spec.rb",
82
- "spec/spec_helper.rb"
87
+ "spec/spec_helper.rb",
88
+ "spec/paginators/will_paginate_spec.rb",
89
+ "spec/paginators/none_spec.rb"
83
90
  ]
84
91
 
85
92
  if s.respond_to? :specification_version then
@@ -9,19 +9,26 @@ class Irwi::Config
9
9
 
10
10
  attr_accessor_with_default :page_version_foreign_key, 'page_id'
11
11
 
12
+ # Object using to format content
12
13
  attr_accessor_with_default :formatter do
13
14
  Irwi::Formatters::RedCloth.new
14
15
  end
15
16
 
17
+ # Object using to compare pages
16
18
  attr_accessor_with_default :comparator do
17
19
  Irwi::Comparators::DiffLcs.new
18
20
  end
19
21
 
22
+ # Object using to paginate collections
23
+ attr_accessor_with_default :paginator do
24
+ Irwi::Paginators::None.new
25
+ end
26
+
20
27
  def page_class
21
28
  page_class_name.constantize
22
29
  end
23
30
 
24
- def page_vrsion_class
31
+ def page_version_class
25
32
  page_version_class_name.constantize
26
33
  end
27
34
 
@@ -29,4 +36,17 @@ class Irwi::Config
29
36
  user_class_name.constantize
30
37
  end
31
38
 
39
+ def system_pages
40
+ @system_pages ||= {
41
+ 'all' => 'all'
42
+ }
43
+ end
44
+
45
+ # Add system page
46
+ # @param action [String,Symbol] controller action
47
+ # @param path [String] path in routes
48
+ def add_system_page( action, path )
49
+ system_pages[ action.to_s ] = path.to_s
50
+ end
51
+
32
52
  end
@@ -25,6 +25,8 @@ module Irwi::Extensions::Controllers::WikiPages
25
25
  def history
26
26
  return not_allowed unless history_allowed?
27
27
 
28
+ @versions = Irwi.config.paginator.paginate( @page.versions, :page => params[:page] ) # Paginating them
29
+
28
30
  render_template( @page.new_record? ? 'no' : 'history' )
29
31
  end
30
32
 
@@ -34,10 +36,17 @@ module Irwi::Extensions::Controllers::WikiPages
34
36
  if @page.new_record?
35
37
  render_template 'no'
36
38
  else
37
- @versions = @page.versions.between( params[:old] || 1, params[:new] || @page.last_version_number ).all # Loading all versions between first and last
39
+ new_num = params[:new].to_i || @page.last_version_number # Last version number
40
+ old_num = params[:old].to_i || 1 # First version number
41
+
42
+ old_num, new_num = new_num, old_num if new_num < old_num # Swapping them if last < first
38
43
 
39
- @new_version = @versions.last # Loading next version
40
- @old_version = @versions.first # Loading previous version
44
+ versions = @page.versions.between( old_num, new_num ) # Loading all versions between first and last
45
+
46
+ @versions = Irwi.config.paginator.paginate( versions, :page => params[:page] ) # Paginating them
47
+
48
+ @new_version = @versions.first.number == new_num ? @versions.first : versions.first # Loading next version
49
+ @old_version = @versions.last.number == old_num ? @versions.last : versions.last # Loading previous version
41
50
 
42
51
  render_template 'compare'
43
52
  end
@@ -74,6 +83,12 @@ module Irwi::Extensions::Controllers::WikiPages
74
83
  redirect_to url_for( :action => :show )
75
84
  end
76
85
 
86
+ def all
87
+ @pages = Irwi.config.paginator.paginate( page_class, :page => params[:page] ) # Loading and paginating all pages
88
+
89
+ render_template 'all'
90
+ end
91
+
77
92
  protected
78
93
 
79
94
  # Retrieves wiki_page_class for this controller
@@ -128,7 +143,7 @@ module Irwi::Extensions::Controllers::WikiPages
128
143
  base.send :include, Irwi::Extensions::Controllers::WikiPages::InstanceMethods
129
144
 
130
145
  base.before_filter :setup_current_user # Setup @current_user instance variable before each action
131
- base.before_filter :setup_page # Setup @page instance variable before each action
146
+ base.before_filter :setup_page, :only => [ :show, :history, :compare, :edit, :update, :destroy ] # Setup @page instance variable before each action
132
147
 
133
148
  base.helper_method :show_allowed?, :edit_allowed?, :history_allowed?, :destroy_allowed? # Access control methods are avaliable in views
134
149
  end
@@ -38,7 +38,7 @@ module Irwi::Extensions::Models::WikiPage
38
38
  base.belongs_to :creator, :class_name => Irwi.config.user_class_name
39
39
  base.belongs_to :updator, :class_name => Irwi.config.user_class_name
40
40
 
41
- base.has_many :versions, :class_name => Irwi.config.page_version_class_name, :foreign_key => Irwi.config.page_version_foreign_key, :order => 'id ASC'
41
+ base.has_many :versions, :class_name => Irwi.config.page_version_class_name, :foreign_key => Irwi.config.page_version_foreign_key, :order => 'id DESC'
42
42
 
43
43
  base.after_save :create_new_version
44
44
  end
@@ -7,20 +7,26 @@ module Irwi::Helpers::WikiPagesHelper
7
7
  form_for( :page, @page, { :url => url_for( :action => :update ), :html=> { :class => 'wiki_form' } }.merge!( config ), &block )
8
8
  end
9
9
 
10
- def wiki_page_edit_path
11
- url_for( :action => :edit )
10
+ def wiki_page_edit_path( page = nil )
11
+ wiki_page_path( page, :edit )
12
12
  end
13
13
 
14
- def wiki_page_history_path
15
- url_for( :action => :history )
14
+ def wiki_page_history_path( page = nil )
15
+ wiki_page_path( page, :history )
16
16
  end
17
17
 
18
- def wiki_page_compare_path
19
- url_for( :action => :compare )
18
+ def wiki_page_compare_path( page = nil )
19
+ wiki_page_path( page, :compare )
20
20
  end
21
21
 
22
- def wiki_page_path
23
- url_for( :action => :show )
22
+ def wiki_page_path( page = nil, action = :show )
23
+ if page
24
+ page = page.path if page.respond_to? :path
25
+
26
+ url_for( :action => action, :path => page )
27
+ else
28
+ url_for( :action => action )
29
+ end
24
30
  end
25
31
 
26
32
  def wiki_content( text )
@@ -43,6 +49,10 @@ module Irwi::Helpers::WikiPagesHelper
43
49
  end
44
50
  end
45
51
 
52
+ def wiki_paginate( collection, &block )
53
+ Irwi.config.paginator.paginated_section( self, collection, &block )
54
+ end
55
+
46
56
  def wiki_link( title )
47
57
  if page = Irwi.config.page_class.find_by_title( title )
48
58
  url_for( :controller => Irwi.config.controller_name, :action => :show, :path => page.path )
@@ -89,7 +99,7 @@ module Irwi::Helpers::WikiPagesHelper
89
99
 
90
100
  def wiki_page_history(page = nil,versions = nil)
91
101
  page ||= @page # By default take page from instance variable
92
- versions ||= page.versions
102
+ versions ||= @versions || page.versions
93
103
 
94
104
  render :partial => "#{template_dir '_wiki_page_history'}/wiki_page_history", :locals => { :page => page, :versions => versions, :with_form => (versions.size > 1) }
95
105
  end
@@ -0,0 +1,13 @@
1
+ class Irwi::Paginators::None
2
+
3
+ def paginate( collection, options = {} )
4
+ find_options = options.except :page, :per_page, :total_entries, :finder
5
+
6
+ collection.find( :all, find_options )
7
+ end
8
+
9
+ def paginated_section( view, collection, &block )
10
+ yield
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ class Irwi::Paginators::WillPaginate
2
+
3
+ def paginate( collection, options = {} )
4
+ collection.paginate( options )
5
+ end
6
+
7
+ def paginated_section( view, collection, &block )
8
+ view.paginated_section( collection, &block )
9
+ end
10
+
11
+ end
@@ -6,6 +6,10 @@ module Irwi::Support::RouteMapper
6
6
  :controller => 'wiki_pages',
7
7
  :root => path
8
8
  }.merge(config)
9
+
10
+ Irwi.config.system_pages.each do |page_action, page_path| # Adding routes for system pages
11
+ connect( "#{path}/#{page_path}", opts.merge({ :action => page_action }) )
12
+ end
9
13
 
10
14
  connect( "#{path}/compare/*path", opts.merge({ :action => 'compare' }) ) # Comparing two versions of page
11
15
  connect( "#{path}/edit/*path", opts.merge({ :action => 'edit' }) ) # Wiki edit route
@@ -55,4 +55,14 @@ describe Irwi::Config do
55
55
  @o.comparator.should == :diff_lcs_comparator
56
56
  end
57
57
 
58
+ specify "should contain 'all' action in system pages" do
59
+ Irwi.config.system_pages['all'].should == 'all'
60
+ end
61
+
62
+ specify "should add action in system pages" do
63
+ Irwi.config.system_pages['custom'].should be_nil
64
+ Irwi.config.add_system_page :custom, '!custom_page'
65
+ Irwi.config.system_pages['custom'].should == '!custom_page'
66
+ end
67
+
58
68
  end
@@ -18,6 +18,42 @@ describe Irwi::Helpers::WikiPagesHelper do
18
18
  it { @m.should respond_to :wiki_page_compare_path }
19
19
  it { @m.should respond_to :wiki_page_path }
20
20
 
21
+ specify "should form url_for by wiki_page_edit_path" do
22
+ @m.should_receive(:url_for).with(:action => :edit).and_return('epath')
23
+
24
+ @m.wiki_page_edit_path.should == 'epath'
25
+ end
26
+
27
+ specify "should form url_for by wiki_page_edit_path with path" do
28
+ @m.should_receive(:url_for).with(:action => :edit, :path => 'qwerty').and_return('epath')
29
+
30
+ @m.wiki_page_edit_path('qwerty').should == 'epath'
31
+ end
32
+
33
+ specify "should form url_for by wiki_page_history_path" do
34
+ @m.should_receive(:url_for).with(:action => :history).and_return('hpath')
35
+
36
+ @m.wiki_page_history_path.should == 'hpath'
37
+ end
38
+
39
+ specify "should form url_for by wiki_page_compare_path" do
40
+ @m.should_receive(:url_for).with(:action => :compare).and_return('cpath')
41
+
42
+ @m.wiki_page_compare_path.should == 'cpath'
43
+ end
44
+
45
+ specify "should form url_for by wiki_page_path" do
46
+ @m.should_receive(:url_for).with(:action => :show).and_return('spath')
47
+
48
+ @m.wiki_page_path.should == 'spath'
49
+ end
50
+
51
+ specify "should form url_for by wiki_page_path with path" do
52
+ @m.should_receive(:url_for).with(:action => :show, :path => '123').and_return('spath')
53
+
54
+ @m.wiki_page_path('123').should == 'spath'
55
+ end
56
+
21
57
  it { @m.should respond_to :wiki_content }
22
58
  it { @m.should respond_to :wiki_diff }
23
59
  it { @m.should respond_to :wiki_user }
@@ -0,0 +1,24 @@
1
+ require "spec/spec_helper"
2
+
3
+ describe Irwi::Paginators::None do
4
+
5
+ before(:each) do
6
+ @p = Irwi::Paginators::None.new
7
+ end
8
+
9
+ specify "should paginate collection - call find" do
10
+ coll = mock "Collection"
11
+ coll.should_receive(:find).with(:all,{}).and_return("full collection")
12
+
13
+ @p.paginate( coll, :page => 10 ).should == "full collection"
14
+ end
15
+
16
+ specify "should render paginated section" do
17
+ a = nil
18
+ @p.paginated_section "view", "collection" do
19
+ a = true
20
+ end
21
+ a.should be_true
22
+ end
23
+
24
+ end
@@ -0,0 +1,28 @@
1
+ require "spec/spec_helper"
2
+
3
+ describe Irwi::Paginators::WillPaginate do
4
+
5
+ before :all do
6
+ end
7
+
8
+ before :each do
9
+ @p = Irwi::Paginators::WillPaginate.new
10
+ end
11
+
12
+ specify "should paginate collection" do
13
+ coll = mock "Collection"
14
+ coll.should_receive(:paginate).with( :page => 15 ).and_return("paginated_collection")
15
+
16
+ @p.paginate( coll, :page => 15 ).should == "paginated_collection"
17
+ end
18
+
19
+ specify "should render paginated collection" do
20
+ block = lambda { 11 }
21
+ coll = []
22
+ view = mock "View"
23
+ view.should_receive(:paginated_section).with( coll, &block ).and_return("result")
24
+
25
+ @p.paginated_section( view, coll, &block ).should == "result"
26
+ end
27
+
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irwi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Noskov
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-27 00:00:00 +03:00
12
+ date: 2009-11-01 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -51,6 +51,7 @@ files:
51
51
  - app/views/base_wiki_pages/_wiki_page_history.html.erb
52
52
  - app/views/base_wiki_pages/_wiki_page_info.html.erb
53
53
  - app/views/base_wiki_pages/_wiki_page_style.html.erb
54
+ - app/views/base_wiki_pages/all.html.erb
54
55
  - app/views/base_wiki_pages/compare.html.erb
55
56
  - app/views/base_wiki_pages/edit.html.erb
56
57
  - app/views/base_wiki_pages/history.html.erb
@@ -76,6 +77,8 @@ files:
76
77
  - lib/irwi/formatters/blue_cloth.rb
77
78
  - lib/irwi/formatters/red_cloth.rb
78
79
  - lib/irwi/helpers/wiki_pages_helper.rb
80
+ - lib/irwi/paginators/none.rb
81
+ - lib/irwi/paginators/will_paginate.rb
79
82
  - lib/irwi/support/route_mapper.rb
80
83
  - lib/irwi/support/template_finder.rb
81
84
  - rails/init.rb
@@ -84,6 +87,8 @@ files:
84
87
  - spec/extensions/controllers/wiki_pages_spec.rb
85
88
  - spec/formatters/red_cloth_spec.rb
86
89
  - spec/helpers/wiki_pages_helper_spec.rb
90
+ - spec/paginators/none_spec.rb
91
+ - spec/paginators/will_paginate_spec.rb
87
92
  - spec/rcov.opts
88
93
  - spec/spec.opts
89
94
  - spec/spec_helper.rb
@@ -127,3 +132,5 @@ test_files:
127
132
  - spec/extensions/controllers/wiki_pages_spec.rb
128
133
  - spec/helpers/wiki_pages_helper_spec.rb
129
134
  - spec/spec_helper.rb
135
+ - spec/paginators/will_paginate_spec.rb
136
+ - spec/paginators/none_spec.rb