strelka-cms 0.2.0 → 0.3.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.
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