strelka-cms 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 834b28f4d44362f61cd1feba36ebed0c8e487461
4
- data.tar.gz: 6c1edc1d03d06df6935a620f3ba9b20fcf1bd04b
3
+ metadata.gz: 48864468ff1c947baea455bf5c0ed7c21aeb858e
4
+ data.tar.gz: 819f8b4ff6994d34a202beee4989f936ef444883
5
5
  SHA512:
6
- metadata.gz: cca1fd8e406244b11be95499e0c8576bfdc9cfd5b45b6effa0ff0bef6ce03ed65e10c2d17ff1467d5b02a021bfff1fd56f364d37af4af94d6a233dac3c02848e
7
- data.tar.gz: 7eca9faac12d1892696a72d99adb393ced77f8d6fd80817338b735b12fdfca812df8bb138b415480bc89dab65c3d79b62879d1654ede6feffd0460ec8242c2bd
6
+ metadata.gz: 14105cf4607b97da98b9519e642d0bf3b7bdd26c8ce084e0aca445fe03562f231fe08c9c03e82c4cf35369a7e0eb8bfcebfbefb8e37cbb1e922cb4033e6453c7
7
+ data.tar.gz: a925e1a36d975456d11d0d548324b9b4b270fd8073c222bb171fdce1ec2f21c12c674b6672f48479820ddd937815d39efc172ed52270fcf94c9a013e9fe7361a
Binary file
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,9 +1,103 @@
1
+ 2017-07-05 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * .gems, .pryrc, .ruby-gemset, .ruby-version, .rvm.gems, .rvmrc,
4
+ Rakefile, config.yml, data/strelka-cms/CMS_SCHEMA.sql, data/strelka-
5
+ cms/DEV_DB_SETUP.sql, lib/sequel/plugins/inline_migrations.rb,
6
+ lib/sequel/plugins/inline_schema.rb,
7
+ lib/sequel/plugins/soft_deletes.rb, lib/strelka/app/content-
8
+ feeds.rb, lib/strelka/app/content-manager.rb, lib/strelka/apps.rb,
9
+ lib/strelka/cms.rb, lib/strelka/cms/author.rb,
10
+ lib/strelka/cms/author_session.rb, lib/strelka/cms/feeds.rb,
11
+ lib/strelka/cms/model.rb, lib/strelka/cms/page.rb,
12
+ lib/strelka/cms/publisher.rb:
13
+ Import sequel workarounds, start work on models
14
+ [4caedd2c788a] [tip]
15
+
16
+ 2017-06-14 Michael Granger <ged@FaerieMUD.org>
17
+
18
+ * .rvm.gems, .rvmrc, Gemfile, Gemfile.lock, Rakefile, cert/ged.pem,
19
+ data/strelka-cms/apps/content-feeds, data/strelka-cms/apps/content-
20
+ manager, lib/strelka/app/content-feeds.rb, lib/strelka/app/content-
21
+ manager.rb, lib/strelka/cms/page.rb, lib/strelka/cms/pagecatalog.rb,
22
+ lib/strelka/cms/pagefilter.rb,
23
+ lib/strelka/cms/pagefilter/autoindex.rb, spec/helpers.rb,
24
+ spec/lib/helpers.rb, spec/strelka/cms/page_spec.rb,
25
+ spec/strelka/cms/pagecatalog_spec.rb,
26
+ spec/strelka/cms/pagefilter/autoindex_spec.rb,
27
+ spec/strelka/cms_spec.rb, strelka.gemspec:
28
+ Checkpoint before rewrite
29
+ [69ae95545cdc]
30
+
31
+ 2013-03-20 Michael Granger <ged@FaerieMUD.org>
32
+
33
+ * .hgtags:
34
+ Added tag v0.2.0 for changeset 76070ab08bdd
35
+ [968469d5f06c]
36
+
37
+ * .hgsigs:
38
+ Added signature for changeset 7e6d67090ff3
39
+ [76070ab08bdd] [v0.2.0]
40
+
41
+ * History.rdoc, lib/strelka/cms.rb:
42
+ Bump the minor version, update history.
43
+ [7e6d67090ff3]
44
+
45
+ * .rvm.gems, .tm_properties, Rakefile, lib/strelka/cms/page.rb,
46
+ lib/strelka/cms/pagefilter.rb,
47
+ lib/strelka/cms/pagefilter/example.rb,
48
+ spec/strelka/cms/page_spec.rb:
49
+ Update for newer versions of Strelka/convert to Pluggability.
50
+ [4baf070eb372]
51
+
52
+ 2013-02-28 Michael Granger <ged@FaerieMUD.org>
53
+
54
+ * .hgtags:
55
+ Added tag v0.1.0 for changeset d9a60c86dfa9
56
+ [c0c3226c7b49]
57
+
58
+ * .hgsigs:
59
+ Added signature for changeset 34ca70dbf0f8
60
+ [d9a60c86dfa9] [v0.1.0]
61
+
62
+ * History.rdoc, lib/strelka/cms.rb:
63
+ Bump minor version, update history.
64
+ [34ca70dbf0f8]
65
+
66
+ * .rvm.gems, Rakefile, lib/strelka/cms/page.rb,
67
+ spec/strelka/cms/page_spec.rb:
68
+ Update gems, convert from summarize to ots.
69
+ [aa0f957b7aa8]
70
+
71
+ * .rvmrc:
72
+ Test under Ruby 2 by default
73
+ [6152c3c159b6]
74
+
75
+ 2012-10-29 Michael Granger <ged@FaerieMUD.org>
76
+
77
+ * .hgtags:
78
+ Added tag v0.0.1 for changeset a2b1b1cf2f73
79
+ [412de32e62d7]
80
+
81
+ * .hgsigs:
82
+ Added signature for changeset 82c00e592623
83
+ [a2b1b1cf2f73] [v0.0.1]
84
+
85
+ * .rvm.gems, History.rdoc, Manifest.txt, README.rdoc, Rakefile, data
86
+ /strelka-cms/apps/content-manager, data/strelka-
87
+ cms/templates/layout.tmpl, etc/config.yml, public/news/v0.0.1.page:
88
+ Prep for release.
89
+
90
+ - Update dependencies
91
+ - Add a page for testing the RSSS feeds app.
92
+ - Allow pages with single dots in the filename.
93
+ [82c00e592623]
94
+
1
95
  2012-08-09 Michael Granger <ged@FaerieMUD.org>
