glue 0.20.0 → 0.21.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.
Files changed (58) hide show
  1. data/CHANGELOG +161 -110
  2. data/INSTALL +12 -12
  3. data/README +1 -1
  4. data/Rakefile +43 -45
  5. data/doc/AUTHORS +5 -5
  6. data/doc/LICENSE +3 -3
  7. data/doc/RELEASES +32 -24
  8. data/install.rb +7 -17
  9. data/lib/facet/object/alias_class.rb +12 -0
  10. data/lib/glue.rb +35 -35
  11. data/lib/glue/array.rb +46 -46
  12. data/lib/glue/aspects.rb +199 -209
  13. data/lib/glue/attribute.rb +15 -15
  14. data/lib/glue/autoreload.rb +1 -1
  15. data/lib/glue/builder.rb +48 -0
  16. data/lib/glue/builder/xml.rb +114 -0
  17. data/lib/glue/cache.rb +189 -0
  18. data/lib/glue/configuration.rb +108 -90
  19. data/lib/glue/flexob.rb +17 -17
  20. data/lib/glue/hash.rb +71 -71
  21. data/lib/glue/helper.rb +12 -12
  22. data/lib/glue/idgen.rb +9 -0
  23. data/lib/glue/idgen/md5.rb +24 -0
  24. data/lib/glue/idgen/sequential.rb +15 -0
  25. data/lib/glue/literal_method.rb +44 -0
  26. data/lib/glue/localization.rb +130 -0
  27. data/lib/glue/logger.rb +98 -98
  28. data/lib/glue/misc.rb +7 -7
  29. data/lib/glue/mixins.rb +19 -19
  30. data/lib/glue/number.rb +8 -8
  31. data/lib/glue/object.rb +2 -2
  32. data/lib/glue/pool.rb +43 -43
  33. data/lib/glue/property.rb +392 -392
  34. data/lib/glue/sanitize.rb +34 -34
  35. data/lib/glue/settings.rb +1 -1
  36. data/lib/glue/snapshot.rb +104 -0
  37. data/lib/glue/string.rb +129 -129
  38. data/lib/glue/time.rb +53 -53
  39. data/lib/glue/uri.rb +162 -162
  40. data/lib/glue/validation.rb +421 -421
  41. data/lib/vendor/blankslate.rb +53 -0
  42. data/test/glue/builder/tc_xml.rb +56 -0
  43. data/test/glue/tc_aspects.rb +90 -90
  44. data/test/glue/tc_attribute.rb +11 -11
  45. data/test/glue/tc_builder.rb +30 -0
  46. data/test/glue/tc_configuration.rb +97 -97
  47. data/test/glue/tc_flexob.rb +10 -10
  48. data/test/glue/tc_hash.rb +23 -23
  49. data/test/glue/tc_localization.rb +49 -0
  50. data/test/glue/tc_logger.rb +31 -31
  51. data/test/glue/tc_numbers.rb +9 -9
  52. data/test/glue/tc_property.rb +67 -67
  53. data/test/glue/tc_property_mixins.rb +17 -17
  54. data/test/glue/tc_property_type_checking.rb +13 -13
  55. data/test/glue/tc_strings.rb +94 -94
  56. data/test/glue/tc_uri.rb +65 -65
  57. data/test/glue/tc_validation.rb +196 -196
  58. metadata +26 -4
@@ -5,15 +5,15 @@ require 'glue/flexob'
5
5
 
6
6
  class TC_Flexob < Test::Unit::TestCase # :nodoc: all
7
7
 
8
- def test_all
9
- f = Flexob.new
10
- f.title = 'Test'
11
- f[:another] = 'Another'
12
-
13
- assert_equal 'Test', f.title
14
- assert_equal 'Another', f.another
15
- assert_equal 'Another', f[:another]
16
- assert_equal 'Another', f['another']
17
- end
8
+ def test_all
9
+ f = Flexob.new
10
+ f.title = 'Test'
11
+ f[:another] = 'Another'
12
+
13
+ assert_equal 'Test', f.title
14
+ assert_equal 'Another', f.another
15
+ assert_equal 'Another', f[:another]
16
+ assert_equal 'Another', f['another']
17
+ end
18
18
 
