glue 0.41.0 → 1.0.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 (55) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +6 -0
  3. data/README.txt +130 -0
  4. data/Rakefile +16 -0
  5. data/lib/glue.rb +49 -72
  6. data/test/test_glue.rb +218 -0
  7. metadata +84 -100
  8. data/doc/AUTHORS +0 -13
  9. data/doc/CHANGELOG.1 +0 -354
  10. data/doc/LICENSE +0 -32
  11. data/doc/RELEASES +0 -207
  12. data/lib/glue/attribute.rb +0 -113
  13. data/lib/glue/attributeutils.rb +0 -117
  14. data/lib/glue/autoreload.rb +0 -60
  15. data/lib/glue/builder.rb +0 -57
  16. data/lib/glue/builder/xml.rb +0 -103
  17. data/lib/glue/cache.rb +0 -22
  18. data/lib/glue/cache/drb.rb +0 -51
  19. data/lib/glue/cache/file.rb +0 -78
  20. data/lib/glue/cache/memcached.rb +0 -68
  21. data/lib/glue/cache/memory.rb +0 -79
  22. data/lib/glue/cache/og.rb +0 -61
  23. data/lib/glue/configuration.rb +0 -305
  24. data/lib/glue/fixture.rb +0 -154
  25. data/lib/glue/html.rb +0 -12
  26. data/lib/glue/localization.rb +0 -129
  27. data/lib/glue/logger.rb +0 -208
  28. data/lib/glue/mail.rb +0 -160
  29. data/lib/glue/mailer.rb +0 -55
  30. data/lib/glue/mailer/incoming.rb +0 -41
  31. data/lib/glue/mailer/outgoing.rb +0 -119
  32. data/lib/glue/settings.rb +0 -3
  33. data/lib/glue/uri.rb +0 -190
  34. data/lib/glue/validation.rb +0 -447
  35. data/lib/html/document.rb +0 -63
  36. data/lib/html/node.rb +0 -480
  37. data/lib/html/tokenizer.rb +0 -103
  38. data/lib/html/version.rb +0 -11
  39. data/test/fixture/article.csv +0 -3
  40. data/test/fixture/article.yml +0 -13
  41. data/test/fixture/user.yml +0 -12
  42. data/test/glue/builder/tc_xml.rb +0 -57
  43. data/test/glue/tc_aspects.rb +0 -99
  44. data/test/glue/tc_attribute.rb +0 -112
  45. data/test/glue/tc_attribute_mixins.rb +0 -86
  46. data/test/glue/tc_builder.rb +0 -30
  47. data/test/glue/tc_configuration.rb +0 -135
  48. data/test/glue/tc_fixture.rb +0 -98
  49. data/test/glue/tc_localization.rb +0 -49
  50. data/test/glue/tc_logger.rb +0 -43
  51. data/test/glue/tc_mail.rb +0 -99
  52. data/test/glue/tc_stores.rb +0 -16
  53. data/test/glue/tc_uri.rb +0 -97
  54. data/test/glue/tc_validation.rb +0 -217
  55. data/test/public/dummy_mailer/registration.xhtml +0 -5