2
96
 
3
97
  * data/strelka-cms/apps/content-feeds, lib/strelka/cms/page.rb,
4
98
  lib/strelka/cms/pagefilter/autoindex.rb:
5
99
  Merged with a31949150348
6
- [8d4142b7bd18] [tip]
100
+ [8d4142b7bd18]
7
101
 
8
102
  2012-08-01 Michael Granger <ged@FaerieMUD.org>
9
103
 
@@ -1,3 +1,8 @@
1
+ == v0.3.0 [2017-07-05] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Convert to use the newer Strelka discovery conventions.
4
+
5
+
1
6
  == v0.2.0 [2013-03-20] Michael Granger <ged@FaerieMUD.org>
2
7
 
3
8
  Update for newer versions of Strelka/convert to Pluggability.
@@ -4,13 +4,13 @@ Manifest.txt
4
4
  Procfile
5
5
  README.rdoc
6
6
  Rakefile
7
- data/strelka-cms/apps/content-feeds
8
- data/strelka-cms/apps/content-manager
9
7
  data/strelka-cms/templates/autoindex/default.tmpl
10
8
  data/strelka-cms/templates/layout.tmpl
11
9
  data/strelka-cms/templates/page.tmpl
12
10
  etc/mongrel.rb
11
+ lib/strelka/apps.rb
13
12
  lib/strelka/cms.rb
13
+ lib/strelka/cms/feeds.rb
14
14
  lib/strelka/cms/page.rb
15
15
  lib/strelka/cms/pagecatalog.rb
16
16
  lib/strelka/cms/pagefilter.rb
