BxMS 0.0.18 → 0.0.22
Sign up to get free protection for your applications and to get access to all the features.
- data/src/bxms/context.rb +4 -7
- data/src/bxms/state.rb +12 -0
- data/src/net/transport.rb +46 -0
- data/src/net/transport_wrapper.rb +36 -0
- data/src/rules/base.rb +29 -0
- data/src/rules/copy.rb +2 -2
- data/src/rules/process.rb +2 -1
- data/src/rules/process_page.rb +4 -3
- data/src/util/folder_scanner.rb +46 -0
- metadata +85 -73
data/src/bxms/context.rb
CHANGED
@@ -19,13 +19,10 @@ module BxMS
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def load_file( file_name )
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
return IO.read( root_file ) if File.exists? root_file
|
27
|
-
|
28
|
-
raise "Unable to find #{file_name}"
|
22
|
+
file_path = state.get_file file_name
|
23
|
+
raise "Unable to find #{file_name}" unless file_path
|
24
|
+
state.remembered_files << file_path
|
25
|
+
IO.read file_path
|
29
26
|
end
|
30
27
|
|
31
28
|
def run_erb_on( template, file_name )
|
data/src/bxms/state.rb
CHANGED
@@ -15,6 +15,8 @@ module BxMS
|
|
15
15
|
attr_reader :rules
|
16
16
|
attr_reader :tags
|
17
17
|
|
18
|
+
attr_reader :remembered_files
|
19
|
+
|
18
20
|
def initialize( parent, directory = nil )
|
19
21
|
@parent = parent
|
20
22
|
|
@@ -29,6 +31,8 @@ module BxMS
|
|
29
31
|
@rules = Rules.new parent.rules
|
30
32
|
@tags = Tags.new parent.tags
|
31
33
|
|
34
|
+
@remembered_files = []
|
35
|
+
|
32
36
|
load_local @functions, '.functions/*.{rb}'
|
33
37
|
load_local @tags, '.tags/*'
|
34
38
|
load_local @rules, '.rules'
|
@@ -44,6 +48,14 @@ module BxMS
|
|
44
48
|
@parent.target_dir
|
45
49
|
end
|
46
50
|
|
51
|
+
def get_file( file_name )
|
52
|
+
local_file = get_local_file file_name
|
53
|
+
return local_file if File.exist?(local_file)
|
54
|
+
root_file = get_root_file file_name
|
55
|
+
return root_file if File.exist?(root_file)
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
47
59
|
def get_root_file( file_name )
|
48
60
|
File.join source_dir, file_name
|
49
61
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'net/transport_wrapper'
|
2
|
+
|
3
|
+
module Net
|
4
|
+
|
5
|
+
class Transport
|
6
|
+
|
7
|
+
def self.create(deploy_config_path, &block)
|
8
|
+
require 'yaml'
|
9
|
+
deploy_config = YAML::load(File.read('deploy.yml'))
|
10
|
+
Transport.new(deploy_config).open &block
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(config_hash)
|
14
|
+
@configuration = config_hash
|
15
|
+
end
|
16
|
+
|
17
|
+
def open(&block)
|
18
|
+
require 'net/ftp'
|
19
|
+
Net::FTP.open(host) do |ftp|
|
20
|
+
ftp.login user, password
|
21
|
+
ftp.chdir folder
|
22
|
+
yield TransportWrapper.new(folder, ftp)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def host
|
29
|
+
@configuration['host']
|
30
|
+
end
|
31
|
+
|
32
|
+
def user
|
33
|
+
@configuration['user']
|
34
|
+
end
|
35
|
+
|
36
|
+
def password
|
37
|
+
@configuration['password']
|
38
|
+
end
|
39
|
+
|
40
|
+
def folder
|
41
|
+
@configuration['folder']
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Net
|
2
|
+
|
3
|
+
class TransportWrapper
|
4
|
+
|
5
|
+
def initialize(folder, ftp)
|
6
|
+
@folder = folder
|
7
|
+
@ftp = ftp
|
8
|
+
end
|
9
|
+
|
10
|
+
def chdir(subfolder)
|
11
|
+
remote_folder = File.join @folder, subfolder
|
12
|
+
puts "chdir #{remote_folder}"
|
13
|
+
@ftp.chdir remote_folder
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(localfile, remotefile)
|
17
|
+
puts "update #{localfile} to #{remotefile}"
|
18
|
+
localtime = File.mtime(localfile).getutc
|
19
|
+
remotetime = mtime(remotefile).getutc
|
20
|
+
changed = localtime > remotetime
|
21
|
+
@ftp.putbinaryfile localfile, remotefile if changed
|
22
|
+
return changed
|
23
|
+
end
|
24
|
+
|
25
|
+
def mtime(remotefile)
|
26
|
+
@ftp.mtime remotefile, MTIME_UTC
|
27
|
+
rescue
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
MTIME_UTC = false # see Net::FTP#mtime
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/src/rules/base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fileutils'
|
1
2
|
|
2
3
|
module Rules
|
3
4
|
|
@@ -11,6 +12,34 @@ module Rules
|
|
11
12
|
name.sub! /Rule\Z/, ''
|
12
13
|
end
|
13
14
|
|
15
|
+
def update(data, to_file, from_file_list)
|
16
|
+
uptodate = uptodate? to_file, from_file_list
|
17
|
+
content_matches = compare data, to_file if uptodate and data
|
18
|
+
unless uptodate and content_matches
|
19
|
+
store data, to_file if data
|
20
|
+
copy from_file_list.first, to_file unless data
|
21
|
+
else
|
22
|
+
puts "skipped unchanged #{to_file}" if @verbose
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def store(data, to_file)
|
27
|
+
File.open(to_file, 'w' ) { |file| file.write data }
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy(from_file, to_file)
|
31
|
+
FileUtils.cp from_file, to_file, :preserve => true
|
32
|
+
end
|
33
|
+
|
34
|
+
def uptodate?(target_file, source_file_list)
|
35
|
+
FileUtils.uptodate? target_file, source_file_list
|
36
|
+
end
|
37
|
+
|
38
|
+
def compare(data, target_file)
|
39
|
+
target = IO.read target_file
|
40
|
+
data == target
|
41
|
+
end
|
42
|
+
|
14
43
|
end
|
15
44
|
|
16
45
|
end
|
data/src/rules/copy.rb
CHANGED
@@ -7,9 +7,9 @@ module Rules
|
|
7
7
|
class CopyRule < BaseRule
|
8
8
|
|
9
9
|
def apply_to( file, state )
|
10
|
-
puts "copy #{file} to #{state.output_dir}" if @verbose
|
11
10
|
FileUtils.mkdir_p state.output_dir unless File.directory? state.output_dir
|
12
|
-
|
11
|
+
target_file = File.join state.output_dir, File.basename(file)
|
12
|
+
update nil, target_file, [file]
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
data/src/rules/process.rb
CHANGED
data/src/rules/process_page.rb
CHANGED
@@ -10,6 +10,9 @@ module Rules
|
|
10
10
|
def apply_to( input_file, state )
|
11
11
|
puts "process page #{input_file} to #{state.output_dir}" if @verbose
|
12
12
|
|
13
|
+
state.remembered_files.clear
|
14
|
+
state.remembered_files << input_file
|
15
|
+
|
13
16
|
collector = PartCollector.new input_file
|
14
17
|
parts = collector.load_and_scan input_file
|
15
18
|
|
@@ -36,9 +39,7 @@ module Rules
|
|
36
39
|
output_file = state.get_output_file_for input_file
|
37
40
|
output_file.sub! /\.page$/, '.html'
|
38
41
|
|
39
|
-
|
40
|
-
file.write output
|
41
|
-
end
|
42
|
+
update output, output_file, state.remembered_files
|
42
43
|
end
|
43
44
|
|
44
45
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Util
|
2
|
+
|
3
|
+
class FolderScanner
|
4
|
+
|
5
|
+
def self.traverse(folderpath, &block)
|
6
|
+
FolderScanner.new(folderpath).list &block
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(rootpath, currentpath = nil)
|
10
|
+
@rootpath = rootpath
|
11
|
+
@currentpath = currentpath
|
12
|
+
end
|
13
|
+
|
14
|
+
def list(&block)
|
15
|
+
Dir.entries(current_folder).sort.each do |filename|
|
16
|
+
next if filename == '.' or filename == '..'
|
17
|
+
filepath = path_to filename
|
18
|
+
is_folder = File.directory? File.join(rootpath, filepath)
|
19
|
+
if is_folder
|
20
|
+
yield filepath, :folder
|
21
|
+
FolderScanner.new(rootpath, filepath).list &block
|
22
|
+
yield path_to('.'), :folder
|
23
|
+
else
|
24
|
+
yield filepath, :file
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def path_to(filename)
|
30
|
+
return filename unless currentpath
|
31
|
+
File.join currentpath, filename
|
32
|
+
end
|
33
|
+
|
34
|
+
def current_folder
|
35
|
+
return rootpath unless currentpath
|
36
|
+
File.join rootpath, currentpath
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
attr_reader :rootpath
|
42
|
+
attr_reader :currentpath
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,116 +1,128 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.11
|
3
|
-
specification_version: 1
|
4
2
|
name: BxMS
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-05-04 00:00:00 +02:00
|
8
|
-
summary: Simple offline CMS framework based on ERB, 'tags' and 'functions'.
|
9
|
-
require_paths:
|
10
|
-
- src
|
11
|
-
email: bxms {AT} intensicode {DOT} com
|
12
|
-
homepage: bxms.rubyforge.org.
|
13
|
-
rubyforge_project: bxms
|
14
|
-
description: "Please see the Wiki found at: http://bxms.rubyforge.org/wiki/wiki.pl"
|
15
|
-
autorequire:
|
16
|
-
default_executable: bxms
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.0.22
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
6
|
authors:
|
29
7
|
- The.French.DJ
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-07-17 00:00:00 +02:00
|
13
|
+
default_executable: bxms
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: "Please see the Wiki found at: http://bxms.rubyforge.org/wiki/wiki.pl"
|
17
|
+
email: bxms {AT} intensicode {DOT} com
|
18
|
+
executables:
|
19
|
+
- bxms
|
20
|
+
- bxms.rb
|
21
|
+
- bxms.bat
|
22
|
+
- bxms.sh
|
23
|
+
extensions: []
|
24
|
+
|
25
|
+
extra_rdoc_files: []
|
26
|
+
|
30
27
|
files:
|
31
28
|
- bin/bxms
|
32
|
-
- bin/bxms.bat
|
33
29
|
- bin/bxms.rb
|
30
|
+
- bin/bxms.bat
|
34
31
|
- bin/bxms.sh
|
35
32
|
- examples/www.berlinfactor.com
|
33
|
+
- examples/www.berlinfactor.com/Section.Bx
|
34
|
+
- examples/www.berlinfactor.com/Section.Bx/index.page
|
36
35
|
- examples/www.berlinfactor.com/Bx.css
|
37
|
-
- examples/www.berlinfactor.com/Bx.js
|
38
36
|
- examples/www.berlinfactor.com/favicon.ico
|
39
|
-
- examples/www.berlinfactor.com/
|
40
|
-
- examples/www.berlinfactor.com/index.page
|
37
|
+
- examples/www.berlinfactor.com/Section.Contact
|
38
|
+
- examples/www.berlinfactor.com/Section.Contact/index.page
|
41
39
|
- examples/www.berlinfactor.com/news.page
|
40
|
+
- examples/www.berlinfactor.com/index.page
|
41
|
+
- examples/www.berlinfactor.com/Bx.js
|
42
42
|
- examples/www.berlinfactor.com/news.txt
|
43
|
-
- examples/www.berlinfactor.com/
|
44
|
-
- examples/www.berlinfactor.com/Section.Bx
|
45
|
-
- examples/www.berlinfactor.com/Section.Contact
|
46
|
-
- examples/www.berlinfactor.com/Section.Links
|
47
|
-
- examples/www.berlinfactor.com/images/background.png
|
48
|
-
- examples/www.berlinfactor.com/images/logo_above.gif
|
49
|
-
- examples/www.berlinfactor.com/images/logo_below.gif
|
50
|
-
- examples/www.berlinfactor.com/images/logo_clickable.gif
|
51
|
-
- examples/www.berlinfactor.com/images/no_section_name.gif
|
52
|
-
- examples/www.berlinfactor.com/images/section_books.gif
|
53
|
-
- examples/www.berlinfactor.com/images/section_books_hover.gif
|
54
|
-
- examples/www.berlinfactor.com/images/section_books_name.gif
|
55
|
-
- examples/www.berlinfactor.com/images/section_bx.gif
|
56
|
-
- examples/www.berlinfactor.com/images/section_bx_hover.gif
|
43
|
+
- examples/www.berlinfactor.com/images
|
57
44
|
- examples/www.berlinfactor.com/images/section_bx_name.gif
|
58
|
-
- examples/www.berlinfactor.com/images/section_contact.gif
|
59
45
|
- examples/www.berlinfactor.com/images/section_contact_hover.gif
|
46
|
+
- examples/www.berlinfactor.com/images/section_books_name.gif
|
47
|
+
- examples/www.berlinfactor.com/images/no_section_name.gif
|
48
|
+
- examples/www.berlinfactor.com/images/logo_below.gif
|
49
|
+
- examples/www.berlinfactor.com/images/section_bx_hover.gif
|
60
50
|
- examples/www.berlinfactor.com/images/section_contact_name.gif
|
61
|
-
- examples/www.berlinfactor.com/images/
|
62
|
-
- examples/www.berlinfactor.com/images/
|
63
|
-
- examples/www.berlinfactor.com/images/section_links_name.gif
|
51
|
+
- examples/www.berlinfactor.com/images/logo_clickable.gif
|
52
|
+
- examples/www.berlinfactor.com/images/background.png
|
64
53
|
- examples/www.berlinfactor.com/images/section_tfdj.gif
|
65
|
-
- examples/www.berlinfactor.com/images/section_tfdj_hover.gif
|
66
54
|
- examples/www.berlinfactor.com/images/section_tfdj_name.gif
|
55
|
+
- examples/www.berlinfactor.com/images/section_books_hover.gif
|
56
|
+
- examples/www.berlinfactor.com/images/section_links.gif
|
57
|
+
- examples/www.berlinfactor.com/images/section_tfdj_hover.gif
|
58
|
+
- examples/www.berlinfactor.com/images/section_contact.gif
|
59
|
+
- examples/www.berlinfactor.com/images/section_books.gif
|
60
|
+
- examples/www.berlinfactor.com/images/section_bx.gif
|
61
|
+
- examples/www.berlinfactor.com/images/section_links_name.gif
|
62
|
+
- examples/www.berlinfactor.com/images/section_links_hover.gif
|
63
|
+
- examples/www.berlinfactor.com/images/logo_above.gif
|
64
|
+
- examples/www.berlinfactor.com/Section.Books
|
67
65
|
- examples/www.berlinfactor.com/Section.Books/books.txt
|
68
66
|
- examples/www.berlinfactor.com/Section.Books/index.page
|
69
|
-
- examples/www.berlinfactor.com/Section.
|
70
|
-
- examples/www.berlinfactor.com/Section.
|
67
|
+
- examples/www.berlinfactor.com/Section.Links
|
68
|
+
- examples/www.berlinfactor.com/Section.Links/Tools.and.Utilities.txt
|
71
69
|
- examples/www.berlinfactor.com/Section.Links/Game.Development.txt
|
70
|
+
- examples/www.berlinfactor.com/Section.Links/Software.Development.txt
|
72
71
|
- examples/www.berlinfactor.com/Section.Links/index.page
|
73
72
|
- examples/www.berlinfactor.com/Section.Links/News.and.Stuff.txt
|
74
|
-
- examples/www.berlinfactor.com/Section.Links/Software.Development.txt
|
75
73
|
- examples/www.berlinfactor.com/Section.Links/Symbian.Development.txt
|
76
|
-
- examples/www.berlinfactor.com/Section.Links/Tools.and.Utilities.txt
|
77
74
|
- src/bxms
|
78
|
-
- src/bxms.rb
|
79
|
-
- src/page
|
80
|
-
- src/rules
|
81
|
-
- src/util
|
82
75
|
- src/bxms/context.rb
|
83
|
-
- src/bxms/functions.rb
|
84
76
|
- src/bxms/processor.rb
|
77
|
+
- src/bxms/variables.rb
|
85
78
|
- src/bxms/root_state.rb
|
86
|
-
- src/bxms/rules.rb
|
87
79
|
- src/bxms/state.rb
|
88
80
|
- src/bxms/tags.rb
|
89
|
-
- src/bxms/
|
90
|
-
- src/
|
81
|
+
- src/bxms/rules.rb
|
82
|
+
- src/bxms/functions.rb
|
83
|
+
- src/net
|
84
|
+
- src/net/transport_wrapper.rb
|
85
|
+
- src/net/transport.rb
|
86
|
+
- src/page
|
91
87
|
- src/page/part_collector.rb
|
88
|
+
- src/page/part.rb
|
89
|
+
- src/bxms.rb
|
90
|
+
- src/rules
|
92
91
|
- src/rules/base.rb
|
93
|
-
- src/rules/copy.rb
|
94
|
-
- src/rules/ignore.rb
|
95
92
|
- src/rules/process.rb
|
96
93
|
- src/rules/process_page.rb
|
94
|
+
- src/rules/copy.rb
|
95
|
+
- src/rules/ignore.rb
|
96
|
+
- src/util
|
97
|
+
- src/util/folder_scanner.rb
|
97
98
|
- src/util/chained_hash.rb
|
98
|
-
- src/util/logger.rb
|
99
99
|
- src/util/system_logger.rb
|
100
|
-
|
101
|
-
|
100
|
+
- src/util/logger.rb
|
101
|
+
has_rdoc: true
|
102
|
+
homepage: bxms.rubyforge.org.
|
103
|
+
post_install_message:
|
102
104
|
rdoc_options: []
|
103
105
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
-
|
109
|
-
-
|
110
|
-
|
111
|
-
|
112
|
-
|
106
|
+
require_paths:
|
107
|
+
- src
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: "0"
|
113
|
+
version:
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: "0"
|
119
|
+
version:
|
113
120
|
requirements: []
|
114
121
|
|
115
|
-
|
122
|
+
rubyforge_project: bxms
|
123
|
+
rubygems_version: 1.3.1
|
124
|
+
signing_key:
|
125
|
+
specification_version: 2
|
126
|
+
summary: Simple offline CMS framework based on ERB, 'tags' and 'functions'.
|
127
|
+
test_files: []
|
116
128
|
|