fuby 0.0.1

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.
Files changed (222) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +29 -0
  7. data/Rakefile +8 -0
  8. data/VERSION +1 -0
  9. data/fuby.gemspec +21 -0
  10. data/lib/fuby.rb +1 -0
  11. data/lib/fuby/abbreviation.rb +20 -0
  12. data/lib/fuby/alias_method.rb +13 -0
  13. data/lib/fuby/all.rb +11 -0
  14. data/lib/fuby/and.rb +9 -0
  15. data/lib/fuby/any.rb +11 -0
  16. data/lib/fuby/attributes.rb +17 -0
  17. data/lib/fuby/bind.rb +21 -0
  18. data/lib/fuby/class_attributes.rb +39 -0
  19. data/lib/fuby/deep.rb +1 -0
  20. data/lib/fuby/deep_each.rb +14 -0
  21. data/lib/fuby/define_instance_method.rb +18 -0
  22. data/lib/fuby/define_missing_method.rb +36 -0
  23. data/lib/fuby/define_object_method.rb +18 -0
  24. data/lib/fuby/define_tok.rb +11 -0
  25. data/lib/fuby/descendants.rb +15 -0
  26. data/lib/fuby/dimension.rb +23 -0
  27. data/lib/fuby/drop.rb +20 -0
  28. data/lib/fuby/drop_until.rb +18 -0
  29. data/lib/fuby/drop_while.rb +15 -0
  30. data/lib/fuby/each.rb +2 -0
  31. data/lib/fuby/each_with_index_or_key.rb +19 -0
  32. data/lib/fuby/eql.rb +1 -0
  33. data/lib/fuby/eql_componentwise.rb +13 -0
  34. data/lib/fuby/equivalence.rb +13 -0
  35. data/lib/fuby/eval.rb +54 -0
  36. data/lib/fuby/extend.rb +13 -0
  37. data/lib/fuby/format.rb +9 -0
  38. data/lib/fuby/include.rb +13 -0
  39. data/lib/fuby/index_or_key.rb +19 -0
  40. data/lib/fuby/instance_attributes.rb +39 -0
  41. data/lib/fuby/intercept.rb +27 -0
  42. data/lib/fuby/invert.rb +16 -0
  43. data/lib/fuby/longest_common.rb +16 -0
  44. data/lib/fuby/matches.rb +11 -0
  45. data/lib/fuby/matches_componentwise.rb +11 -0
  46. data/lib/fuby/matches_part_of.rb +16 -0
  47. data/lib/fuby/matches_prefix_of.rb +11 -0
  48. data/lib/fuby/matches_suffix_of.rb +13 -0
  49. data/lib/fuby/member.rb +11 -0
  50. data/lib/fuby/merge.rb +20 -0
  51. data/lib/fuby/merge_css.rb +32 -0
  52. data/lib/fuby/method_added_as.rb +1 -0
  53. data/lib/fuby/method_added_as_binary_operator.rb +16 -0
  54. data/lib/fuby/method_added_as_filter.rb +19 -0
  55. data/lib/fuby/new.rb +16 -0
  56. data/lib/fuby/not.rb +25 -0
  57. data/lib/fuby/opposite.rb +29 -0
  58. data/lib/fuby/or.rb +9 -0
  59. data/lib/fuby/otherwise.rb +18 -0
  60. data/lib/fuby/part_of.rb +16 -0
  61. data/lib/fuby/plus.rb +10 -0
  62. data/lib/fuby/pop.rb +11 -0
  63. data/lib/fuby/pop_if.rb +15 -0
  64. data/lib/fuby/pop_options.rb +15 -0
  65. data/lib/fuby/pop_unless.rb +11 -0
  66. data/lib/fuby/pop_until.rb +11 -0
  67. data/lib/fuby/pop_while.rb +11 -0
  68. data/lib/fuby/prefix_of.rb +14 -0
  69. data/lib/fuby/prefixes.rb +11 -0
  70. data/lib/fuby/prepend.rb +11 -0
  71. data/lib/fuby/private.rb +11 -0
  72. data/lib/fuby/protected.rb +11 -0
  73. data/lib/fuby/public.rb +11 -0
  74. data/lib/fuby/push.rb +1 -0
  75. data/lib/fuby/push_options.rb +9 -0
  76. data/lib/fuby/random.rb +31 -0
  77. data/lib/fuby/self_and_descendants.rb +15 -0
  78. data/lib/fuby/shift.rb +11 -0
  79. data/lib/fuby/shift_if.rb +12 -0
  80. data/lib/fuby/shift_options.rb +11 -0
  81. data/lib/fuby/shift_unless.rb +12 -0
  82. data/lib/fuby/shift_until.rb +12 -0
  83. data/lib/fuby/shift_while.rb +16 -0
  84. data/lib/fuby/splat.rb +11 -0
  85. data/lib/fuby/strip.rb +24 -0
  86. data/lib/fuby/subclass.rb +22 -0
  87. data/lib/fuby/submodule.rb +22 -0
  88. data/lib/fuby/suffix_of.rb +19 -0
  89. data/lib/fuby/suffixes.rb +11 -0
  90. data/lib/fuby/take.rb +20 -0
  91. data/lib/fuby/take_until.rb +17 -0
  92. data/lib/fuby/take_while.rb +14 -0
  93. data/lib/fuby/tap.rb +28 -0
  94. data/lib/fuby/to.rb +1 -0
  95. data/lib/fuby/to_boolean.rb +32 -0
  96. data/lib/fuby/to_camel_case.rb +32 -0
  97. data/lib/fuby/to_case.rb +1 -0
  98. data/lib/fuby/to_components.rb +33 -0
  99. data/lib/fuby/to_dash_case.rb +28 -0
  100. data/lib/fuby/to_hash.rb +25 -0
  101. data/lib/fuby/to_pred.rb +7 -0
  102. data/lib/fuby/to_proc.rb +45 -0
  103. data/lib/fuby/to_regexp.rb +38 -0
  104. data/lib/fuby/to_snake_case.rb +28 -0
  105. data/lib/fuby/to_tok.rb +27 -0
  106. data/lib/fuby/tok.rb +2 -0
  107. data/lib/fuby/tok_arity.rb +18 -0
  108. data/lib/fuby/tok_direction.rb +16 -0
  109. data/lib/fuby/tok_parity.rb +11 -0
  110. data/lib/fuby/tok_side.rb +11 -0
  111. data/lib/fuby/try.rb +73 -0
  112. data/lib/fuby/try_each.rb +25 -0
  113. data/lib/fuby/try_eval.rb +19 -0
  114. data/lib/fuby/try_exec.rb +15 -0
  115. data/lib/fuby/unabbreviation.rb +17 -0
  116. data/lib/fuby/unshift.rb +1 -0
  117. data/lib/fuby/unshift_options.rb +11 -0
  118. data/lib/fuby/uuid.rb +28 -0
  119. data/test/fuby/abbreviation.rb +25 -0
  120. data/test/fuby/alias_method.rb +29 -0
  121. data/test/fuby/all.rb +15 -0
  122. data/test/fuby/and.rb +14 -0
  123. data/test/fuby/any.rb +15 -0
  124. data/test/fuby/attributes.rb +0 -0
  125. data/test/fuby/bind.rb +17 -0
  126. data/test/fuby/class_attributes.rb +0 -0
  127. data/test/fuby/deep.rb +0 -0
  128. data/test/fuby/deep_each.rb +0 -0
  129. data/test/fuby/define_missing_method.rb +33 -0
  130. data/test/fuby/define_tok.rb +0 -0
  131. data/test/fuby/descendants.rb +0 -0
  132. data/test/fuby/dimension.rb +0 -0
  133. data/test/fuby/drop.rb +28 -0
  134. data/test/fuby/drop_until.rb +26 -0
  135. data/test/fuby/drop_while.rb +26 -0
  136. data/test/fuby/each.rb +0 -0
  137. data/test/fuby/each_with_index_or_key.rb +22 -0
  138. data/test/fuby/eql.rb +0 -0
  139. data/test/fuby/eql_componentwise.rb +0 -0
  140. data/test/fuby/equivalence.rb +0 -0
  141. data/test/fuby/eval.rb +0 -0
  142. data/test/fuby/extend.rb +20 -0
  143. data/test/fuby/format.rb +0 -0
  144. data/test/fuby/include.rb +20 -0
  145. data/test/fuby/index_or_key.rb +0 -0
  146. data/test/fuby/instance_attributes.rb +0 -0
  147. data/test/fuby/intercept.rb +16 -0
  148. data/test/fuby/invert.rb +0 -0
  149. data/test/fuby/longest_common.rb +0 -0
  150. data/test/fuby/matches.rb +0 -0
  151. data/test/fuby/matches_componentwise.rb +0 -0
  152. data/test/fuby/matches_prefix_of.rb +0 -0
  153. data/test/fuby/matches_suffix_of.rb +0 -0
  154. data/test/fuby/member.rb +0 -0
  155. data/test/fuby/merge.rb +0 -0
  156. data/test/fuby/merge_css.rb +0 -0
  157. data/test/fuby/method_added_as.rb +0 -0
  158. data/test/fuby/method_added_as_binary_operator.rb +20 -0
  159. data/test/fuby/method_added_as_filter.rb +28 -0
  160. data/test/fuby/new.rb +3 -0
  161. data/test/fuby/not.rb +0 -0
  162. data/test/fuby/opposite.rb +0 -0
  163. data/test/fuby/or.rb +19 -0
  164. data/test/fuby/otherwise.rb +30 -0
  165. data/test/fuby/part_of.rb +0 -0
  166. data/test/fuby/plus.rb +0 -0
  167. data/test/fuby/pop.rb +0 -0
  168. data/test/fuby/pop_if.rb +31 -0
  169. data/test/fuby/pop_options.rb +31 -0
  170. data/test/fuby/pop_unless.rb +0 -0
  171. data/test/fuby/pop_until.rb +0 -0
  172. data/test/fuby/pop_while.rb +0 -0
  173. data/test/fuby/prefix_of.rb +0 -0
  174. data/test/fuby/prefixes.rb +13 -0
  175. data/test/fuby/prepend.rb +34 -0
  176. data/test/fuby/private.rb +0 -0
  177. data/test/fuby/protected.rb +0 -0
  178. data/test/fuby/public.rb +0 -0
  179. data/test/fuby/push.rb +0 -0
  180. data/test/fuby/push_options.rb +32 -0
  181. data/test/fuby/random.rb +0 -0
  182. data/test/fuby/self_and_descendants.rb +0 -0
  183. data/test/fuby/shift.rb +0 -0
  184. data/test/fuby/shift_if.rb +0 -0
  185. data/test/fuby/shift_options.rb +0 -0
  186. data/test/fuby/shift_unless.rb +0 -0
  187. data/test/fuby/shift_until.rb +0 -0
  188. data/test/fuby/shift_while.rb +0 -0
  189. data/test/fuby/splat.rb +0 -0
  190. data/test/fuby/strip.rb +0 -0
  191. data/test/fuby/submodule.rb +15 -0
  192. data/test/fuby/suffix_of.rb +0 -0
  193. data/test/fuby/suffixes.rb +13 -0
  194. data/test/fuby/take.rb +0 -0
  195. data/test/fuby/take_until.rb +0 -0
  196. data/test/fuby/take_while.rb +0 -0
  197. data/test/fuby/tap.rb +58 -0
  198. data/test/fuby/to_boolean.rb +31 -0
  199. data/test/fuby/to_camel_case.rb +15 -0
  200. data/test/fuby/to_components.rb +0 -0
  201. data/test/fuby/to_dash_case.rb +15 -0
  202. data/test/fuby/to_hash.rb +23 -0
  203. data/test/fuby/to_pred.rb +25 -0
  204. data/test/fuby/to_proc.rb +56 -0
  205. data/test/fuby/to_regexp.rb +38 -0
  206. data/test/fuby/to_snake_case.rb +15 -0
  207. data/test/fuby/to_tok.rb +0 -0
  208. data/test/fuby/tok.rb +0 -0
  209. data/test/fuby/tok_arity.rb +0 -0
  210. data/test/fuby/tok_direction.rb +0 -0
  211. data/test/fuby/tok_parity.rb +0 -0
  212. data/test/fuby/tok_side.rb +0 -0
  213. data/test/fuby/try.rb +52 -0
  214. data/test/fuby/try_each.rb +30 -0
  215. data/test/fuby/try_eval.rb +34 -0
  216. data/test/fuby/try_exec.rb +0 -0
  217. data/test/fuby/unabbreviation.rb +25 -0
  218. data/test/fuby/unshift.rb +0 -0
  219. data/test/fuby/unshift_options.rb +0 -0
  220. data/test/fuby/uuid.rb +31 -0
  221. data/test/fuby/version.rb +0 -0
  222. metadata +369 -0
