footing 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,3 +4,7 @@ group :development do
4
4
  gem "pry"
5
5
  gem "yard"
6
6
  end
7
+
8
+ group :test do
9
+ gem "rspec"
10
+ end
data/Gemfile.lock CHANGED
@@ -2,11 +2,20 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  coderay (1.0.7)
5
+ diff-lcs (1.1.3)
5
6
  method_source (0.8)
6
7
  pry (0.9.10)
7
8
  coderay (~> 1.0.5)
8
9
  method_source (~> 0.8)
9
10
  slop (~> 3.3.1)
11
+ rspec (2.11.0)
12
+ rspec-core (~> 2.11.0)
13
+ rspec-expectations (~> 2.11.0)
14
+ rspec-mocks (~> 2.11.0)
15
+ rspec-core (2.11.1)
16
+ rspec-expectations (2.11.2)
17
+ diff-lcs (~> 1.1.3)
18
+ rspec-mocks (2.11.1)
10
19
  slop (3.3.2)
11
20
  yard (0.8.2.1)
12
21
 
@@ -15,4 +24,5 @@ PLATFORMS
15
24
 
16
25
  DEPENDENCIES
17
26
  pry
27
+ rspec
18
28
  yard
data/README.md CHANGED
@@ -70,8 +70,16 @@ Footing::String.escape "foo", "o" # => "f\\o\\o"
70
70
 
71
71
  ## Kick the tires
72
72
 
73
- * `git clone git://github.com/hopsoft/footing.git`
74
- * `cd /path/to/footing`
75
- * `bundle`
76
- * `./console`
77
- * `Footing.patch! String, Footing::String`
73
+ 1. `git clone git://github.com/hopsoft/footing.git`
74
+ 1. `cd /path/to/footing`
75
+ 1. `bundle`
76
+ 1. `./console`
77
+ 1. `Footing.patch! String, Footing::String`
78
+
79
+ or
80
+
81
+ 1. `gem install footing`
82
+ 1. `irb`
83
+ 1. `require 'rubygems'`
84
+ 1. `require 'footing'`
85
+ 1. `Footing.patch! String, Footing::String`
@@ -0,0 +1,5 @@
1
+ module Footing
2
+ module Array
3
+
4
+ end
5
+ end
@@ -1,30 +1,23 @@
1
1
  module Footing
2
2
  module Hash
3
3
 
4
- def self.included(mod)
5
- mod.send :include, InstanceMethods
6
- end
7
-
8
- module InstanceMethods
9
-
10
- # Rekeys the Hash by invoking a method on the existing keys
11
- # and uses the return value as the new key.
12
- #
13
- # NOTE: Creates and return a new Hash.
14
- #
15
- # Example:
16
- # h = { [1] => "short", [1,2] => "medium", [1,2,3] => "long" }
17
- # h.rekey(:length) # => { 1 => "short", 2 => "medium", 3 => "long" }
18
- #
19
- # @param [Symbol] name The method name to invoke on the existing keys.
20
- # @return [Hash] A new Hash that has been re-keyed.
21
- def rekey(method_name)
22
- inject({}) do |new_hash, (key, value)|
23
- new_hash[key.send(method_name)] = value
24
- new_hash
25
- end
4
+ # Rekeys the Hash by invoking a method on the existing keys
5
+ # and uses the return value as the new key.
6
+ #
7
+ # NOTE: Creates and return a new Hash.
8
+ #
9
+ # Example:
10
+ # h = { [1] => "short", [1,2] => "medium", [1,2,3] => "long" }
11
+ # h.rekey(:length) # => { 1 => "short", 2 => "medium", 3 => "long" }
12
+ #
13
+ # @param [Symbol] name The method name to invoke on the existing keys.
14
+ # @return [Hash] A new Hash that has been re-keyed.
15
+ def rekey(method_name)
16
+ inject({}) do |new_hash, (key, value)|
17
+ new_hash[key.send(method_name)] = value
18
+ new_hash
26
19
  end
27
-
28
20
  end
21
+
29
22
  end
30
23
  end
@@ -1,25 +1,17 @@
1
1
  module Footing
2
2
  module Kernel
3
3
 