@@ -20,6 +20,7 @@ lib/strelka/cms/pagefilter/editorial.rb
20
20
  lib/strelka/cms/pagefilter/example.rb
21
21
  lib/strelka/cms/pagefilter/strip.rb
22
22
  lib/strelka/cms/pagefilter/textile.rb
23
+ lib/strelka/cms/publisher.rb
23
24
  public/humans.txt
24
25
  public/images/misc/button-gloss.png
25
26
  public/images/misc/button-overlay.png
@@ -47,7 +48,8 @@ public/stylesheets/app.css
47
48
  public/stylesheets/foundation.css
48
49
  public/stylesheets/ie.css
49
50
  spec/data/test.page
50
- spec/lib/helpers.rb
51
+ spec/helpers.rb
51
52
  spec/strelka/cms/page_spec.rb
52
53
  spec/strelka/cms/pagecatalog_spec.rb
54
+ spec/strelka/cms/pagefilter/autoindex_spec.rb
53
55
  spec/strelka/cms_spec.rb
data/Rakefile CHANGED
@@ -8,9 +8,10 @@ rescue LoadError
8
8
  abort "This Rakefile requires 'hoe' (gem install hoe)"
9
9
  end
10
10
 
11
+ GEMSPEC = 'strelka-cms.gemspec'
12
+
11
13
  Hoe.plugin :mercurial
12
14
  Hoe.plugin :signing
13
- Hoe.plugin :manualgen
14
15
  Hoe.plugin :deveiate
15
16
 
16
17
  Hoe.plugins.delete :rubyforge
@@ -19,24 +20,25 @@ hoespec = Hoe.spec 'strelka-cms' do
19
20
  self.readme_file = 'README.rdoc'
20
21
  self.history_file = 'History.rdoc'
21
22
  self.extra_rdoc_files = FileList[ '*.rdoc' ]
23
+ self.license "BSD-3-Clause"
22
24
 
23
25
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
24
26
 
25
- self.dependency 'strelka', '~> 0.0'
26
- self.dependency 'ratom', '~> 0.6'
27
27
  self.dependency 'RedCloth', '~> 4.2'
28
+ self.dependency 'nokogiri', '~> 1.6'
29
+ self.dependency 'strelka', '~> 0.15'
30
+ self.dependency 'ratom', '~> 0.8'
28
31
  self.dependency 'ots', '~> 0.5'
29
- self.dependency 'nokogiri', '~> 1.4'
30
- self.dependency 'pluggability', '~> 0.0'
32
+ self.dependency 'pluggability', '~> 0.2'
31
33
  self.dependency 'tidy-ext', '~> 0.1'
32
34
  self.dependency 'rcodetools', '~> 0.8'
33
35
  self.dependency 'strelka-fancyerrors', '~> 0.0'
36
+ self.dependency 'mail', '~> 2.6'
34
37
 
35
- self.dependency 'hoe-deveiate', '~> 0.1', :developer
38
+ self.dependency 'hoe-deveiate', '~> 0.3', :developer
39
+ self.dependency 'fakefs', '~> 0.4', :developer
36
40
 
37
- self.spec_extras[:licenses] = ["BSD"]
38
- self.spec_extras[:rdoc_options] = ['-f', 'fivefish', '-t', 'Strelka CMS']
39
- self.require_ruby_version( '>=1.9.3' )
41
+ self.require_ruby_version( '>=2.3.4' )
40
42
  self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
41
43
  self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
42
44
 
@@ -62,6 +64,38 @@ if Rake::Task.task_defined?( '.gemtest' )
62
64
  end
63
65
  end
64
66
 
