active_object 3.1.0 → 4.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.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.fasterer.yml +19 -0
- data/.reek +39 -0
- data/.rubocop.yml +38 -0
- data/Gemfile +1 -1
- data/README.md +224 -239
- data/Rakefile +1 -1
- data/active_object.gemspec +19 -16
- data/bin/console +4 -4
- data/bin/rake +6 -7
- data/lib/.DS_Store +0 -0
- data/lib/active_object.rb +4 -33
- data/lib/active_object/.DS_Store +0 -0
- data/lib/active_object/array.rb +55 -41
- data/lib/active_object/date.rb +17 -22
- data/lib/active_object/enumerable.rb +73 -56
- data/lib/active_object/hash.rb +47 -37
- data/lib/active_object/integer.rb +8 -9
- data/lib/active_object/numeric.rb +132 -122
- data/lib/active_object/object.rb +10 -10
- data/lib/active_object/range.rb +1 -1
- data/lib/active_object/settings.rb +17 -0
- data/lib/active_object/string.rb +93 -90
- data/lib/active_object/time.rb +37 -48
- data/lib/active_object/version.rb +1 -1
- data/lib/generators/active_object/install_generator.rb +6 -8
- data/lib/generators/active_object/templates/install.rb +1 -1
- metadata +51 -3
- data/lib/active_object/configuration.rb +0 -21
    
        data/lib/active_object/object.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module ActiveObject::Object
         | 
