monetra-ruby 0.0.6

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 (93) hide show
  1. data/Rakefile +35 -0
  2. data/lib/monetra.rb +239 -0
  3. data/lib/monetra/active_support.rb +42 -0
  4. data/lib/monetra/active_support/binding_of_caller.rb +84 -0
  5. data/lib/monetra/active_support/breakpoint.rb +523 -0
  6. data/lib/monetra/active_support/caching_tools.rb +62 -0
  7. data/lib/monetra/active_support/clean_logger.rb +38 -0
  8. data/lib/monetra/active_support/core_ext.rb +1 -0
  9. data/lib/monetra/active_support/core_ext/array.rb +7 -0
  10. data/lib/monetra/active_support/core_ext/array/conversions.rb +72 -0
  11. data/lib/monetra/active_support/core_ext/array/grouping.rb +46 -0
  12. data/lib/monetra/active_support/core_ext/bigdecimal.rb +3 -0
  13. data/lib/monetra/active_support/core_ext/bigdecimal/formatting.rb +7 -0
  14. data/lib/monetra/active_support/core_ext/blank.rb +50 -0
  15. data/lib/monetra/active_support/core_ext/cgi.rb +5 -0
  16. data/lib/monetra/active_support/core_ext/cgi/escape_skipping_slashes.rb +14 -0
  17. data/lib/monetra/active_support/core_ext/class.rb +3 -0
  18. data/lib/monetra/active_support/core_ext/class/attribute_accessors.rb +44 -0
  19. data/lib/monetra/active_support/core_ext/class/inheritable_attributes.rb +115 -0
  20. data/lib/monetra/active_support/core_ext/class/removal.rb +24 -0
  21. data/lib/monetra/active_support/core_ext/date.rb +6 -0
  22. data/lib/monetra/active_support/core_ext/date/conversions.rb +39 -0
  23. data/lib/monetra/active_support/core_ext/enumerable.rb +62 -0
  24. data/lib/monetra/active_support/core_ext/exception.rb +33 -0
  25. data/lib/monetra/active_support/core_ext/hash.rb +13 -0
  26. data/lib/monetra/active_support/core_ext/hash/conversions.rb +148 -0
  27. data/lib/monetra/active_support/core_ext/hash/diff.rb +11 -0
  28. data/lib/monetra/active_support/core_ext/hash/indifferent_access.rb +88 -0
  29. data/lib/monetra/active_support/core_ext/hash/keys.rb +53 -0
  30. data/lib/monetra/active_support/core_ext/hash/reverse_merge.rb +25 -0
  31. data/lib/monetra/active_support/core_ext/integer.rb +7 -0
  32. data/lib/monetra/active_support/core_ext/integer/even_odd.rb +24 -0
  33. data/lib/monetra/active_support/core_ext/integer/inflections.rb +15 -0
  34. data/lib/monetra/active_support/core_ext/kernel.rb +4 -0
  35. data/lib/monetra/active_support/core_ext/kernel/agnostics.rb +11 -0
  36. data/lib/monetra/active_support/core_ext/kernel/daemonizing.rb +15 -0
  37. data/lib/monetra/active_support/core_ext/kernel/reporting.rb +51 -0
  38. data/lib/monetra/active_support/core_ext/kernel/requires.rb +24 -0
  39. data/lib/monetra/active_support/core_ext/load_error.rb +38 -0
  40. data/lib/monetra/active_support/core_ext/logger.rb +16 -0
  41. data/lib/monetra/active_support/core_ext/module.rb +7 -0
  42. data/lib/monetra/active_support/core_ext/module/aliasing.rb +57 -0
  43. data/lib/monetra/active_support/core_ext/module/attr_internal.rb +31 -0
  44. data/lib/monetra/active_support/core_ext/module/attribute_accessors.rb +44 -0
  45. data/lib/monetra/active_support/core_ext/module/delegation.rb +41 -0
  46. data/lib/monetra/active_support/core_ext/module/inclusion.rb +11 -0
  47. data/lib/monetra/active_support/core_ext/module/introspection.rb +21 -0
  48. data/lib/monetra/active_support/core_ext/module/loading.rb +13 -0
  49. data/lib/monetra/active_support/core_ext/name_error.rb +20 -0
  50. data/lib/monetra/active_support/core_ext/numeric.rb +7 -0
  51. data/lib/monetra/active_support/core_ext/numeric/bytes.rb +44 -0
  52. data/lib/monetra/active_support/core_ext/numeric/time.rb +72 -0
  53. data/lib/monetra/active_support/core_ext/object.rb +2 -0
  54. data/lib/monetra/active_support/core_ext/object/extending.rb +47 -0
  55. data/lib/monetra/active_support/core_ext/object/misc.rb +34 -0
  56. data/lib/monetra/active_support/core_ext/pathname.rb +7 -0
  57. data/lib/monetra/active_support/core_ext/pathname/clean_within.rb +14 -0
  58. data/lib/monetra/active_support/core_ext/proc.rb +12 -0
  59. data/lib/monetra/active_support/core_ext/range.rb +5 -0
  60. data/lib/monetra/active_support/core_ext/range/conversions.rb +21 -0
  61. data/lib/monetra/active_support/core_ext/string.rb +13 -0
  62. data/lib/monetra/active_support/core_ext/string/access.rb +58 -0
  63. data/lib/monetra/active_support/core_ext/string/conversions.rb +19 -0
  64. data/lib/monetra/active_support/core_ext/string/inflections.rb +153 -0
  65. data/lib/monetra/active_support/core_ext/string/iterators.rb +17 -0
  66. data/lib/monetra/active_support/core_ext/string/starts_ends_with.rb +20 -0
  67. data/lib/monetra/active_support/core_ext/symbol.rb +12 -0
  68. data/lib/monetra/active_support/core_ext/time.rb +7 -0
  69. data/lib/monetra/active_support/core_ext/time/calculations.rb +188 -0
  70. data/lib/monetra/active_support/core_ext/time/conversions.rb +36 -0
  71. data/lib/monetra/active_support/dependencies.rb +187 -0
  72. data/lib/monetra/active_support/deprecation.rb +106 -0
  73. data/lib/monetra/active_support/inflections.rb +53 -0
  74. data/lib/monetra/active_support/inflector.rb +179 -0
  75. data/lib/monetra/active_support/json.rb +37 -0
  76. data/lib/monetra/active_support/json/encoders.rb +25 -0
  77. data/lib/monetra/active_support/json/encoders/core.rb +65 -0
  78. data/lib/monetra/active_support/option_merger.rb +25 -0
  79. data/lib/monetra/active_support/ordered_options.rb +50 -0
  80. data/lib/monetra/active_support/reloadable.rb +30 -0
  81. data/lib/monetra/active_support/values/time_zone.rb +180 -0
  82. data/lib/monetra/active_support/vendor/builder.rb +13 -0
  83. data/lib/monetra/active_support/vendor/builder/blankslate.rb +63 -0
  84. data/lib/monetra/active_support/vendor/builder/xchar.rb +112 -0
  85. data/lib/monetra/active_support/vendor/builder/xmlbase.rb +145 -0
  86. data/lib/monetra/active_support/vendor/builder/xmlevents.rb +63 -0
  87. data/lib/monetra/active_support/vendor/builder/xmlmarkup.rb +328 -0
  88. data/lib/monetra/active_support/vendor/flexmock.rb +84 -0
  89. data/lib/monetra/active_support/vendor/xml_simple.rb +1019 -0
  90. data/lib/monetra/active_support/version.rb +9 -0
  91. data/lib/monetra/active_support/whiny_nil.rb +38 -0
  92. data/test/test.rb +21 -0
  93. metadata +167 -0
