ramaze 2008.06 → 2008.11
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.markdown +6 -6
- data/Rakefile +33 -3
- data/bin/ramaze +18 -0
- data/doc/CHANGELOG +960 -0
- data/doc/LEGAL +5 -1
- data/doc/meta/announcement.txt +20 -36
- data/doc/tutorial/todolist.html +421 -313
- data/doc/tutorial/todolist.mkd +33 -16
- data/examples/app/blog/spec/blog.rb +3 -3
- data/examples/app/rapaste/controller/paste.rb +8 -1
- data/examples/app/rapaste/model/paste.rb +3 -0
- data/examples/app/rapaste/spec/rapaste.rb +3 -1
- data/examples/app/rapaste/start.rb +3 -2
- data/examples/app/sourceview/public/sourceview.js +2 -2
- data/examples/app/todolist/spec/todolist.rb +6 -6
- data/examples/app/todolist/template/index.xhtml +1 -1
- data/examples/app/whywiki/spec/whywiki.rb +2 -2
- data/examples/app/wikore/spec/wikore.rb +2 -2
- data/examples/app/wikore/src/model.rb +4 -3
- data/examples/app/wiktacular/spec/wiktacular.rb +7 -7
- data/examples/basic/simple.rb +2 -2
- data/examples/helpers/paginate.rb +71 -0
- data/examples/misc/simple_auth.rb +20 -8
- data/lib/proto/controller/init.rb +10 -0
- data/lib/proto/controller/main.rb +1 -3
- data/lib/proto/model/init.rb +4 -0
- data/lib/proto/public/dispatch.fcgi +1 -1
- data/lib/proto/spec/main.rb +2 -1
- data/lib/proto/start.rb +3 -3
- data/lib/proto/start.ru +1 -1
- data/lib/proto/view/error.xhtml +4 -4
- data/lib/ramaze.rb +8 -3
- data/lib/ramaze/action.rb +6 -6
- data/lib/ramaze/adapter.rb +1 -6
- data/lib/ramaze/adapter/base.rb +30 -27
- data/lib/ramaze/adapter/cgi.rb +1 -0
- data/lib/ramaze/cache.rb +1 -3
- data/lib/ramaze/cache/memcached.rb +3 -5
- data/lib/ramaze/contrib/auto_params.rb +2 -2
- data/lib/ramaze/contrib/auto_params/get_args.rb +2 -1
- data/lib/ramaze/contrib/gems.rb +17 -18
- data/lib/ramaze/contrib/gzip_filter.rb +22 -9
- data/lib/ramaze/contrib/maruku_uv.rb +59 -0
- data/lib/ramaze/contrib/profiling.rb +1 -1
- data/lib/ramaze/contrib/rest.rb +16 -13
- data/lib/ramaze/contrib/sequel/create_join.rb +25 -0
- data/lib/ramaze/contrib/sequel/form_field.rb +129 -0
- data/lib/ramaze/contrib/sequel/image.rb +198 -0
- data/lib/ramaze/contrib/sequel/relation.rb +82 -0
- data/lib/ramaze/controller.rb +33 -34
- data/lib/ramaze/controller/resolve.rb +29 -9
- data/lib/ramaze/current.rb +60 -20
- data/lib/ramaze/current/request.rb +8 -7
- data/lib/ramaze/current/response.rb +15 -3
- data/lib/ramaze/current/session/flash.rb +8 -0
- data/lib/ramaze/dispatcher.rb +17 -9
- data/lib/ramaze/dispatcher/action.rb +4 -5
- data/lib/ramaze/dispatcher/directory.rb +1 -1
- data/lib/ramaze/dispatcher/error.rb +4 -4
- data/lib/ramaze/dispatcher/file.rb +4 -4
- data/lib/ramaze/gestalt.rb +15 -20
- data/lib/ramaze/helper/cgi.rb +7 -15
- data/lib/ramaze/helper/formatting.rb +41 -1
- data/lib/ramaze/helper/httpdigest.rb +20 -7
- data/lib/ramaze/helper/link.rb +4 -6
- data/lib/ramaze/helper/paginate.rb +233 -0
- data/lib/ramaze/helper/redirect.rb +1 -1
- data/lib/ramaze/helper/rest.rb +1 -1
- data/lib/ramaze/helper/thread.rb +17 -0
- data/lib/ramaze/helper/ultraviolet.rb +44 -0
- data/lib/ramaze/helper/user.rb +4 -9
- data/lib/ramaze/log.rb +2 -2
- data/lib/ramaze/log/analogger.rb +21 -23
- data/lib/ramaze/log/growl.rb +21 -23
- data/lib/ramaze/log/hub.rb +1 -1
- data/lib/ramaze/log/informer.rb +97 -99
- data/lib/ramaze/log/knotify.rb +14 -16
- data/lib/ramaze/log/logger.rb +11 -13
- data/lib/ramaze/log/logging.rb +61 -63
- data/lib/ramaze/log/rotatinginformer.rb +168 -0
- data/lib/ramaze/log/syslog.rb +41 -31
- data/lib/ramaze/log/xosd.rb +70 -72
- data/lib/ramaze/option.rb +9 -6
- data/lib/ramaze/option/holder.rb +5 -27
- data/lib/ramaze/reloader.rb +186 -0
- data/lib/ramaze/setup.rb +1 -1
- data/lib/ramaze/snippets.rb +13 -0
- data/lib/ramaze/snippets/array/put_within.rb +31 -24
- data/lib/ramaze/snippets/binding/locals.rb +23 -11
- data/lib/ramaze/snippets/dictionary.rb +2 -2
- data/lib/ramaze/snippets/fiber.rb +63 -0
- data/lib/ramaze/snippets/kernel/constant.rb +36 -21
- data/lib/ramaze/snippets/kernel/pretty_inspect.rb +12 -6
- data/lib/ramaze/snippets/numeric/filesize_format.rb +24 -17
- data/lib/ramaze/snippets/numeric/time.rb +63 -0
- data/lib/ramaze/snippets/object/__dir__.rb +29 -0
- data/lib/ramaze/snippets/object/acquire.rb +40 -0
- data/lib/ramaze/snippets/object/instance_variable_defined.rb +16 -5
- data/lib/ramaze/snippets/object/pretty.rb +14 -4
- data/lib/ramaze/snippets/object/scope.rb +14 -7
- data/lib/ramaze/snippets/ordered_set.rb +25 -14
- data/lib/ramaze/snippets/proc/locals.rb +17 -9
- data/lib/ramaze/snippets/ramaze/deprecated.rb +13 -0
- data/lib/ramaze/snippets/ramaze/fiber.rb +24 -0
- data/lib/ramaze/snippets/ramaze/state.rb +86 -0
- data/lib/ramaze/snippets/ramaze/struct.rb +45 -0
- data/lib/ramaze/snippets/string/camel_case.rb +13 -8
- data/lib/ramaze/snippets/string/color.rb +24 -20
- data/lib/ramaze/snippets/string/each.rb +14 -3
- data/lib/ramaze/snippets/string/end_with.rb +20 -0
- data/lib/ramaze/snippets/string/esc.rb +26 -21
- data/lib/ramaze/snippets/string/ord.rb +12 -6
- data/lib/ramaze/snippets/string/snake_case.rb +13 -7
- data/lib/ramaze/snippets/string/start_with.rb +16 -5
- data/lib/ramaze/snippets/string/unindent.rb +23 -15
- data/lib/ramaze/snippets/thread/into.rb +3 -3
- data/lib/ramaze/spec/helper/bacon.rb +5 -5
- data/lib/ramaze/spec/helper/mock_http.rb +1 -1
- data/lib/ramaze/spec/helper/pretty_output.rb +2 -2
- data/lib/ramaze/spec/helper/snippets.rb +8 -0
- data/lib/ramaze/template.rb +4 -1
- data/lib/ramaze/template/ezamar/textpow.syntax +34 -0
- data/lib/ramaze/template/maruku.rb +34 -0
- data/lib/ramaze/template/tagz.rb +2 -2
- data/lib/ramaze/template/xslt.rb +2 -2
- data/lib/ramaze/tool/create.rb +27 -53
- data/lib/ramaze/tool/localize.rb +8 -4
- data/lib/ramaze/tool/mime.rb +11 -1
- data/lib/ramaze/tool/project_creator.rb +110 -0
- data/lib/ramaze/trinity.rb +4 -1
- data/lib/ramaze/version.rb +1 -1
- data/lib/vendor/bacon.rb +323 -0
- data/rake_tasks/gem.rake +10 -1
- data/rake_tasks/maintenance.rake +40 -2
- data/rake_tasks/metric.rake +24 -0
- data/rake_tasks/release.rake +17 -4
- data/rake_tasks/spec.rake +1 -2
- data/ramaze.gemspec +549 -495
- data/spec/contrib/auto_params.rb +3 -3
- data/spec/contrib/profiling.rb +2 -2
- data/spec/examples/simple_auth.rb +2 -2
- data/spec/examples/templates/template_haml.rb +0 -2
- data/spec/ramaze/action/file_cache.rb +22 -0
- data/spec/ramaze/adapter.rb +2 -2
- data/spec/ramaze/controller/actionless_templates.rb +1 -1
- data/spec/ramaze/controller/subclass.rb +15 -0
- data/spec/ramaze/controller/template_resolving.rb +1 -1
- data/spec/ramaze/controller/view/bar.xhtml +1 -0
- data/spec/ramaze/controller/view/base/another.xhtml +1 -0
- data/spec/ramaze/current/session.rb +1 -1
- data/spec/ramaze/dispatcher/file.rb +2 -2
- data/spec/ramaze/helper/aspect.rb +26 -17
- data/spec/ramaze/helper/formatting.rb +13 -0
- data/spec/ramaze/log/informer.rb +10 -10
- data/spec/ramaze/log/syslog.rb +67 -4
- data/spec/ramaze/rewrite.rb +1 -1
- data/spec/ramaze/route.rb +1 -1
- data/spec/ramaze/struct.rb +47 -0
- data/spec/ramaze/template/markaby.rb +1 -1
- data/spec/ramaze/template/tagz.rb +1 -1
- data/spec/snippets/binding/locals.rb +9 -0
- data/spec/snippets/numeric/time.rb +12 -0
- data/spec/snippets/{kernel → object}/__dir__.rb +0 -0
- data/spec/snippets/{kernel → object}/acquire.rb +0 -0
- metadata +90 -81
- data/cache.yaml +0 -7
- data/examples/app/rammit/spec/rammit.rb +0 -31
- data/examples/app/rammit/src/controller/main.rb +0 -3
- data/examples/app/rammit/src/controller/page.rb +0 -16
- data/examples/app/rammit/src/model.rb +0 -33
- data/examples/app/rammit/start.rb +0 -8
- data/examples/app/rammit/template/index.xhtml +0 -14
- data/examples/app/rammit/template/page/view.xhtml +0 -4
- data/lib/ramaze/snippets/kernel/__dir__.rb +0 -23
- data/lib/ramaze/snippets/kernel/acquire.rb +0 -34
- data/lib/ramaze/snippets/object/thread_accessor.rb +0 -5
- data/lib/ramaze/snippets/ramaze/thread_accessor.rb +0 -58
- data/lib/ramaze/snippets/struct/fill.rb +0 -23
- data/lib/ramaze/snippets/struct/values_at.rb +0 -39
- data/lib/ramaze/snippets/symbol/to_proc.rb +0 -24
- data/lib/ramaze/sourcereload.rb +0 -176
- data/spec/snippets/struct/fill.rb +0 -26
- data/spec/snippets/struct/values_at.rb +0 -52
- data/spec/snippets/symbol/to_proc.rb +0 -13
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ramaze
|
2
|
+
class Fiber < ::Fiber
|
3
|
+
# initialize isn't being called, so we have to hook into ::new
|
4
|
+
def self.new(*args)
|
5
|
+
instance = super
|
6
|
+
instance.state = {}
|
7
|
+
instance
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_accessor :state
|
11
|
+
|
12
|
+
def [](key)
|
13
|
+
@state[key]
|
14
|
+
end
|
15
|
+
|
16
|
+
def []=(key, value)
|
17
|
+
@state[key] = value
|
18
|
+
end
|
19
|
+
|
20
|
+
def key?(key)
|
21
|
+
@state.key?(key)
|
22
|
+
end
|
23
|
+
end if defined?(::Fiber)
|
24
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Ramaze
|
2
|
+
class State
|
3
|
+
def initialize
|
4
|
+
@core = detect
|
5
|
+
end
|
6
|
+
|
7
|
+
def detect
|
8
|
+
require 'fiber'
|
9
|
+
@extract = :resume
|
10
|
+
Ramaze::Fiber
|
11
|
+
rescue LoadError
|
12
|
+
@extract = :value
|
13
|
+
::Thread
|
14
|
+
end
|
15
|
+
|
16
|
+
def [](key)
|
17
|
+
@core.current[key]
|
18
|
+
end
|
19
|
+
|
20
|
+
def []=(key, value)
|
21
|
+
@core.current[key] = value
|
22
|
+
end
|
23
|
+
|
24
|
+
def key?(key)
|
25
|
+
@core.current.key?(key)
|
26
|
+
end
|
27
|
+
|
28
|
+
def wrap(&block)
|
29
|
+
@core.new(&block).send(@extract)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module StateAccessor
|
34
|
+
|
35
|
+
# Iterate over the names and yield accordingly.
|
36
|
+
# names are either objects responding to #to_sym or hashes.
|
37
|
+
#
|
38
|
+
# It's only used within this module for abstractin-purposes.
|
39
|
+
# Usage below.
|
40
|
+
def self.each(*names)
|
41
|
+
names.each do |name|
|
42
|
+
if name.respond_to?(:to_hash)
|
43
|
+
name.to_hash.each do |key, meth|
|
44
|
+
key, meth = key.to_sym, meth.to_sym
|
45
|
+
yield key, meth
|
46
|
+
end
|
47
|
+
else
|
48
|
+
key = meth = name.to_sym
|
49
|
+
yield key, meth
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# state_writer and state_reader, initializer is a block that may be given
|
55
|
+
# and its result will be the new value in case the reader was never called
|
56
|
+
# before or the value wasn't set before.
|
57
|
+
def state_accessor(*names, &initializer)
|
58
|
+
state_writer(*names)
|
59
|
+
state_reader(*names, &initializer)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Simple writer accessor to STATE[key]=
|
63
|
+
def state_writer(*names)
|
64
|
+
StateAccessor.each(*names) do |key, meth|
|
65
|
+
define_method("#{meth}="){|obj| STATE[key] = obj }
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Reader accessor for STATE[key]
|
70
|
+
def state_reader(*names, &initializer)
|
71
|
+
StateAccessor.each(*names) do |key, meth|
|
72
|
+
if initializer
|
73
|
+
define_method(meth) do
|
74
|
+
unless STATE.key?(key)
|
75
|
+
STATE[key] = instance_eval(&initializer)
|
76
|
+
else
|
77
|
+
STATE[key]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
else
|
81
|
+
define_method(meth){ STATE[key] }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
3
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
4
|
+
|
5
|
+
module Ramaze
|
6
|
+
class Struct < ::Struct
|
7
|
+
|
8
|
+
# Makes it possible to access the keys directly by their name, not only
|
9
|
+
# their index. The original Struct#values_at tries to call #to_int on the
|
10
|
+
# arguments.
|
11
|
+
# in Ruby < 1.9 this would lead to a quite unintuitive IndexError, while
|
12
|
+
# in 1.9 it will say outright that it cannot convert Symbol into Integer.
|
13
|
+
# I think this is neither useful nor expected, so we extend
|
14
|
+
# Struct#values_at to recognize valid members of the Struct passed into
|
15
|
+
# the method and return their values in the same order, just like
|
16
|
+
# Hash#values_at.
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# Point = Struct.new(:x, :y)
|
20
|
+
# point = Point.new(15, 10)
|
21
|
+
#
|
22
|
+
# # Old behaviour:
|
23
|
+
# point.values_at(0, 1)
|
24
|
+
# # => [15, 10]
|
25
|
+
# point.values_at(0..1)
|
26
|
+
# # => [15, 10]
|
27
|
+
# point.values_at(:y, :x)
|
28
|
+
# # => IndexError: offset 20697 too large for struct(size:2)
|
29
|
+
#
|
30
|
+
# # Added new behaviour:
|
31
|
+
# point.values_at(:y, :x)
|
32
|
+
# # => [10, 15]
|
33
|
+
|
34
|
+
def values_at(*keys)
|
35
|
+
keys.map do |key|
|
36
|
+
case key
|
37
|
+
when String, Symbol
|
38
|
+
self[key]
|
39
|
+
else
|
40
|
+
return super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -1,16 +1,21 @@
|
|
1
1
|
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
5
6
|
|
6
|
-
|
7
|
+
# Extensions for String
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
module String
|
10
|
+
|
11
|
+
# simple transformation to CamelCase from snake_case
|
12
|
+
#
|
13
|
+
# 'foo_bar'.camel_case # => 'FooBar'
|
14
|
+
|
15
|
+
def camel_case
|
16
|
+
split('_').map{|e| e.capitalize}.join
|
17
|
+
end
|
18
|
+
end
|
11
19
|
|
12
|
-
def camel_case
|
13
|
-
split('_').map{|e| e.capitalize}.join
|
14
20
|
end
|
15
21
|
end
|
16
|
-
|
@@ -1,27 +1,31 @@
|
|
1
1
|
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
6
|
+
# Extensions for String
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
8
|
+
module String
|
9
|
+
{ :reset => 0,
|
10
|
+
:bold => 1,
|
11
|
+
:dark => 2,
|
12
|
+
:underline => 4,
|
13
|
+
:blink => 5,
|
14
|
+
:negative => 7,
|
15
|
+
:black => 30,
|
16
|
+
:red => 31,
|
17
|
+
:green => 32,
|
18
|
+
:yellow => 33,
|
19
|
+
:blue => 34,
|
20
|
+
:magenta => 35,
|
21
|
+
:cyan => 36,
|
22
|
+
:white => 37,
|
23
|
+
}.each do |key, value|
|
24
|
+
define_method key do
|
25
|
+
"\e[#{value}m" + self + "\e[0m"
|
26
|
+
end
|
27
|
+
end
|
24
28
|
end
|
29
|
+
|
25
30
|
end
|
26
31
|
end
|
27
|
-
|
@@ -1,8 +1,19 @@
|
|
1
1
|
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
# Extensions for String
|
8
|
+
|
9
|
+
module String
|
10
|
+
# 1.9 Compatibility with 1.8
|
11
|
+
|
12
|
+
unless ''.respond_to?(:each)
|
13
|
+
def each(*args, &block)
|
14
|
+
each_line(*args, &block)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
8
19
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
6
|
+
|
7
|
+
# Extensions for String
|
8
|
+
|
9
|
+
module String
|
10
|
+
unless ''.respond_to?(:end_with?)
|
11
|
+
# Compatibility with 1.9
|
12
|
+
def end_with?(other)
|
13
|
+
other = other.to_s
|
14
|
+
self[-other.size, other.size] == other
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -1,29 +1,34 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
require 'uri'
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
5
6
|
|
6
|
-
|
7
|
-
# it suports
|
8
|
-
# '<div>foo bar</div>'.esc(:html)
|
9
|
-
# 'foo bar'.esc(:uri)
|
10
|
-
# 'foo bar'.esc(:cgi)
|
7
|
+
# Extensions for String
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
9
|
+
module String
|
10
|
+
|
11
|
+
# String#escape is an extensible escaping mechanism for string. currently
|
12
|
+
# it suports
|
13
|
+
# '<div>foo bar</div>'.esc(:html)
|
14
|
+
# 'foo bar'.esc(:uri)
|
15
|
+
# 'foo bar'.esc(:cgi)
|
16
|
+
|
17
|
+
def escape which = :html
|
18
|
+
case which
|
19
|
+
when :html
|
20
|
+
Rack::Utils.escape_html(self)
|
21
|
+
when :cgi
|
22
|
+
Rack::Utils.escape(self)
|
23
|
+
when :uri
|
24
|
+
::URI.escape(self)
|
25
|
+
else
|
26
|
+
raise ArgumentError, "do not know how to escape '#{ which }'"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
alias_method 'esc', 'escape'
|
25
31
|
end
|
26
|
-
end
|
27
32
|
|
28
|
-
|
33
|
+
end
|
29
34
|
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
5
6
|
|
6
|
-
|
7
|
-
unless method_defined?(:ord)
|
7
|
+
# Extensions for String
|
8
8
|
|
9
|
-
|
9
|
+
module String
|
10
|
+
unless ''.respond_to?(:ord)
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
# compatibility with Ruby 1.9
|
13
|
+
|
14
|
+
def ord
|
15
|
+
self[0]
|
16
|
+
end
|
17
|
+
end
|
13
18
|
end
|
19
|
+
|
14
20
|
end
|
15
21
|
end
|
@@ -1,15 +1,21 @@
|
|
1
1
|
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
|
4
|
+
module Ramaze
|
5
|
+
module CoreExtensions
|
5
6
|
|
6
|
-
|
7
|
+
# Extensions for String
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
module String
|
10
|
+
|
11
|
+
# convert to snake_case from CamelCase
|
12
|
+
#
|
13
|
+
# 'FooBar'.snake_case # => 'foo_bar'
|
14
|
+
|
15
|
+
def snake_case
|
16
|
+
gsub(/\B[A-Z][^A-Z]/, '_\&').downcase.gsub(' ', '_')
|
17
|
+
end
|
18
|
+
end
|
11
19
|
|
12
|
-
def snake_case
|
13
|
-
gsub(/\B[A-Z][^A-Z]/, '_\&').downcase.gsub(' ', '_')
|
14
20
|
end
|
15
21
|
end
|
@@ -1,8 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Ramaze
|
2
|
+
module CoreExtensions
|
3
|
+
|
4
|
+
# Extensions for String
|
5
|
+
|
6
|
+
module String
|
7
|
+
|
8
|
+
unless ''.respond_to?(:start_with?)
|
9
|
+
|
10
|
+
# Compatibility with 1.9
|
11
|
+
|
12
|
+
def start_with?(other)
|
13
|
+
other = other.to_s
|
14
|
+
self[0, other.size] == other
|
15
|
+
end
|
16
|
+
end
|
6
17
|
end
|
7
18
|
end
|
8
19
|
end
|
@@ -1,20 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# first line with indentation.
|
4
|
-
def unindent
|
5
|
-
find_indent = proc{ |l| l.find{|l| !l.strip.empty?}.to_s[/^(\s+)/, 1] }
|
1
|
+
module Ramaze
|
2
|
+
module CoreExtensions
|
6
3
|
|
7
|
-
|
8
|
-
space = find_indent[lines]
|
9
|
-
space = find_indent[lines.reverse] unless space
|
4
|
+
# Extensions for String
|
10
5
|
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
module String
|
7
|
+
|
8
|
+
# Useful for writing indented String and unindent on demand, based on the
|
9
|
+
# first line with indentation.
|
10
|
+
def unindent
|
11
|
+
find_indent = proc{ |l| l.find{|l| !l.strip.empty?}.to_s[/^(\s+)/, 1] }
|
12
|
+
|
13
|
+
lines = self.split("\n")
|
14
|
+
space = find_indent[lines]
|
15
|
+
space = find_indent[lines.reverse] unless space
|
16
|
+
|
17
|
+
strip.gsub(/^#{space}/, '')
|
18
|
+
end
|
19
|
+
alias ui unindent
|
14
20
|
|
15
|
-
|
16
|
-
|
17
|
-
|
21
|
+
# Destructive variant of undindent, replacing the String
|
22
|
+
def unindent!
|
23
|
+
self.replace unindent
|
24
|
+
end
|
25
|
+
alias ui! unindent!
|
26
|
+
end
|
18
27
|
end
|
19
|
-
alias ui! unindent!
|
20
28
|
end
|