| 2 | 
            -
              FALSE_VALUES = [false, 0,  | 
| 3 | 
            -
              TRUE_VALUES = [true, 1,  | 
| 2 | 
            +
              FALSE_VALUES = [false, 0, '0', 'false', 'FALSE', 'f', 'F'].freeze
         | 
| 3 | 
            +
              TRUE_VALUES = [true, 1, '1', 'true', 'TRUE', 't', 'T'].freeze
         | 
| 4 4 |  | 
| 5 5 | 
             
              def array?
         | 
| 6 6 | 
             
                is_a?(Array)
         | 
| @@ -56,7 +56,7 @@ module ActiveObject::Object | |
| 56 56 | 
             
                is_a?(Range)
         | 
| 57 57 | 
             
              end
         | 
| 58 58 |  | 
| 59 | 
            -
              def salvage(placeholder= | 
| 59 | 
            +
              def salvage(placeholder = '---')
         | 
| 60 60 | 
             
                blank? ? placeholder : self
         | 
| 61 61 | 
             
              end
         | 
| 62 62 |  | 
| @@ -76,18 +76,18 @@ module ActiveObject::Object | |
| 76 76 | 
             
                TRUE_VALUES.include?(self)
         | 
| 77 77 | 
             
              end
         | 
| 78 78 |  | 
| 79 | 
            -
              def try(* | 
| 80 | 
            -
                try!(* | 
| 79 | 
            +
              def try(*obj, &block)
         | 
| 80 | 
            +
                try!(*obj, yield(block)) if obj.empty? || respond_to?(obj.first)
         | 
| 81 81 | 
             
              end
         | 
| 82 82 |  | 
| 83 | 
            -
              def try!(* | 
| 84 | 
            -
                if  | 
| 85 | 
            -
                   | 
| 83 | 
            +
              def try!(*obj, &block)
         | 
| 84 | 
            +
                if obj.empty? && block_given?
         | 
| 85 | 
            +
                  block.arity.zero? ? instance_eval(yield(block)) : yield(self)
         | 
| 86 86 | 
             
                else
         | 
| 87 | 
            -
                  public_send(* | 
| 87 | 
            +
                  public_send(*obj, yield(block))
         | 
| 88 88 | 
             
                end
         | 
| 89 89 | 
             
              end
         | 
| 90 90 |  | 
| 91 91 | 
             
            end
         | 
| 92 92 |  | 
| 93 | 
            -
            Object.send(:include, ActiveObject::Object) if ActiveObject. | 
| 93 | 
            +
            Object.send(:include, ActiveObject::Object) if ActiveObject::Settings.config.autoload_object
         | 
    
        data/lib/active_object/range.rb
    CHANGED
    
    
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require 'dry-configurable'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class ActiveObject::Settings
         | 
| 4 | 
            +
              extend Dry::Configurable
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              setting :autoload_array, true
         | 
| 7 | 
            +
              setting :autoload_date, true
         | 
| 8 | 
            +
              setting :autoload_enumerable, true
         | 
| 9 | 
            +
              setting :autoload_hash, true
         | 
| 10 | 
            +
              setting :autoload_integer, true
         | 
| 11 | 
            +
              setting :autoload_numeric, true
         | 
| 12 | 
            +
              setting :autoload_object, true
         | 
| 13 | 
            +
              setting :autoload_range, true
         | 
| 14 | 
            +
              setting :autoload_string, true
         | 
| 15 | 
            +
              setting :autoload_time, true
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            end
         | 
    
        data/lib/active_object/string.rb
    CHANGED
    
    | @@ -2,7 +2,10 @@ module ActiveObject::String | |
| 2 2 |  | 
| 3 3 | 
             
              def any?(*keys)
         | 
| 4 4 | 
             
                included = false
         | 
| 5 | 
            -
                keys.flatten.each  | 
| 5 | 
            +
                keys.flatten.each do |key|
         | 
| 6 | 
            +
                  included = include?(key)
         | 
| 7 | 
            +
                  break if included
         | 
| 8 | 
            +
                end
         | 
| 6 9 | 
             
                included
         | 
| 7 10 | 
             
              end
         | 
| 8 11 |  | 
| @@ -10,9 +13,13 @@ module ActiveObject::String | |
| 10 13 | 
             
                self[position]
         | 
| 11 14 | 
             
              end
         | 
| 12 15 |  | 
| 13 | 
            -
              def camelize(first_letter | 
| 16 | 
            +
              def camelize(first_letter = :upper)
         | 
| 14 17 | 
             
                if first_letter.to_sym != :lower
         | 
| 15 | 
            -
                   | 
| 18 | 
            +
                  regex_last = Regexp.last_match(1).upcase
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  to_s
         | 
| 21 | 
            +
                    .gsub(%r{\/(.?)}) { "::#{regex_last}" }
         | 
| 22 | 
            +
                    .gsub(%r{^/(?:^|_)(.)}) { regex_last }
         | 
| 16 23 | 
             
                else
         | 
| 17 24 | 
             
                  "#{to_s.first.chr.downcase}#{camelize(self)[1..-1]}"
         | 
| 18 25 | 
             
                end
         | 
| @@ -20,14 +27,14 @@ module ActiveObject::String | |
| 20 27 |  | 
| 21 28 | 
             
              alias_method :camelcase, :camelize
         | 
| 22 29 |  | 
| 23 | 
            -
              def camelize!(first_letter | 
| 30 | 
            +
              def camelize!(first_letter = :upper)
         | 
| 24 31 | 
             
                replace(camelize(first_letter))
         | 
| 25 32 | 
             
              end
         | 
| 26 33 |  | 
| 27 34 | 
             
              alias_method :camelcase!, :camelize!
         | 
| 28 35 |  | 
| 29 36 | 
             
              def classify
         | 
| 30 | 
            -
                to_s.sub(/.*\./,  | 
| 37 | 
            +
                to_s.sub(/.*\./, '').camelize
         | 
| 31 38 | 
             
              end
         | 
| 32 39 |  | 
| 33 40 | 
             
              def classify!
         | 
| @@ -39,7 +46,7 @@ module ActiveObject::String | |
| 39 46 | 
             
              end
         | 
| 40 47 |  | 
| 41 48 | 
             
              def dasherize
         | 
| 42 | 
            -
                 | 
| 49 | 
            +
                tr(/_/, '-')
         | 
| 43 50 | 
             
              end
         | 
| 44 51 |  | 
| 45 52 | 
             
              def dasherize!
         | 
| @@ -47,7 +54,7 @@ module ActiveObject::String | |
| 47 54 | 
             
              end
         | 
| 48 55 |  | 
| 49 56 | 
             
              def deconstantize
         | 
| 50 | 
            -
                to_s[0, rindex( | 
| 57 | 
            +
                to_s[0, rindex('::') || 0]
         | 
| 51 58 | 
             
              end
         | 
| 52 59 |  | 
| 53 60 | 
             
              def deconstantize!
         | 
| @@ -55,7 +62,7 @@ module ActiveObject::String | |
| 55 62 | 
             
              end
         | 
| 56 63 |  | 
| 57 64 | 
             
              def demodulize
         | 
| 58 | 
            -
                to_s.gsub(/^.*::/,  | 
| 65 | 
            +
                to_s.gsub(/^.*::/, '')
         | 
| 59 66 | 
             
              end
         | 
| 60 67 |  | 
| 61 68 | 
             
              def demodulize!
         | 
| @@ -63,63 +70,63 @@ module ActiveObject::String | |
| 63 70 | 
             
              end
         | 
| 64 71 |  | 
| 65 72 | 
             
              def domain
         | 
| 66 | 
            -
                self =~ ( | 
| 73 | 
            +
                self =~ %r{^(?:\w+:\/\/)?([^\/?]+)(?:\/|\?|$)} ? Regexp.last_match(1) : self
         | 
| 67 74 | 
             
              end
         | 
| 68 75 |  | 
| 69 76 | 
             
              def downcase?
         | 
| 70 77 | 
             
                downcase == self
         | 
| 71 78 | 
             
              end
         | 
| 72 79 |  | 
| 73 | 
            -
              def ellipsize(ellipsize_at, options={})
         | 
| 74 | 
            -
             | 
| 80 | 
            +
              def ellipsize(ellipsize_at, options = {})
         | 
| 81 | 
            +
                return(self) if length <= ellipsize_at
         | 
| 75 82 |  | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 83 | 
            +
                separator = options[:separator] || '...'
         | 
| 84 | 
            +
                offset = options[:offset] || 4
         | 
| 78 85 |  | 
| 79 | 
            -
             | 
| 86 | 
            +
                "#{self[0, offset]}#{separator}#{self[-offset, offset]}"
         | 
| 80 87 | 
             
              end
         | 
| 81 88 |  | 
| 82 89 | 
             
              def exclude?(string)
         | 
| 83 90 | 
             
                !include?(string)
         | 
| 84 91 | 
             
              end
         | 
| 85 92 |  | 
| 86 | 
            -
              def first(limit=1)
         | 
| 87 | 
            -
                return( | 
| 93 | 
            +
              def first(limit = 1)
         | 
| 94 | 
            +
                return('') if limit.zero?
         | 
| 88 95 |  | 
| 89 96 | 
             
                limit >= length ? self : to(limit - 1)
         | 
| 90 97 | 
             
              end
         | 
| 91 98 |  | 
| 92 99 | 
             
              def format(*args)
         | 
| 93 | 
            -
                super(self, * | 
| 100 | 
            +
                super(self, *args.flatten)
         | 
| 94 101 | 
             
              end
         | 
| 95 102 |  | 
| 96 103 | 
             
              def from(position)
         | 
| 97 104 | 
             
                self[position..-1]
         | 
| 98 105 | 
             
              end
         | 
| 99 106 |  | 
| 100 | 
            -
              def humanize(options={})
         | 
| 101 | 
            -
                capitalize = options | 
| 107 | 
            +
              def humanize(options = {})
         | 
| 108 | 
            +
                capitalize = options[:capitalize] || true
         | 
| 102 109 |  | 
| 103 | 
            -
                underscore | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 110 | 
            +
                underscore
         | 
| 111 | 
            +
                  .gsub(/_id\z/, '')
         | 
| 112 | 
            +
                  .tr('_', ' ')
         | 
| 113 | 
            +
                  .squish
         | 
| 114 | 
            +
                  .gsub(/([a-z\d]*)/i, &:downcase)
         | 
| 115 | 
            +
                  .gsub(/\A\w/) { |str| capitalize ? str.upcase : str }
         | 
| 109 116 | 
             
              end
         | 
| 110 117 |  | 
| 111 | 
            -
              def humanize!(options={})
         | 
| 118 | 
            +
              def humanize!(options = {})
         | 
| 112 119 | 
             
                replace(humanize(options))
         | 
| 113 120 | 
             
              end
         | 
| 114 121 |  | 
| 115 | 
            -
              def indent(amount, indent_string=nil, indent_empty_lines=false)
         | 
| 116 | 
            -
                indent_string = indent_string || self[/^[ \t]/] ||  | 
| 122 | 
            +
              def indent(amount, indent_string = nil, indent_empty_lines = false)
         | 
| 123 | 
            +
                indent_string = indent_string || self[/^[ \t]/] || ' '
         | 
| 117 124 | 
             
                substitutes = indent_empty_lines ? /^/ : /^(?!$)/
         | 
| 118 125 |  | 
| 119 126 | 
             
                gsub(substitutes, indent_string * amount)
         | 
| 120 127 | 
             
              end
         | 
| 121 128 |  | 
| 122 | 
            -
              def indent!(amount, indent_string=nil, indent_empty_lines=false)
         | 
| 129 | 
            +
              def indent!(amount, indent_string = nil, indent_empty_lines = false)
         | 
| 123 130 | 
             
                replace(indent(amount, indent_string, indent_empty_lines))
         | 
| 124 131 | 
             
              end
         | 
| 125 132 |  | 
| @@ -128,7 +135,7 @@ module ActiveObject::String | |
| 128 135 | 
             
                arr_indexes = []
         | 
| 129 136 | 
             
                srch_index = rindex(pattern)
         | 
| 130 137 |  | 
| 131 | 
            -
                while srch_index | 
| 138 | 
            +
                while srch_index
         | 
| 132 139 | 
             
                  temp_string = self[0..(srch_index - 1)]
         | 
| 133 140 | 
             
                  arr_indexes << srch_index
         | 
| 134 141 | 
             
                  srch_index = srch_index.zero? ? nil : temp_string.rindex(pattern)
         | 
| @@ -137,28 +144,27 @@ module ActiveObject::String | |
| 137 144 | 
             
                arr_indexes.reverse
         | 
| 138 145 | 
             
              end
         | 
| 139 146 |  | 
| 140 | 
            -
              def labelize(options={})
         | 
| 141 | 
            -
                capitalize = options | 
| 147 | 
            +
              def labelize(options = {})
         | 
| 148 | 
            +
                capitalize = options[:capitalize] || true
         | 
| 142 149 |  | 
| 143 | 
            -
                underscore | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 150 | 
            +
                underscore
         | 
| 151 | 
            +
                  .tr('_', ' ')
         | 
| 152 | 
            +
                  .squish
         | 
| 153 | 
            +
                  .gsub(/([a-z\d]*)/i, &:downcase)
         | 
| 154 | 
            +
                  .gsub(/\A\w/) { |str| capitalize ? str.upcase : str }
         | 
| 155 | 
            +
                  .gsub(/ id\z/, ' ID')
         | 
| 149 156 | 
             
              end
         | 
| 150 157 |  | 
| 151 158 | 
             
              alias_method :labelcase, :labelize
         | 
| 152 159 |  | 
| 153 | 
            -
              def labelize!(options={})
         | 
| 160 | 
            +
              def labelize!(options = {})
         | 
| 154 161 | 
             
                replace(labelize(options))
         | 
| 155 162 | 
             
              end
         | 
| 156 163 |  | 
| 157 164 | 
             
              alias_method :labelcase!, :labelize!
         | 
| 158 165 |  | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
                return("") if limit.zero?
         | 
| 166 | 
            +
              def last(limit = 1)
         | 
| 167 | 
            +
                return('') if limit.zero?
         | 
| 162 168 |  | 
| 163 169 | 
             
                limit >= length ? self : from(-limit)
         | 
| 164 170 | 
             
              end
         | 
| @@ -175,19 +181,19 @@ module ActiveObject::String | |
| 175 181 | 
             
                to_i.ordinalize
         | 
| 176 182 | 
             
              end
         | 
| 177 183 |  | 
| 178 | 
            -
              def parameterize(seperator= | 
| 184 | 
            +
              def parameterize(seperator = '-')
         | 
| 179 185 | 
             
                underscore.gsub(/\s+/, seperator).downcase
         | 
| 180 186 | 
             
              end
         | 
| 181 187 |  | 
| 182 | 
            -
              def parameterize!(seperator= | 
| 188 | 
            +
              def parameterize!(seperator = '-')
         | 
| 183 189 | 
             
                replace(parameterize(seperator))
         | 
| 184 190 | 
             
              end
         | 
| 185 191 |  | 
| 186 | 
            -
              def pollute(delimiter= | 
| 187 | 
            -
                split( | 
| 192 | 
            +
              def pollute(delimiter = '^--^--^')
         | 
| 193 | 
            +
                split('').map { |chr| "#{chr}#{delimiter}" }.join
         | 
| 188 194 | 
             
              end
         | 
| 189 195 |  | 
| 190 | 
            -
              def pollute!(delimiter= | 
| 196 | 
            +
              def pollute!(delimiter = '^--^--^')
         | 
| 191 197 | 
             
                replace(pollute(delimiter))
         | 
| 192 198 | 
             
              end
         | 
| 193 199 |  | 
| @@ -202,12 +208,8 @@ module ActiveObject::String | |
| 202 208 | 
             
              def remove(*patterns)
         | 
| 203 209 | 
             
                string = dup
         | 
| 204 210 |  | 
| 205 | 
            -
                patterns.flatten.each do | | 
| 206 | 
            -
                   | 
| 207 | 
            -
                    string.slice!(p)
         | 
| 208 | 
            -
                  else
         | 
| 209 | 
            -
                    string.gsub!(p, "")
         | 
| 210 | 
            -
                  end
         | 
| 211 | 
            +
                patterns.flatten.each do |pat|
         | 
| 212 | 
            +
                  pat.is_a?(Range) ? string.slice!(pat) : string.gsub!(pat, '')
         | 
| 211 213 | 
             
                end
         | 
| 212 214 |  | 
| 213 215 | 
             
                string
         | 
| @@ -218,18 +220,18 @@ module ActiveObject::String | |
| 218 220 | 
             
              end
         | 
| 219 221 |  | 
| 220 222 | 
             
              def remove_tags
         | 
| 221 | 
            -
                gsub( | 
| 223 | 
            +
                gsub(%r{<\/?[^>]*>}, '')
         | 
| 222 224 | 
             
              end
         | 
| 223 225 |  | 
| 224 226 | 
             
              def remove_tags!
         | 
| 225 227 | 
             
                replace(remove_tags)
         | 
| 226 228 | 
             
              end
         | 
| 227 229 |  | 
| 228 | 
            -
              def sample(separator= | 
| 230 | 
            +
              def sample(separator = ' ')
         | 
| 229 231 | 
             
                split(separator).sample
         | 
| 230 232 | 
             
              end
         | 
| 231 233 |  | 
| 232 | 
            -
              def sample!(separator= | 
| 234 | 
            +
              def sample!(separator = ' ')
         | 
| 233 235 | 
             
                replace(sample(separator))
         | 
| 234 236 | 
             
              end
         | 
| 235 237 |  | 
| @@ -238,7 +240,7 @@ module ActiveObject::String | |
| 238 240 | 
             
                  self[0]
         | 
| 239 241 | 
             
                else
         | 
| 240 242 | 
             
                  string = dup
         | 
| 241 | 
            -
                  patterns.flatten.each { | | 
| 243 | 
            +
                  patterns.flatten.each { |pat| string.sub!(pat, '') }
         | 
| 242 244 | 
             
                  string
         | 
| 243 245 | 
             
                end
         | 
| 244 246 | 
             
              end
         | 
| @@ -247,21 +249,21 @@ module ActiveObject::String | |
| 247 249 | 
             
                replace(shift(*patterns))
         | 
| 248 250 | 
             
              end
         | 
| 249 251 |  | 
| 250 | 
            -
              def shuffle(separator= | 
| 252 | 
            +
              def shuffle(separator = '')
         | 
| 251 253 | 
             
                split(separator).shuffle.join
         | 
| 252 254 | 
             
              end
         | 
| 253 255 |  | 
| 254 | 
            -
              def shuffle!(separator= | 
| 256 | 
            +
              def shuffle!(separator = '')
         | 
| 255 257 | 
             
                replace(shuffle(separator))
         | 
| 256 258 | 
             
              end
         | 
| 257 259 |  | 
| 258 260 | 
             
              def sift(chars_to_keep)
         | 
| 259 261 | 
             
                chars_to_keep = case chars_to_keep
         | 
| 260 262 | 
             
                                when String then chars_to_keep.chars
         | 
| 261 | 
            -
                                when Array then chars_to_keep.map | 
| 262 | 
            -
                                when Range then chars_to_keep.to_a.map | 
| 263 | 
            +
                                when Array then chars_to_keep.map(&:to_s)
         | 
| 264 | 
            +
                                when Range then chars_to_keep.to_a.map(&:to_s)
         | 
| 263 265 | 
             
                                else
         | 
| 264 | 
            -
                                  raise TypeError,  | 
| 266 | 
            +
                                  raise TypeError, 'Invalid parameter'
         | 
| 265 267 | 
             
                                end
         | 
| 266 268 |  | 
| 267 269 | 
             
                chars.keep_if { |chr| chars_to_keep.include?(chr) }.join
         | 
| @@ -272,11 +274,11 @@ module ActiveObject::String | |
| 272 274 | 
             
              end
         | 
| 273 275 |  | 
| 274 276 | 
             
              def slugify
         | 
| 275 | 
            -
                gsub(/[^\x00-\x7F]+/,  | 
| 276 | 
            -
             | 
| 277 | 
            -
             | 
| 278 | 
            -
             | 
| 279 | 
            -
             | 
| 277 | 
            +
                gsub(/[^\x00-\x7F]+/, '')
         | 
| 278 | 
            +
                  .gsub(/[^\w_ \-]+/i, '')
         | 
| 279 | 
            +
                  .gsub(/[ \-]+/i, '-')
         | 
| 280 | 
            +
                  .gsub(/^\-|\-$/i, '')
         | 
| 281 | 
            +
                  .downcase
         | 
| 280 282 | 
             
              end
         | 
| 281 283 |  | 
| 282 284 | 
             
              def slugify!
         | 
| @@ -284,7 +286,7 @@ module ActiveObject::String | |
| 284 286 | 
             
              end
         | 
| 285 287 |  | 
| 286 288 | 
             
              def squish
         | 
| 287 | 
            -
                strip.gsub(/\s+/,  | 
| 289 | 
            +
                strip.gsub(/\s+/, ' ')
         | 
| 288 290 | 
             
              end
         | 
| 289 291 |  | 
| 290 292 | 
             
              def squish!
         | 
| @@ -315,49 +317,50 @@ module ActiveObject::String | |
| 315 317 | 
             
                self[0..position]
         | 
| 316 318 | 
             
              end
         | 
| 317 319 |  | 
| 318 | 
            -
              def truncate(truncate_at, options={})
         | 
| 320 | 
            +
              def truncate(truncate_at, options = {})
         | 
| 319 321 | 
             
                return(dup) unless length > truncate_at
         | 
| 320 322 |  | 
| 321 | 
            -
                omission = options | 
| 323 | 
            +
                omission = options[:omission] || '...'
         | 
| 322 324 | 
             
                size_with_room_for_omission = truncate_at - omission.length
         | 
| 323 325 |  | 
| 324 | 
            -
                 | 
| 325 | 
            -
             | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 326 | 
            +
                seperator = options[:separator]
         | 
| 327 | 
            +
                stop = if seperator
         | 
| 328 | 
            +
                         rindex(seperator || '', size_with_room_for_omission) || size_with_room_for_omission
         | 
| 329 | 
            +
                       else
         | 
| 330 | 
            +
                         size_with_room_for_omission
         | 
| 331 | 
            +
                       end
         | 
| 329 332 |  | 
| 330 333 | 
             
                "#{self[0, stop]}#{omission}"
         | 
| 331 334 | 
             
              end
         | 
| 332 335 |  | 
| 333 | 
            -
              def truncate_words(words_count, options={})
         | 
| 334 | 
            -
                sep = options | 
| 335 | 
            -
                sep = Regexp.escape(sep.to_s) unless Regexp | 
| 336 | 
            +
              def truncate_words(words_count, options = {})
         | 
| 337 | 
            +
                sep = options[:separator] || /\s+/
         | 
| 338 | 
            +
                sep = Regexp.escape(sep.to_s) unless sep.is_a(Regexp)
         | 
| 336 339 |  | 
| 337 340 | 
             
                if self =~ /\A((?:.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m
         | 
| 338 | 
            -
                  "#{ | 
| 341 | 
            +
                  "#{Regexp.last_match(1)}#{options[:omissio] || '...'}"
         | 
| 339 342 | 
             
                else
         | 
| 340 343 | 
             
                  self
         | 
| 341 344 | 
             
                end
         | 
| 342 345 | 
             
              end
         | 
| 343 346 |  | 
| 344 347 | 
             
              def underscore
         | 
| 345 | 
            -
                gsub(/::/,  | 
| 346 | 
            -
             | 
| 347 | 
            -
             | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 348 | 
            +
                gsub(/::/, '/')
         | 
| 349 | 
            +
                  .gsub(/([A-Z\d]+)([A-Z][a-z])/, "\1_\2")
         | 
| 350 | 
            +
                  .gsub(/([a-z\d])([A-Z])/, "\1_\2")
         | 
| 351 | 
            +
                  .tr('-', '_')
         | 
| 352 | 
            +
                  .downcase
         | 
| 350 353 | 
             
              end
         | 
| 351 354 |  | 
| 352 355 | 
             
              def underscore!
         | 
| 353 356 | 
             
                replace(underscore)
         | 
| 354 357 | 
             
              end
         | 
| 355 358 |  | 
| 356 | 
            -
              def unpollute(delimiter= | 
| 357 | 
            -
                gsub(delimiter,  | 
| 359 | 
            +
              def unpollute(delimiter = '^--^--^')
         | 
| 360 | 
            +
                gsub(delimiter, '')
         | 
| 358 361 | 
             
              end
         | 
| 359 362 |  | 
| 360 | 
            -
              def unpollute!(delimiter= | 
| 363 | 
            +
              def unpollute!(delimiter = '^--^--^')
         | 
| 361 364 | 
             
                replace(unpollute(delimiter))
         | 
| 362 365 | 
             
              end
         | 
| 363 366 |  | 
| @@ -366,8 +369,8 @@ module ActiveObject::String | |
| 366 369 | 
             
              end
         | 
| 367 370 |  | 
| 368 371 | 
             
              def unshift(*patterns)
         | 
| 369 | 
            -
                string =  | 
| 370 | 
            -
                patterns.flatten.each { | | 
| 372 | 
            +
                string = ''
         | 
| 373 | 
            +
                patterns.flatten.each { |pat| string.concat(pat) }
         | 
| 371 374 | 
             
                string.concat(self)
         | 
| 372 375 | 
             
                string
         | 
| 373 376 | 
             
              end
         | 
| @@ -378,4 +381,4 @@ module ActiveObject::String | |
| 378 381 |  | 
| 379 382 | 
             
            end
         | 
| 380 383 |  | 
| 381 | 
            -
            String.send(:include, ActiveObject::String) if ActiveObject. | 
| 384 | 
            +
            String.send(:include, ActiveObject::String) if ActiveObject::Settings.config.autoload_string
         |