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
data/lib/glue/html.rb DELETED
@@ -1,12 +0,0 @@
1
- module Glue
2
- module Html
3
- def self.cleanup(buf)
4
- out = buf.dup
5
- elements = "input|img|br|hr|link|style|render|include|inject|base|meta"
6
- out.gsub! /<textarea ([^>]*)><\/textarea>/, '<textarea \1>#{}</textarea>'
7
- out.gsub! /<(#{elements}) ([^>]*)><\/\1>/, '<\1 \2 />'
8
- out.gsub! /<(#{elements})><\/\1>/, '<\1 />'
9
- out
10
- end
11
- end
12
- end
@@ -1,129 +0,0 @@
1
- require 'yaml'
2
-
3
- require 'facets/more/aspects'
4
-
5
- module Glue
6
-
7
- # Represents a locale.
8
- #--
9
- # TODO: initialize translation map from a yaml file.
10
- #++
11
-
12
- class Locale
13
-
14
- # The localization map.
15
-
16
- attr_accessor :map
17
-
18
- def initialize(map)
19
- parse_hash(map)
20
- end
21
-
22
- # Transalte the given key.
23
- #
24
- # [+args+]
25
- # An array of arguments. The first argument
26
- # is the translation key. If additional arguments
27
- # are provided they are used for sprintf
28
- # interpolation.
29
- #--
30
- # THINK: Possibly avoid the creation of the
31
- # array by making the api less elegant.
32
- #++
33
-
34
- def translate(*args)
35
- if xlated = @map[args.shift]
36
- if xlated.is_a?(String)
37
- args.empty? ? xlated : sprintf(xlated, *args)
38
- else
39
- xlated.call(*args)
40
- end
41
- end
42
- end
43
- alias_method :[], :translate
44
-
45
- private
46
-
47
- def parse_hash(map)
48
- @map = map
49
- end
50
-
51
- def parse_yaml(yaml)
52
- raise 'Not implemented'
53
- end
54
-
55
- end
56
-
57
- # Localization support.
58
- #
59
- # === Example
60
- #
61
- # locale_en = {
62
- # 'See you' => 'See you',
63
- # :long_paragraph => 'The best new books, up to 30% reduced price',
64
- # :price => 'Price: %d %s',
65
- # :proc_price => proc { |value, cur| "Price: #{value} #{cur}" }
66
- # }
67
- #
68
- # locale_de = {
69
- # 'See you' => 'Auf wieder sehen',
70
- # :long_paragraph => 'Die besten neuer buecher, bis zu 30% reduziert',
71
- # ...
72
- # }
73
- #
74
- # Localization.add(:en => locale_en, :de => locale_de)
75
- #
76
- # lc = Localization.get
77
- # lc['See you'] -> See you
78
- # lc[:price, 100, 'euro'] -> Price: 100 euro
79
- # lc = Localization.get[:de]
80
- # lc['See you'] -> Auf wiedersehen
81
- #
82
- # To make localization even more easier, a LocalizationAspect
83
- # is provide provided. Additional transformation macros are
84
- # provided if you require 'nitro/compiler/localization'
85
-
86
- class Localization
87
-
88
- class << self
89
-
90
- # A hash of the available locales.
91
-
92
- attr_accessor :locales
93
-
94
- def add(map = {})
95
- for key, locale in map
96
- if locale.is_a?(String)
97
- # this is the name of the localization file.
98
- locale = YAML.load(File.read(locale))
99
- end
100
- @locales[key.to_s] = Locale.new(locale)
101
- end
102
- end
103
- alias_method :locales=, :add
104
-
105
- # Return the localization hash for the given
106
- # locale.
107
-
108
- def get(locale = :en)
109
- locale ||= 'en'
110
- @locales[locale.to_s]
111
- end
112
- alias_method :locale, :get
113
- alias_method :[], :get
114
-
115
- end
116
-
117
- @locales = {}
118
-
119
- end
120
-
121
- # Localization Aspect for Nitro controllers.
122
-
123
- module LocalizationAspect
124
- def localize
125
- @lc = Localization[@context.session[:LOCALE]]
126
- end
127
- end
128
-
129
- end
data/lib/glue/logger.rb DELETED
@@ -1,208 +0,0 @@
1
- require 'logger'
2
-
3
- # A simple extension of the Ruby logger. Mainly for
4
- # compatibility purposes.
5
- #
6
- # === Convention
7
- #
8
- # When using debug level logger messages always append 'if $DBG'
9
- # at the end. This hack is needed because Ruby does not support
10
- # lazy evaluation (lisp macros).
11
- #--
12
- # THINK: some people think, this extension is dangerous,
13
- # investigate.
14
- #++
15
-
16
- class Logger
17
- alias_method :devel, :debug
18
- alias_method :fine, :debug
19
-
20
- # Prints a trace message to DEBUGLOG (at debug level).
21
- # Useful for emitting the value of variables, etc. Use
22
- # like this:
23
- #
24
- # x = y = 5
25
- # trace 'x' # -> 'x = 5'
26
- # trace 'x ** y' # -> 'x ** y = 3125'
27
- #
28
- # If you have a more complicated value, like an array of
29
- # hashes, then you'll probably want to use an alternative
30
- # output format. For instance:
31
- #
32
- # trace 'value', :yaml
33
- #
34
- # Valid output format values (the _style_ parameter) are:
35
- #
36
- # :p :inspect
37
- # :pp (pretty-print, using 'pp' library)
38
- # :s :to_s
39
- # :y :yaml :to_yaml (using the 'yaml' library')
40
- #
41
- # The default is <tt>:p</tt>.
42
- #
43
- # CREDITS:
44
- #
45
- # This code comes straight from the dev-utils Gem.
46
- # Author: Gavin Sinclair <gsinclair@soyabean.com.au>
47
-
48
- def trace(expr, style=:p)
49
- unless expr.respond_to? :to_str
50
- warn "trace: Can't evaluate the given value: #{caller.first}"
51
- else
52
- require 'facet/binding/self/of_caller'
53
-
54
- Binding.of_caller do |b|
55
- value = b.eval(expr.to_str)
56
- formatter = TRACE_STYLES[style] || :inspect
57
- case formatter
58
- when :pp then require 'pp'
59
- when :y, :yaml, :to_yaml then require 'yaml'
60
- end
61
- value_s = value.send(formatter)
62
- message = "#{expr} = #{value_s}"
63
- lines = message.split(/\n/)
64
- indent = " "
65
- debug(lines.shift)
66
- lines.each do |line|
67
- debug(indent + line)
68
- end
69
- end
70
- end
71
- end
72
-
73
- TRACE_STYLES = {} # :nodoc:
74
- TRACE_STYLES.update(
75
- :pp => :pp_s, :s => :to_s, :p => :inspect,
76
- :y => :to_yaml, :yaml => :to_yaml,
77
- :inspect => :inspect, :to_yaml => :to_yaml
78
- )
79
-
80
- # Dictate the way in which this logger should format the
81
- # messages it displays. This method requires a block. The
82
- # block should return formatted strings given severity,
83
- # timestamp, msg, progname.
84
- #
85
- # === Example
86
- #
87
- # logger = Logger.new
88
- # logger.setup_format do |severity, timestamp, msg, progname|
89
- # "#{progname}@#{timestamp} - #{severity}::#{msg}"
90
- # end
91
-
92
- def setup_format(&format_proc)
93
- raise 'Formating block needed' unless format_proc
94
- @format_proc = format_proc
95
- end
96
-
97
- private
98
-
99
- # hackish use of *args, give me some love.
100
-
101
- alias_method :old_format_message, :format_message # :nodoc:
102
- def format_message(*args) # :nodoc:
103
- @format_proc ? @format_proc.call(*args) : old_format_message(*args)
104
- end
105
- end
106
-
107
- # Global logger interface. This provides an alternative
108
- # Singleton interface to the Logger.
109
-
110
- class Logger
111
-
112
- SIMPLE_FORMAT = "%5s: %s\n"
113
- @@global_logger = Logger.new(STDERR)
114
- @@global_logger.setup_format do |severity, timestamp, progname, msg|
115
- SIMPLE_FORMAT % [severity, msg]
116
- end
117
-
118
- # Set the global Logger.
119
-
120
- def self.set(logger)
121
- if logger.is_a?(String) || logger.is_a?(IO)
122
- @@global_logger = Logger.new(logger)
123
- elsif logger.is_a?(Logger)
124
- @@global_logger = logger
125
- else
126
- raise ArgumentError
127
- end
128
-
129
- @@global_logger.setup_format do |severity, timestamp, progname, msg|
130
- SIMPLE_FORMAT % [severity, msg]
131
- end
132
- end
133
-
134
- def self.get
135
- @@global_logger
136
- end
137
-
138
- def self.warn(str)
139
- @@global_logger.warn(str)
140
- end
141
-
142
- def self.info(str)
143
- @@global_logger.info(str)
144
- end
145
-
146
- def self.debug(str)
147
- @@global_logger.debug(str)
148
- end
149
-
150
- def self.error(str)
151
- @@global_logger.error(str)
152
- end
153
-
154
- #--
155
- # Saddly have to duplicate the code to make
156
- # Binding.of_caller work.
157
- #++
158
-
159
- def self.trace(expr, style=:p)
160
- unless expr.respond_to? :to_str
161
- warn "trace: Can't evaluate the given value: #{caller.first}"
162
- else
163
- require 'facet/binding/self/of_caller'
164
-
165
- Binding.of_caller do |b|
166
- value = eval(expr.to_str, b)
167
- formatter = TRACE_STYLES[style] || :inspect
168
- case formatter
169
- when :pp then require 'pp'
170
- when :y, :yaml, :to_yaml then require 'yaml'
171
- end
172
- value_s = value.send(formatter)
173
- message = "#{expr} = #{value_s}"
174
- lines = message.split(/\n/)
175
- indent = " "
176
- debug(lines.shift)
177
- lines.each do |line|
178
- debug(indent + line)
179
- end
180
- end
181
- end
182
- end
183
- end
184
-
185
- module Glue
186
-
187
- # UNDER CONSTRUCTION.
188
- #
189
- # Add logging capabilities to the including class.
190
- #
191
- # === Examples
192
- #
193
- # Og.log_info 'Hello' => '[Og] Hello'
194
- # Render.log_info ...
195
- # In Render:
196
- # log_info '...'
197
-
198
- module Logging
199
- =begin
200
- def self.included base
201
- [ :info, :debug ].each do |l|
202
-
203
- end
204
- end
205
- =end
206
- end
207
-
208
- end
data/lib/glue/mail.rb DELETED
@@ -1,160 +0,0 @@
1
- require 'net/smtp'
2
-
3
- module Glue
4
-
5
- # Encapsulates an email message.
6
-
7
- class Mail
8
-
9
- # The default charset.
10
-
11
- setting :default_charset, :default => 'utf-8', :doc => 'The default character set'
12
-
13
- # Encode the subject?
14
-
15
- setting :encode_subject, :default => false, :doc => 'Encode the subject?'
16
-
17
- # Sender, can be an array.
18
-
19
- attr_accessor :from
20
-
21
- # The list of the recipients, can be arrays.
22
-
23
- attr_accessor :to, :cc, :bcc
24
-
25
- # The subject
26
-
27
- attr_accessor :subject
28
-
29
- # The body of the message.
30
-
31
- attr_accessor :body
32
-
33
- # Reply to.
34
-
35
- attr_accessor :reply_to
36
-
37
- # Sent on
38
-
39
- attr_accessor :sent_on
40
-
41
- # Encode the subject?
42
-
43
- attr_accessor :encode_subject
44
-
45
- # The charset used to encode the message.
46
-
47
- attr_accessor :charset
48
-
49
- # Additional headers
50
-
51
- attr_accessor :headers
52
-
53
- def initialize(from = nil, to = nil, subject = nil, body = nil)
54
- @from, @to, @subject, @body = from, to, subject, body
55
- @headers = {}
56
- end
57
-
58
- def parse_headers
59
- @from = @headers['From']
60
- @to = @headers['To']
61
- @cc = @headers['Cc']
62
- @bcc = @headers['Bcc']
63
- @subject = @headers['Subject']
64
- end
65
-
66
- # Accept string or IO.
67
-
68
- def self.new_from_encoded(encoded)
69
- if encoded.is_a? String
70
- require 'stringio'
71
- encoded = StringIO.new(encoded)
72
- end
73
-
74
- f = encoded
75
-
76
- # the following code is copied from mailread.rb
77
-
78
- unless defined? f.gets
79
- f = open(f, "r")
80
- opened = true
81
- end
82
-
83
- _headers = {}
84
- _body = []
85
- begin
86
- while line = f.gets()
87
- line.chop!
88
- next if /^From /=~line # skip From-line
89
- break if /^$/=~line # end of header
90
-
91
- if /^(\S+?):\s*(.*)/=~line
92
- (attr = $1).capitalize!
93
- _headers[attr] = $2
94
- elsif attr
95
- line.sub!(/^\s*/, '')
96
- _headers[attr] += "\n" + line
97
- end
98
- end
99
-
100
- return unless line
101
-
102
- while line = f.gets()
103
- break if /^From /=~line
104
- _body.push(line)
105
- end
106
- ensure
107
- f.close if opened
108
- end
109
-
110
- mail = Mail.new
111
- mail.headers = _headers
112
- mail.body = _body.join("\n")
113
- mail.parse_headers
114
-
115
- return mail
116
- end
117
-
118
- def [](key)
119
- @headers[key]
120
- end
121
-
122
- def []=(key, value)
123
- @headers[key] = value
124
- end
125
-
126
- # Returns the Mail message in encoded format.
127
-
128
- def encoded
129
- raise 'No body defined' unless @body
130
- raise 'No sender defined' unless @from
131
- raise 'No recipients defined' unless @to
132
-
133
- # gmosx: From is typically NOT an array.
134
-
135
- from = @from.is_a?(Array) ? @from.join(', ') : @from
136
- buf = "From: #{from}\n"
137
-
138
- to = @to.is_a?(Array) ? @to.join(', ') : @to
139
- buf << "To: #{to}\n"
140
-
141
- if @cc
142
- cc = @cc.is_a?(Array) ? @cc.join(', ') : @cc
143
- buf << "Cc: #{cc}\n"
144
- end
145
-
146
- if @bcc
147
- bcc = @bcc.is_a?(Array) ? @bcc.join(', ') : @bcc
148
- buf << "Bcc: #{bcc}\n"
149
- end
150
-
151
- buf << "Subject: #@subject\n" if @subject
152
-
153
- buf << "\n"
154
- buf << @body
155
-
156
- return buf
157
- end
158
- end
159
-
160
- end