4
- def self.included(mod)
5
- mod.send :include, InstanceMethods
6
- end
7
-
8
- module InstanceMethods
9
-
10
- # Safely evals text inside of a sandbox.
11
- # @see http://phrogz.net/programmingruby/taint.html Ruby safe level description.
12
- # @param [String] text The text to eval.
13
- # @param [Integer] level The safe level to apply.
14
- # @return [Object]
15
- def safe_eval(text, level=4)
16
- sandbox = lambda do
17
- $SAFE = level
18
- eval(text.to_s)
19
- end
20
- sandbox.call
4
+ # Safely evals text inside of a sandbox.
5
+ # @see http://phrogz.net/programmingruby/taint.html Ruby safe level description.
6
+ # @param [String] text The text to eval.
7
+ # @param [Integer] level The safe level to apply.
8
+ # @return [Object]
9
+ def safe_eval(text, level=4)
10
+ sandbox = lambda do
11
+ $SAFE = level
12
+ eval(text.to_s)
21
13
  end
22
-
14
+ sandbox.call
23
15
  end
24
16
 
25
17
  end
@@ -1,46 +1,38 @@
1
1
  module Footing
2
2
  module Numeric
3
3
 
4
- def self.included(mod)
5
- mod.send :include, InstanceMethods
4
+ # Returns a positive representation of the number.
5
+ def positive
6
+ return self if self >= 0
7
+ flip_sign
6
8
  end
7
9
 
8
- module InstanceMethods
9
-
10
- # Returns a positive representation of the number.
11
- def positive
12
- return self if self >= 0
13
- flip_sign
14
- end
15
-
16
- # Returns a negative representation of the number.
17
- def negative
18
- return self if self < 0
19
- flip_sign
20
- end
21
-
22
- # Flips the sign on the number making it either either positive or negative.
23
- def flip_sign
24
- self * -1
25
- end
10
+ # Returns a negative representation of the number.
11
+ def negative
12
+ return self if self < 0
13
+ flip_sign
14
+ end
26
15
 
27
- # Returns the percentage that this number is of the passed number.
28
- # @example
29
- # 8.percent_of(10) # => 80.0
30
- # @param [Numeric] number The number to calculate the percentage with
31
- def percent_of(number)
32
- percent = (self.to_f / number.to_f) * 100 if number > 0
33
- percent ||= 0.0
34
- end
16
+ # Flips the sign on the number making it either either positive or negative.
17
+ def flip_sign
18
+ self * -1
19
+ end
35
20
 
36
- # Rounds the number to a certain number of decimal places.
37
- # @example
38
- # 1.784329.round_to(1) # => 1.8
39
- # @param [Numeric] decimal_places The number of decimal places to round to
40
- def round_to(decimal_places)
41
- (self * 10**decimal_places).round.to_f / 10**decimal_places
42
- end
21
+ # Returns the percentage that this number is of the passed number.
22
+ # @example
23
+ # 8.percent_of(10) # => 80.0
24
+ # @param [Numeric] number The number to calculate the percentage with
25
+ def percent_of(number)
26
+ percent = (self.to_f / number.to_f) * 100 if number > 0
27
+ percent ||= 0.0
28
+ end
43
29
 
30
+ # Rounds the number to a certain number of decimal places.
31
+ # @example
32
+ # 1.784329.round_to(1) # => 1.8
33
+ # @param [Numeric] decimal_places The number of decimal places to round to
34
+ def round_to(decimal_places)
35
+ (self * 10**decimal_places).round.to_f / 10**decimal_places
44
36
  end
45
37
 
46
38
  end
@@ -1,26 +1,19 @@
1
1
  module Footing
2
2
  module Object
3
3
 
4
- def self.included(mod)
5
- mod.send :include, InstanceMethods
6
- end
7
-
8
- module InstanceMethods
9
-
10
- # Returns the eigen class for the object.
11
- def eigen
12
- eigen = class << self
13
- self
14
- end
15
- rescue Exception => ex
16
- nil
17
- end
18
-
19
- # Indicates if the object has an eigen class.
20
- def has_eigen?
21
- !eigen.nil?
4
+ # Returns the eigen class for the object.
5
+ def eigen
6
+ eigen = class << self
7
+ self
22
8
  end
9
+ rescue Exception => ex
10
+ nil
11
+ end
23
12
 
13
+ # Indicates if the object has an eigen class.
14
+ def has_eigen?
15
+ !eigen.nil?
24
16
  end
