Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 2
- Log:
Initial import of Instiki 0.11.0 sources from a downloaded Tarball.
Instiki is a Ruby On Rails based Wiki clone.
- Author:
- adh
- Date:
- Sat Jul 22 14:54:51 +0100 2006
- Size:
- 2590 Bytes
1 | # Container for a set of pages with methods for manipulation. |
2 | |
3 | class PageSet < Array |
4 | attr_reader :web |
5 | |
6 | def initialize(web, pages = nil, condition = nil) |
7 | @web = web |
8 | # if pages is not specified, make a list of all pages in the web |
9 | if pages.nil? |
10 | super(web.pages) |
11 | # otherwise use specified pages and condition to produce a set of pages |
12 | elsif condition.nil? |
13 | super(pages) |
14 | else |
15 | super(pages.select { |page| condition[page] }) |
16 | end |
17 | end |
18 | |
19 | def most_recent_revision |
20 | self.map { |page| page.revised_at }.max || Time.at(0) |
21 | end |
22 | |
23 | def by_name |
24 | PageSet.new(@web, sort_by { |page| page.name }) |
25 | end |
26 | |
27 | alias :sort :by_name |
28 | |
29 | def by_revision |
30 | PageSet.new(@web, sort_by { |page| page.revised_at }).reverse |
31 | end |
32 | |
33 | def pages_that_reference(page_name) |
34 | all_referring_pages = WikiReference.pages_that_reference(page_name) |
35 | self.select { |page| all_referring_pages.include?(page.name) } |
36 | end |
37 | |
38 | def pages_that_link_to(page_name) |
39 | all_linking_pages = WikiReference.pages_that_link_to(page_name) |
40 | self.select { |page| all_linking_pages.include?(page.name) } |
41 | end |
42 | |
43 | def pages_that_include(page_name) |
44 | all_including_pages = WikiReference.pages_that_include(page_name) |
45 | self.select { |page| all_including_pages.include?(page.name) } |
46 | end |
47 | |
48 | def pages_authored_by(author) |
49 | all_pages_authored_by_the_author = |
50 | Page.connection.select_all(sanitize_sql([ |
51 | "SELECT page_id FROM revision WHERE author = '?'", author])) |
52 | self.select { |page| page.authors.include?(author) } |
53 | end |
54 | |
55 | def characters |
56 | self.inject(0) { |chars,page| chars += page.content.size } |
57 | end |
58 | |
59 | # Returns all the orphaned pages in this page set. That is, |
60 | # pages in this set for which there is no reference in the web. |
61 | # The HomePage and author pages are always assumed to have |
62 | # references and so cannot be orphans |
63 | # Pages that refer to themselves and have no links from outside are oprphans. |
64 | def orphaned_pages |
65 | never_orphans = web.authors + ['HomePage'] |
66 | self.select { |page| |
67 | if never_orphans.include? page.name |
68 | false |
69 | else |
70 | references = pages_that_reference(page.name) |
71 | references.empty? or references == [page] |
72 | end |
73 | } |
74 | end |
75 | |
76 | # Returns all the wiki words in this page set for which |
77 | # there are no pages in this page set's web |
78 | def wanted_pages |
79 | wiki_words - web.select.names |
80 | end |
81 | |
82 | def names |
83 | self.map { |page| page.name } |
84 | end |
85 | |
86 | def wiki_words |
87 | self.inject([]) { |wiki_words, page| |
88 | wiki_words + page.wiki_words |
89 | }.flatten.uniq.sort |
90 | end |
91 | |
92 | end |