19
19
  end
data/test/glue/tc_hash.rb CHANGED
@@ -2,35 +2,35 @@ require "test/unit"
2
2
  require "glue/hash"
3
3
 
4
4
  class TestCaseGlueCache < Test::Unit::TestCase # :nodoc: all
5
- include Glue
5
+ include Glue
6
6
 
7
- def setup
8
- @safe_cache = SafeHash.new(Hash.new)
9
- end
7
+ def setup
8
+ @safe_cache = SafeHash.new(Hash.new)
9
+ end
10
10
 
11
- def teardown
12
- @safe_cache = nil
13
- end
11
+ def teardown
12
+ @safe_cache = nil
13
+ end
14
14
 
15
- def test_safe_cache
16
- assert_equal(nil, @safe_cache["no_item"])
17
- item1 = "item1"
18
- @safe_cache["key1"] = item1
19
- assert_equal(item1, @safe_cache["key1"])
15
+ def test_safe_cache
16
+ assert_equal(nil, @safe_cache["no_item"])
17
+ item1 = "item1"
18
+ @safe_cache["key1"] = item1
19
+ assert_equal(item1, @safe_cache["key1"])
20
20
 
21
- @safe_cache["rem1"] = item1
22
- @safe_cache.delete("rem1")
23
- assert_equal(nil, @safe_cache["rem1"])
21
+ @safe_cache["rem1"] = item1
22
+ @safe_cache.delete("rem1")
23
+ assert_equal(nil, @safe_cache["rem1"])
24
24
 
25
- @safe_cache.clear()
26
- assert_equal(0, @safe_cache.size)
25
+ @safe_cache.clear()
26
+ assert_equal(0, @safe_cache.size)
27
27
 
28
- @safe_cache["i1"] = "i1"
29
- @safe_cache["i2"] = "i1"
30
- @safe_cache["i3"] = "i1"
31
- assert_equal(3, @safe_cache.size)
28
+ @safe_cache["i1"] = "i1"
29
+ @safe_cache["i2"] = "i1"
30
+ @safe_cache["i3"] = "i1"
31
+ assert_equal(3, @safe_cache.size)
32
32
 
33
- assert_equal(3, @safe_cache.values.size)
34
- end
33
+ assert_equal(3, @safe_cache.values.size)
34
+ end
35
35
 
36
36
  end
@@ -0,0 +1,49 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
+
3
+ require 'test/unit'
4
+ require 'ostruct'
5
+
6
+ require 'glue/localization'
7
+
8
+ class TestCaseLocalization < Test::Unit::TestCase # :nodoc: all
9
+ include Glue
10
+
11
+ def setup
12
+ locale_en = {
13
+ 'See you' => 'See you',
14
+ :long_paragraph => 'The best new books, up to 30% reduced price',
15
+ :price => 'Price: %d %s',
16
+ :proc_price => proc { |value, cur| "Price: #{value} #{cur}" }
17
+ }
18
+
19
+ locale_de = {
20
+ 'See you' => 'Auf wieder sehen',
21
+ :long_paragraph => 'Die besten neuer buecher, bis zu 30% reduziert',
22
+ :price => 'Preis: %d %s',
23
+ :proc_price => proc { |value, cur| "Preis: #{value} #{cur}" }
24
+ }
25
+
26
+ Localization.add(
27
+ :en => locale_en,
28
+ :de => locale_de
29
+ )
30
+ end
31
+
32
+ def test_all
33
+ lc = Localization.get
34
+ assert_equal 'See you', lc['See you']
35
+ assert_equal 'The best new books, up to 30% reduced price', lc[:long_paragraph]
36
+
37
+ lc = Localization.get(:en)
38
+ assert_equal 'See you', lc['See you']
39
+ assert_equal 'The best new books, up to 30% reduced price', lc[:long_paragraph]
40
+ assert_equal 'Price: 100 euro', lc[:price, 100, 'euro']
41
+ assert_equal 'Price: 100 euro', lc[:proc_price, 100, 'euro']
42
+
43
+ lc = Localization.get(:de)
44
+ assert_equal 'Auf wieder sehen', lc['See you']
45
+ assert_equal 'Die besten neuer buecher, bis zu 30% reduziert', lc[:long_paragraph]
46
+ assert_equal 'Preis: 100 euro', lc.translate(:price, 100, 'euro')
47
+ assert_equal 'Preis: 100 euro', lc[:proc_price, 100, 'euro']
48
+ end
49
+ end
@@ -8,36 +8,36 @@ require 'glue/logger'
8
8
 