@@ -1,103 +0,0 @@
1
- require 'strscan'
2
-
3
- module HTML#:nodoc:
4
-
5
- # A simple HTML tokenizer. It simply breaks a stream of text into tokens, where each
6
- # token is a string. Each string represents either "text", or an HTML element.
7
- #
8
- # This currently assumes valid XHTML, which means no free < or > characters.
9
- #
10
- # Usage:
11
- #
12
- # tokenizer = HTML::Tokenizer.new(text)
13
- # while token = tokenizer.next
14
- # p token
15
- # end
16
- class Tokenizer#:nodoc:
17
-
18
- # The current (byte) position in the text
19
- attr_reader :position
20
-
21
- # The current line number
22
- attr_reader :line
23
-
24
- # Create a new Tokenizer for the given text.
25
- def initialize(text)
26
- @scanner = StringScanner.new(text)
27
- @position = 0
28
- @line = 0
29
- @current_line = 1
30
- end
31
-
32
- # Return the next token in the sequence, or +nil+ if there are no more tokens in
33
- # the stream.
34
- def next
35
- return nil if @scanner.eos?
36
- @position = @scanner.pos
37
- @line = @current_line
38
- if @scanner.check(/<\S/)
39
- update_current_line(scan_tag)
40
- else
41
- update_current_line(scan_text)
42
- end
43
- end
44
-
45
- private
46
-
47
- # Treat the text at the current position as a tag, and scan it. Supports
48
- # comments, doctype tags, and regular tags, and ignores less-than and
49
- # greater-than characters within quoted strings.
50
- def scan_tag
51
- tag = @scanner.getch
52
- if @scanner.scan(/!--/) # comment
53
- tag << @scanner.matched
54
- tag << @scanner.scan_until(/--\s*>/)
55
- elsif @scanner.scan(/!/) # doctype
56
- tag << @scanner.matched
57
- tag << consume_quoted_regions
58
- else
59
- tag << consume_quoted_regions
60
- end
61
- tag
62
- end
63
-
64
- # Scan all text up to the next < character and return it.
65
- def scan_text
66
- @scanner.getch + (@scanner.scan(/[^<]*/) || "")
67
- end
68
-
69
- # Counts the number of newlines in the text and updates the current line
70
- # accordingly.
71
- def update_current_line(text)
72
- @current_line += text.scan(/\r\n|\r|\n/).length
73
- text
74
- end
75
-
76
- # Skips over quoted strings, so that less-than and greater-than characters
77
- # within the strings are ignored.
78
- def consume_quoted_regions
79
- text = ""
80
- loop do
81
- match = @scanner.scan_until(/['"<>]/) or break
82
-
83
- delim = @scanner.matched
84
- if delim == "<"
85
- match = match.chop
86
- @scanner.pos -= 1
87
- end
88
-
89
- text << match
90
- break if delim == "<" || delim == ">"
91
-
92
- # consume the conqued region
93
- while match = @scanner.scan_until(/[\\#{delim}]/)
94
- text << match
95
- break if @scanner.matched == delim
96
- text << @scanner.getch # skip the escaped character
97
- end
98
- end
99
- text
100
- end
101
- end
102
-
103
- end
data/lib/html/version.rb DELETED
@@ -1,11 +0,0 @@
1
- module HTML#:nodoc:
2
- module Version#:nodoc:
3
-
4
- MAJOR = 0
5
- MINOR = 5
6
- TINY = 0
7
-
8
- STRING = [ MAJOR, MINOR, TINY ].join(".")
9
-
10
- end
11
- end
@@ -1,3 +0,0 @@
1
- title, body
2
- This is cool, The body
3
- Another, ..litle article
@@ -1,13 +0,0 @@
1
- Wow:
2
- title: this works
3
- body: as well!!
4
-
5
- Test:
6
- title: I love this
7
- body: just great
8
-
9
- <% 5.times do |i| %>
10
- Auto#{i}:
11
- title: title #{i}
12
- body: body #{i}
13
- <% end %>
@@ -1,12 +0,0 @@
1
- george:
2
- name: George
3
- age: 30
4
-
5
- stella:
6
- name: Stella
7
- age: 29
8
-
9
- renos:
10
- oid: 17
11
- name: Renos
12
- age: 29
@@ -1,57 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'lib')
2
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'nitro', 'lib')
3
-
4
- require 'test/unit'
5
- require 'glue/builder/xml'
6
-
7
- class TC_BuildersXml < Test::Unit::TestCase # :nodoc: all
8
- include Glue
9
-
10
- def test_string
11
- x = Glue::XmlBuilder.new
12
-
13
- x.start_tag!('html').
14
- start_tag!('title').text!('hello').end_tag!('title').
15
- end_tag!('html')
16
-
17
- assert_equal '<html><title>hello</title></html>', x.buffer
18
- end
19
-
20
- def test_missing
21
- x = Glue::XmlBuilder.new
22
- x.b('This is bold')
23
- assert_equal '<b>This is bold</b>', x.buffer
24
-
25
- x = Glue::XmlBuilder.new
26
- x.a('Nitro', :href => 'http://www.nitroproject.org')
27
- assert_equal '<a href="http://www.nitroproject.org">Nitro</a>', x.buffer
28
-
29
-
30
- x = Glue::XmlBuilder.new
31
- x.b {
32
- x.i 'Hello', :class =>'new'
33
- x.p 'Paragraph'
34
- }
35
- assert_equal '<b><i class="new">Hello</i><p>Paragraph</p></b>', x.buffer
36
-
37
- x = Glue::XmlBuilder.new
38
- x.hr
39
- assert_equal '<hr />', x.buffer
40
-
41
- x = Glue::XmlBuilder.new
42
- x.hr(:style => 'height: 1px')
43
- assert_equal '<hr style="height: 1px" />', x.buffer
44
- end
45
-
46
- def test_xml_builder
47
- buffer = ''
48
- x = Glue::XmlBuilder.new(buffer)
49
-
50
- x.start_tag!('html').
51
- start_tag!('title').text!('hello').end_tag!('title').
52
- end_tag!('html')
53
-
54
- assert_equal '<html><title>hello</title></html>', buffer
55
- end
56
-
57
- end
@@ -1,99 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- require 'test/unit'
4
- require 'facets/more/aspects'
5
-
6
- class TestCaseAspects < Test::Unit::TestCase # :nodoc: all
7
-
8
- class Monitor
9
- def self.pre(this)
10
- this.ma = 2
11
- end
12
-
13
- def self.post(this)
14
- this.mb = 5
15
- end
16
- end
17
-
18
- module Localize
19
- def localize
20
- @ll = 5
21
- end
22
- end
23
-
24
- module Tester
25
- include ::Aspects
26
-
27
- attr_accessor :ta
28
- pre { |this| this.ta = 5 }
29
- end
30
-
31
- class Dummy
32
- include ::Aspects
33
- include Tester
34
-
35
- attr_accessor :a, :b, :c
36
- attr_accessor :oa, :ob
37
- attr_accessor :ma, :mb
38
- attr_accessor :ll
39
- attr_accessor :pa
40
-
41
- pre :pre_advice
42
- wrap Monitor
43
- wrap Localize, :pre => :localize
44
- post { |this| this.pa = 3 }
45
-
46
- def initialize
47
- @a = 0
48
- end
49
-
50
- def hello(q)
51
- @a += 1 + q
52
- end
53
-
54
- def pre_advice
55
- @b = 1
56
- @a += 1
57
- end
58
-
59
- def post_advice
60
- @c = 1
61
- end
62
- end
63
-
64
- # Class aspect.
65
-
66
- class Observer < Aspect
67
- def self.pre(this)
68
- this.oa = 9
69
- end
70
- end
71
-
72
- # Instance aspect.
73
-
74
- class Epilogue < Aspect
75
- def post(this)
76
- this.ob = 9
77
- end
78
- end
79
-
80
- def test_all
81
- Observer.wrap(Dummy, :hello)
82
- Epilogue.new.wrap(Dummy, :hello)
83
- ::Aspects.wrap(Dummy, :hello)
84
-
85
- d = Dummy.new
86
- d.hello(3)
87
- assert_equal 5, d.a
88
- assert_equal 1, d.b
89
- assert_equal 9, d.oa
90
- assert_equal 9, d.ob
91
- assert_equal 2, d.ma
92
- assert_equal 5, d.mb
93
- assert_equal 5, d.ll
94
- assert_equal 3, d.pa
95
-
96
- assert_equal 5, d.ta
97
- end
98
-
99
- end
@@ -1,112 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'og', 'lib')
3
-
4
- require 'test/unit'
5
- require 'og'
6
- require 'glue/logger'
7
- require 'glue/attribute'
8
-
9
- def VarChar(size)
10
- return String, :sql => "VARCHAR(#{ size })"
11
- end
12
- NotNull = {:sql => "NOT NULL"}.freeze
13
- Null = {:sql => "NULL"}.freeze
14
-
15
- module Test # :nodoc: all
16
-
17
- class Msg
18
- include Og::Unmanageable
19
-
20
- attr_accessor :owner_oid, Fixnum
21
- attr_accessor :val1, :val2, :val3, Fixnum, :sql => "smallint"
22
- attr_accessor :title, :body, String
23
- attr_accessor :test, String, :sql => "char(10) NOT NULL"
24
- attr_accessor :count, Fixnum
25
- attr_accessor :create_time, Time
26
-
27
- # a marshaled property
28
- attr_accessor :options, Array
29
-
30
- # property with macro arguments!
31
- attr_accessor :address, VarChar(30), NotNull
32
-
33
- def initialize
34
- @create_time = Time.now
35
- @options = []
36
- end
37
-
38
- end
39
-
40
- class SubMsg < Msg
41
- # to avoid conflicts with tc_og.rb
42
- include Og::Unmanageable
43
-
44
- # duplicate definition with different type!
45
- attr_accessor :count, Float
46
-
47
- # another property
48
- attr_accessor :another, Fixnum
49
- end
50
-
51
- class C
52
- attr_accessor :name
53
- attr_accessor :description
54
- end
55
-
56
- class C
57
- attr_accessor :name, String
58
- attr_accessor :description, String
59
- end
60
-
61
- class TC_N_Attributes < Test::Unit::TestCase
62
-
63
- def setup
64
- Msg.define_force_methods
65
- @msg1 = Msg.new
66
- end
67
-
68
- def teardown
69
- @msg1 = nil
70
- end
71
-
72
- def test_props
73
-
74
- # bug: props for subclasses.
75
- # bug: props propagated to base classes.
76
-
77
- assert(SubMsg.serializable_attributes)
78
- assert_equal(Msg.serializable_attributes.size(), SubMsg.serializable_attributes.size() - 1)
79
-
80
- assert_equal(11, Msg.serializable_attributes.size)
81
- assert_equal(12, SubMsg.serializable_attributes.size)
82
-
83
- # bug: duplicate definition
84
-
85
- a = SubMsg.serializable_attributes.find { |p| :count == p }
86
- assert_equal(Float, SubMsg.ann[SubMsg.serializable_attributes.find { |p| :count == p }].class)
87
-
88
- # dont force conversion.
89
-
90
- @msg1.count = 2.4
91
- assert_equal(Float, @msg1.count.class)
92
-
93
- # force conversion
94
-
95
- @msg1.__force_count(2.4)
96
- assert_equal(Fixnum, @msg1.count.class)
97
- end
98
-
99
- def test_macro_params
100
- sql = Msg.ann[Msg.serializable_attributes.find { |p| :address == p}].sql
101
- # FIXME: Temporarily dissabled.
102
- # assert_equal 'VARCHAR(30) NOT NULL', sql
103
- end
104
-
105
-
106
- def test_soc
107
- assert_equal String, C.ann.name.class
108
- end
109
-
110
- end
111
-
112
- end
@@ -1,86 +0,0 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
- $:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', 'og', 'lib')
3
-
4
- require 'test/unit'
5
- require 'glue/attribute'
6
-
7
- module Mixin
8
- attr_accessor :date
9
- ann self, :dummy => [123]
10
- end
11
-
12
- class MixedOnly
13
- include Mixin
14
- ann.self.dummy! << 5
15
- ann.self.dummy! << 3
16
- end
17
-
18
- class MixedOnly2
19
- include Mixin
20
- end
21
-
22
- class MixedWithProp
23
- include Mixin
24
-
25
- attr_accessor :dummy
26
- end
27
-
28
- class Pure
29
- attr_accessor :dummy
30
- end
31
-
32
- class Empty
33
- end
34
-
35
- class Base
36
- attr_accessor :date
37
- ann self, :dummy => [123]
38
- end
39
-
40
- class Child1 < Base
41
- ann.self.dummy!.first << 5
42
- ann.self.dummy!.first << 3
43
- end
44
-
45
- class Child2 < Base
46
- end
47
-
48
- # Tests auto management.
49
- class TC_MixinsTest < ::Test::Unit::TestCase
50
- def test_the_unmanaged
51
- assert( Empty.respond_to?( :__props ) == false )
52
- assert_respond_to( Pure.new, :dummy )
53
- end
54
-
55
- def test_manage_entities
56
- assert_respond_to( Pure, :serializable_attributes )
57
- assert_respond_to( Pure.new, :dummy )
58
- end
59
-
60
- def test_managing_mixedonly_classes
61
- assert_respond_to( MixedOnly.new, :date )
62
- end
63
-
64
- def test_managing_mixins
65
- assert_respond_to( Mixin, :serializable_attributes )
66
- end
67
-
68
- def test_managing_mixed_classes
69
- obj = MixedWithProp.new
70
- assert( obj.respond_to?( :date ) )
71
- assert( obj.respond_to?( :dummy ) )
72
- end
73
-
74
- def test_crosspolination
75
- assert_equal 3, MixedOnly.ann.self[:dummy].size
76
- # FIXME:
77
- # assert_equal 1, MixedOnly2.ann.self[:dummy].size
78
- # assert_equal 1, Mixin.ann.self[:dummy].size
79
- =begin
80
- gmosx: THINK!
81
- assert_equal 3, Child1.__meta[:dummy].first.size
82
- assert_equal 1, Child2.__meta[:dummy].first.size
83
- assert_equal 1, Base.__meta[:dummy].first.size
84
- =end
85
- end
86
- end