rego_wcm 0.0.2
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +3 -0
- data/Rakefile +1 -0
- data/bin/rego +65 -0
- data/lib/rego.rb +8 -0
- data/lib/rego/app.rb +92 -0
- data/lib/rego/block/html.rb +37 -0
- data/lib/rego/block/template.rb +40 -0
- data/lib/rego/version.rb +3 -0
- data/rego.gemspec +22 -0
- metadata +57 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/rego
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
#
|
4
|
+
# rego.rb: A web contents management system to generate static pages by building blocks.
|
5
|
+
#
|
6
|
+
# Copyright (C) 2010 by TADA Tadashi <t@tdtds.jp>
|
7
|
+
# Distributed under GPL.
|
8
|
+
#
|
9
|
+
|
10
|
+
class UsageError < ArgumentError; end
|
11
|
+
|
12
|
+
begin
|
13
|
+
opts = {
|
14
|
+
:server => 'production',
|
15
|
+
}
|
16
|
+
while opt = ARGV.shift
|
17
|
+
case opt
|
18
|
+
when '-f', '--force' # force options
|
19
|
+
opts[:force] = true
|
20
|
+
when '-V', '--verbose' # verbose options
|
21
|
+
opts[:verbose] = true
|
22
|
+
when '-L', '--lib' # append lib path
|
23
|
+
new_lib = ARGV.shift
|
24
|
+
raise ArgumentError::new( "need a parameter for #{opt} option." ) unless new_lib
|
25
|
+
$:.unshift( new_lib )
|
26
|
+
when '-s', '--server'
|
27
|
+
server = ARGV.shift
|
28
|
+
raise ArgumentError::new( "need a parameter for #{opt} option." ) unless server
|
29
|
+
opts[:server] = server
|
30
|
+
when /^-/
|
31
|
+
raise ArgumentError::new( "invalid option: #{opt}." )
|
32
|
+
else
|
33
|
+
ARGV.unshift opt
|
34
|
+
break
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
src = ARGV.shift
|
39
|
+
dest = ARGV.shift
|
40
|
+
raise UsageError::new( 'no src or dest path.' ) unless src and dest
|
41
|
+
|
42
|
+
require 'rego'
|
43
|
+
REGO::App::new( src, dest, opts ).run
|
44
|
+
exit 0
|
45
|
+
|
46
|
+
rescue UsageError
|
47
|
+
require 'rego/version'
|
48
|
+
|
49
|
+
$stderr.puts <<-USAGE.gsub( /^\t\t/, '' )
|
50
|
+
#{File::basename $0}: A WCM system to generate static pages by building blocks. Ver.#{REGO::VERSION}
|
51
|
+
usage: #{File::basename $0} [-f] [-V] [-L <path>] [-s <env>] <src_dir> <dest_dir>
|
52
|
+
|
53
|
+
--force, -f: force generating contents.
|
54
|
+
--verbose, -V: show verbose messages.
|
55
|
+
--lib, -L <path>: append block library path of your web site.
|
56
|
+
--server, -s <env>: publishing environment name. default "production".
|
57
|
+
src_dir: source directory of contents.
|
58
|
+
dest_dir: destination dirctory to generate contents.
|
59
|
+
USAGE
|
60
|
+
exit 1
|
61
|
+
|
62
|
+
rescue ArgumentError
|
63
|
+
$stderr.puts $!
|
64
|
+
exit 1
|
65
|
+
end
|
data/lib/rego.rb
ADDED
data/lib/rego/app.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
#
|
2
|
+
# app.rb: REGO Application
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010 by TADA Tadashi
|
5
|
+
# Distributed under GPL.
|
6
|
+
#
|
7
|
+
require 'pathname'
|
8
|
+
|
9
|
+
module REGO
|
10
|
+
class REGOError < ::StandardError; end
|
11
|
+
class MakeLink < REGOError; end
|
12
|
+
|
13
|
+
class App
|
14
|
+
def initialize( src, dest, opt = {} )
|
15
|
+
@src, @dest, @opt = src, dest, opt
|
16
|
+
@src.chop! if %r|/$| =~ @src
|
17
|
+
@dest.chop! if %r|/$| =~ @dest
|
18
|
+
@env = {
|
19
|
+
:src => @src,
|
20
|
+
:dest => @dest
|
21
|
+
}.update( @opt )
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
Pathname::glob( "#{@src}/**/{.*,*}" ) do |src|
|
26
|
+
relative = src.to_s[@src.size, src.to_s.size]
|
27
|
+
@env[:src_file] = relative
|
28
|
+
@env[:dest_file] = relative.dup
|
29
|
+
|
30
|
+
if src.directory?
|
31
|
+
Pathname::new( @dest + relative ).mkpath
|
32
|
+
else
|
33
|
+
case src.to_s
|
34
|
+
when /\.rego$/
|
35
|
+
@env[:dest_file] = relative.sub( /\.rego$/, '' )
|
36
|
+
begin
|
37
|
+
next if !@opt[:force] && (src.mtime < Pathname::new( dest_file( @env ) ).mtime)
|
38
|
+
rescue Errno::ENOENT
|
39
|
+
end
|
40
|
+
$stderr.puts relative if @opt[:verbose]
|
41
|
+
processing( @env, :template )
|
42
|
+
when /\.ignore$/
|
43
|
+
# ignore this file
|
44
|
+
else
|
45
|
+
processing( @env, :symlink )
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def src_file( env )
|
53
|
+
env[:src] + env[:src_file]
|
54
|
+
end
|
55
|
+
|
56
|
+
def dest_file( env )
|
57
|
+
env[:dest] + env[:dest_file]
|
58
|
+
end
|
59
|
+
|
60
|
+
def processing( env, filter )
|
61
|
+
result = ''
|
62
|
+
begin
|
63
|
+
File::open( src_file( env ), 'r:utf-8' ) do |f|
|
64
|
+
result = __send__( filter, f.read, env )
|
65
|
+
end
|
66
|
+
File::open( dest_file( env ), 'w' ) do |f|
|
67
|
+
f.write( result )
|
68
|
+
end
|
69
|
+
rescue MakeLink
|
70
|
+
Pathname::new( dest_file( env ) ).make_symlink( src_file( env ) ) rescue Errno::EEXIST
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def template( tmpl, env )
|
75
|
+
tmpl.insert( 0, "do_template( env ) {\n" ) << "\n}"
|
76
|
+
instance_eval( tmpl )
|
77
|
+
end
|
78
|
+
|
79
|
+
def do_template( env, &block )
|
80
|
+
REGO::Block::Template::new( env, &block ).result
|
81
|
+
end
|
82
|
+
|
83
|
+
def dead_copy( tmpl, env )
|
84
|
+
tmpl
|
85
|
+
end
|
86
|
+
|
87
|
+
def symlink( tmpl, env )
|
88
|
+
raise MakeLink::new
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#
|
2
|
+
# html.rb: REGO HTML and elements Block
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010 by TADA Tadashi
|
5
|
+
# Distributed under GPL.
|
6
|
+
#
|
7
|
+
|
8
|
+
module REGO::Block
|
9
|
+
class Html < Template
|
10
|
+
def result
|
11
|
+
<<-HTML.gsub( /^\t*/, '' )
|
12
|
+
<html>
|
13
|
+
#{super}
|
14
|
+
</html>
|
15
|
+
HTML
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Head < Template
|
20
|
+
def result
|
21
|
+
raise ::StandardError::new( 'no title in head' ) unless @title
|
22
|
+
<<-HTML
|
23
|
+
<title>#{@title}</title>
|
24
|
+
HTML
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Body < Template
|
29
|
+
def result
|
30
|
+
<<-HTML
|
31
|
+
<body>
|
32
|
+
<h1>#{@h1}</h1>
|
33
|
+
</body>
|
34
|
+
HTML
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# template.rb: REGO Template as a default Block
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010 by TADA Tadashi
|
5
|
+
# Distributed under GPL.
|
6
|
+
#
|
7
|
+
|
8
|
+
module REGO::Block
|
9
|
+
class Template
|
10
|
+
def initialize( env, &block )
|
11
|
+
@env = env
|
12
|
+
@child = []
|
13
|
+
instance_eval( &block ) if block_given?
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def result
|
18
|
+
@child.join( "\n" )
|
19
|
+
end
|
20
|
+
|
21
|
+
def method_missing( name, *args, &block )
|
22
|
+
if block
|
23
|
+
begin
|
24
|
+
klass = REGO::Block::const_get( name.to_s.capitalize )
|
25
|
+
@child << klass::new( @env, &block ).result
|
26
|
+
rescue NameError
|
27
|
+
begin
|
28
|
+
require name.to_s
|
29
|
+
rescue LoadError
|
30
|
+
require "rego/block/#{name}"
|
31
|
+
end
|
32
|
+
retry
|
33
|
+
end
|
34
|
+
else
|
35
|
+
instance_variable_set "@#{name}", args[0]
|
36
|
+
end
|
37
|
+
self
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/rego/version.rb
ADDED
data/rego.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rego/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rego_wcm"
|
7
|
+
s.version = REGO::VERSION
|
8
|
+
s.authors = ["TADA Tadashi"]
|
9
|
+
s.email = ["t@tdtds.jp"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{A CMS generating static HTML by building blocks.}
|
12
|
+
s.description = %q{}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
# specify any dependencies here; for example:
|
20
|
+
# s.add_development_dependency "rspec"
|
21
|
+
# s.add_runtime_dependency "rest-client"
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rego_wcm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- TADA Tadashi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-10 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: ''
|
15
|
+
email:
|
16
|
+
- t@tdtds.jp
|
17
|
+
executables:
|
18
|
+
- rego
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- bin/rego
|
27
|
+
- lib/rego.rb
|
28
|
+
- lib/rego/app.rb
|
29
|
+
- lib/rego/block/html.rb
|
30
|
+
- lib/rego/block/template.rb
|
31
|
+
- lib/rego/version.rb
|
32
|
+
- rego.gemspec
|
33
|
+
homepage: ''
|
34
|
+
licenses: []
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
requirements: []
|
52
|
+
rubyforge_project:
|
53
|
+
rubygems_version: 1.8.11
|
54
|
+
signing_key:
|
55
|
+
specification_version: 3
|
56
|
+
summary: A CMS generating static HTML by building blocks.
|
57
|
+
test_files: []
|