glue 0.20.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +161 -110
- data/INSTALL +12 -12
- data/README +1 -1
- data/Rakefile +43 -45
- data/doc/AUTHORS +5 -5
- data/doc/LICENSE +3 -3
- data/doc/RELEASES +32 -24
- data/install.rb +7 -17
- data/lib/facet/object/alias_class.rb +12 -0
- data/lib/glue.rb +35 -35
- data/lib/glue/array.rb +46 -46
- data/lib/glue/aspects.rb +199 -209
- data/lib/glue/attribute.rb +15 -15
- data/lib/glue/autoreload.rb +1 -1
- data/lib/glue/builder.rb +48 -0
- data/lib/glue/builder/xml.rb +114 -0
- data/lib/glue/cache.rb +189 -0
- data/lib/glue/configuration.rb +108 -90
- data/lib/glue/flexob.rb +17 -17
- data/lib/glue/hash.rb +71 -71
- data/lib/glue/helper.rb +12 -12
- data/lib/glue/idgen.rb +9 -0
- data/lib/glue/idgen/md5.rb +24 -0
- data/lib/glue/idgen/sequential.rb +15 -0
- data/lib/glue/literal_method.rb +44 -0
- data/lib/glue/localization.rb +130 -0
- data/lib/glue/logger.rb +98 -98
- data/lib/glue/misc.rb +7 -7
- data/lib/glue/mixins.rb +19 -19
- data/lib/glue/number.rb +8 -8
- data/lib/glue/object.rb +2 -2
- data/lib/glue/pool.rb +43 -43
- data/lib/glue/property.rb +392 -392
- data/lib/glue/sanitize.rb +34 -34
- data/lib/glue/settings.rb +1 -1
- data/lib/glue/snapshot.rb +104 -0
- data/lib/glue/string.rb +129 -129
- data/lib/glue/time.rb +53 -53
- data/lib/glue/uri.rb +162 -162
- data/lib/glue/validation.rb +421 -421
- data/lib/vendor/blankslate.rb +53 -0
- data/test/glue/builder/tc_xml.rb +56 -0
- data/test/glue/tc_aspects.rb +90 -90
- data/test/glue/tc_attribute.rb +11 -11
- data/test/glue/tc_builder.rb +30 -0
- data/test/glue/tc_configuration.rb +97 -97
- data/test/glue/tc_flexob.rb +10 -10
- data/test/glue/tc_hash.rb +23 -23
- data/test/glue/tc_localization.rb +49 -0
- data/test/glue/tc_logger.rb +31 -31
- data/test/glue/tc_numbers.rb +9 -9
- data/test/glue/tc_property.rb +67 -67
- data/test/glue/tc_property_mixins.rb +17 -17
- data/test/glue/tc_property_type_checking.rb +13 -13
- data/test/glue/tc_strings.rb +94 -94
- data/test/glue/tc_uri.rb +65 -65
- data/test/glue/tc_validation.rb +196 -196
- metadata +26 -4
data/Rakefile
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
# * George Moschovitis <gm@navel.gr>
|
2
|
-
# (c) 2004-2005 Navel, all rights reserved.
|
3
|
-
# $Id$
|
4
|
-
|
5
1
|
require 'rake/rdoctask'
|
6
2
|
require 'rake/testtask'
|
7
3
|
require 'rake/gempackagetask'
|
@@ -27,63 +23,63 @@ VersionFile = MainFile = File.join("lib", Name + '.rb')
|
|
27
23
|
|
28
24
|
RubyForgeProject = 'nitro'
|
29
25
|
RubyForgeUser = 'gmosx'
|
30
|
-
Homepage = "http
|
26
|
+
Homepage = "http://www.nitrohq.com/"
|
31
27
|
|
32
28
|
task :default => :package
|
33
29
|
|
34
30
|
# Run all tests.
|
35
31
|
|
36
32
|
Rake::TestTask.new do |t|
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
t.libs << 'test'
|
34
|
+
t.test_files = FileList['test/**/*.rb']
|
35
|
+
t.verbose = true
|
40
36
|
end
|
41
37
|
|
42
38
|
# Generate RDoc documentation.
|
43
39
|
|
44
40
|
Rake::RDocTask.new do |rd|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
rd.main = 'README'
|
42
|
+
rd.rdoc_dir = 'rdoc'
|
43
|
+
rd.rdoc_files.include('README', 'INSTALL', 'lib/**/*.rb')
|
44
|
+
rd.options << '--all --inline-source'
|
49
45
|
end
|
50
46
|
|
51
47
|
# Build gem.
|
52
48
|
|
53
49
|
spec = Gem::Specification.new do |s|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
50
|
+
s.name = 'glue'
|
51
|
+
if File.read('lib/glue.rb') =~ /Version\s+=\s+'(\d+\.\d+\.\d+)'/
|
52
|
+
s.version = $1
|
53
|
+
else
|
54
|
+
raise 'No version found'
|
55
|
+
end
|
56
|
+
s.summary = 'Glue utilities'
|
57
|
+
s.description = 'A collection of utilities and useful classes'
|
58
|
+
s.add_dependency 'facets', '>= 0.7.2'
|
59
|
+
#s.add_dependency 'flexmock', '>= 0.0.3'
|
60
|
+
|
61
|
+
s.required_ruby_version = '>= 1.8.2'
|
62
|
+
|
63
|
+
s.files = FileList[
|
64
|
+
'[A-Z]*', 'install.rb', '{doc,lib,test,vendor}/**/*'
|
65
|
+
].exclude('.svn/**/*').exclude('**/*.log').to_a
|
66
|
+
|
67
|
+
s.require_path = 'lib'
|
68
|
+
s.autorequire = 'glue'
|
69
|
+
|
70
|
+
s.has_rdoc = true
|
71
|
+
s.extra_rdoc_files = FileList['[A-Z]*'].to_a
|
72
|
+
s.rdoc_options << '--main' << 'README' << '--title' << 'Glue Documentation'
|
73
|
+
s.rdoc_options << '--all' << '--inline-source'
|
74
|
+
|
75
|
+
s.test_files = []
|
76
|
+
|
77
|
+
s.bindir = 'bin'
|
78
|
+
|
79
|
+
s.author = 'George Moschovitis'
|
80
|
+
s.email = 'gm@navel.gr'
|
81
|
+
s.homepage = 'http://www.nitrohq.com'
|
82
|
+
s.rubyforge_project = 'nitro'
|
87
83
|
end
|
88
84
|
|
89
85
|
Rake::GemPackageTask.new(spec) do |pkg|
|
@@ -218,3 +214,5 @@ task :publish => [:package] do
|
|
218
214
|
end
|
219
215
|
end
|
220
216
|
end
|
217
|
+
|
218
|
+
# * George Moschovitis <gm@navel.gr>
|
data/doc/AUTHORS
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
MAIN DEVELOPER:
|
2
2
|
|
3
3
|
* George Moschovitis <gm@navel.gr>
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
Project leader, architecture and design, code,
|
5
|
+
documentation, maintainer.
|
6
|
+
|
7
7
|
IDEAS, ADDITIONAL CODING, SUPPORT:
|
8
8
|
|
9
9
|
* Michael Neumann <mneumann@ntecs.de>
|
10
|
-
|
10
|
+
Design, additional coding and bug reports.
|
11
11
|
|
12
12
|
* Gavin Sinclair <gsinclair@soyabean.com.au>
|
13
|
-
|
13
|
+
Logger#trace method.
|
data/doc/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The BSD License
|
2
2
|
|
3
|
-
Copyright (c) 2004-2005, George '
|
3
|
+
Copyright (c) 2004-2005, George 'gmosx' Moschovitis. (http://www.gmosx.com)
|
4
4
|
Copyright (c) 2004-2005, Navel Ltd. (http://www.navel.gr)
|
5
5
|
All rights reserved.
|
6
6
|
|
@@ -10,11 +10,11 @@ met:
|
|
10
10
|
|
11
11
|
* Redistributions of source code must retain the above copyright
|
12
12
|
notice, this list of conditions and the following disclaimer.
|
13
|
-
|
13
|
+
|
14
14
|
* Redistributions in binary form must reproduce the above copyright
|
15
15
|
notice, this list of conditions and the following disclaimer in the
|
16
16
|
documentation and/or other materials provided with the distribution.
|
17
|
-
|
17
|
+
|
18
18
|
* Neither the name of Navel nor the names of its contributors may be
|
19
19
|
used to endorse or promote products derived from this software
|
20
20
|
without specific prior written permission.
|
data/doc/RELEASES
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
== Version 0.
|
1
|
+
== Version 0.21.0
|
2
|
+
|
3
|
+
* New builder system.
|
4
|
+
|
5
|
+
* Added utility methods from Wee.
|
6
|
+
|
7
|
+
* Added utility methods from Nitro.
|
8
|
+
|
9
|
+
== Version 0.20.0 was released on 12-07-2005.
|
2
10
|
|
3
11
|
* Brand new, self-documenting configuration system. There is a new
|
4
12
|
keyword for defining configuration settings:
|
@@ -6,11 +14,11 @@
|
|
6
14
|
Here is an example:
|
7
15
|
|
8
16
|
class Render
|
9
|
-
|
17
|
+
setting :template_extension, :default => 'xhtml', :doc => 'The default template extension'
|
10
18
|
end
|
11
19
|
|
12
20
|
class Session
|
13
|
-
|
21
|
+
setting :store, :default => 'memory', :doc => 'The session store'
|
14
22
|
end
|
15
23
|
|
16
24
|
You can configure the Application using ruby code or yaml files:
|
@@ -21,10 +29,10 @@
|
|
21
29
|
or
|
22
30
|
|
23
31
|
Render:
|
24
|
-
|
32
|
+
template_extension: xhtml
|
25
33
|
Session:
|
26
|
-
|
27
|
-
|
34
|
+
store: drb
|
35
|
+
|
28
36
|
You can access all defined settings:
|
29
37
|
|
30
38
|
Configuration.settings.each { |s| ... }
|
@@ -70,25 +78,25 @@ new features and a major cleanup of the source code.
|
|
70
78
|
Most notable attitions:
|
71
79
|
|
72
80
|
* Aspect Oriented Programming support. This new system
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
is used to reimplement features such as Controller filters,
|
82
|
+
Og callbacks and Og observers. By using this unified
|
83
|
+
system you can now add Observers to controllers and use
|
84
|
+
a metalanguage for wraping Og object callbacks:
|
85
|
+
|
86
|
+
class Controller
|
87
|
+
pre :force_login, :where => :prepend
|
88
|
+
wrap Benchmark, :on => :index
|
89
|
+
post :taraa, :on => login
|
90
|
+
end
|
83
91
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
+
module Timestamped
|
93
|
+
pre :on => :og_insert { |this| this.create_time = Time.now }
|
94
|
+
pre :on => :og_update { |this| this.update_time = Time.now }
|
95
|
+
pre :on => [:og_insert, :og_update] { |this| this.create_time = Time.now }
|
96
|
+
end
|
97
|
+
|
98
|
+
This feature will be used extensivelly in future versions
|
99
|
+
to improve logging, the shaders and more.
|
92
100
|
|
93
101
|
|
94
102
|
== Version 0.15.0 was released on 04/04/2005.
|
data/install.rb
CHANGED
@@ -1,28 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# * George Moschovitis <gm@navel.gr>
|
4
|
-
# (c) 2004-2005 Navel, all rights reserved.
|
5
|
-
# $Id: install.rb 1 2005-04-11 11:04:30Z gmosx $
|
6
|
-
|
7
3
|
require 'rbconfig'
|
8
4
|
require 'ftools'
|
9
5
|
|
10
6
|
dst_dir = Config::CONFIG['sitelibdir']
|
11
7
|
|
12
8
|
Dir.chdir('lib') do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
# gmosx: this is potentially dangerous, rethink.
|
20
|
-
|
21
|
-
Dir.chdir('vendor') do
|
22
|
-
Dir['**/*.rb'].each do |file|
|
23
|
-
File.mkpath File.join(dst_dir, File.dirname(file)), true
|
24
|
-
File.install file, File.join(dst_dir, file), 0644, true
|
25
|
-
end
|
9
|
+
Dir['**/*.rb'].each do |file|
|
10
|
+
File.mkpath File.join(dst_dir, File.dirname(file)), true
|
11
|
+
File.install file, File.join(dst_dir, file), 0644, true
|
12
|
+
end
|
26
13
|
end
|
27
14
|
|
28
15
|
puts %{
|
@@ -45,3 +32,6 @@ at the command line.
|
|
45
32
|
|
46
33
|
Enjoy the magic of Og!
|
47
34
|
}
|
35
|
+
|
36
|
+
# * George Moschovitis <gm@navel.gr>
|
37
|
+
|
data/lib/glue.rb
CHANGED
@@ -17,55 +17,55 @@ require 'glue/attribute'
|
|
17
17
|
|
18
18
|
class NilClass
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
20
|
+
# quite usefull for error tolerant apps.
|
21
|
+
# a bit dangerous? Will have to rethink this.
|
22
|
+
|
23
|
+
def empty?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def blank?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
31
|
end
|
32
32
|
|
33
33
|
class Class
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
#--
|
35
|
+
# gmosx: is this really needed?
|
36
|
+
#++
|
37
|
+
|
38
|
+
def to_i
|
39
|
+
return self.hash
|
40
|
+
end
|
41
41
|
end
|
42
42
|
|
43
43
|
module Kernel
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
45
|
+
# Pretty prints an exception/error object
|
46
|
+
# usefull for helpfull debug messages
|
47
|
+
#
|
48
|
+
# Input:
|
49
|
+
# The Exception/StandardError object
|
50
|
+
#
|
51
|
+
# Output:
|
52
|
+
# the pretty printed string
|
53
|
+
|
54
|
+
def pp_exception(ex)
|
55
|
+
return %{#{ex.message}\n #{ex.backtrace.join("\n ")}\n LOGGED FROM: #{caller[0]}}
|
56
|
+
end
|
57
57
|
|
58
58
|
end
|
59
59
|
|
60
60
|
module Glue
|
61
61
|
|
62
|
-
|
62
|
+
# The version.
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
Version = '0.21.0'
|
65
|
+
|
66
|
+
# Library path.
|
67
67
|
|
68
|
-
|
68
|
+
LibPath = File.dirname(__FILE__)
|
69
69
|
|
70
70
|
end
|
71
71
|
|
data/lib/glue/array.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# * George Moschovitis <gm@navel.gr>
|
2
2
|
# (c) 2002-2005 Navel, all rights reserved.
|
3
|
-
# $Id: array.rb
|
3
|
+
# $Id: array.rb 182 2005-07-22 10:07:50Z gmosx $
|
4
4
|
|
5
5
|
require 'sync'
|
6
6
|
|
@@ -11,51 +11,51 @@ module Glue
|
|
11
11
|
# needed when writing, a shared lock IS NEEDED when reading.
|
12
12
|
|
13
13
|
class SafeArray < Array
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
14
|
+
|
15
|
+
attr :sync
|
16
|
+
|
17
|
+
# gmosx: delegator is not used.
|
18
|
+
|
19
|
+
def initialize(delegator = nil)
|
20
|
+
@sync = Sync.new()
|
21
|
+
end
|
22
|
+
|
23
|
+
def << (value)
|
24
|
+
return @sync.synchronize(Sync::SH) { super }
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_if(&block)
|
28
|
+
return @sync.synchronize(Sync::SH) { super }
|
29
|
+
end
|
30
|
+
|
31
|
+
def [](key)
|
32
|
+
return @sync.synchronize(Sync::SH) { super }
|
33
|
+
end
|
34
|
+
|
35
|
+
def []=(key, value)
|
36
|
+
return @sync.synchronize(Sync::EX) { super }
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete(key)
|
40
|
+
return @sync.synchronize(Sync::EX) { super }
|
41
|
+
end
|
42
|
+
|
43
|
+
def clear
|
44
|
+
@sync.synchronize(Sync::EX) { super }
|
45
|
+
end
|
46
|
+
|
47
|
+
def size
|
48
|
+
return @sync.synchronize(Sync::SH) { super }
|
49
|
+
end
|
50
|
+
|
51
|
+
def shift
|
52
|
+
return @sync.synchronize(::Sync::EX) { super }
|
53
|
+
end
|
54
|
+
|
55
|
+
def unshift(el)
|
56
|
+
return @sync.synchronize(::Sync::EX) { super }
|
57
|
+
end
|
58
|
+
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|