67
+ # Use the fivefish formatter for docs generated from development checkout
68
+ if File.directory?( '.hg' )
69
+ require 'rdoc/task'
70
+
71
+ Rake::Task[ 'docs' ].clear
72
+ RDoc::Task.new( 'docs' ) do |rdoc|
73
+ rdoc.main = "README.rdoc"
74
+ rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb" )
75
+ rdoc.generator = :fivefish
76
+ rdoc.title = "Strelka-CMS: A file-based content management system"
77
+ rdoc.rdoc_dir = 'doc'
78
+ end
79
+ end
80
+
81
+
82
+ task :gemspec => GEMSPEC
83
+ file GEMSPEC => __FILE__
84
+ task GEMSPEC do |task|
85
+ spec = $hoespec.spec
86
+ spec.files.delete( '.gemtest' )
87
+ spec.signing_key = nil
88
+ spec.cert_chain = Rake::FileList[ 'certs/*.pem' ].to_a
89
+ spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
90
+ File.open( task.name, 'w' ) do |fh|
91
+ fh.write( spec.to_ruby )
92
+ end
93
+ end
94
+
95
+ CLOBBER.include( GEMSPEC.to_s )
96
+ task :default => :gemspec
97
+
98
+
65
99
 
66
100
  # Add admin app testing directories to the clobber list
67
101
  CLOBBER.include( 'static', 'run', 'logs', 'strelka.sqlite' )
@@ -0,0 +1,12 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ # Strelka App discovery file
5
+
6
+ require 'strelka/discovery'
7
+
8
+ Strelka::Discovery.register_apps(
9
+ 'cms-publisher' => 'strelka/cms/publisher.rb',
10
+ 'cms-feeds' => 'strelka/cms/feeds.rb'
11
+ )
12
+
@@ -19,10 +19,10 @@ module Strelka::CMS
19
19
 
20
20
 
21
21
  # Version string
22
- VERSION = '0.2.0'
22
+ VERSION = '0.3.0'
23
23
 
24
24
  # Version-control revision constant
25
- REVISION = %q$Revision: 7e6d67090ff3 $
25
+ REVISION = %q$Revision: e9f738cb50e0 $
26
26
 
27
27
 
28
28
  require 'strelka/cms/page'
@@ -17,7 +17,7 @@ require 'strelka/cms/page'
17
17
 
18
18
 
19
19
  # The Feed applet -- generate RSS and Atom feeds for various things.
20
- class Strelka::CMS::ContentFeeds < Strelka::App
20
+ class Strelka::CMS::Feeds < Strelka::App
21
21
  extend Loggability,
22
22
  Configurability,
23
23
  Strelka::MethodUtilities
@@ -194,6 +194,3 @@ class Strelka::CMS::ContentFeeds < Strelka::App
194
194
 
195
195
 
196
196
  end # class Strelka::CMS::Feeds
197
-
198
- Encoding.default_internal = Encoding::UTF_8
199
- Strelka::CMS::Feeds.run if __FILE__ == $0
@@ -226,6 +226,7 @@ class Strelka::CMS::Page
226
226
  ### it in its configured template if it has one.
227
227
  def render( * )
228
228
  if path = self.template
229
+ self.log.debug "Wrapping %p in template at %p" % [ self, path ]
229
230
  tmpl = Inversion::Template.load( path )
230
231
  tmpl.page = self
231
232
  return tmpl
@@ -28,7 +28,8 @@ class Strelka::CMS::PageCatalog
28
28
 
29
29
  ### Create a new PageCatalog that will find and read pages from the configured
30
30
  ### directory.
31
- def initialize( basedir=Pathname.pwd, pattern=DEFAULT_GLOB_PATTERN )
31
+ def initialize( basedir=nil, pattern=DEFAULT_GLOB_PATTERN )
32
+ basedir ||= Pathname.pwd
32
33
  pattern.slice!( 0, 1 ) if pattern.start_with?( '/' )
33
34
  self.log.debug "New catalog for pages matching: %s in: %s" % [ pattern, basedir ]
34
35
  @basedir = Pathname( basedir )
@@ -94,14 +95,30 @@ class Strelka::CMS::PageCatalog
94
95
  end
95
96
 
96
97
 