17
+
25
18
  end
26
19
  end
@@ -1,33 +1,31 @@
1
1
  module Footing
2
2
  module String
3
3
 
4
- def self.included(mod)
5
- mod.extend ClassMethods
6
- mod.send :include, InstanceMethods
4
+ ## Generates a random string (upcase alpha-numeric)
5
+ ## Returns a string with the length provided, defaulting to 12 chars
6
+ def random_key(length=12)
7
+ @chars ||= [(0..9).to_a, ('A'..'Z').to_a].flatten
8
+ (1..length).map{ |i| @chars.sample }.join
7
9
  end
8
10
 
9
- module ClassMethods
10
-
11
- ## Generates a random string (upcase alpha-numeric)
12
- ## Returns a string with the length provided, defaulting to 12 chars
13
- def random(length=12)
14
- chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
15
- (0...length).map { chars.split('')[rand(chars.length)] }.join
11
+ # Escapes a series of chars in the current string.
12
+ # NOTE: A new string is returned.
13
+ def escape(*chars)
14
+ gsub(/(?<!\\)(#{chars.join("|")})/) do |char|
15
+ "\\" + char
16
16
  end
17
-
18
17
  end
19
18
 
20
- module InstanceMethods
21
-
22
- # Escapes a series of chars in the current string.
23
- # NOTE: A new string is returned.
24
- def escape(*chars)
25
- gsub(/(?<!\\)(#{chars.join("|")})/) do |char|
26
- "\\" + char
27
- end
28
- end
19
+ # Converts a word with underscores into a sentance with a capitalized first word.
20
+ def humanize
21
+ self.downcase.gsub(/_/, " ").capitalize
22
+ end
29
23
 
24
+ # Similar to humanize but it capitalizes each word
25
+ def titleize
26
+ self.split('_').map(&:capitalize).join(' ')
30
27
  end
28
+ alias :titlecase :titleize
31
29
 
32
30
  end
33
31
  end
data/lib/footing.rb CHANGED
@@ -1,16 +1,18 @@
1
1
  module Footing
2
2
 
3
- # Applies all Footing patches.
4
- def self.patch_all!
5
- list = [
3
+ def self.modules
4
+ [
6
5
  "Kernel",
7
6
  "Object",
8
7
  "String",
9
8
  "Numeric",
10
9
  "Hash"
11
10
  ]
11
+ end
12
12
 
13
- list.each do |name|
13
+ # Applies all Footing patches.
14
+ def self.patch_all!
15
+ modules.each do |name|
14
16
  context = Object.const_get(name)
15
17
  footing = Footing.const_get(name)
16
18
  patch! context, footing
@@ -35,7 +37,12 @@ module Footing
35
37
  context.send :include, extension
36
38
  end
37
39
 
38
- # Creates class methods for all InstanceMethods in the module.
40
+ # Creates util methods for all Footing patches.
41
+ def self.util_all!
42
+ modules.each { |mod| util! Footing.const_get(mod) }
43
+ end
44
+
45
+ # Creates class methods for all instance methods in the module.
39
46
  # This allows users to invoke utility methods rather than monkey patching if they so desire.
40
47
  # @param [Module] mod The Module to setup util methods for.
41
48
  def self.util!(mod)
@@ -50,9 +57,9 @@ module Footing
50
57
  self
51
58
  end
52
59
 
53
- mod.const_get("InstanceMethods").instance_methods(false).each do |method|
54
- eigen.send :define_method, method do |value, *args|
55
- proxy_eigen.instance_method(method).bind(value).call(*args)
60
+ mod.instance_methods(false).each do |method|
61
+ eigen.send :define_method, method do |*args|
62
+ proxy_eigen.instance_method(method).bind(args.first || proxy).call(*args)
56
63
  end
57
64
  end
58
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: footing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-07-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! " Footing provides some sanity for monkey patching practices.\n
15
15
  \ It's also a utility lib that contains additional functionality for core objects
@@ -20,6 +20,7 @@ executables: []
20
20
  extensions: []
21
21
  extra_rdoc_files: []
22
22
  files:
23
+ - lib/extensions/array.rb
23
24
  - lib/extensions/hash.rb
24
25
  - lib/extensions/kernel.rb
25
26
  - lib/extensions/numeric.rb