glue 0.22.0 → 0.23.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.
- data/README +3 -3
- data/Rakefile +3 -3
- data/{CHANGELOG → doc/CHANGELOG.1} +0 -0
- data/doc/RELEASES +10 -0
- data/lib/glue.rb +7 -12
- data/lib/glue/configuration.rb +4 -4
- data/lib/glue/fixture.rb +3 -4
- data/lib/glue/helper.rb +1 -2
- data/lib/glue/logger.rb +43 -23
- data/lib/glue/metadata.rb +60 -0
- data/lib/glue/mock.rb +40 -0
- data/lib/glue/property.rb +33 -9
- data/lib/glue/property.rb.old +438 -0
- data/lib/glue/template.rb +1 -1
- data/lib/glue/uri.rb +2 -2
- data/test/glue/tc_metadata.rb +33 -0
- metadata +53 -57
- data/lib/glue/annotation.rb +0 -33
- data/lib/glue/array.rb +0 -61
- data/lib/glue/autoreload.rb +0 -30
- data/lib/glue/cache.rb +0 -189
- data/lib/glue/hash.rb +0 -122
- data/lib/glue/misc.rb +0 -15
- data/lib/glue/number.rb +0 -24
- data/lib/glue/object.rb +0 -35
- data/lib/glue/pool.rb +0 -60
- data/lib/glue/snapshot.rb +0 -104
- data/lib/glue/string.rb +0 -162
- data/lib/glue/time.rb +0 -85
- data/lib/vendor/blankslate.rb +0 -53
- data/test/glue/tc_hash.rb +0 -36
- data/test/glue/tc_numbers.rb +0 -18
- data/test/glue/tc_strings.rb +0 -102
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Glue 0.
|
1
|
+
= Glue 0.23.0 README
|
2
2
|
|
3
3
|
Useful utilites and methods.
|
4
4
|
|
@@ -6,14 +6,14 @@ Useful utilites and methods.
|
|
6
6
|
== Purpose
|
7
7
|
|
8
8
|
Useful libraries are stored here. An attempt is made to
|
9
|
-
graduate smaller libraries to the more general
|
9
|
+
graduate smaller libraries to the more general Nano/Mega
|
10
10
|
ruby project.
|
11
11
|
|
12
12
|
|
13
13
|
== Licence
|
14
14
|
|
15
|
-
Copyright (c) 2004-2005, George 'gmosx' Moschovitis (http://www.gmosx.com)
|
16
15
|
Copyright (c) 2004-2005, Navel Ltd (http://www.navel.gr)
|
16
|
+
Copyright (c) 2004-2005, George 'gmosx' Moschovitis (http://www.gmosx.com)
|
17
17
|
|
18
18
|
Glue (http://www.rubyforge.org/projects/nitro) is copyrighted free
|
19
19
|
software created and maintained by George Moschovitis (mailto:gm@navel.gr)
|
data/Rakefile
CHANGED
@@ -55,14 +55,14 @@ spec = Gem::Specification.new do |s|
|
|
55
55
|
end
|
56
56
|
s.summary = 'Glue utilities'
|
57
57
|
s.description = 'A collection of utilities and useful classes'
|
58
|
-
s.add_dependency '
|
59
|
-
|
58
|
+
s.add_dependency 'nano', '>= 0.8.2'
|
59
|
+
s.add_dependency 'mega', '>= 0.3.1'
|
60
60
|
|
61
61
|
s.required_ruby_version = '>= 1.8.2'
|
62
62
|
|
63
63
|
s.files = FileList[
|
64
64
|
'[A-Z]*', 'install.rb', '{doc,lib,test,vendor}/**/*'
|
65
|
-
].exclude(
|
65
|
+
].exclude("_darcs").exclude("_darcs/**/*").exclude('**/*.log').to_a
|
66
66
|
|
67
67
|
s.require_path = 'lib'
|
68
68
|
s.autorequire = 'glue'
|
File without changes
|
data/doc/RELEASES
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== Version 0.23.0
|
2
|
+
|
3
|
+
Major cleanup, this release marks a bold step towards Nano/Nitro
|
4
|
+
integration.
|
5
|
+
|
6
|
+
* Moved some files to the Nano/Mega project.
|
7
|
+
|
8
|
+
* Dreprecated functionality already available in Nano/Mega.
|
9
|
+
|
10
|
+
|
1
11
|
== Version 0.22.0
|
2
12
|
|
3
13
|
* New mailer implementation.
|
data/lib/glue.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
# = Glue
|
2
2
|
#
|
3
|
-
# General libraries used by various projects.
|
4
|
-
#
|
5
|
-
# Copyright (c) 2004-2005, George Moschovitis (http://www.gmosx.com)
|
6
3
|
# Copyright (c) 2004-2005, Navel Ltd (http://www.navel.gr)
|
4
|
+
# Copyright (c) 2004-2005, George Moschovitis (http://www.gmosx.com)
|
7
5
|
#
|
8
|
-
# Glue is copyrighted free software
|
9
|
-
# George Moschovitis (mailto:gm@navel.gr)
|
10
|
-
# standard BSD Licence. For details
|
6
|
+
# Glue (http://www.nitrohq.com) is copyrighted free software
|
7
|
+
# created and maintained by George Moschovitis (mailto:gm@navel.gr)
|
8
|
+
# and released under the standard BSD Licence. For details
|
9
|
+
# consult the file doc/LICENCE.
|
11
10
|
|
12
11
|
require 'English'
|
13
12
|
require 'pp'
|
@@ -16,7 +15,6 @@ require 'glue/property'
|
|
16
15
|
require 'glue/attribute'
|
17
16
|
|
18
17
|
class NilClass
|
19
|
-
|
20
18
|
# quite usefull for error tolerant apps.
|
21
19
|
# a bit dangerous? Will have to rethink this.
|
22
20
|
|
@@ -26,8 +24,7 @@ class NilClass
|
|
26
24
|
|
27
25
|
def blank?
|
28
26
|
true
|
29
|
-
end
|
30
|
-
|
27
|
+
end
|
31
28
|
end
|
32
29
|
|
33
30
|
class Class
|
@@ -41,7 +38,6 @@ class Class
|
|
41
38
|
end
|
42
39
|
|
43
40
|
module Kernel
|
44
|
-
|
45
41
|
# Pretty prints an exception/error object
|
46
42
|
# usefull for helpfull debug messages
|
47
43
|
#
|
@@ -54,14 +50,13 @@ module Kernel
|
|
54
50
|
def pp_exception(ex)
|
55
51
|
return %{#{ex.message}\n #{ex.backtrace.join("\n ")}\n LOGGED FROM: #{caller[0]}}
|
56
52
|
end
|
57
|
-
|
58
53
|
end
|
59
54
|
|
60
55
|
module Glue
|
61
56
|
|
62
57
|
# The version.
|
63
58
|
|
64
|
-
Version = '0.
|
59
|
+
Version = '0.23.0'
|
65
60
|
|
66
61
|
# Library path.
|
67
62
|
|
data/lib/glue/configuration.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'nano/object/constant'
|
4
|
+
require 'mega/synchash'
|
4
5
|
|
5
6
|
require 'glue/attribute'
|
6
|
-
require 'glue/hash'
|
7
7
|
require 'glue/flexob'
|
8
8
|
|
9
9
|
# A Configuration holds a group of Settings organized by
|
@@ -20,7 +20,7 @@ class Configuration
|
|
20
20
|
# TODO: find a better name.
|
21
21
|
#++
|
22
22
|
|
23
|
-
@@owners =
|
23
|
+
@@owners = SyncHash.new
|
24
24
|
|
25
25
|
# A datastructure to store Settings metadata.
|
26
26
|
|
@@ -107,7 +107,7 @@ class Configuration
|
|
107
107
|
alias_method :[], :settings
|
108
108
|
|
109
109
|
def method_missing(sym)
|
110
|
-
if sym.to_s =~ /[A-Z]/ #
|
110
|
+
if sym.to_s =~ /[A-Z]/ # nano's capitalized? is buggy at the moment.
|
111
111
|
Flexob.new(self[constant(sym)])
|
112
112
|
end
|
113
113
|
end
|
data/lib/glue/fixture.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require '
|
1
|
+
require 'nano/object/constant'
|
2
|
+
|
3
|
+
require 'mega/orm_support'
|
4
4
|
|
5
5
|
require 'glue/configuration'
|
6
6
|
require 'glue/template'
|
@@ -63,7 +63,6 @@ class Fixture < Hash
|
|
63
63
|
|
64
64
|
attr_accessor :objects
|
65
65
|
|
66
|
-
|
67
66
|
def initialize(klass, options = { } )
|
68
67
|
@klass = klass
|
69
68
|
@name = class_to_name(klass)
|
data/lib/glue/helper.rb
CHANGED
data/lib/glue/logger.rb
CHANGED
@@ -43,7 +43,7 @@ class Logger
|
|
43
43
|
unless expr.respond_to? :to_str
|
44
44
|
warn "trace: Can't evaluate the given value: #{caller.first}"
|
45
45
|
else
|
46
|
-
require '
|
46
|
+
require 'nano/binding/of_caller'
|
47
47
|
|
48
48
|
Binding.of_caller do |b|
|
49
49
|
value = b.eval(expr.to_str)
|
@@ -71,21 +71,57 @@ class Logger
|
|
71
71
|
:inspect => :inspect, :to_yaml => :to_yaml
|
72
72
|
)
|
73
73
|
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
74
|
+
# Dictate the way in which this logger should format the
|
75
|
+
# messages it displays. This method requires a block. The
|
76
|
+
# block should return formatted strings given severity,
|
77
|
+
# timestamp, msg, progname.
|
78
|
+
#
|
79
|
+
# Useless example:
|
80
|
+
#
|
81
|
+
# logger = Logger.new
|
82
|
+
# logger.format do |severity, timestamp, msg, progname|
|
83
|
+
# "#{progname}@#{timestamp} - #{severity}::#{msg}"
|
84
|
+
# end
|
85
|
+
|
86
|
+
def setup_format(&format_proc)
|
87
|
+
raise 'Formating block needed' unless format_proc
|
88
|
+
@format_proc = format_proc
|
89
|
+
end
|
77
90
|
|
78
|
-
|
91
|
+
private
|
79
92
|
|
80
|
-
|
93
|
+
# hackish use of *args, give me some love.
|
94
|
+
|
95
|
+
def format_message(*args)
|
96
|
+
@format_proc ? @format_proc.call(*args) : super(*args)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
# Global logger interface. This provides an alternative
|
102
|
+
# Singleton interface to the Logger.
|
103
|
+
|
104
|
+
class Logger
|
81
105
|
|
106
|
+
SIMPLE_FORMAT = "%5s: %s\n"
|
107
|
+
@@global_logger = Logger.new(STDERR)
|
108
|
+
@@global_logger.setup_format do |severity, timestamp, msg, progname|
|
109
|
+
SIMPLE_FORMAT % [severity, msg]
|
110
|
+
end
|
111
|
+
|
82
112
|
# Set the global Logger.
|
83
113
|
|
84
114
|
def self.set(logger)
|
85
115
|
if logger.is_a?(String)
|
86
116
|
@@global_logger = Logger.new(logger)
|
117
|
+
@@global_logger.setup_format do |severity, timestamp, msg, progname|
|
118
|
+
SIMPLE_FORMAT % [severity, msg]
|
119
|
+
end
|
87
120
|
elsif logger.is_a?(Logger)
|
88
121
|
@@global_logger = logger
|
122
|
+
@@global_logger.setup_format do |severity, timestamp, msg, progname|
|
123
|
+
SIMPLE_FORMAT % [severity, msg]
|
124
|
+
end
|
89
125
|
else
|
90
126
|
raise ArgumentError.new
|
91
127
|
end
|
@@ -119,7 +155,7 @@ class Logger
|
|
119
155
|
unless expr.respond_to? :to_str
|
120
156
|
warn "trace: Can't evaluate the given value: #{caller.first}"
|
121
157
|
else
|
122
|
-
require '
|
158
|
+
require 'nano/binding/of_caller'
|
123
159
|
|
124
160
|
Binding.of_caller do |b|
|
125
161
|
value = eval(expr.to_str, b)
|
@@ -139,22 +175,6 @@ class Logger
|
|
139
175
|
end
|
140
176
|
end
|
141
177
|
end
|
142
|
-
|
143
|
-
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
144
|
-
|
145
|
-
private
|
146
|
-
|
147
|
-
# the default Ruby logger has a hardwired silly format.
|
148
|
-
# we use some Ruby magic to fix it!
|
149
|
-
|
150
|
-
remove_const "Format"
|
151
|
-
|
152
|
-
Format = "%5s: %s\n"
|
153
|
-
|
154
|
-
def format_message(severity, timestamp, msg, progname)
|
155
|
-
Format % [severity, msg]
|
156
|
-
end
|
157
|
-
|
158
178
|
end
|
159
179
|
|
160
180
|
module Glue
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'glue/flexob'
|
2
|
+
|
3
|
+
# WARNING: this is under construction, DON'T use yet.
|
4
|
+
|
5
|
+
module MetadataUtils
|
6
|
+
end
|
7
|
+
|
8
|
+
# Include this module to classes to add metadata/annotation
|
9
|
+
# functionality.
|
10
|
+
|
11
|
+
module MetadataMixin
|
12
|
+
def self.included(base)
|
13
|
+
base.module_eval do
|
14
|
+
@metadata = Flexob.new
|
15
|
+
@metadata[:self] = Flexob.new
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def metadata
|
19
|
+
@metadata
|
20
|
+
end
|
21
|
+
|
22
|
+
def selmetadata=(md)
|
23
|
+
@metadata = md
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
=begin
|
29
|
+
case base
|
30
|
+
when Class:
|
31
|
+
base.module_eval do
|
32
|
+
def self.inherited(child)
|
33
|
+
MetadataUtils.enchant(child)
|
34
|
+
MetadataUtils.copy(self, child)
|
35
|
+
# gmosx: super must stay at the end.
|
36
|
+
super
|
37
|
+
end
|
38
|
+
end
|
39
|
+
when Module:
|
40
|
+
end
|
41
|
+
=end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Module
|
46
|
+
# Annotate (define metadata) for the given symbol/class.
|
47
|
+
|
48
|
+
def ann(*args)
|
49
|
+
if args.first.is_a? Symbol
|
50
|
+
key = args.shift
|
51
|
+
else
|
52
|
+
key = :self
|
53
|
+
end
|
54
|
+
unless args.empty?
|
55
|
+
self.metadata[key] = Flexob.new(args.first)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# * George Moschovitis <gm@navel.r>
|
data/lib/glue/mock.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
# A simple mocking facility. Typically used in test cases.
|
4
|
+
#
|
5
|
+
# === Example:
|
6
|
+
#
|
7
|
+
# class ContextMock < Mock
|
8
|
+
# mock :response_headers, {}
|
9
|
+
# mock :host_url, 'http://www.nitrohq.com'
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# ctx = ContextMock.new
|
13
|
+
# ctx.response_headers['location'] = url
|
14
|
+
# ctx.host_url
|
15
|
+
|
16
|
+
class Mock < OpenStruct
|
17
|
+
class << self
|
18
|
+
attr :mocks
|
19
|
+
|
20
|
+
# Mock a symbol, val is the default values. Useful
|
21
|
+
# for mocking structured variables like arrays and
|
22
|
+
# hashes.
|
23
|
+
|
24
|
+
def mock(sym, val)
|
25
|
+
@mocks ||= {}
|
26
|
+
@mocks[sym] = val
|
27
|
+
attr_accessor sym
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
super
|
33
|
+
|
34
|
+
for sym, val in self.class.mocks
|
35
|
+
unless val.is_a? Proc
|
36
|
+
instance_variable_set "@#{sym}", val
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/glue/property.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
|
+
require 'mega/synchash'
|
2
|
+
require 'mega/syncarray'
|
3
|
+
|
4
|
+
require 'nano/time/change'
|
5
|
+
|
1
6
|
require 'glue/attribute'
|
2
7
|
require 'glue/flexob'
|
3
|
-
require 'glue/array'
|
4
|
-
require 'glue/hash'
|
5
8
|
|
6
9
|
module Glue
|
7
10
|
|
@@ -49,11 +52,16 @@ class Property
|
|
49
52
|
# You can use this mechanism to add your own, custom,
|
50
53
|
# metadata.
|
51
54
|
|
52
|
-
attr_accessor :
|
53
|
-
|
54
|
-
|
55
|
+
attr_accessor :metadata
|
56
|
+
|
57
|
+
# Support legacy code, will be deprecated.
|
58
|
+
|
59
|
+
alias_method :meta, :metadata
|
60
|
+
alias_method :meta=, :metadata=
|
61
|
+
|
62
|
+
def initialize(symbol, klass, metadata = {})
|
55
63
|
@symbol, @klass = symbol, klass
|
56
|
-
@
|
64
|
+
@metadata = metadata
|
57
65
|
end
|
58
66
|
|
59
67
|
def ==(other)
|
@@ -63,7 +71,6 @@ class Property
|
|
63
71
|
def to_s
|
64
72
|
return @symbol.to_s
|
65
73
|
end
|
66
|
-
|
67
74
|
end
|
68
75
|
|
69
76
|
# A collection of Property related utility methods.
|
@@ -84,7 +91,7 @@ module PropertyUtils
|
|
84
91
|
unless target.instance_variables.include?('@__props')
|
85
92
|
# FIXME: should be thread safe here!
|
86
93
|
target.instance_variable_set('@__meta', Flexob.new)
|
87
|
-
target.instance_variable_set('@__props',
|
94
|
+
target.instance_variable_set('@__props', SyncArray.new)
|
88
95
|
|
89
96
|
# gmosx: Ruby surprises and amazes me! We are in the Metaclass
|
90
97
|
# when defining methods and attributes so @__props is really
|
@@ -201,7 +208,7 @@ module PropertyUtils
|
|
201
208
|
# overrides.
|
202
209
|
|
203
210
|
if prop.meta[:writer]
|
204
|
-
|
211
|
+
code = %{
|
205
212
|
#{prop_setter(prop)}
|
206
213
|
|
207
214
|
def __force_#{s}(val)
|
@@ -220,7 +227,24 @@ module PropertyUtils
|
|
220
227
|
"val"
|
221
228
|
end + %{)
|
222
229
|
end
|
230
|
+
|
231
|
+
def __force_hash_#{s}(hash)
|
223
232
|
}
|
233
|
+
|
234
|
+
case klass.name
|
235
|
+
when Time.name
|
236
|
+
code << %{
|
237
|
+
ihash = {}
|
238
|
+
hash = hash.map { |k, v| ihash[k.intern] = v.to_i }
|
239
|
+
@#{s} = @#{s}.change(ihash)
|
240
|
+
}
|
241
|
+
end
|
242
|
+
|
243
|
+
code << %{
|
244
|
+
end
|
245
|
+
}
|
246
|
+
|
247
|
+
target.module_eval(code)
|
224
248
|
end
|
225
249
|
end
|
226
250
|
|