creative_rails_utilities 0.4.1 → 0.4.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df58ca7b40c5342a60e7870b8dc7eb7981a5658e
4
- data.tar.gz: ac593955b0f0414407b126202593840fd96b12a1
3
+ metadata.gz: 620bfb4a460b454df919b37aab5763681d8d40aa
4
+ data.tar.gz: 219d14e7b22adec3b646e0228b1ae9526d27308f
5
5
  SHA512:
6
- metadata.gz: 96eb6862958090754f5c7d6dc40a0a32ff52db575dbfc594ee2006d0c4939c512a9ce114c80784907a8ff2fe54d79661fbd822b67a6803e71327c3224dcd848d
7
- data.tar.gz: 472ec2660a18dda63c7eb0fee2694fa287cc5cd1067cf525add8d2d5ebf23dd1d60826bc29a195b34583fe6c7141f2d12d0616ced5c495746c5d65361976ece8
6
+ metadata.gz: f769642de2b237235ccdb934993bbdca02b0932008fc8dc1b2c1a56a5d355d935e11c8c7c8eecbd985b4d3715723427fb7dd058372a1311d349753be18d39a68
7
+ data.tar.gz: 734ce1eaed645703c867ac60d4defcec7b43996197dceb3f8da9ae4d9ef80966376513d4a3ac8eae18a90441a928a978c22d2da0f4f30290e54e79d339f9a7fa
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ spec/failures.txt
data/CHANGELOG.md CHANGED
@@ -8,6 +8,11 @@ This project adheres to [Semantic Versioning](http://semver.org/).
8
8
  -
9
9
  ```
10
10
 
11
+ ## [0.4.2] - 2016-06-17
12
+ ### Added
13
+ - Object.chain_if
14
+ - Object#chain_if
15
+
11
16
  ## [0.4.1] - 2016-05-02
12
17
  ### Added
13
18
  - Numeric#safe_per
data/README.md CHANGED
@@ -69,6 +69,7 @@ some_hash.fast_sort_keys #=> some_sorted_hash
69
69
  # integer into letters
70
70
  1.to_s26 #=> "a"
71
71
  28.to_s26 #=> "ab"
72
+ # NB, not to be confused with 28.to_s(26) which operates as base (n) interpretation and starts with numbers.
72
73
  ```
73
74
 
74
75
  ```ruby
@@ -105,6 +106,25 @@ some_hash.fast_sort_keys #=> some_sorted_hash
105
106
  (Time.zone.now.to_i - 3.minutes.ago.to_i).to_time_hash #=> {days: 0, hours: 0, minutes: 3, seconds: 0}
106
107
  ```
107
108
 
109
+ ##### Object
110
+
111
+ __Object.chain_if(switch, operator, *args)__
112
+ __Object#chain_if(switch, operator, *args)__
113
+ ```rb
114
+ # Allows smart conditional chaining of method calls or Procs
115
+ # Works on any type of object, class or instance
116
+
117
+ String.chain_if(true, :new, "abc") #=> "abc"
118
+ String.chain_if(false, :new, "abc") #=> String
119
+ String.chain_if(true, Proc.new{|a| a.new("abc") }) #=> "abc"
120
+ String.chain_if(false, Proc.new{|a| a.new("abc") }) #=> String
121
+
122
+ 1.chain_if(false, Proc.new{raise}, 0).chain_if("yes", :*, 2).chain_if(!nil, Proc.new{|a| a.to_s}) #=> "2"
123
+ # Here `chain_if(false, Proc.new{raise}, 0)` would raise, but it is set to false, so it is skipped.
124
+ # `chain_if("yes", :*, 2)` multiplies by 2, and is ON (since "yes" is truthy)
125
+ # Finally, `chain_if(!nil, Proc.new{|a| a.to_s})` turns result to a string and also is ON.
126
+ ```
127
+
108
128
  ##### String
109
129
 
110
130
  ```ruby
@@ -0,0 +1,36 @@
1
+ class Object
2
+
3
+ def self.chain_if(switch, operator, *args)
4
+ raise_chain_if_argument_error unless operator.class == Proc || operator.respond_to?(:to_sym)
5
+
6
+ return self unless switch
7
+
8
+ if operator.class == Proc
9
+ operator.call(self)
10
+ elsif operator.respond_to?(:to_sym)
11
+ return self.public_send(operator.to_sym, *args)
12
+ else
13
+ raise_chain_if_argument_error
14
+ end
15
+ end
16
+
17
+ def chain_if(switch, operator, *args)
18
+ raise_chain_if_argument_error unless operator.class == Proc || operator.respond_to?(:to_sym)
19
+
20
+ return self unless switch
21
+
22
+ if operator.class == Proc
23
+ operator.call(self)
24
+ elsif operator.respond_to?(:to_sym)
25
+ return self.public_send(operator.to_sym, *args)
26
+ else
27
+ raise_chain_if_argument_error
28
+ end
29
+ end
30
+
31
+ private
32
+ def raise_chain_if_argument_error
33
+ raise ArgumentError.new(":operator argument is bad, use a Proc ar a Symbol.")
34
+ end
35
+
36
+ end
@@ -1,3 +1,3 @@
1
1
  module CreativeRailsUtilities
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -8,6 +8,7 @@ require "creative_rails_utilities/error_helper"
8
8
  require "creative_rails_utilities/hash"
9
9
  require "creative_rails_utilities/date"
10
10
  require "creative_rails_utilities/numeric"
11
+ require "creative_rails_utilities/object"
11
12
  require "creative_rails_utilities/string"
12
13
  require "creative_rails_utilities/version"
13
14
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: creative_rails_utilities
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Creative
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -175,6 +175,7 @@ files:
175
175
  - lib/creative_rails_utilities/error_helper.rb
176
176
  - lib/creative_rails_utilities/hash.rb
177
177
  - lib/creative_rails_utilities/numeric.rb
178
+ - lib/creative_rails_utilities/object.rb
178
179
  - lib/creative_rails_utilities/railtie.rb
179
180
  - lib/creative_rails_utilities/string.rb
180
181
  - lib/creative_rails_utilities/version.rb