98
+ ### Fetch a Strelka::CMS::Page from the catalog that matches +pagename+.
99
+ def []( pagename )
100
+ pagename = pagename + '.page' unless pagename.end_with?( '.page' )
101
+ paths = self.page_path_enumerator
102
+ pagepath = paths.find do |path|
103
+ self.log.debug "Testing path %s (relative to %s) for %s: %s" %
104
+ [ path, self.basedir, pagename, path.relative_path_from(self.basedir) ]
105
+ path.relative_path_from(self.basedir).to_s == pagename.to_s
106
+ end or return nil
107
+
108
+ return Strelka::CMS::Page.load( pagepath, self )
109
+ end
110
+
111
+
97
112
  #########
98
113
  protected
99
114
  #########
100
115
 
101
116
  ### Return an Enumerator that will yield a Pathname for each page matching the #pageglob
102
117
  def page_path_enumerator
103
- self.log.debug "Fetching an enumerator for %s" % [ self.glob ]
104
- Pathname.glob( self.glob ).each
118
+ self.log.debug "Fetching an enumerator for files matching: %s" % [ self.glob ]
119
+ paths = Pathname.glob( self.glob )
120
+ self.log.debug " fully-qualifying %d paths: %p" % [ paths.length, paths ]
121
+ return paths.collect {|fn| self.basedir + fn }.each
105
122
  end
106
123
 
107
124
 
@@ -110,7 +127,8 @@ class Strelka::CMS::PageCatalog
110
127
  def page_enumerator
111
128
  Enumerator.new do |yielder|
112
129
  self.page_path_enumerator.each do |path|
113
- page = Strelka::CMS::Page.load( path, self )
130
+ self.log.debug "Loading %s..." % [ path ]
131
+ page = Strelka::CMS::Page.load( path.to_s, self )
114
132
  yielder.yield( page )
115
133
  end
116
134
  end
@@ -25,34 +25,6 @@ class Strelka::CMS::PageFilter
25
25
  plugin_prefixes 'strelka/cms/pagefilter'
26
26
 
27
27
 
28
- ### Search for plugins in the $LOAD_PATH and load each of them that's found.
29
- def self::load_all
30
- loaded = []
31
- glob_pat = '{' + self.derivative_dirs.join(',') + '}/*.rb'
32
- $LOAD_PATH.uniq.collect {|path| path.untaint; Pathname(path) }.each do |base|
33
- self.log.debug " searching for %s" % [ base + glob_pat ]
34
- Pathname.glob( base + glob_pat ).each do |plugin|
35
- # Don't load this file twice
36
- next if Pathname(__FILE__).expand_path == plugin.expand_path
37
-
38
- begin
39
- path = plugin.to_s.untaint
40
- require( path )
41
- loaded << plugin
42
- rescue LoadError, SecurityError => err
43
- self.log.error " %s while loading %s: %s" %
44
- [ err.class.name, plugin.to_s, err.message ]
45
- err.backtrace.each do |frame|
46
- self.log.debug " #{frame}"
47
- end
48
- end
49
- end
50
- end
51
-
52
- return loaded
53
- end
54
-
55
-
56
28
  #################################################################
57
29
  ### I N S T A N C E M E T H O D S
58
30
  #################################################################
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'ostruct'
4
+ require 'English'
4
5
 
5
6
  require 'strelka/cms/pagecatalog'
6
7
  require 'strelka/cms/page'
@@ -33,8 +34,8 @@ class Strelka::CMS::PageFilter::AutoIndex < Strelka::CMS::PageFilter
33
34
  <\?
34
35
  autoindex # Instruction Target
35
36
  \s+
36
- (\S+) # glob for pages to link [$1]
37
- (.*?) # options [$2]
37
+ (?<pattern>\S+) # glob for pages to link [$1]
38
+ (?<options>.*?) # options [$2]
38
39
  \s*
39
40
  \?>
40
41
  }xm
@@ -59,42 +60,33 @@ class Strelka::CMS::PageFilter::AutoIndex < Strelka::CMS::PageFilter
59
60
  def process( source, page )
60
61
  self.log.info "Looking for autoindex directives..."
61
62
 
