ActiveObject
ActiveObject is a collection of commonly used object helpers in a ruby based project.
Rails Safe = methods extracted from rails but that do not override that rails method.
Highly recommended extensions:
- Hash: Hashie - https://github.com/intridea/hashie
- String: Escape Utils - https://github.com/brianmario/escape_utils
- String: Fast Blank - https://github.com/SamSaffron/fast_blank
- Translation: Fast Gettext - https://github.com/grosser/fast_gettext
- Facets: Facets - https://github.com/rubyworks/facets
Installation
Add this line to your application's Gemfile:
gem 'active_object'
And then execute:
$ bundle
Or install it yourself as:
$ gem install active_object
Table of Contents
Array
After:
after returns the value after the given value.
["1", "2", "3"].after("2") #=> "3"
["1", "2", "3"].after("3") #=> "1"
["1", "2", "3"].after("4") #=> nil
Before:
before returns the value before the given value.
["1", "2", "3"].before("2") #=> "1"
["1", "2", "3"].before("1") #=> "3"
["1", "2", "3"].before("4") #=> nil
Delete First:
delete_first and delete_first! removes the first element from an array. Like Array.shift, but returns the array instead of the removed element.
["1", "2", "3"].delete_first #=> ["2", "3"]
Delete Last:
delete_last and delete_last! removes the last element from an array. Like Array.pop, but returns the array instead of the removed element.
["1", "2", "3"].delete_last #=> ["1", "2"]
Delete Values:
delete_values delete multiple values from array.
[1, 2, 3, 4].delete_values(1, 3) #=> [2, 4]
Duplicates:
duplicates returns list of duplicate elements.
[1, 1, 2, 2, 2, 3].duplicates #=> [1, 2]
[1, 1, 2, 2, 2, 3].duplicates(3) #=> [2]
From:
from returns the tail of the array from position. Rails Safe
["1", "2", "3"].from(0) #=> ["1", "2", "3"]
["1", "2", "3"].from(1) #=> ["2", "3"]
["1", "2", "3"].from(-1) #=> ["3"]
Groups:
groups splits or iterates over the array in number of groups.
%w(1 2 3 4 5 6 7 8 9 10).groups(3) #=> [["1", "2", "3", "4"], ["5", "6", "7"], ["8", "9", "10"]]
In Groups:
in_groups splits or iterates over the array in number of groups, padding any remaining slots with fill_with unless it is false. Rails Safe
%w(1 2 3 4 5 6 7 8 9 10).in_groups(3) #=> [["1", "2", "3", "4"], ["5", "6", "7", nil], ["8", "9", "10", nil]]
%w(1 2 3 4 5 6 7 8 9 10).in_groups(3, ' ') #=> [["1", "2", "3", "4"], ["5", "6", "7", " "], ["8", "9", "10", " "]]
%w(1 2 3 4 5 6 7 8 9 10).in_groups(3, false) #=> [["1", "2", "3", "4"], ["5", "6", "7"], ["8", "9", "10"]]
In Groups Of:
in_groups_of splits or iterates over the array in groups of size number, padding any remaining slots with fill_with unless it is false. Rails Safe
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3) #=> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["10", nil, nil]]
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3, ' ') #=> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["10", " ", " "]]
%w(1 2 3 4 5 6 7 8 9 10).in_groups_of(3, false) #=> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["10"]]
Probablity:
probability generates a hash mapping each unique element in the array to the relative frequency, i.e. the probablity, of it appearence.
[:a, :b, :c, :c].probability #=> { a: 0.25, b: 0.25, c: 0.5 }
Reject Values:
reject_values delete multiple values from array from a array copy.
[1, 2, 3, 4, 5].reject_values(2,4) #=> [1, 3, 5]
Sample:
sample! deletes a random value and returns that value.
[1, 2, 3, 4, 5].sample! #=> 2
Split:
split divides the array into one or more subarrays based on a delimiting value or the result of an optional block. Rails Safe
[1, 2, 3, 4, 5].split(3) # => [[1, 2], [4, 5]]
(1..10).to_a.split { |i| i % 3 == 0 } # => [[1, 2], [4, 5], [7, 8], [10]]
Strip:
strip and strip! removes blank elements from an array.
["this", "", "that", nil, false].strip #=> ["this", "that"]
"this is a test".split(" ").strip #=> ["this", "is", "a", "test"]
To:
to returns the beginning of the array up to position. Rails Safe
["1", "2", "3"].from(0) #=> ["1"]
["1", "2", "3"].from(1) #=> ["1", "2"]
["1", "2", "3"].from(-1) #=> ["3"]
To Sentence:
to_sentence converts the array to a comma-separated sentence where the last element is joined by the connector word. Rails Safe
Options:
- words_connector: “, ”
- two_words_connector: “ and ”
- last_word_connector: “, and ”
[].to_sentence #=> ""
["one"].to_sentence #=> "one"
["one", "two"].to_sentence #=> "one and two"
["one", "two", "three"].to_sentence #=> "one, two, and three"
["one", "two"].to_sentence(two_words_connector: '-') #=> "one-two"
["one", "two", "three"].to_sentence(words_connector: ' or ', last_word_connector: ' or at least ') #=> "one or two or at least three"
Enumerable
Cluster:
cluster clusters together adjacent elements into a list of sub-arrays.
[2,2,2,3,3,4,2,2,1].cluster { |x| x } #=> [[2, 2, 2], [3, 3], [4], [2, 2], [1]]
Difference:
difference returns the difference of a collection of numbers.
[].difference #=> 0
[].difference(nil) #=> nil
[1,2,3].difference #=> -4
Divisible:
divisible returns the division of a collection of numbers.
[].divisible #=> 0
[].divisible(nil) #=> nil
[16,4,2].divisible #=> 2
Drop Last:
drop_last drops the last number of elements of a collection.
[].drop_last(1) #=> []
[1,2,3].drop_last(1) #=> [1,2]
[1,2,3].drop_last(2) #=> [1]
Drop Last If:
drop_last_if drops the last number of elements of a collection while it meets a criteria.
[].drop_last_if(&:odd?) #=> []
[1,2,3].drop_last_if(&:odd?) #=> [1,2]
[1,2,3,4].drop_last_if(&:odd?) #=> [1,2,3,4]
Exactly:
exactly? returns if there are exactly the number of an element type.
[].exactly?(1) #=> false
[1,2,3].excatly?(3) #=> true
[1,1,3,3].exactly?(2, &:even?) #=> false
Exclude:
exclude? returns true if the collection does not include the object. Rails Safe
[1, 2, 3].exclude?(4) #=> true
[1, 2, 3].exclude?(3) #=> false
Expand:
expand expand all elements of an Enumerable object.
[0, 2..3, 5..7]. #=> [0,[2, 3],[5,6,7]]
Exponential:
exponential returns the exponential of a collection of numbers.
[].exponential #=> 0
[].exponential(nil) #=> nil
[2,3,4].exponential #=> 4096
Frequencies:
frequencies returns a hash of the number of times a value in an array appears.
[].frequencies #=> {}
[1, :symbol, 'string', 3, :symbol, 1].frequencies #=> { 1 => 2, :symbol => 2, 'string' => 1, 3 => 1 }
Incase:
incase? the same as #include? but tested using #=== instead of #==.
[1, 2, "a"].incase?(String) #=> true
[1, 2, "a"].incase?(3) #=> false
Many:
many? returns if collection has more than one element while respecting nil and false as an element. Rails Safe
[].many? #=> false
[1,2,3].many? #=> true
[1, false, nil].many? #=> true
[1,1,3,3].many?(&:even?) #=> false
Max:
max returns the largest value of a collection of numbers.
[].max #=> 0
[].max(nil) #=> nil
[1,2,3].max #=> 3
Min:
min returns the smallest value of a collection of numbers.
[].min #=> 0
[].min(nil) #=> nil
[1,2,3].min #=> 1
Mean:
mean returns the average of a collection of numbers.
[].mean #=> 0
[].mean(nil) #=> nil
[1,2,3].mean #=> 2
Median:
median returns the middle value of a collection of numbers.
[].median #=> 0
[].median(nil) #=> nil
[1,2,6].median #=> 2
[1,2,3,6].median #=> 2.5
Mode:
mode returns the most frequent value of a collection of numbers.
[].mode #=> 0
[].mode(nil) #=> nil
[1,2,3].mode #=> nil
[1,1,2,6].mode #=> 1
Multiple:
multiple returns the multiplication of a collection of numbers.
[].multiple #=> 0
[].multiple(nil) #=> nil
[1,2,3].multiple #=> 6
Range:
range returns the difference between the smallest and largest value of a collection of numbers.
[].range #=> 0
[].range(nil) #=> nil
[1,2,6].range #=> 5
Several:
several? returns if collection has more than one element while not respecting nil and false as an element.
[].several? #=> false
[1,2,3].several? #=> true
[1, false, nil].several? #=> false
[1,1,3,3].several?(&:even?) #=> false
Standard Deviation:
standard_deviation returns the standard deviation of elements of a collection.
[].standard_deviation #=> 0
[].standard_deviation(nil) #=> nil
[1,2,6].standard_deviation #=> 2.6457513110645907
Sum:
sum returns the sum of a collection of numbers. Rails Safe
[].sum #=> 0
[].sum(nil) #=> nil
[1,2,3].sum #=> 6
["foo", "bar"].sum #=> "foobar"
Take Last:
take_last returns the last number of elements of a collection.
[].take_last(1) #=> []
[1,2,3].take_last(1) #=> [3]
[1,2,3].take_last(2) #=> [2,3]
Take Last If:
take_last_if returns the last number of elements of a collection while it meets a criteria.
[].take_last_if(&:odd?) #=> []
[1,2,3].take_last_if(&:odd?) #=> [3]
[1,2,3,4].take_last_if(&:odd?) #=> []
Variance:
variance returns the variance of elements of a collection.
[].variance #=> 0
[].variance(nil) #=> nil
[1,2,6].variance #=> 7
Hash
Assert Valid Keys:
assert_valid_keys raises an error if key is not included in a list of keys. Rails Safe
{}.assert_valid_keys(:foo) #=> {}
{ foo: "bar" }.assert_valid_keys(:foo) #=> { foo: "bar" }
{ foo: "bar", baz: "boz" }.assert_valid_keys(:foo, :boo) #=> raises "ArgumentError: Unknown key: :baz. Valid keys are: :foo, :boo"
Compact:
compact and compact! returns a hash with non nil values. Rails Safe
{}.compact #=> {}
{ foo: nil }.compact #=> {}
{ foo: "bar", baz: false, boo: nil }.compact #=> { foo: "bar", baz: false }
Deep Merge:
deep_merge and deep_merge! returns a new hash with self and other_hash merged recursively. Rails Safe
h1 = { a: true, b: { c: [1, 2, 3] } }
h2 = { a: false, b: { x: [3, 4, 5] } }
h1.deep_merge(h2) #=> { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
Except:
except and except! returns a hash that includes everything but the given keys. Rails Safe
{}.except(:foo) #=> {}
{ foo: 'foo', baz: 'baz', bar: 'bar' }.except(:foo) #=> { baz: 'baz', bar: 'bar' }
{ :foo => 'foo', :baz => 'baz', :bar => 'bar' }.except(:baz, :bar) #=> { :foo => 'foo' }
Nillify:
nillify and nillify! transforms all blank values to nil.
{ a: 1, b: "test", c: nil, d: false, e: "", f: " " }.nillify #=> {a: 1, b: 'test', c: nil, d: nil, e: nil, f: nil}
Only:
only and only! returns only key/value pairs matching certain keys.
{}.only(:foo) #=> {}
{ foo: 'foo', baz: 'baz', bar: 'bar' }.only(:foo) #=> { foo: 'foo' }
{ :foo => 'foo', :baz => 'baz', :bar => 'bar' }.only(:baz, :bar) #=> { :baz => 'baz', :bar => 'bar' }
Rename Keys:
rename_keys and rename_keys! rename the keys of a hash.
{ foo: 'foo', baz: 'baz' }.rename_keys(foo: :bar) #=> { bar: 'foo', baz: 'baz' }
{ foo: 'foo', 'baz' => 'baz' }.rename_keys(foo: :bar, 'baz' => 'tick') #=> { bar: 'foo', tick: 'baz' }
Reverse Merge:
reverse_merge and reverse_merge! merges one hash into other hash. Rails Safe
{}.reverse_merge!(foo: "bar") #=> { foo: "bar" }
{ foo: "bar" }.reverse_merge!(baz: "boo", boo: "bam") #=> { foo: "bar", baz: "boo", boo: "bam" }
Sample:
sample returns a random key-value pair.
sample! deletes a random key-value pair and returns that pair.
h = { a: 1, b: 2, c: 3, d: 4 }
h.sample #=> [:c, 3]
h.sample! #=> [:a, 1]
Sample Key:
sample_key returns a random key.
sample_key! delete a random key-value pair, returning the key.
h = { a: 1, b: 2, c: 3, d: 4 }
h.sample_key #=> :b
h.sample_key! #=> :d
Sample Value:
sample_value returns a random value.
sample_value! delete a random key-value pair, returning the value.
h = { a: 1, b: 2, c: 3, d: 4 }
h.sample_value #=> 1
h.sample_value! #=> 3
Shuffle:
shuffle returns a copy of the hash with values arranged in new random order.
shuffle! returns the hash with values arranged in new random order.
h = { a: 1, b: 2, c: 3, d: 4 }
h.shuffle #=> { b: 2, c: 3, a: 1, d: 4 }
h.shuffle! #=> { d: 4, b: 2, c: 3, a: 1 }
Slice:
slice a hash to include only the given keys. Returns a hash containing the given keys. Rails Safe
slice! replaces the hash with only the given keys. Returns a hash containing the removed key/value pairs. Rails Safe
h = { a: 1, b: 2, c: 3, d: 4 }
h.slice(:a, :b) #=> { a: 1, b: 2 }
h.slice!(:a, :b) #=> { c: 3, d: 4 }
Stringify Keys:
stringify_keys and stringify_keys! converts the hash keys to strings. Rails Safe
{ foo: "foo", "bar" => 'bar' }.stringify_keys #=> { "foo" => "foo", "baz" => "baz" }
Strip:
strip and strip! returns a hash with non nil, false, or blank values.
{}.strip #=> {}
{ foo: nil, baz: false, boo: '', faz: ' ' }.strip #=> {}
{ foo: "bar", baz: false, boo: nil, boz: '', faz: ' ' }.strip #=> { foo: "bar" }
Symbolize Keys:
symbolize_keys and symbolize_keys! converts the hash keys to symbols. Rails Safe
{ foo: "foo", "bar" => "bar" }.symbolize_keys #=> { foo: "foo", baz: "baz" }
Symbolize and Underscore Keys:
symbolize_and_underscore_keys and symbolize_and_underscore_keys! symbolize and underscore hash keys.
{ "firstName" => "foo", "last Name" => "test" }.symbolize_and_underscore_keys #=> { first_name: "foo", last_name: "test" }
Transform Keys:
transform_keys and transform_keys! a new hash with all keys converted using the block operation. Rails Safe
{ foo: "bar", baz: "boo" }.transform_keys { |k| k.to_s.upcase } #=> { "FOO" => "bar", "BAZ" => "boo" }
Transform Values:
transform_values and transform_values! a new hash with all values converted using the block operation. Rails Safe
{ foo: "bar", baz: "boo" }.transform_values { |v| v.to_s.upcase } #=> {foo: "BAR", baz: "BOO" }
Integer
Factorial:
factorial calculate the factorial of an integer.
4.factorial #=> 24
Of:
of is like #times but returns a collection of the yield results.
3.of { |i| "#{i+1}" } #=> ["1", "2", "3"]
Roman:
roman converts this integer to a roman numeral.
49.roman #=> "XLIX"
Time:
time returns a Time object for the given Integer.
3.time #=> "1969-12-31 19:00:03.000000000 -0500"
Numeric
Add:
add returns the sum of two numbers.
4.add(2) #=> 6
Bytes in Bytes:
byte_in_bytes and bytes_in_bytes returns self.
3.bytes_in_bytes #=> 3
Centigrams in Grams:
centigram_in_grams and centigrams_in_grams returns the amount of grams in n centigrams.
3.centigrams_in_grams #=> 0.03
Centimeters in Meters:
centimeter_in_meters and centimeters_in_meters returns the amount of meters in n centimeters.
3.centimeters_in_meters #=> 0.03
Centuries_in_seconds:
century_in_seconds and centuries_in_seconds returns the amount of seconds in n centuries.
3.centuries_in_seconds #=> 9467280000.0
Days in Seconds:
day_in_seconds and days_in_seconds returns the amount of seconds in n days.
3.days_in_seconds #=> 259200
Decades in Seconds:
decade_in_seconds and decades_in_seconds returns the amount of seconds in n decades.
3.decades_in_seconds #=> 946728000.0
Decagrams in Grams:
decagram_in_grams and decagrams_in_grams returns the amount of grams in n decagrams.
3.decagrams_in_grams #=> 30
Decameters in Meters:
decameter_in_meters and decameters_in_meters returns the amount of meters in n decameters.
3.decameters_in_meters #=> 30
Decigrams in Grams:
decigram_in_grams and decigrams_in_grams returns the amount of grams in n decigrams.
3.decigrams_in_grams #=> 0.3
Decimeters in Meters:
decimeter_in_meters and decimeters_in_meters returns the amount of meters in n decimeters.
3.decimeters_in_meters #=> 0.3
Distance:
distance returns the absolute difference between numbers.
5.distance(3) #=> 2
3.distance(5) #=> 2
Divide:
divide returns the division of two numbers.
4.divide(2) #=> 2
Exabytes in Bytes:
exabyte_in_bytes and exabytes_in_bytes returns the amount of bytes in n exabytes.
3.exabytes_in_bytes #=> 3458764513820540928
Feet in Inches:
foot_in_inches and feet_in_inches returns the amount of inches in n feet.
3.feet_in_inches #=> 36
Gigabytes in Bytes:
gigabyte_in_bytes and gigabytes_in_bytes returns the amount of bytes in n gigabytes.
3.gigabytes_in_bytes #=> 3221225472
Grams in Grams:
gram_in_grams and grams_in_grams returns self.
3.grams_in_grams #=> 3
Hectograms in Grams:
hectogram_in_grams and hectograms_in_grams returns the amount of grams in n hectograms.
3.hectograms_in_grams #=> 300
Hectometers in Meters:
hectometer_in_meters and hectometers_in_meters returns the amount of meters in n hectometers.
3.hectometers_in_meters #=> 300
Hours in Seconds:
hour_in_seconds and hours_in_seconds returns the amount of seconds in n hours.
3.hours_in_seconds #=> 10800
Inches in Inches:
inch_in_inches and inches_in_inches returns the amount of inches in n inches.
3.inches_in_inches #=> 3
Kilobytes in Bytes:
kilobyte_in_bytes and kilobytes_in_bytes returns the amount of bytes in n kilobytes.
3.kilobytes_in_bytes #=> 3072
Kilograms in Grams:
kilogram_in_grams and kilograms_in_grams returns the amount of grams in n kilograms.
3.kilograms_in_grams #=> 3000
Kilometers in Meters:
kilometer_in_meters and kilometers_in_meters returns the amount of meters in n kilometers.
3.kilometers_in_meters #=> 3000
Metric Ton in Ounces:
metric_ton_in_ounces and metric_tons_in_ounces returns the amount of grams in n metric_tons.
3.metric_tons_in_ounces #=> 3000000
Megabytes in Bytes:
megabyte_in_bytes and megabytes_in_bytes returns the amount of bytes in n megabytes.
3.megabytes_in_bytes #=> 3145728
Meters in Meters:
meter_in_meters and meters_in_meters returns self.
3.meters_in_meters #=> 3
Miles in Inches:
mile_in_inches and miles_in_inches returns the amount of inches in n miles.
3.miles_in_inches #=> 190080
Millenniums in Seconds:
millennium_in_seconds and millenniums_in_seconds returns the amount of seconds in n millenniums.
3.millenniums_in_seconds #=> 94672800000.0
Milligrams in Grams:
milligram_in_grams and milligrams_in_grams returns the amount of grams in n milligrams.
3.milligrams_in_grams #=> 0.003
Millimeters in Meters:
millimeter_in_meters and millimeters_in_meters returns the amount of meters in n millimeters.
3.millimeters_in_meters #=> 0.003
Minutes in Seconds:
minute_in_seconds and minutes_in_seconds returns the amount of seconds in n minutes.
3.minutes_in_seconds #=> 180
Multiply:
multiply returns the multiplication of two numbers.
4.multiply(2) #=> 8
Multiple Of:
multiple_of? returns true if a number can be evenly divided by n. Rails Safe
9.multiple_of?(3) #=> true
7.multiple_of?(3) #=> false
Nautical Miles in Inches:
nautical_mile_in_inches and nautical_miles_in_inches returns the amount of inches in n nautical miles.
3.nautical_miles_in_inches #=> 218740.26239999998
Negative:
negative? returns true if a number is less than zero.
-1.negative? #=> true
1.negative? #=> false
Ordinal:
ordinal returns the suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. Rails Safe
"1".ordinal #=> "th"
"2".ordinal #=> "nd"
"3".ordinal #=> "rd"
"11".ordinal #=> "th"
Ordinalize:
ordinalize transforms a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. Rails Safe
"1".ordinalize #=> "1th"
"2".ordinalize #=> "2nd"
"3".ordinalize #=> "3rd"
"11".ordinalize #=> "4th"
Ounces in Ounces:
ounce_in_ounces and ounces_in_ounces returns self.
3.ounces_in_ounces #=> 48
Pad:
pad returns a string reprensentation of the number padded with pad_num to a specified length.
3.pad #=> "003"
3.pad(pad_number: 1) #=> "113"
3.pad(precision: 4) #=> "0003"
Pad Precision:
pad_precision returns a string of padded after the '.' to n amount.
Options
- pad_number: 0
- precision: 2
- separator: "..."
3.pad_precision #=> "3.00"
3.5.pad_precision #=> "3.50"
3.pad_precision(pad_number: 1) #=> "3.11"
Petabytes in Bytes:
petabyte_in_bytes and pegabytes_in_bytes returns the amount of bytes in n petabytes.
3.petabytes_in_bytes #=> 3377699720527872
Positive:
positive? returns true if a number is greater than zero.
1.positive? #=> true
-1.positive? #=> false
Pounds in Ounces:
pound_in_ounces and pounds_in_ounces returns the amount of ounces in n pounds.
3.pounds_in_ounces #=> 48
Power:
power returns the nth power of a number.
4.power(2) #=> 16
Root:
root returns the nth root of a number.
4.root(2) #=> 2
Seconds in Seconds:
second_in_seconds and seconds_in_seconds returns self.
3.seconds #=> 3
Stones in Ounces:
stone_in_ounces and stone_in_ounces returns the amount of ounces in n stones.
3.stones_in_ounces #=> 672
Subtract:
subtract returns the difference of two numbers.
4.subtract(2) #=> 2
Terabytes in Bytes:
terabyte_in_bytes and terabytes_in_bytes returns the amount of bytes in n terabytes.
3.terabytes_in_bytes #=> 3298534883328
To Byte:
to_byte_in_bytes converts a byte size from one unit to another unit.
1.to_byte(:byte, :byte) #=> 1 #B
5120.to_byte(:byte, :kilobyte) #=> 5 #MB
1.to_byte(:megabyte, :kilobyte) #=> 1024 #KB
80.to_byte(:megabyte, :gigabyte) #=> 0.078125 #GB
To Currency:
to_currency converts a number to currency string.
Options
- precision: 2
- unit: "$"
3.to_currency #=> "$3.00"
3.1.to_currency #=> "$3.10"
3.11.to_currency #=> "$3.11"
3.11111.to_currency #=> "$3.11"
3.to_currency(unit: "@") #=> "@3.00"
To Length:
to_length converts a length from one unit to another unit.
12.to_length(:inches, :feet) #=> 12 #IN
3000.to_length(:meters, :kilometers) #=> 3 #KM
1.to_length(:feet, :centimeters) #=> 30.479999999999997 #CM
1.to_length(:kilometer, :yards) #=> 1093.6138888888888 #YDS
To Mass:
to_mass converts a mass from one unit to another unit.
16.to_mass(:ounces, :pounds) #=> 1 #LB
1.to_mass(:centigrams, :milligrams) #=> 10 #MG
3.to_mass(:pound, :kilogram) #=> 1.360776 #KG
1.to_mass(:kilograms, :pounds) #=> 2.204625 #LB
To Nearest Value:
to_nearest value return the value in values that is nearest to the number.
5.to_nearest_value([1, 3, 6, 9]) #=> 6
3.5.to_nearest_value([3.0, 3.3, 3.6, 3.9]) #=> 3.6
To Percantage:
to_percentage converts a number to percentage string.
Options
- precision: 2
- unit: "%"
3.to_percentage #=> "3.00%"
3.1.to_percentage #=> "3.10%"
3.11.to_percentage #=> "3.11%"
3.11111.to_percentage #=> "3.11%"
3.to_percentage(unit: "@") #=> "3.00@"
To Temperature:
to_temperature converts a temperature from one unit to another unit.
100.to_temperature(:celsius, :fahrenheit) #=> 212 #F
212.to_temperature(:fahrenheit, :celsius) #=> 100 #C
212.to_temperature(:fahrenheit, :kelvin) #=> 373.15 #K
To Time:
to_time converts a time unit from one unit to another unit.
120.to_time(:seconds, :mintues) #=> 2 #MIN
3.to_time(:hours, :days) #=> 3 #DAY
2.to_time(:days, :seconds) #=> 172800 #SEC
1825.to_time(:days, :years) #=> 4.996577686516085 #YR
Tons in Ounces:
ton_in_ounces and ton_in_ounces returns the amount of ounces in n tons.
3.tons_in_ounces #=> 96000
Weeks in Seconds:
week_in_seconds and weeks_in_seconds returns the amount of seconds in n weeks.
3.weeks_in_seconds #=> 1814400
Within:
within? determines if another number is approximately equal within a given epsilon
10.006.within?(10, 0.1) #=> true
Yards in Inches:
yard_in_inches and yards_in_inches returns the amount of inches in n yards.
3.yards_in_inches #=> 108
Years in Seconds:
year_in_seconds and years_in_seconds returns the amount of seconds in n years.
3.years_in_seconds #=> 94672800.0
Object
Blank:
blank? determines if an object is empty or nil. Rails Safe
"".blank? #=> true
"Awesome Sting".blank? #=> false
False:
false? determines if an object is false.
false.false? #=> true
true.false? #=> false
Falsey:
falsey? determines if an object is false, nil, or 0.
false.falsey? #=> true
true.falsey? #=> false
0.falsey? #=> true
Numeric:
numeric? determines if an object's string value is numeric.
"-32.50".numeric? #=> true
"$2.55".numeric? #=> false
Palindrome:
palindrome? determines if an object is equal when reversed.
"racecar".palindrome? #=> true
12321.palindrome? #=> true
"example".palindrome? #=> false
12345.palindrome? #=> false
Present:
present? determines if an object is not empty or nil. Rails Safe
"Awesome Sting".present? #=> true
"".present? #=> false
Salvage:
salvage returns a placeholder if object is blank?.
" ".salvage #=> "---"
nil.salvage("bar") #=> "bar"
123.salvage #=> 123
True:
true? determines if an object is true.
true.true? #=> true
false.true? #=> false
Truthy:
truthy? determines if an object is true or 1.
true.truthy? #=> true
false.truthy? #=> false
1.truthy? #=> true
Try:
try and try! invokes the public method whose name goes as first argument just like public_send does, except that if the receiver does not respond to it the call returns nil rather than raising an exception. Rails Safe
"example".try(:upcase) #=> "EXAMPLE"
"example".try(:fake_method) #=> nil
Range
Combine:
combine returns two concated ranges.
(1..3).combine(7..9) #=> [1, 2, 3, 7, 8, 9]
Include With Range:
include_with_range? determines if a range includes another range. Rails Safe
(1..5).include?(1..5) # => true
(1..5).include?(2..3) # => true
(1..5).include?(2..6) # => false
Overlaps:
overlaps? determines if two ranges overlap each other. Rails Safe
(1..5).overlaps?(4..6) # => true
(1..5).overlaps?(7..9) # => false
Sample:
sample returns a random element from the range.
(1..5).sample # => 4
Shuffle:
shuffle returns a copy of a shuffled range of elements.
shuffle! returns a shuffled range of elements.
(1..5).shuffle # => [2, 5, 1, 4, 3]
(1..5).shuffle! # => [3, 4, 5, 2, 1]
Within:
within? determines if one range is within another.
(1..5).within?(2..4) # => true
(1..5).within?(4..6) # => false
String
Any:
any? determines if a string includes a set of string(s).
"example string".any?("foo") #=> false
"example string".any?("foo", "string") #=> true
At:
at returns the characters at index position, matching string, or regex. Rails Safe
"example_string".at(0) #=> "e"
"example_string".at(-2) #=> "n"
"example_string".at(1..3) #=> "xam"
"example_string".at("e_s") #=> "e_s"
"example_string".at(/ple/) #=> "ple"
"example_string".at(99) #=> nil
Camelize:
camelize and camelize! transfroms a string to camelcase. Rails Safe
"example_string".camelize #=> "ExampleString"
"example_String".camecase #=> "ExampleString"
"example_string".camelize(:lower) #=> "exampleString"
"example_String".camecase(:lower) #=> "exampleString"
Classify:
classify and classify! creates a class name from a string like Rails does for table names to models. Rails Safe
"example_string".classify #=> "ExampleString"
"example_string/test".classify #=> "ExampleString::Test"
"example_string.test".classify #=> "Test"
Constantize:
constantize converts a string in an object. Rails Safe
"Example::String".constantize #=> Class Object
Dasherize:
dasherize and dasherize! replaces underscores with dashes in the string. Rails Safe
"example_string".dasherize #=> "example-string"
Deconstantize:
deconstantize and deconstantize! removes the rightmost segment from the constant expression in the string. Rails Safe
"Example::String".deconstantize # => "Example"
"::Example::String".deconstantize # => "::Example"
"String".deconstantize # => ""
"::String".deconstantize # => ""
"".deconstantize # => ""
Demodulize:
demodulize and demodulize! removes the module part from the expression in the string. Rails Safe
"Example::String".demodulize #=> "String"
"String".demodulize #=> "String"
Domain:
domain extracts the domain name from a URL.
"http://www.example.com/fake-page".domain #=> "www.example.com"
"example string".domain #=> "example string"
Downcase:
downcase? returns true if all characters are lowercase.
"example".downcase? #=> true
"Example".downcase? #=> false
"EXAMPLE".downcase? #=> false
Ellipsize:
ellipsize truncate a string in the middle.
Options
- offset: 4
- separator: "..."
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ellipsize(30) #=> "0123...WXYZ"
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ellipsize(50) #=> "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ellipsize(30, offset: 2) #=> "01...YZ"
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ellipsize(30, separator: "+++") #=> "0123+++WXYZ"
Exclude:
exclude? returns true if the string does not include the other string. Rails Safe
"example_string".exclude?("exa") #=> false
"example_string".exclude?("xxx") #=> true
First:
first returns the first character. If a limit is supplied, returns a substring from the beginning of the string until it reaches the limit value. If the given limit is greater than or equal to the string length, returns a copy of self. Rails Safe
"example".first #=> "e"
"example".first(0) #=> ""
"example".first(3) #=> "exa"
From:
from returns a substring from the given position to the end of the string. If the position is negative, it is counted from the end of the string. Rails Safe
"example".from(0) #=> "example"
"example".from(3) #=> "mple"
Humanize:
humanize and humanize! transforms a string to a human readable string. Rails Safe
Options
- capitalize: true
"ExampleString".humanize #=> "Example string"
"example_string".humanize #=> "Example string"
"example_string".humanize(capitalize: false) #=> "example string"
Indent:
indent and indent! indents the lines in the receiver. Rails Safe
"example".indent(2) #=> " example"
"example".indent(2, "\t") #=> "\t\texample"
Last:
last returns the last character of the string. If a limit is supplied, returns a substring from the end of the string until it reaches the limit value (counting backwards). If the given limit is greater than or equal to the string length, returns a copy of self. Rails Safe
"example".last #=> "e"
"example".last(0) #=> ""
"example".first(3) #=> "ple"
Mixcase:
mixcase? returns true if characters are mixedcase.
"Example".mixedcase? #=> true
"EXAMPLE".mixedcase? #=> false
"example".mixedcase? #=> false
Ordinal:
ordinal returns the suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. Rails Safe
"1".ordinal #=> "th"
"2".ordinal #=> "nd"
"3".ordinal #=> "rd"
"11".ordinal #=> "th"
Ordinalize:
ordinalize transforms a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. Rails Safe
"1".ordinalize #=> "1th"
"2".ordinalize #=> "2nd"
"3".ordinalize #=> "3rd"
"11".ordinalize #=> "4th"
Parameterize:
parameterize and parameterize! makes string suitable for a dashed url parameter string. Rails Safe
"example_string".parameterize #=> "example-string"
"example_string".parameterize("?") #=> "example?string"
Pollute:
pollute pollutes the space between every letter in a string, so it will be exempt from any impending string searches.
"test".pollute #=> "t^--^--^e^--^--^s^--^--^t^--^--^"
"test".pollute("-") #=> "t-e-s-t-"
Remove:
remove and remove! removes every instance of a string.
"this thing that thing".remove("thing") #=> "this that "
"this thing that them".remove("thing", "them") #=> "this that "
Remove Tags:
remove_tags and remove_tags! removes HTML tags from a string.
"example". #=> "example"
"<a href='http://example.com'>click</a>". #=> "click"
"this is <b>bold</b> and <em>emphatic</em>". #=> "this is bold and emphatic"
Sample:
sample and sample! deletes a random value and returns that value.
"this thing that".sample #=> "thing"
"this thing that".sample(" thing ") #=> "that"
Shift:
shift and shift! removes the first instance of a string.
"this thing that thing".shift("thing") #=> "this that thing"
"this thing that thing".shift("this", "that") #=> " thing thing"
Shuffle:
shuffle and shuffle! randomizes the characters in a string.
"ruby rules".sample #=> "e lybrsuur"
"ruby rules".sample! #=> "rblse syru"
Slugify:
slugify and slugify! generates a permalink-style string, with odd characters removed.
"example".slugify #=> "example"
"example string".slugify #=> "example-string"
"Example string @@@ test!".slugify #=> "example-string-test"
Squish:
squish and squish! returns the string, first removing all whitespace on both ends of the string, and then changing remaining consecutive whitespace groups into one space each. Rails Safe
"example string".squish #=> "example string"
"example \n \t string".squish #=> "example string"
" example string ".squish #=> "example string"
Titleize:
titleize and titleize! capitalizes each word in a string. Rails Safe
"example string".titleize #=> "Example String"
"example_string".titleize #=> "Example String"
"ExampleString".titleize #=> "Example String"
To:
to returns a substring from the beginning of the string to the given position. If the position is negative, it is counted from the end of the string. Rails Safe
"example".to(0) #=> "example"
"example".to(3) #=> "exam"
"example".to(-2) #=> "exampl"
Truncate:
truncate a given text after a given length if text is longer than length. Rails Safe
Options
- omission: "..."
- separator: " "
"example string".truncate(3) #=> "..."
"example string".truncate(6) #=> "exa..."
"example string".truncate(12, separator: " ") #=> "example..."
"example string".truncate(13, omission: "... (more)") #=> "exa... (more)"
"example string".truncate(15) #=> "example string"
Truncate Words:
truncate_words truncates a given text after a given number of words. Rails Safe
Options
- omission: "..."
- separator: " "
"example string test".truncate_words(1) #=> "example..."
'Once<br>upon<br>a<br>time<br>in<br>a<br>world'.truncate_words(5, separator: '<br>') #=> "Once<br>upon<br>a<br>time<br>in..."
'And they found that many people were sleeping better.'.truncate_words(5, omission: '... (continued)') #=> "And they found that many... (continued)"
Underscore:
underscore and underscore! transforms a string to snakecase. Rails Safe
"ExampleString".underscore #=> "example_string"
"exampleString".underscore #=> "example_string"
"ExampleString::Test".underscore #=> "example_string/test"
Unpollute:
unpollute removes the default or custom pollution character. Can also be used to remove an unwanted character.
"t^--^--^e^--^--^s^--^--^t^--^--^".unpollute #=> "test"
"t-e-s-t-".unpollute #=> "test"
Upcase:
upcase? returns true if all characters are uppercase.
"EXAMPLE".upcase? #=> true
"example".upcase? #=> false
"Example".upcase? #=> false
Time
Note: also works with Date class.
Format:
format converts a Date or Time object to format it using a human readable string.
Rules
- Characters: a-z 0-9 _
- Characters can only be used to generate a format part
Date.today.format("year") #=> "2014"
Time.now.format("month_name day, year hour:minute ampm") #=> "January 09, 2014 02:31 pm"
| Name | Key | Equivalent strftime |
Result |
|---|---|---|---|
| Month - digits zero-padded | m or month or month_padded |
%m | (01..12) |
| Month - digits unpadded | mm or Month or month_unpadded |
%-m | (1..12) |
| Month - digits blank-padded | mmm or MONTH or day_blank |
%_m | ( 1..12) |
| Month - name | mmmm or month_name |
%B | January |
| Month - name abbreviated | mmmmm or month_name_abbr |
%b | Jan |
| Day - digits zero-padded | d or day or day_padded |
%d | (01..31) |
| Day - digits unpadded | dd or Day or day_unpadded |
%-d | (1..31) |
| Day - digits blank-padded | ddd or DAY or day_blank |
%_d | ( 1..31) |
| Day - digits of the year | dddd or day_of_the_year |
%j | (001..366) |
| Week - starting monday | wwwww or week |
%M | (00..53) |
| Week - starting sunday | wwwwww or weekday_offset |
%M | (00..53) |
| Weekday - starting monday | w or weekday |
%M | (1..7) |
| Weekday - starting sunday | ww or weekday |
%M | (0..6) |
| Weekday - name | www or weekday_name |
%M | Sunday |
| Weekday - name abbreviated | wwww or weekday_name_abbr |
%M | Sun |
| Year - digits two | yy or yr |
%y | (00..99) |
| Year - digits four | yyyy or year |
%Y | 1999 |
| Hour - digits zero-padded | h or hour or hour_padded |
%H | (00..23) |
| Hour - digits blank-padded | hh or HOUR or hour_blank |
%k | ( 0..23) |
| Hour - digits zero-padded | hhh or hour_imperical or hour_imperical_padded |
%I | (01..12) |
| Hour - digits blank-padded | hhhh or HOUR_IMPERICAL or hour_imperical_blank |
%l | ( 1..12) |
| Minute - minute | n or minute |
%M | (00..59) |
| Second - second | s or second |
%S | (00..60) |
| Meridian - lowercase | ampm or meridian |
%p | am..pm |
| Meridian - uppercase | AMPM or MERIDIAN |
%P | AM..PM |
| Time Zone - time zone | z or time_zone |
%z | +0900 |
| Time Zone - hour and minute offset | zz or time_zone_offset |
%z | +09:00 |
| Time Zone - hour, minute and second offset | zzz or time_zone_offset_full |
%z | +09:00:00 |
To Format / Stamp:
to_format and stamp converts a Date or Time object to a predefined format.
For a full list check out the time extention file.
Time.now.to_format(:year) #=> "2014"
Time.now.stamp(:datetime) #=> "January 09, 2014 02:31 pm"
| Name | Key | Equivalent strftime |
Result |
|---|---|---|---|
| Month - digits zero-padded | :month or :month_padded |
%A | (01..12) |
| Month - digits unpadded | :month_unpadded |
%a | (1..12) |
| Month - digits blank-padded | :month_blank |
%a | ( 1..12) |
| Month - name | :month_name |
%A | January |
| Month - name abbreviated | :month_name_abbr |
%a | Jan |
| Weekday - digits zero-padded | :weekday_padded |
%A | (01..31) |
| Weekday - digits unpadded | :weekday_unpadded |
%a | (1..31) |
| Weekday - digits blank-padded | :weekday_blank |
%a | ( 1..31) |
| Weekday - name | :weekday_name |
%A | Sunday |
| Weekday - name abbreviated | :weekday_name_abbr |
%a | Sun |
| Year - digits two | :yr |
%y | (00..99) |
| Year - digits four | :year |
%Y | 1999 |
| Hour - digits zero-padded | :hour or :hour_padded |
%H | (00..23) |
| Hour - digits blank-padded | :hour_blank |
%k | ( 0..23) |
| Hour - digits zero-padded imperical | :hour_imperical_padded |
%I | (01..12) |
| Hour - digits blank-padded imperical | :hour_imperical_blank |
%l | ( 1..12) |
| Minute - minute | :minute |
%M | (00..59) |
| Second - second | :second |
%S | (00..60) |
| Time Zone - time zone | :time_zone |
%z | +0900 |
| Time Zone - hour and minute offset | :time_zone_offset |
%z | +09:00 |
| Time Zone - hour, minute and second offset | :time_zone_offset_full |
%z | +09:00:00 |
| Date - name | :date |
%B %-d, %Y | January 9, 2014 |
| Date - name abbreviated | :date_abbr |
%b %-d, %Y | Jan 9, 2014 |
| Date - iso | :date_iso |
%Y-%m-%d | 2014-01-09 |
| Datetime - name | :datetime |
%B %-d, %Y %H:%M | January 9, 2014 00:31 |
| Datetime - name abbreviated | :datetime_abbr |
%b %-d, %Y %H:%M | Jan 9, 2014 00:31 |
| Datetime - iso | :datetime_iso |
%Y-%m-%d %H:%M | 2014-01-09 00:31 |
| Datetime - name imperical | :datetime_imperical |
%B %-d, %Y %H:%M | January 9, 2014 12:31 am |
| Datetime - name abbreviated imperical | :datetime_imperical_abbr |
%b %-d, %Y %H:%M | Jan 9, 2014 12:31 am |
| Datetime - iso imperical | :datetime_imperical_iso |
%Y-%m-%d %H:%M | 2014-01-09 12:31 am |
| Datetime - name time zone | :datetime_tzn |
%B %-d, %Y %H:%M %Z | January 9, 2014 00:31 UTC |
| Datetime - name abbreviated time zone | :datetime_abbr_tzn |
%b %-d, %Y %H:%M %Z | Jan 9, 2014 00:31 UTC |
| Datetime - iso time zone | :datetime_iso_tzn |
%Y-%m-%d %H:%M %z | 2014-01-09 00:31 +0000 |
| Datetime - name imperical time zone | :datetime_imperical_tzn |
%B %-d, %Y %H:%M %Z | January 9, 2014 12:31 am UTC |
| Datetime - name abbreviated imperical time zone | :datetime_imperical_abbr_tzn |
%b %-d, %Y %H:%M %Z | Jan 9, 2014 12:31 am UTC |
| Datetime - iso imperical time zone | :datetime_imperical_iso_tzn |
%Y-%m-%d %H:%M %z | 2014-01-09 12:31 am +0000 |
| Day - name | :day |
%B %-d | January 9 |
| Day - name abbreviated | :day_abbr |
%b %-d | Jan 9 |
| Day - iso | :day_iso |
%m-%d | 01-09 |
| Daytime - name | :daytime |
%B %-d %H:%M | January 9 00:31 |
| Daytime - name abbreviated | :daytime_abbr |
%b %-d %H:%M | Jan 9 00:31 |
| Daytime - iso | :daytime_iso |
%m-%d %H:%M | 01-09 00:31 |
| Daytime - name imperical | :daytime_imperical |
%B %-d %H:%M | January 9 12:31 am |
| Daytime - name abbreviated imperical | :daytime_imperical_abbr |
%b %-d %H:%M | Jan 9 12:31 am |
| Daytime - iso imperical | :daytime_imperical_iso |
%m-%d %H:%M | 01-09 12:31 am |
| Time - zero-padded | :time or :time_padded |
%H:%M | 00:31 |
| Time - blank-padded | :time_blank |
%k:%M %z | 0:31 |
| Time - with time zone | :time_tz |
%H:%M %z | 00:31 +0000 |
| Time - with time zone name | :time_tzn |
%H:%M %Z | 00:31 UTC |
Contributing
- Fork it ( http://github.com/
/active_object/fork ) - Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