9
9
  class TC_Logger < Test::Unit::TestCase # :nodoc: all
10
10
 
11
- def setup
12
- @io = StringIO.new('')
13
- Logger.set(Logger.new(@io))
14
- end
15
-
16
- def test_logger
17
- Logger.info 'hello'
18
- assert_equal(" INFO: hello\n", @io.string)
19
-
20
- # bug: Binding.of_caller thinks Logger is the caller.
21
- a = 14
22
- b = 13
23
- Logger.trace 'a * b'
24
- assert_equal(" INFO: hello\nDEBUG: a * b = 182\n", @io.string)
25
-
26
- @io.string = ''
27
- Logger.debug 'hello'
28
- assert_equal("DEBUG: hello\n", @io.string)
29
-
30
- # test logging level.
31
- Logger.get.level = Logger::INFO
32
- Logger.debug 'world'
33
- assert_equal("DEBUG: hello\n", @io.string)
34
-
35
- # bug:
36
- Logger.error 'Have forgotten that :)'
37
-
38
- #
39
- Logger.set('hello.log')
40
- assert_instance_of(Logger, Logger.get)
41
- end
11
+ def setup
12
+ @io = StringIO.new('')
13
+ Logger.set(Logger.new(@io))
14
+ end
15
+
16
+ def test_logger
17
+ Logger.info 'hello'
18
+ assert_equal(" INFO: hello\n", @io.string)
19
+
20
+ # bug: Binding.of_caller thinks Logger is the caller.
21
+ a = 14
22
+ b = 13
23
+ Logger.trace 'a * b'
24
+ assert_equal(" INFO: hello\nDEBUG: a * b = 182\n", @io.string)
25
+
26
+ @io.string = ''
27
+ Logger.debug 'hello'
28
+ assert_equal("DEBUG: hello\n", @io.string)
29
+
30
+ # test logging level.
31
+ Logger.get.level = Logger::INFO
32
+ Logger.debug 'world'
33
+ assert_equal("DEBUG: hello\n", @io.string)
34
+
35
+ # bug:
36
+ Logger.error 'Have forgotten that :)'
37
+
38
+ #
39
+ Logger.set('hello.log')
40
+ assert_instance_of(Logger, Logger.get)
41
+ end
42
42
 
43
43
  end
@@ -2,17 +2,17 @@ require 'test/unit'
2
2
  require 'glue/number'
3
3
 
4
4
  class TestCaseNumberUtils < Test::Unit::TestCase # :nodoc: all
5
- include Glue
5
+ include Glue
6
6
 
7
- def setup
8
- end
7
+ def setup
8
+ end
9
9
 
10
- def teardown
11
- end
10
+ def teardown
11
+ end
12
12
 
13
- def test_ceil_multiple
14
- assert_equal(20, NumberUtils.ceil_multiple(15, 10))
15
- assert_equal(10, NumberUtils.ceil_multiple(1, 10))
16
- end
13
+ def test_ceil_multiple
14
+ assert_equal(20, NumberUtils.ceil_multiple(15, 10))
15
+ assert_equal(10, NumberUtils.ceil_multiple(1, 10))
16
+ end
17
17
 
18
18
  end
@@ -7,7 +7,7 @@ require 'glue/logger'
7
7
  require 'glue/property'