62
- if catalog = page.catalog
63
- self.log.debug "Processing autoindex directives."
64
- source.gsub!( PI ) do |match|
65
- self.log.debug " got: %p" % [ match ]
66
- # Grab the tag values
67
- pattern = $1
68
- options = $2
69
-
70
- self.log.debug "Generating an index for %p relative to %p." % [ pattern, page.path ]
71
- self.generate_index( pattern, page, catalog, options )
72
- end
73
- return source
74
- else
75
- self.log.debug "Not generating autoindex sections: no catalog"
76
- return source.gsub( PI, NO_CATALOG_COMMENT )
63
+ catalog = page.catalog or return self.strip_instructions( source )
64
+
65
+ self.log.debug "Processing autoindex directives."
66
+ return source.gsub( PI ) do |*|
67
+ pattern = $LAST_MATCH_INFO[:pattern]
68
+ options = $LAST_MATCH_INFO[:options]
69
+ self.generate_index( pattern, page, catalog, options )
77
70
  end
78
71
  end
79
72
 
80
73
 
74
+ ### Strip autoindex PIs from +source+ and return it.
75
+ def strip_instructions( source )
76
+ self.log.debug "Not generating autoindex sections: no catalog"
77
+ return source.gsub( PI, NO_CATALOG_COMMENT )
78
+ end
79
+
80
+
81
81
  ### Create an HTML fragment.
82
82
  def generate_index( pattern, page, catalog, options )
83
- self.log.debug "Generating (%p) autoindex for page = %p in catalog: %p. Options = %p" %
84
- [ pattern, page, catalog, options ]
83
+ self.log.debug "Generating an index for %p relative to %p with options: %p." %
84
+ [ pattern, page.path, options ]
85
+
85
86
  options = self.parse_options( options )
86
87
  style = options.style || DEFAULT_STYLE
87
88
 
88
- pages = if pattern.start_with?( '/' )
89
- self.log.debug " absolute pattern; matching relative to catalog basedir %p" %
90
- [ catalog.basedir.to_s ]
91
- catalog.matching_pattern( pattern ).to_a
92
- else
93
- self.log.debug " relative pattern; matching relative to page directory %p" %
94
- [ page.path.dirname.to_s ]
95
- catalog.relative_to( page.path.dirname ).matching_pattern( pattern ).to_a
96
- end
97
- pages = self.sort_pages( pages, options ) if options.sortkey
89
+ pages = self.find_matching_pages( catalog, page, pattern, options )
98
90
 
99
91
  style = style + '.tmpl' unless style =~ /\.tmpl$/
100
92
  style = DEFAULT_TEMPLATE_DIR + style
@@ -116,6 +108,20 @@ class Strelka::CMS::PageFilter::AutoIndex < Strelka::CMS::PageFilter
116
108
  protected
117
109
  #########
118
110
 
111
+ ### Return the pages matching the specified +pattern+ in the +catalog+ relative
112
+ ### to the given +page+.
113
+ def find_matching_pages( catalog, page, pattern, options )
114
+ self.log.debug "Find pages in catalog %p matching pattern %p relative to page %p.." %
115
+ [ catalog, pattern, page ]
116
+ pages = catalog.matching_pattern( pattern )
117
+ pages = pages.relative_to( page.path.dirname ) unless pattern.start_with?( '/' )
118
+ pages = self.sort_pages( pages.to_a, options )
119
+ pages = pages[ 0, options.limit ] if options.limit
120
+
121
+ return pages
122
+ end
123
+
124
+
119
125
  ### Parse the options to the PI, returning the results as an OpenStruct.
120
126
  def parse_options( optstring )
121
127
  opts = OpenStruct.new
@@ -135,6 +141,8 @@ class Strelka::CMS::PageFilter::AutoIndex < Strelka::CMS::PageFilter
135
141
  return pages.sort_by {|page| page.path.mtime }.reverse
136
142
  when 'title'
137
143
  return pages.sort_by {|page| page.title }
144
+ when nil
145
+ return pages
138
146
  else
139
147
  self.log.error "Don't know how to sort the index by %p" % [ options.sortkey ]
140
148
  end