@@ -0,0 +1,21 @@
1
+ class Module
2
+ # Return the module which contains this one; if this is a root module, such as
3
+ # +::MyModule+, then Object is returned.
4
+ def parent
5
+ parent_name = name.split('::')[0..-2] * '::'
6
+ parent_name.empty? ? Object : parent_name.constantize
7
+ end
8
+
9
+ # Return all the parents of this module, ordered from nested outwards. The
10
+ # receiver is not contained within the result.
11
+ def parents
12
+ parents = []
13
+ parts = name.split('::')[0..-2]
14
+ until parts.empty?
15
+ parents << (parts * '::').constantize
16
+ parts.pop
17
+ end
18
+ parents << Object unless parents.include? Object
19
+ parents
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ class Module
2
+ def as_load_path
3
+ if self == Object || self == Kernel
4
+ ''
5
+ elsif is_a? Class
6
+ parent == self ? '' : parent.as_load_path
7
+ else
8
+ name.split('::').collect do |word|
9
+ word.underscore
10
+ end * '/'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+
2
+ # Add a +missing_name+ method to NameError instances.
3
+ class NameError < StandardError
4
+
5
+ # Add a method to obtain the missing name from a NameError.
6
+ def missing_name
7
+ $1 if /((::)?([A-Z]\w*)(::[A-Z]\w*)*)$/ =~ message
8
+ end
9
+
10
+ # Was this exception raised because the given name was missing?
11
+ def missing_name?(name)
12
+ if name.is_a? Symbol
13
+ last_name = (missing_name || '').split('::').last
14
+ last_name == name.to_s
15
+ else
16
+ missing_name == name.to_s
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/numeric/time'
2
+ require File.dirname(__FILE__) + '/numeric/bytes'
3
+
4
+ class Numeric #:nodoc:
5
+ include ActiveSupport::CoreExtensions::Numeric::Time
6
+ include ActiveSupport::CoreExtensions::Numeric::Bytes
7
+ end
@@ -0,0 +1,44 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module Numeric #:nodoc:
4
+ # Enables the use of byte calculations and declarations, like 45.bytes + 2.6.megabytes
5
+ module Bytes
6
+ def bytes
7
+ self
8
+ end
9
+ alias :byte :bytes
10
+
11
+ def kilobytes
12
+ self * 1024
13
+ end
14
+ alias :kilobyte :kilobytes
15
+
16
+ def megabytes
17
+ self * 1024.kilobytes
18
+ end
19
+ alias :megabyte :megabytes
20
+
21
+ def gigabytes
22
+ self * 1024.megabytes
23
+ end
24
+ alias :gigabyte :gigabytes
25
+
26
+ def terabytes
27
+ self * 1024.gigabytes
28
+ end
29
+ alias :terabyte :terabytes
30
+
31
+ def petabytes
32
+ self * 1024.terabytes
33
+ end
34
+ alias :petabyte :petabytes
35
+
36
+ def exabytes
37
+ self * 1024.petabytes
38
+ end
39
+ alias :exabyte :exabytes
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,72 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module Numeric #:nodoc:
4
+ # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
5
+ #
6
+ # If you need precise date calculations that doesn't just treat months as 30 days, then have
7
+ # a look at Time#advance.
8
+ #
9
+ # Some of these methods are approximations, Ruby's core
10
+ # Date[http://stdlib.rubyonrails.org/libdoc/date/rdoc/index.html] and
11
+ # Time[http://stdlib.rubyonrails.org/libdoc/time/rdoc/index.html] should be used for precision
12
+ # date and time arithmetic
13
+ module Time
14
+ def seconds
15
+ self
16
+ end
17
+ alias :second :seconds
18
+
19
+ def minutes
20
+ self * 60
21
+ end
22
+ alias :minute :minutes
23
+
24
+ def hours
25
+ self * 60.minutes
26
+ end
27
+ alias :hour :hours
28
+
29
+ def days
30
+ self * 24.hours
31
+ end
32
+ alias :day :days
33
+
34
+ def weeks
35
+ self * 7.days
36
+ end
37
+ alias :week :weeks
38
+
39
+ def fortnights
40
+ self * 2.weeks
41
+ end
42
+ alias :fortnight :fortnights
43
+
44
+ def months
45
+ self * 30.days
46
+ end
47
+ alias :month :months
48
+
49
+ def years
50
+ (self * 365.25.days).to_i
51
+ end
52
+ alias :year :years
53
+
54
+ # Reads best without arguments: 10.minutes.ago
55
+ def ago(time = ::Time.now)
56
+ time - self
57
+ end
58
+
59
+ # Reads best with argument: 10.minutes.until(time)
60
+ alias :until :ago
61
+
62
+ # Reads best with argument: 10.minutes.since(time)
63
+ def since(time = ::Time.now)
64
+ time + self
65
+ end
66
+
67
+ # Reads best without arguments: 10.minutes.from_now
68
+ alias :from_now :since
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,2 @@
1
+ require File.dirname(__FILE__) + '/object/extending'
2
+ require File.dirname(__FILE__) + '/object/misc'
@@ -0,0 +1,47 @@
1
+ class Object #:nodoc:
2
+ def remove_subclasses_of(*superclasses)
3
+ Class.remove_class(*subclasses_of(*superclasses))
4
+ end
5
+
6
+ def subclasses_of(*superclasses)
7
+ subclasses = []
8
+ ObjectSpace.each_object(Class) do |k|
9
+ next if # Exclude this class if
10
+ (k.ancestors & superclasses).empty? || # It's not a subclass of our supers
11
+ superclasses.include?(k) || # It *is* one of the supers
12
+ eval("! defined?(::#{k})") || # It's not defined.
13
+ eval("::#{k}").object_id != k.object_id
14
+ subclasses << k
15
+ end
16
+ subclasses
17
+ end
18
+
19
+ def extended_by
20
+ ancestors = class << self; ancestors end
21
+ ancestors.select { |mod| mod.class == Module } - [ Object, Kernel ]
22
+ end
23
+
24
+ def copy_instance_variables_from(object, exclude = [])
25
+ exclude += object.protected_instance_variables if object.respond_to? :protected_instance_variables
26
+
27
+ instance_variables = object.instance_variables - exclude.map { |name| name.to_s }
28
+ instance_variables.each { |name| instance_variable_set(name, object.instance_variable_get(name)) }
29
+ end
30
+
31
+ def extend_with_included_modules_from(object)
32
+ object.extended_by.each { |mod| extend mod }
33
+ end
34
+
35
+ def instance_values
36
+ instance_variables.inject({}) do |values, name|
37
+ values[name[1..-1]] = instance_variable_get(name)
38
+ values
39
+ end
40
+ end
41
+
42
+ unless defined? instance_exec # 1.9
43
+ def instance_exec(*arguments, &block)
44
+ block.bind(self)[*arguments]
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,34 @@
1
+ class Object #:nodoc:
2
+ # A Ruby-ized realization of the K combinator, courtesy of Mikael Brockman.
3
+ #
4
+ # def foo
5
+ # returning values = [] do
6
+ # values << 'bar'
7
+ # values << 'baz'
8
+ # end
9
+ # end
10
+ #
11
+ # foo # => ['bar', 'baz']
12
+ #
13
+ # def foo
14
+ # returning [] do |values|
15
+ # values << 'bar'
16
+ # values << 'baz'
17
+ # end
18
+ # end
19
+ #
20
+ # foo # => ['bar', 'baz']
21
+ #
22
+ def returning(value)
23
+ yield(value)
24
+ value
25
+ end
26
+
27
+ def with_options(options)
28
+ yield ActiveSupport::OptionMerger.new(self, options)
29
+ end
30
+
31
+ def to_json
32
+ ActiveSupport::JSON.encode(self)
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'pathname'
2
+ require File.dirname(__FILE__) + '/pathname/clean_within'
3
+
4
+ class Pathname#:nodoc:
5
+ extend ActiveSupport::CoreExtensions::Pathname::CleanWithin
6
+ end
7
+
@@ -0,0 +1,14 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module Pathname #:nodoc:
4
+ module CleanWithin
5
+ # Clean the paths contained in the provided string.
6
+ def clean_within(string)
7
+ string.gsub(%r{[\w. ]+(/[\w. ]+)+(\.rb)?(\b|$)}) do |path|
8
+ new(path).cleanpath
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class Proc #:nodoc:
2
+ def bind(object)
3
+ block, time = self, Time.now
4
+ (class << object; self end).class_eval do
5
+ method_name = "__bind_#{time.to_i}_#{time.usec}"
6
+ define_method(method_name, &block)
7
+ method = instance_method(method_name)
8
+ remove_method(method_name)
9
+ method
10
+ end.bind(object)
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ require File.dirname(__FILE__) + '/range/conversions'
2
+
3
+ class Range #:nodoc:
4
+ include ActiveSupport::CoreExtensions::Range::Conversions
5
+ end
@@ -0,0 +1,21 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module Range #:nodoc:
4
+ # Getting dates in different convenient string representations and other objects
5
+ module Conversions
6
+ DATE_FORMATS = {
7
+ :db => Proc.new { |start, stop| "BETWEEN '#{start.to_s(:db)}' AND '#{stop.to_s(:db)}'" }
8
+ }
9
+
10
+ def self.included(klass) #:nodoc:
11
+ klass.send(:alias_method, :to_default_s, :to_s)
12
+ klass.send(:alias_method, :to_s, :to_formatted_s)
13
+ end
14
+
15
+ def to_formatted_s(format = :default)
16
+ DATE_FORMATS[format] ? DATE_FORMATS[format].call(first, last) : to_default_s
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/string/inflections'
2
+ require File.dirname(__FILE__) + '/string/conversions'
3
+ require File.dirname(__FILE__) + '/string/access'
4
+ require File.dirname(__FILE__) + '/string/starts_ends_with'
5
+ require File.dirname(__FILE__) + '/string/iterators'
6
+
7
+ class String #:nodoc:
8
+ include ActiveSupport::CoreExtensions::String::Access
9
+ include ActiveSupport::CoreExtensions::String::Conversions
10
+ include ActiveSupport::CoreExtensions::String::Inflections
11
+ include ActiveSupport::CoreExtensions::String::StartsEndsWith
12
+ include ActiveSupport::CoreExtensions::String::Iterators
13
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveSupport #:nodoc:
2
+ module CoreExtensions #:nodoc:
3
+ module String #:nodoc:
4
+ # Makes it easier to access parts of a string, such as specific characters and substrings.
5
+ module Access
6
+ # Returns the character at the +position+ treating the string as an array (where 0 is the first character).
7
+ #
8
+ # Examples:
9
+ # "hello".at(0) # => "h"
10
+ # "hello".at(4) # => "o"
11
+ # "hello".at(10) # => nil
12
+ def at(position)
13
+ self[position, 1]
14
+ end
15
+
16
+ # Returns the remaining of the string from the +position+ treating the string as an array (where 0 is the first character).
17
+ #
18
+ # Examples:
19
+ # "hello".from(0) # => "hello"
20
+ # "hello".from(2) # => "llo"
21
+ # "hello".from(10) # => nil
22
+ def from(position)
23
+ self[position..-1]
24
+ end
25
+
26
+ # Returns the beginning of the string up to the +position+ treating the string as an array (where 0 is the first character).
27
+ #
28
+ # Examples:
29
+ # "hello".to(0) # => "h"
30
+ # "hello".to(2) # => "hel"
31
+ # "hello".to(10) # => "hello"
32
+ def to(position)
33
+ self[0..position]
34
+ end
35
+
36
+ # Returns the first character of the string or the first +limit+ characters.
37
+ #
38
+ # Examples:
39
+ # "hello".first # => "h"
40
+ # "hello".first(2) # => "he"
41
+ # "hello".first(10) # => "hello"
42
+ def first(limit = 1)
43
+ self[0..(limit - 1)]
44
+ end
45
+
46
+ # Returns the last character of the string or the last +limit+ characters.
47
+ #
48
+ # Examples:
49
+ # "hello".last # => "o"
50
+ # "hello".last(2) # => "lo"
51
+ # "hello".last(10) # => "hello"
52
+ def last(limit = 1)
53
+ self[(-limit)..-1] || self
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,19 @@
1
+ require 'parsedate'
2
+
3
+ module ActiveSupport #:nodoc:
4
+ module CoreExtensions #:nodoc:
5
+ module String #:nodoc:
6
+ # Converting strings to other objects
7
+ module Conversions
8
+ # Form can be either :utc (default) or :local.
9
+ def to_time(form = :utc)
10
+ ::Time.send(form, *ParseDate.parsedate(self))
11
+ end
12
+
13
+ def to_date
14
+ ::Date.new(*ParseDate.parsedate(self)[0..2])
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,153 @@
1
+ require File.dirname(__FILE__) + '/../../inflector' unless defined? Inflector
2
+
3
+ module ActiveSupport #:nodoc:
4
+ module CoreExtensions #:nodoc:
5
+ module String #:nodoc:
6
+ # String inflections define new methods on the String class to transform names for different purposes.
7
+ # For instance, you can figure out the name of a database from the name of a class.
8
+ # "ScaleScore".tableize => "scale_scores"
9
+ module Inflections
10
+ # Returns the plural form of the word in the string.
11
+ #
12
+ # Examples
13
+ # "post".pluralize #=> "posts"
14
+ # "octopus".pluralize #=> "octopi"
15
+ # "sheep".pluralize #=> "sheep"
16
+ # "words".pluralize #=> "words"
17
+ # "the blue mailman".pluralize #=> "the blue mailmen"
18
+ # "CamelOctopus".pluralize #=> "CamelOctopi"
19
+ def pluralize
20
+ Inflector.pluralize(self)
21
+ end
22
+
23
+ # The reverse of pluralize, returns the singular form of a word in a string.
24
+ #
25
+ # Examples
26
+ # "posts".singularize #=> "post"
27
+ # "octopi".singularize #=> "octopus"
28
+ # "sheep".singluarize #=> "sheep"
29
+ # "word".singluarize #=> "word"
30
+ # "the blue mailmen".singularize #=> "the blue mailman"
31
+ # "CamelOctopi".singularize #=> "CamelOctopus"
32
+ def singularize
33
+ Inflector.singularize(self)
34
+ end
35
+
36
+ # By default, camelize converts strings to UpperCamelCase. If the argument to camelize
37
+ # is set to ":lower" then camelize produces lowerCamelCase.
38
+ #
39
+ # camelize will also convert '/' to '::' which is useful for converting paths to namespaces
40
+ #
41
+ # Examples
42
+ # "active_record".camelize #=> "ActiveRecord"
43
+ # "active_record".camelize(:lower) #=> "activeRecord"
44
+ # "active_record/errors".camelize #=> "ActiveRecord::Errors"
45
+ # "active_record/errors".camelize(:lower) #=> "activeRecord::Errors"
46
+ def camelize(first_letter = :upper)
47
+ case first_letter
48
+ when :upper then Inflector.camelize(self, true)
49
+ when :lower then Inflector.camelize(self, false)
50
+ end
51
+ end
52
+ alias_method :camelcase, :camelize
53
+
54
+ # Capitalizes all the words and replaces some characters in the string to create
55
+ # a nicer looking title. Titleize is meant for creating pretty output. It is not
56
+ # used in the Rails internals.
57
+ #
58
+ # titleize is also aliased as as titlecase
59
+ #
60
+ # Examples
61
+ # "man from the boondocks".titleize #=> "Man From The Boondocks"
62
+ # "x-men: the last stand".titleize #=> "X Men: The Last Stand"
63
+ def titleize
64
+ Inflector.titleize(self)
65
+ end
66
+ alias_method :titlecase, :titleize
67
+
68
+ # The reverse of +camelize+. Makes an underscored form from the expression in the string.
69
+ #
70
+ # Changes '::' to '/' to convert namespaces to paths.
71
+ #
72
+ # Examples
73
+ # "ActiveRecord".underscore #=> "active_record"
74
+ # "ActiveRecord::Errors".underscore #=> active_record/errors
75
+ def underscore
76
+ Inflector.underscore(self)
77
+ end
78
+
79
+ # Replaces underscores with dashes in the string.
80
+ #
81
+ # Example
82
+ # "puni_puni" #=> "puni-puni"
83
+ def dasherize
84
+ Inflector.dasherize(self)
85
+ end
86
+
87
+ # Removes the module part from the expression in the string
88
+ #
89
+ # Examples
90
+ # "ActiveRecord::CoreExtensions::String::Inflections".demodulize #=> "Inflections"
91
+ # "Inflections".demodulize #=> "Inflections"
92
+ def demodulize
93
+ Inflector.demodulize(self)
94
+ end
95
+
96
+ # Create the name of a table like Rails does for models to table names. This method
97
+ # uses the pluralize method on the last word in the string.
98
+ #
99
+ # Examples
100
+ # "RawScaledScorer".tableize #=> "raw_scaled_scorers"
101
+ # "egg_and_ham".tableize #=> "egg_and_hams"
102
+ # "fancyCategory".tableize #=> "fancy_categories"
103
+ def tableize
104
+ Inflector.tableize(self)
105
+ end
106
+
107
+ # Create a class name from a table name like Rails does for table names to models.
108
+ # Note that this returns a string and not a Class. (To convert to an actual class
109
+ # follow classify with constantize.)
110
+ #
111
+ # Examples
112
+ # "egg_and_hams".classify #=> "EggAndHam"
113
+ # "post".classify #=> "Post"
114
+ def classify
115
+ Inflector.classify(self)
116
+ end
117
+
118
+ # Capitalizes the first word and turns underscores into spaces and strips _id.
119
+ # Like titleize, this is meant for creating pretty output.
120
+ #
121
+ # Examples
122
+ # "employee_salary" #=> "Employee salary"
123
+ # "author_id" #=> "Author"
124
+ def humanize
125
+ Inflector.humanize(self)
126
+ end
127
+
128
+ # Creates a foreign key name from a class name.
129
+ # +separate_class_name_and_id_with_underscore+ sets whether
130
+ # the method should put '_' between the name and 'id'.
131
+ #
132
+ # Examples
133
+ # "Message".foreign_key #=> "message_id"
134
+ # "Message".foreign_key(false) #=> "messageid"
135
+ # "Admin::Post".foreign_key #=> "post_id"
136
+ def foreign_key(separate_class_name_and_id_with_underscore = true)
137
+ Inflector.foreign_key(self, separate_class_name_and_id_with_underscore)
138
+ end
139
+
140
+ # Constantize tries to find a declared constant with the name specified
141
+ # in the string. It raises a NameError when the name is not in CamelCase
142
+ # or is not initialized.
143
+ #
144
+ # Examples
145
+ # "Module".constantize #=> Module
146
+ # "Class".constantize #=> Class
147
+ def constantize
148
+ Inflector.constantize(self)
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end