8
8
 
9
9
  def VarChar(size)
10
- return String, :sql => "VARCHAR(#{ size })"
10
+ return String, :sql => "VARCHAR(#{ size })"
11
11
  end
12
12
  NotNull = {:sql => "NOT NULL"}.freeze
13
13
  Null = {:sql => "NULL"}.freeze
@@ -17,80 +17,80 @@ Property.type_checking = false
17
17
  module Test # :nodoc: all
18
18
 
19
19
  class Msg
20
- include Og::Unmanageable
21
-
22
- prop Fixnum, :owner_oid
23
- prop_accessor :val1, :val2, :val3, Fixnum, :sql => "smallint"
24
- prop_accessor :title, :body, String
25
- prop_accessor :test, String, :sql => "char(10) NOT NULL"
26
- prop_accessor :count, Fixnum
27
- prop_accessor :create_time, Time
28
-
29
- # a marshaled property
30
- prop_accessor Array, :options
31
-
32
- # property with macro arguments!
33
- prop_accessor :address, VarChar(30), NotNull
34
-
35
- def initialize
36
- @create_time = Time.now
37
- @options = []
38
- end
20
+ include Og::Unmanageable
21
+
22
+ prop Fixnum, :owner_oid
23
+ prop_accessor :val1, :val2, :val3, Fixnum, :sql => "smallint"
24
+ prop_accessor :title, :body, String
25
+ prop_accessor :test, String, :sql => "char(10) NOT NULL"
26
+ prop_accessor :count, Fixnum
27
+ prop_accessor :create_time, Time
28
+
29
+ # a marshaled property
30
+ prop_accessor Array, :options
31
+
32
+ # property with macro arguments!
33
+ prop_accessor :address, VarChar(30), NotNull
34
+
35
+ def initialize
36
+ @create_time = Time.now
37
+ @options = []
38
+ end
39
39
 
40
40
  end
41
41
 
42
42
  class SubMsg < Msg
43
- # to avoid conflicts with tc_og.rb
44
- include Og::Unmanageable
45
-
46
- # duplicate definition with different type!
47
- prop_accessor :count, Float
48
-
49
- # another property
50
- prop_accessor :another, Fixnum
43
+ # to avoid conflicts with tc_og.rb
44
+ include Og::Unmanageable
45
+
46
+ # duplicate definition with different type!
47
+ prop_accessor :count, Float
48
+
49
+ # another property
50
+ prop_accessor :another, Fixnum
51
51
  end
52
52
 
53
53
  class TC_N_Properties < Test::Unit::TestCase
54
54
 
55
- def setup
56
- @msg1 = Msg.new
57
- end
58
-
59
- def teardown
60
- @msg1 = nil
61
- end
62
-
63
- def test_props
64
-
65
- # bug: props for subclasses.
66
- # bug: props propagated to base classes.
67
-
68
- assert(SubMsg.__props)
69
- assert_equal(Msg.__props.size(), SubMsg.__props.size() - 1)
70
-
71
- assert_equal(11, Msg.__props.size)
72
- assert_equal(12, SubMsg.__props.size)
73
-
74
- # bug: duplicate definition
75
-
76
- assert_equal(Float, SubMsg.__props.find { |p| :count == p.symbol }.klass)
77
-
78
- # dont force conversion
79
-
80
- @msg1.count = 2.4
81
- assert_equal(Float, @msg1.count.class)
82
-
83
- # force conversion
84
-
85
- @msg1.__force_count(2.4)
86
- assert_equal(Fixnum, @msg1.count.class)
87
- end
88
-
89
- def test_macro_params
90
- sql = Msg.__props.find { |p| :address == p.symbol }.meta[:sql]
91
- assert_equal 'VARCHAR(30) NOT NULL', sql
92
- end
93
-
55
+ def setup
56
+ @msg1 = Msg.new
57
+ end
58
+
59
+ def teardown
60
+ @msg1 = nil
61
+ end
62
+
63
+ def test_props
64
+
65
+ # bug: props for subclasses.
66
+ # bug: props propagated to base classes.
67
+
68
+ assert(SubMsg.__props)
69
+ assert_equal(Msg.__props.size(), SubMsg.__props.size() - 1)
70
+
71
+ assert_equal(11, Msg.__props.size)
72
+ assert_equal(12, SubMsg.__props.size)
73
+
74
+ # bug: duplicate definition
75
+
76
+ assert_equal(Float, SubMsg.__props.find { |p| :count == p.symbol }.klass)
77
+
78
+ # dont force conversion
79
+
80
+ @msg1.count = 2.4
81
+ assert_equal(Float, @msg1.count.class)
82
+
83
+ # force conversion
84
+
85
+ @msg1.__force_count(2.4)
86
+ assert_equal(Fixnum, @msg1.count.class)
87
+ end
88
+
89
+ def test_macro_params
90
+ sql = Msg.__props.find { |p| :address == p.symbol }.meta[:sql]
91
+ assert_equal 'VARCHAR(30) NOT NULL', sql
92
+ end
93
+
94
94
  end