@@ -0,0 +1,12 @@
1
+ require_relative 'method_added_as_filter'
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def shift_unless
7
+ shift unless yield first
8
+ end
9
+
10
+ method_added_as_filter :shift_unless
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require_relative 'method_added_as_filter'
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def shift_until &blk
7
+ shift index(&blk)
8
+ end
9
+
10
+ method_added_as_filter :shift_until
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'not'
2
+ require_relative 'shift_until'
3
+ require_relative 'method_added_as_filter'
4
+
5
+ using Fuby
6
+
7
+ module Fuby
8
+ refine ::Array do
9
+
10
+ def shift_while &blk
11
+ shift_until &(blk.not)
12
+ end
13
+
14
+ method_added_as_filter :shift_while
15
+ end
16
+ end
data/lib/fuby/splat.rb ADDED
@@ -0,0 +1,11 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ module ::Enumerable # can't refine Module
5
+
6
+ def splat
7
+ ::Enumerator.new { |result| each { |sig| result.<< *sig } }
8
+ end
9
+
10
+ end
11
+ end
data/lib/fuby/strip.rb ADDED
@@ -0,0 +1,24 @@
1
+ require_relative 'plus'
2
+
3
+ using Fuby
4
+
5
+ module Fuby
6
+ refine ::String do
7
+
8
+ def strip pattern = nil
9
+ return super unless ::RegExp === pattern
10
+ strip_beginning(pattern).strip_ending(pattern)
11
+ end
12
+
13
+ def strip_beginning pattern
14
+ pattern = /^/ + pattern unless /^\^/ === pattern.source
15
+ sub pattern, ''
16
+ end
17
+
18
+ def strip_ending pattern
19
+ pattern = pattern + /$/ unless /\$$/ === pattern.source
20
+ sub pattern, ''
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ require 'fuby/include'
2
+
3
+ using Fuby
4
+
5
+ module Fuby
6
+ refine ::Module do
7
+
8
+ def subclass *sig, &blk
9
+ case self
10
+
11
+ when Class
12
+ Class.new self
13
+
14
+ when Module
15
+ Class.new.include! self
16
+
17
+ else super
18
+ end.include! *sig, &blk
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'fuby/include'
2
+
3
+ using Fuby
4
+
5
+ module Fuby
6
+ refine ::Module do
7
+
8
+ def submodule *sig, &blk
9
+ case self
10
+
11
+ when Class
12
+ Class.new self
13
+
14
+ when Module
15
+ Module.new.include! self
16
+
17
+ else super
18
+ end.include! *sig, &blk
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def suffix_of? that
7
+ eql? that.drop -length
8
+ end
9
+
10
+ def matches_suffix_of? that
11
+ matches? that.drop - length
12
+ end
13
+
14
+ method_added_as_binary_operator :suffix_of?, :matches_suffix_of?
15
+
16
+ end
17
+ end
18
+
19
+ Dir.glob "*_suffix_of.rb", &method(:require)
@@ -0,0 +1,11 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def suffixes
7
+ (0 .. length - 1).map &(method :drop)
8
+ end
9
+
10
+ end
11
+ end
data/lib/fuby/take.rb ADDED
@@ -0,0 +1,20 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def take i = 1
7
+ return [] if empty?
8
+ return super if i >= 0
9
+ return super i % length
10
+ end
11
+
12
+ def take! i = 1
13
+ pop length - i % length
14
+ self
15
+ end
16
+
17
+ end
18
+ end
19
+
20
+ Dir.glob "#{ __FILE__.chomp ".rb" }_*.rb", &method(:require)
@@ -0,0 +1,17 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def take_until &blk
7
+ take_while &(blk.not)
8
+ end
9
+
10
+ def take_until! &blk
11
+ take_while! &blk.not
12
+ end
13
+
14
+ method_added_as_filter :take_until, :take_until!
15
+
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Array do
5
+
6
+ def take_while! &blk
7
+ pop length - index(&blk)
8
+ self
9
+ end
10
+
11
+ method_added_as_filter :take_while, :take_while!
12
+
13
+ end
14
+ end
data/lib/fuby/tap.rb ADDED
@@ -0,0 +1,28 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Object do
5
+
6
+ def tap &blk
7
+ return super if block_given?
8
+ return self
9
+ end
10
+
11
+ alias_method :tap?, :tap
12
+ alias_method :tap!, :tap
13
+
14
+ end
15
+ refine ::NilClass do
16
+
17
+ def tap?
18
+ self
19
+ end
20
+
21
+ def tap!
22
+ raise ::TypeError
23
+ end
24
+
25
+ alias_method :tap_each, :tap?
26
+
27
+ end
28
+ end
data/lib/fuby/to.rb ADDED
@@ -0,0 +1 @@
1
+ Dir.glob "#{ __FILE__.chomp ".rb" }_*.rb", &method(:require)
@@ -0,0 +1,32 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::Numeric do
5
+
6
+ def to_boolean
7
+ self > 0
8
+ end
9
+
10
+ alias_method :to_b, :to_boolean
11
+
12
+ end
13
+ refine ::String do
14
+
15
+ def to_boolean
16
+ /^(t(rue)?|0*1|y(es)?)$/i === self
17
+ end
18
+
19
+ alias_method :to_b, :to_boolean
20
+
21
+ end
22
+ refine ::Symbol do
23
+
24
+ def to_boolean
25
+ @to_boolean = to_s.to_boolean if @to_boolean.nil?
26
+ @to_boolean
27
+ end
28
+
29
+ alias_method :to_b, :to_boolean
30
+
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'to_components'
2
+
3
+ using Fuby
4
+
5
+ module Fuby
6
+ refine ::String do
7
+
8
+ def to_camelCase
9
+ components = to_components
10
+ first = components.shift.downcase
11
+ components.map! { |str| str.sub /[A-z0-9]/, &:upcase }
12
+ components.unshift first
13
+ components.join
14
+ end
15
+
16
+ def to_CamelCase
17
+ to_components.map! { |str| str.sub /[A-z0-9]/, &:upcase }.join
18
+ end
19
+
20
+ end
21
+ refine ::Symbol do
22
+
23
+ def to_camelCase
24
+ @to_camelCase ||= to_s.to_camelCase.to_sym
25
+ end
26
+
27
+ def to_CamelCase
28
+ @to_CamelCase ||= to_s.to_CamelCase.to_sym
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1 @@
1
+ Dir.glob "to_*_case.rb", &method(:require)
@@ -0,0 +1,33 @@
1
+ using Fuby
2
+
3
+ module Fuby
4
+ refine ::String do
5
+
6
+ def to_components
7
+ return downcase.to_components if /[A-Z]/ === self unless /[a-z]/ === self # it's all CAPS
8
+ scan /[A-Z]+[0-9]*(?=_|\b|[^A-z]|[A-Z][a-z])|[A-Z]?[a-z]+[0-9]*(?=_|\b|[^a-z]|[A-Z])|[0-9]+[a-z]*/
9
+ #
10
+ # presuming either some form of camelCase or lower_case, either:
11
+ #
12
+ # a run of capitals optionally followed by an integer, excluding the capital leading a following CamelCase word
13
+ # e.g. HTML5, IE9
14
+ #
15
+ # a run of lower-case letters optionally followed by an integer
16
+ # e.g. html5, ie9
17
+ #
18
+ # a number or number word
19
+ # e.g. 1st, 2nd
20
+ #
21
+ # a proper camelCase component
22
+ end
23
+
24
+ end
25
+ refine ::Symbol do
26
+
27
+ def to_components
28
+ @to_components ||= to_s.to_components.map(&:to_sym).freeze
29
+ @to_components.dup
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ require_relative 'to_components'
2
+
3
+ using Fuby
4
+
5
+ module Fuby
6
+ refine ::String do
7
+
8
+ def to_DASH_CASE
9
+ to_components.join('-').upcase
10
+ end
11
+
12
+ def to_dash_case
13
+ to_components.join('-').downcase
14
+ end
15
+
16
+ end
17
+ refine ::Symbol do
18
+
19
+ def to_DASH_CASE
20
+ @to_DASH_CASE ||= to_s.to_DASH_CASE.to_sym
21
+ end
22
+
23
+ def to_dash_case
24
+ @to_dash_case ||= to_s.to_dash_case.to_sym
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'descendants'
2
+ require_relative 'each_with_index_or_key'
3
+
4
+ using Fuby
5
+
6
+ module Fuby
7
+ module ::Enumerable # can't refine a Module
8
+
9
+ def to_hash
10
+ {}.tap { |hash| each_with_index_or_key { |val, key| hash[key] = val } }
11
+ end
12
+
13
+ alias_method :to_h, :to_hash
14
+
15
+ end
16
+ refine ::Hash do
17
+
18
+ def to_hash
19
+ dup
20
+ end
21
+
22
+ alias_method :to_h, :to_hash
23
+
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ class Object
2
+
3
+ def to_pred
4
+ method :===
5
+ end
6
+
7
+ end
@@ -0,0 +1,45 @@
1
+ module Fuby
2
+ refine ::Array do
3
+
4
+ def to_proc
5
+ proc &method(:[])
6
+ end
7
+
8
+ end
9
+ refine ::Hash do
10
+
11
+ def to_proc
12
+ proc do |arg|
13
+ if has_key? arg
14
+ self[arg]
15
+ else
16
+ self[keys.detect { |key| key === arg }]
17
+ end
18
+ end
19
+ end
20
+
21
+ end
22
+ refine ::String do
23
+
24
+ def to_proc
25
+ proc { |*sig| format self, *sig }
26
+ end
27
+
28
+ end
29
+ refine ::Regexp do
30
+
31
+ def to_proc
32
+ proc do |arg|
33
+ arg[ arg.length - 1] if arg = match(arg)
34
+ end
35
+ end
36
+
37
+ end
38
+ refine ::Integer do
39
+
40
+ def to_proc
41
+ proc { |arg| arg[self] }
42
+ end
43
+
44
+ end
45
+ end