monetra-ruby 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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