fuby 0.0.2 → 0.0.3
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/README.md +2 -2
- data/VERSION +1 -1
- data/fuby.gemspec +1 -1
- data/lib/fuby/alias_method.rb +26 -2
- data/lib/fuby/alias_singleton_method.rb +20 -0
- data/lib/fuby/ancestors.rb +12 -0
- data/lib/fuby/cardinality.rb +27 -0
- data/lib/fuby/curry_eval.rb +19 -0
- data/lib/fuby/deep_const_get.rb +13 -0
- data/lib/fuby/deep_each.rb +21 -6
- data/lib/fuby/define.rb +1 -0
- data/lib/fuby/define_missing_method.rb +13 -23
- data/lib/fuby/define_tok.rb +2 -0
- data/lib/fuby/descendants.rb +3 -4
- data/lib/fuby/eastern_name.rb +11 -0
- data/lib/fuby/enumerables.rb +7 -0
- data/lib/fuby/eql_componentwise.rb +7 -4
- data/lib/fuby/equivalence.rb +7 -4
- data/lib/fuby/eval.rb +1 -51
- data/lib/fuby/extend.rb +15 -4
- data/lib/fuby/first.rb +9 -0
- data/lib/fuby/hash_eval.rb +32 -0
- data/lib/fuby/include.rb +14 -3
- data/lib/fuby/invert.rb +10 -7
- data/lib/fuby/last.rb +9 -0
- data/lib/fuby/longest_common.rb +1 -15
- data/lib/fuby/longest_common_prefix.rb +11 -0
- data/lib/fuby/longest_common_suffix.rb +11 -0
- data/lib/fuby/matches.rb +12 -4
- data/lib/fuby/matches_componentwise.rb +11 -4
- data/lib/fuby/matches_part_of.rb +9 -5
- data/lib/fuby/matches_prefix_of.rb +6 -1
- data/lib/fuby/matches_suffix_of.rb +3 -0
- data/lib/fuby/method_added_as_binary_operator.rb +3 -1
- data/lib/fuby/method_added_as_filter.rb +1 -1
- data/lib/fuby/names.rb +9 -0
- data/lib/fuby/outer_module.rb +18 -0
- data/lib/fuby/part_of.rb +4 -0
- data/lib/fuby/pop.rb +3 -2
- data/lib/fuby/prefix_of.rb +5 -4
- data/lib/fuby/prepend.rb +12 -3
- data/lib/fuby/reject.rb +19 -0
- data/lib/fuby/select.rb +19 -0
- data/lib/fuby/self_and_descendants.rb +1 -3
- data/lib/fuby/send.rb +24 -0
- data/lib/fuby/shift.rb +3 -2
- data/lib/fuby/singleton_method_defined.rb +9 -0
- data/lib/fuby/subclass.rb +2 -2
- data/lib/fuby/submodule.rb +2 -2
- data/lib/fuby/suffix_of.rb +2 -6
- data/lib/fuby/take_until.rb +5 -0
- data/lib/fuby/take_while.rb +8 -0
- data/lib/fuby/to_camel_case.rb +1 -1
- data/lib/fuby/to_dot_case.rb +26 -0
- data/lib/fuby/to_hash.rb +8 -14
- data/lib/fuby/to_slash_case.rb +26 -0
- data/lib/fuby/tok.rb +0 -1
- data/lib/fuby/try_each.rb +1 -0
- data/lib/fuby/try_eval.rb +1 -0
- data/lib/fuby/unshift_options.rb +1 -0
- data/lib/fuby/western_name.rb +11 -0
- data/test/fuby/alias_method.rb +2 -2
- data/test/fuby/ancestors.rb +41 -0
- data/test/fuby/cardinality.rb +34 -0
- data/test/fuby/curry_eval.rb +3 -0
- data/test/fuby/deep.rb +1 -0
- data/test/fuby/deep_each.rb +22 -0
- data/test/fuby/define.rb +1 -0
- data/test/fuby/define_tok.rb +3 -0
- data/test/fuby/descendants.rb +56 -0
- data/test/fuby/drop_until.rb +18 -18
- data/test/fuby/drop_while.rb +18 -18
- data/test/fuby/each.rb +1 -0
- data/test/fuby/eql.rb +1 -0
- data/test/fuby/eql_componentwise.rb +4 -0
- data/test/fuby/equivalence.rb +14 -0
- data/test/fuby/eval.rb +1 -0
- data/test/fuby/extend.rb +1 -1
- data/test/fuby/format.rb +3 -0
- data/test/fuby/hash_eval.rb +3 -0
- data/test/fuby/include.rb +1 -1
- data/test/fuby/index_or_key.rb +3 -0
- data/test/fuby/invert.rb +22 -0
- data/test/fuby/longest_common.rb +1 -0
- data/test/fuby/longest_common_prefix.rb +3 -0
- data/test/fuby/longest_common_suffix.rb +3 -0
- data/test/fuby/matches.rb +5 -0
- data/test/fuby/matches_part_of.rb +3 -0
- data/test/fuby/matches_prefix_of.rb +3 -0
- data/test/fuby/matches_suffix_of.rb +3 -0
- data/test/fuby/new.rb +19 -0
- data/test/fuby/part_of.rb +5 -0
- data/test/fuby/prefix_of.rb +5 -0
- data/test/fuby/prepend.rb +1 -1
- data/test/fuby/private.rb +3 -0
- data/test/fuby/protected.rb +3 -0
- data/test/fuby/public.rb +3 -0
- data/test/fuby/push.rb +1 -0
- data/test/fuby/random.rb +3 -0
- data/test/fuby/self_and_descendants.rb +3 -0
- data/test/fuby/shift.rb +5 -0
- data/test/fuby/shift_if.rb +3 -0
- data/test/fuby/shift_options.rb +3 -0
- data/test/fuby/shift_unless.rb +3 -0
- data/test/fuby/shift_until.rb +3 -0
- data/test/fuby/shift_while.rb +3 -0
- data/test/fuby/splat.rb +3 -0
- data/test/fuby/strip.rb +3 -0
- data/test/fuby/suffix_of.rb +5 -0
- data/test/fuby/take.rb +5 -0
- data/test/fuby/take_until.rb +3 -0
- data/test/fuby/take_while.rb +3 -0
- data/test/fuby/to_components.rb +3 -0
- data/test/fuby/to_dot_case.rb +15 -0
- data/test/fuby/to_slash_case.rb +15 -0
- data/test/fuby/to_tok.rb +3 -0
- data/test/fuby/tok.rb +1 -0
- data/test/fuby/tok_arity.rb +3 -0
- data/test/fuby/tok_direction.rb +3 -0
- data/test/fuby/tok_parity.rb +3 -0
- data/test/fuby/tok_side.rb +3 -0
- data/test/fuby/try.rb +52 -52
- data/test/fuby/try_each.rb +1 -1
- data/test/fuby/try_eval.rb +2 -2
- data/test/fuby/unshift.rb +3 -0
- data/test/fuby/unshift_options.rb +3 -0
- metadata +50 -24
- data/lib/fuby/attributes.rb +0 -15
- data/lib/fuby/class_attributes.rb +0 -37
- data/lib/fuby/dimension.rb +0 -23
- data/lib/fuby/instance_attributes.rb +0 -37
- data/lib/fuby/try_exec.rb +0 -16
- data/test/fuby/attributes.rb +0 -0
- data/test/fuby/class_attributes.rb +0 -0
- data/test/fuby/dimension.rb +0 -0
- data/test/fuby/instance_attributes.rb +0 -0
- data/test/fuby/try_exec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c58761ffc821d904ee1c2daff32e6fa90b41391d
|
4
|
+
data.tar.gz: c5ed1e2783e92b839030973886f7f84e3ef56101
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b99adb7c87f4ad65b9d7b7c1887f4a44db596c672ae11b3087a8fffe4b080e61dd0d090b4deb50b048ee1132244dd2d9b9ac9214ad5f7777ddf43d3372d3dd70
|
7
|
+
data.tar.gz: 690ee73a4b0d9e26d2578977d975e558913ed50793c6ee866beb820f2a10a43f44741623a2c0a531330288897830a51937711cb74e3b1bae4388748ab39f2805
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ TODO: Write usage instructions here
|
|
23
23
|
## Contributing
|
24
24
|
|
25
25
|
1. Fork it
|
26
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
26
|
+
2. Create your feature branch prefixed with your handle (`git checkout -b me/my-new-feature`)
|
27
27
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
28
|
+
4. Push to the branch (`git push origin me/my-new-feature`)
|
29
29
|
5. Create new Pull Request
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/fuby.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.version = version
|
12
12
|
gem.license = "MIT"
|
13
13
|
gem.authors = ["Alex Goldsmith"]
|
14
|
-
gem.email = ["alex.
|
14
|
+
gem.email = ["alex.tosyx@gmail.com"]
|
15
15
|
gem.summary = "Lightweight extensions to the Ruby standard library"
|
16
16
|
gem.description = "Lightweight extensions to the Ruby standard library provided by the refinements mechanism."
|
17
17
|
gem.homepage = "http://github.com/tosyx/fuby"
|
data/lib/fuby/alias_method.rb
CHANGED
@@ -1,10 +1,34 @@
|
|
1
|
+
require_relative 'send'
|
1
2
|
require_relative 'uuid'
|
2
3
|
|
3
4
|
module Fuby
|
4
5
|
refine ::Module do
|
5
6
|
|
6
|
-
def alias_method
|
7
|
-
|
7
|
+
def alias_method *sig
|
8
|
+
case sig.length
|
9
|
+
when 1
|
10
|
+
sig.unshift new_name = Symbol.__uuid__
|
11
|
+
self.send :alias_method, *sig
|
12
|
+
new_name
|
13
|
+
when 2
|
14
|
+
self.send :alias_method, *sig
|
15
|
+
else raise new TypeError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
class Send
|
21
|
+
|
22
|
+
def alias_method *sig
|
23
|
+
case sig.length
|
24
|
+
when 1
|
25
|
+
sig.unshift new_name = Symbol.__uuid__
|
26
|
+
@self.send :alias_method, *sig
|
27
|
+
new_name
|
28
|
+
when 2
|
29
|
+
@self.send :alias_method, *sig
|
30
|
+
else raise new TypeError
|
31
|
+
end
|
8
32
|
end
|
9
33
|
|
10
34
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'send'
|
2
|
+
require_relative 'uuid'
|
3
|
+
|
4
|
+
module Fuby
|
5
|
+
refine ::Module do
|
6
|
+
|
7
|
+
def alias_singleton_method *sig
|
8
|
+
case sig.length
|
9
|
+
when 1
|
10
|
+
sig.unshift new_name = Symbol.__uuid__
|
11
|
+
self.singleton_class.send :alias_method, *sig
|
12
|
+
new_name
|
13
|
+
when 2
|
14
|
+
self.singleton_class.send :alias_method, *sig
|
15
|
+
else raise new TypeError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Fuby
|
2
|
+
refine ::Module do
|
3
|
+
|
4
|
+
def ancestors type = nil
|
5
|
+
super().tap { |mods| return mods.select { |mod| type === mod } if type }
|
6
|
+
end
|
7
|
+
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Dir.glob "#{ __FILE__.chomp ".rb" }_*.rb", &method(:require)
|
12
|
+
Dir.glob "*_#{ __FILE__.chomp ".rb" }.rb", &method(:require)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'enumerables'
|
2
|
+
|
3
|
+
module Fuby
|
4
|
+
refine ::Object do
|
5
|
+
|
6
|
+
def cardinality
|
7
|
+
1
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
refine ::NilClass do
|
12
|
+
|
13
|
+
def cardinality
|
14
|
+
0
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
Enumerables.each do |enumerable|
|
19
|
+
refine enumerable do
|
20
|
+
|
21
|
+
def cardinality
|
22
|
+
count
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'intercept'
|
2
|
+
|
3
|
+
module Fuby
|
4
|
+
refine ::Object do
|
5
|
+
|
6
|
+
def curry_eval *pre, &shell
|
7
|
+
|
8
|
+
if Hash === pre.last
|
9
|
+
defaults = pre.pop
|
10
|
+
intercept { |*sig, &blk| send *pre, sig, (sig.pop_options defaults), &blk }
|
11
|
+
|
12
|
+
else
|
13
|
+
intercept { |*sig, &blk| send *pre, &blk }
|
14
|
+
|
15
|
+
end.instance_exec self, &shell
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/fuby/deep_each.rb
CHANGED
@@ -1,12 +1,27 @@
|
|
1
|
+
require_relative 'each_with_index_or_key'
|
2
|
+
require_relative 'enumerables'
|
3
|
+
|
1
4
|
module Fuby
|
2
|
-
|
5
|
+
Enumerables.each do |enumerable|
|
6
|
+
refine enumerable do
|
7
|
+
|
8
|
+
def deep_each *path, &blk
|
9
|
+
if block_given?
|
10
|
+
|
11
|
+
each_with_index_or_key do |e, i|
|
12
|
+
next e.deep_each i, *path, &blk if self.class === e
|
13
|
+
next yield e, i, *path
|
14
|
+
end
|
15
|
+
|
16
|
+
else
|
3
17
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
18
|
+
::Enumerator.new do |result|
|
19
|
+
deep_each { |e, *path| result.<< e, *path }
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
8
23
|
end
|
9
|
-
end
|
10
24
|
|
25
|
+
end
|
11
26
|
end
|
12
27
|
end
|
data/lib/fuby/define.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Dir.glob "#{ __FILE__.chomp ".rb" }_*.rb", &method(:require)
|
@@ -1,33 +1,23 @@
|
|
1
1
|
require_relative 'uuid'
|
2
|
+
require_relative 'send'
|
3
|
+
require_relative 'include'
|
4
|
+
require_relative 'prepend'
|
2
5
|
|
3
6
|
module Fuby
|
4
7
|
refine ::Module do
|
5
|
-
protected
|
6
8
|
|
7
9
|
def define_missing_method missing_reg, &missing_blk
|
8
|
-
mod = self
|
9
|
-
|
10
10
|
send :define_method, missing_method = Symbol.__uuid__, &missing_blk
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
mod.send
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
send key, *sig, &blk
|
24
|
-
end
|
25
|
-
|
26
|
-
alias_method was_respond_to = Symbol.__uuid__, :respond_to?
|
27
|
-
|
28
|
-
define_method :respond_to? do |key|
|
29
|
-
missing_reg === key or send was_respond_to, key
|
30
|
-
end
|
11
|
+
prepend {
|
12
|
+
mod = self
|
13
|
+
mod.send.define_method(:method_missing) { |key, *sig, &blk|
|
14
|
+
return super key, *sig, &blk unless matched_sig = missing_reg.match(key)
|
15
|
+
matched_sig = matched_sig.to_a.drop 1
|
16
|
+
mod.send.define_method(key) { |*sig, &blk| send missing_method, *(matched_sig + sig), &blk }
|
17
|
+
send key, *sig, &blk
|
18
|
+
}
|
19
|
+
mod.send.define_method(:respond_to?) { |key| missing_reg === key || super(key) }
|
20
|
+
}
|
31
21
|
end
|
32
22
|
|
33
23
|
end
|
data/lib/fuby/define_tok.rb
CHANGED
data/lib/fuby/descendants.rb
CHANGED
@@ -2,12 +2,11 @@ module Fuby
|
|
2
2
|
refine ::Module do
|
3
3
|
|
4
4
|
def descendants type = ::Module
|
5
|
-
|
6
|
-
ObjectSpace.each_object(type).select { |mod| mod.ancestors.include? self }
|
5
|
+
ObjectSpace.each_object(type).select { |mod| mod < self }
|
7
6
|
end
|
8
7
|
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
12
|
-
Dir.glob "
|
13
|
-
Dir.glob "*
|
11
|
+
Dir.glob "#{ __FILE__.chomp ".rb" }_*.rb", &method(:require)
|
12
|
+
Dir.glob "*_#{ __FILE__.chomp ".rb" }.rb", &method(:require)
|
@@ -1,11 +1,14 @@
|
|
1
1
|
require_relative 'each_with_index_or_key'
|
2
|
+
require_relative 'enumerables'
|
2
3
|
|
3
4
|
module Fuby
|
4
|
-
|
5
|
+
Enumerables.each do |enumerable|
|
6
|
+
refine enumerable do
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
def eql_componentwise? that
|
9
|
+
each_with_index_or_key.all? { |e, k| e == that[k] }
|
10
|
+
end
|
9
11
|
|
12
|
+
end
|
10
13
|
end
|
11
14
|
end
|
data/lib/fuby/equivalence.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
require_relative 'splat'
|
2
|
+
require_relative 'enumerables'
|
2
3
|
|
3
4
|
module Fuby
|
4
|
-
|
5
|
+
Enumerables.each do |enumerable|
|
6
|
+
refine enumerable do
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
def equivalence? eq = :eql?
|
9
|
+
each_cons(2).splat.all? { |fst, snd| fst.send eq, snd }
|
10
|
+
end
|
9
11
|
|
12
|
+
end
|
10
13
|
end
|
11
14
|
end
|
data/lib/fuby/eval.rb
CHANGED
@@ -1,51 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Fuby
|
4
|
-
refine ::Hash do
|
5
|
-
|
6
|
-
def hash_eval &body
|
7
|
-
intercept do |key, *sig, &blk|
|
8
|
-
val = self[key]
|
9
|
-
key = key.to_s.chomp!("!").to_sym and self.delete key if /!$/ === key.to_s
|
10
|
-
|
11
|
-
case sig
|
12
|
-
when [] then sig.unshift ({}) if blk
|
13
|
-
when [Object]
|
14
|
-
else raise ::ArgumentError
|
15
|
-
end
|
16
|
-
|
17
|
-
case arg = sig.first
|
18
|
-
when nil then next val
|
19
|
-
when ::Hash
|
20
|
-
self[key] = {} if self[key].nil?
|
21
|
-
self[key].merge! arg
|
22
|
-
self[key].hash_exec &blk if blk
|
23
|
-
else
|
24
|
-
self[key] = arg
|
25
|
-
end
|
26
|
-
|
27
|
-
self[key]
|
28
|
-
end.instance_exec &body
|
29
|
-
end
|
30
|
-
|
31
|
-
alias_method :hash_exec, :hash_eval
|
32
|
-
|
33
|
-
end
|
34
|
-
refine ::Object do
|
35
|
-
|
36
|
-
def curry_eval *pre, &shell
|
37
|
-
|
38
|
-
if Hash === pre.last
|
39
|
-
defaults = pre.pop
|
40
|
-
intercept { |*sig, &blk| send *pre, sig, (sig.pop_options defaults), &blk }
|
41
|
-
|
42
|
-
else
|
43
|
-
intercept { |*sig, &blk| send *pre, &blk }
|
44
|
-
|
45
|
-
end.instance_exec self, &shell
|
46
|
-
end
|
47
|
-
|
48
|
-
alias_method :curry_exec, :curry_eval
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
1
|
+
Dir.glob "*_#{ __FILE__.chomp ".rb" }.rb", &method(:require)
|
data/lib/fuby/extend.rb
CHANGED
@@ -1,11 +1,22 @@
|
|
1
|
+
require_relative 'send'
|
2
|
+
|
1
3
|
module Fuby
|
2
|
-
refine ::
|
4
|
+
refine ::Module do
|
3
5
|
|
4
|
-
def extend
|
5
|
-
extend *extends unless extends.empty?
|
6
|
-
extend ::Module.new(&body) if block_given?
|
6
|
+
def extend *extends, &body
|
7
|
+
self.send :extend, *extends unless extends.empty?
|
8
|
+
self.send :extend, ::Module.new(&body) if block_given?
|
7
9
|
self
|
8
10
|
end
|
9
11
|
|
10
12
|
end
|
13
|
+
class Send
|
14
|
+
|
15
|
+
def extend *extends, &body
|
16
|
+
@self.send :extend, *extends unless extends.empty?
|
17
|
+
@self.send :extend, ::Module.new(&body) if block_given?
|
18
|
+
@self
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
11
22
|
end
|
data/lib/fuby/first.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'intercept'
|
2
|
+
|
3
|
+
module Fuby
|
4
|
+
refine ::Hash do
|
5
|
+
|
6
|
+
def hash_eval &body
|
7
|
+
intercept do |key, *sig, &blk|
|
8
|
+
val = self[key]
|
9
|
+
key = key.to_s.chomp!("!").to_sym and self.delete key if /!$/ === key.to_s
|
10
|
+
|
11
|
+
case sig
|
12
|
+
when [] then sig.unshift ({}) if blk
|
13
|
+
when [Object]
|
14
|
+
else raise ::ArgumentError
|
15
|
+
end
|
16
|
+
|
17
|
+
case arg = sig.first
|
18
|
+
when nil then next val
|
19
|
+
when ::Hash
|
20
|
+
self[key] = {} if self[key].nil?
|
21
|
+
self[key].merge! arg
|
22
|
+
self[key].hash_exec &blk if blk
|
23
|
+
else
|
24
|
+
self[key] = arg
|
25
|
+
end
|
26
|
+
|
27
|
+
self[key]
|
28
|
+
end.instance_exec &body
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|