95
95
 
96
96
  end
@@ -1,6 +1,6 @@
1
1
  # * Thomas Quas <tquas@yahoo.com>
2
2
  # * George Moschovitis <gm@navel.gr>
3
- # $Id: tc_property_mixins.rb 1 2005-04-11 11:04:30Z gmosx $
3
+ # $Id: tc_property_mixins.rb 182 2005-07-22 10:07:50Z gmosx $
4
4
 
5
5
  $LOAD_PATH.unshift 'lib'
6
6
 
@@ -9,13 +9,13 @@ require 'glue/property'
9
9
 
10
10
  module Mixin
11
11
  prop_accessor :date
12
- meta :dummy, [123]
12
+ meta :dummy, [123]
13
13
  end
14
14
 
15
15
  class MixedOnly
16
16
  include Mixin
17
- __meta[:dummy] << 5
18
- __meta[:dummy] << 3
17
+ __meta[:dummy] << 5
18
+ __meta[:dummy] << 3
19
19
  end
20
20
 
21
21
  class MixedOnly2
@@ -36,13 +36,13 @@ class Empty
36
36
  end
37
37
 
38
38
  class Base
39
- prop_accessor :date
40
- meta :dummy, [123]
39
+ prop_accessor :date
40
+ meta :dummy, [123]
41
41
  end
42
42
 
43
43
  class Child1 < Base
44
- __meta[:dummy].first << 5
45
- __meta[:dummy].first << 3
44
+ __meta[:dummy].first << 5
45
+ __meta[:dummy].first << 3
46
46
  end
47
47
 
48
48
  class Child2 < Base
@@ -74,15 +74,15 @@ class TC_MixinsTest < ::Test::Unit::TestCase
74
74
  assert( obj.respond_to?( :dummy ) )
75
75
  end
76
76
 
77
- def test_crosspolination
78
- assert_equal 3, MixedOnly.__meta[:dummy].size
79
- assert_equal 1, MixedOnly2.__meta[:dummy].size
80
- assert_equal 1, Mixin.__meta[:dummy].size
77
+ def test_crosspolination
78
+ assert_equal 3, MixedOnly.__meta[:dummy].size
79
+ assert_equal 1, MixedOnly2.__meta[:dummy].size
80
+ assert_equal 1, Mixin.__meta[:dummy].size
81
81
  =begin
82
- gmosx: THINK!
83
- assert_equal 3, Child1.__meta[:dummy].first.size
84
- assert_equal 1, Child2.__meta[:dummy].first.size
85
- assert_equal 1, Base.__meta[:dummy].first.size
82
+ gmosx: THINK!
83
+ assert_equal 3, Child1.__meta[:dummy].first.size
84
+ assert_equal 1, Child2.__meta[:dummy].first.size
85
+ assert_equal 1, Base.__meta[:dummy].first.size
86
86
  =end
87
- end
87
+ end
88
88
  end