mobj 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +1 -1
- data/lib/ext/array.rb +24 -6
- data/lib/ext/basic_object.rb +4 -22
- data/lib/ext/false.rb +5 -0
- data/lib/ext/hash.rb +13 -4
- data/lib/ext/nil.rb +5 -0
- data/lib/ext/object.rb +73 -10
- data/lib/ext/string.rb +2 -0
- data/lib/mobj.rb +14 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OTI0OTdjNzQ4Y2E5NTE4YzdlOGI5YTc4N2UwMDY4MzM0MWI2ZGJhMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTcwOWYzYTY0MGEyOGQ0NDM2YjY0YzA1NjI3Mjc1OWM5NTQzZTZjMQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWQ0MjJlMjkwOTc4MmIyNzZmNmJkMGQwMWIxOTMyZmFlMGQwNDllYjIyOTNl
|
10
|
+
NGNiNjg2NmI0ODNmMTEwYWYwNjAyZGE1OWU1ZGE5N2EyZTQ0ZWFmYzcxZTRk
|
11
|
+
YTBmZWM2MGM1NDkzOGMwYWIzMGZkNTUxNzcwYzg5ZDlkZGI3YTM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjYwZjEyNDY3NzEwNDE1NWMwYmI5NWViZmFmNmQ3ZjRlZDdlZGVlNThlNGRh
|
14
|
+
NWNkZjNhYWEwMzQ0MGIzMjE2ZDMxMzk2ODVlMzYwMzcwMzI3ODYyNzVlMjY4
|
15
|
+
NThiNWYzOGU3ZTBmZDQ1MDJmOGExMGE5MzRmMTZkMzA1NjE2ZDE=
|
data/README.md
CHANGED
data/lib/ext/array.rb
CHANGED
@@ -1,14 +1,27 @@
|
|
1
1
|
module Mobj
|
2
2
|
|
3
3
|
class ::Array
|
4
|
+
|
4
5
|
alias_method :includes?, :include?
|
5
6
|
alias_method :contains?, :include?
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
alias_method :mt?, :empty?
|
9
|
+
def filled?() !mt? end
|
10
|
+
alias_method :notempty?, :filled?
|
11
|
+
alias_method :full?, :filled?
|
12
|
+
alias_method :unempty?, :filled?
|
13
|
+
|
14
|
+
def ny?(method, *args)
|
15
|
+
any? { |o| o.send(method, *args) }
|
9
16
|
end
|
10
17
|
|
11
|
-
|
18
|
+
def no?(method, *args)
|
19
|
+
none? { |o| o.send(method, *args) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def ll?(method, *args)
|
23
|
+
all? { |o| o.send(method, *args) }
|
24
|
+
end
|
12
25
|
|
13
26
|
def msum(initial = 0.0, op = :+, &block)
|
14
27
|
if block
|
@@ -31,7 +44,7 @@ module Mobj
|
|
31
44
|
self
|
32
45
|
end
|
33
46
|
|
34
|
-
def sequester(crush = true)
|
47
|
+
def sequester!(crush = true)
|
35
48
|
if crush
|
36
49
|
compact.size <= 1 ? compact.first : self
|
37
50
|
else
|
@@ -39,6 +52,10 @@ module Mobj
|
|
39
52
|
end
|
40
53
|
end
|
41
54
|
|
55
|
+
def realize!
|
56
|
+
empty? ? nil : self
|
57
|
+
end
|
58
|
+
|
42
59
|
def return_first(&block)
|
43
60
|
returned = nil
|
44
61
|
each { |item| break if (returned = block.call(item)) }
|
@@ -46,15 +63,16 @@ module Mobj
|
|
46
63
|
end
|
47
64
|
|
48
65
|
alias_method :earliest, :return_first
|
66
|
+
alias_method :first!, :return_first
|
49
67
|
|
50
68
|
def msym() map(&:sym) end
|
51
69
|
|
52
70
|
def apply(to)
|
53
71
|
map do |m|
|
54
|
-
if m.
|
72
|
+
if m.m?
|
55
73
|
to.send(m)
|
56
74
|
else
|
57
|
-
m.
|
75
|
+
m.s!.walk(to)
|
58
76
|
end
|
59
77
|
end
|
60
78
|
end
|
data/lib/ext/basic_object.rb
CHANGED
@@ -8,32 +8,14 @@ module Mobj
|
|
8
8
|
klass.superclass
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def nil!(*)
|
16
|
-
self
|
17
|
-
end
|
11
|
+
def itself() self end
|
12
|
+
alias_method :self!, :itself
|
18
13
|
|
19
|
-
def
|
14
|
+
def p!(method=:puts)
|
15
|
+
send(method, self)
|
20
16
|
self
|
21
17
|
end
|
22
18
|
|
23
|
-
def wrap(*args, &block)
|
24
|
-
instance_exec(*args, &block)
|
25
|
-
end
|
26
|
-
|
27
|
-
alias_method :alter, :wrap
|
28
|
-
|
29
|
-
def tru?(t=true, _=nil, &block)
|
30
|
-
block ? instance_exec(t, &block) : t
|
31
|
-
end
|
32
|
-
|
33
|
-
def fals?(*)
|
34
|
-
nil
|
35
|
-
end
|
36
|
-
|
37
19
|
end
|
38
20
|
|
39
21
|
|
data/lib/ext/false.rb
CHANGED
data/lib/ext/hash.rb
CHANGED
@@ -4,6 +4,13 @@ module Mobj
|
|
4
4
|
|
5
5
|
module HashEx
|
6
6
|
|
7
|
+
def filled?() !mt? end
|
8
|
+
|
9
|
+
alias_method :notempty?, :filled?
|
10
|
+
alias_method :noempty?, :filled?
|
11
|
+
alias_method :full?, :filled?
|
12
|
+
alias_method :unempty?, :filled?
|
13
|
+
|
7
14
|
def apply!(obj)
|
8
15
|
map do |key, value|
|
9
16
|
obj.send(key, *value)
|
@@ -48,7 +55,7 @@ module Mobj
|
|
48
55
|
value = if name[-1] == '=' && args.size == 1
|
49
56
|
key = name[0...-1].sym
|
50
57
|
key = key.to_s if key?(key.to_s)
|
51
|
-
self[key] = args.sequester
|
58
|
+
self[key] = args.sequester!
|
52
59
|
elsif name[-1] == '?'
|
53
60
|
key = name[0...-1].sym
|
54
61
|
!!self[key, key.to_s]
|
@@ -56,13 +63,13 @@ module Mobj
|
|
56
63
|
key = name[0...-1].sym
|
57
64
|
val = self[key.sym] || self[key.to_s]
|
58
65
|
if !val && (block || args.unempty?)
|
59
|
-
self[key] = val = (block ? block.call(*args) : args.sequester)
|
66
|
+
self[key] = val = (block ? block.call(*args) : args.sequester!)
|
60
67
|
end
|
61
68
|
super unless val
|
62
69
|
else
|
63
70
|
self[name.sym] || self[name.to_s]
|
64
71
|
end
|
65
|
-
value ||= args.sequester unless args.empty?
|
72
|
+
value ||= args.sequester! unless args.empty?
|
66
73
|
|
67
74
|
return block ? block[value] : value
|
68
75
|
end
|
@@ -75,12 +82,14 @@ module Mobj
|
|
75
82
|
class ::Hash
|
76
83
|
include HashEx
|
77
84
|
|
85
|
+
alias_method :mt?, :empty?
|
86
|
+
|
78
87
|
alias_method :mlookup, :[]
|
79
88
|
alias_method :mdef, :default
|
80
89
|
alias_method :mfetch, :fetch
|
81
90
|
|
82
91
|
def [](*fkeys)
|
83
|
-
fkeys.map { |key| mlookup(key) || mfetch(key.sym) { mfetch(key.to_s) { mfetch(ki(key).sym) { mfetch(ki(key).to_s) { mdef(key) } } } } }.sequester
|
92
|
+
fkeys.map { |key| mlookup(key) || mfetch(key.sym) { mfetch(key.to_s) { mfetch(ki(key).sym) { mfetch(ki(key).to_s) { mdef(key) } } } } }.sequester!
|
84
93
|
end
|
85
94
|
|
86
95
|
def sym(recurse=false)
|
data/lib/ext/nil.rb
CHANGED
data/lib/ext/object.rb
CHANGED
@@ -1,14 +1,80 @@
|
|
1
1
|
module Mobj
|
2
2
|
|
3
3
|
class ::Object
|
4
|
-
|
4
|
+
|
5
|
+
def null!(*) self end
|
6
|
+
def nil!(*) self end
|
7
|
+
|
8
|
+
def wrap!(*args, &block)
|
9
|
+
block ? instance_exec(*args, &block) : args.sequester!
|
10
|
+
end
|
11
|
+
|
12
|
+
alias_method :alter!, :wrap!
|
13
|
+
alias_method :be!, :wrap!
|
14
|
+
|
15
|
+
alias_method :with!, :tap
|
16
|
+
|
17
|
+
def tru?(t=true, _=nil, &block) block ? instance_exec(t, &block) : t end
|
18
|
+
def fals?(*) nil end
|
19
|
+
|
20
|
+
def iff?(value = nil, &block) block ? instance_exec(value, &block) : value end
|
21
|
+
def iffn?(_=nil) nil end
|
22
|
+
|
23
|
+
def responds_to?(*any)
|
24
|
+
any.flatten.select { |method| respond_to?(method) }.realize!
|
25
|
+
end
|
26
|
+
|
27
|
+
def responds_to_all?(*all)
|
28
|
+
responds_to?(all) == all
|
29
|
+
end
|
30
|
+
|
31
|
+
def a?(*kls)
|
32
|
+
kls.when.mt?.be!([Array]).any? { |k| is_a? k }
|
33
|
+
end
|
34
|
+
|
35
|
+
def p?() a? Proc end
|
36
|
+
def m?() a? Symbol end
|
37
|
+
def s?() a? String end
|
38
|
+
def i?() a? Fixnum end
|
39
|
+
def f?() a? Float end
|
40
|
+
def n?() a? Fixnum, Float end
|
41
|
+
|
42
|
+
def h?() a? Hash end
|
43
|
+
def c?() a? Array, Hash end
|
44
|
+
|
45
|
+
def x?() a? NilClass, FalseClass end
|
46
|
+
|
47
|
+
def z0?() respond_to?(:zero?) ? zero? : f!.zero? end
|
48
|
+
|
49
|
+
def un?()
|
50
|
+
x? || (s? && s !~ /\S/) || (c? && mt?) || (n? && z0?)
|
51
|
+
end
|
52
|
+
|
53
|
+
def o?() !un? end
|
5
54
|
|
6
55
|
def i!() to_s.scan(/[\d\.]+/).join.to_i end #xxx strip out junk?
|
7
56
|
def f!() to_s.scan(/[\d\.]+/).join.to_f end
|
8
|
-
def
|
57
|
+
def s!() to_s end
|
9
58
|
def zeno!() z0? ? 1.0 : self end
|
10
59
|
|
11
|
-
|
60
|
+
def u!(*args)
|
61
|
+
if a?
|
62
|
+
each { |i| i.u!(*args) }
|
63
|
+
else
|
64
|
+
if responds_to_all? :assign_attributes, :save
|
65
|
+
args.select(&:h?).each do |arg|
|
66
|
+
assign_attributes(arg)
|
67
|
+
end
|
68
|
+
save(validate:false)
|
69
|
+
elsif responds_to? :update_attribute
|
70
|
+
args.select(&:h?).each do |arg|
|
71
|
+
arg.each do |k, v|
|
72
|
+
update_attribute(k, v)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
12
78
|
|
13
79
|
def rand?
|
14
80
|
rand(1000000).odd?
|
@@ -68,8 +134,9 @@ module Mobj
|
|
68
134
|
alias_method :ifnil, :try?
|
69
135
|
|
70
136
|
def when
|
137
|
+
iam = self
|
71
138
|
Forwarder.new do |name, *args, &block|
|
72
|
-
if methods.include?(name) && __send__(name, *args, &block)
|
139
|
+
if (iam.respond_to?(name) || iam.methods.include?(name)) && (got = iam.__send__(name, *args, &block))
|
73
140
|
thn = Forwarder.new do |name, *args, &block|
|
74
141
|
if name.sym == :then
|
75
142
|
thn
|
@@ -80,7 +147,7 @@ module Mobj
|
|
80
147
|
end
|
81
148
|
end
|
82
149
|
else
|
83
|
-
Forwarder.new do |name|
|
150
|
+
ret = Forwarder.new do |name, *args, &block|
|
84
151
|
if name.sym == :then
|
85
152
|
els = Forwarder.new do |name|
|
86
153
|
if name.sym == :else
|
@@ -90,7 +157,7 @@ module Mobj
|
|
90
157
|
end
|
91
158
|
end
|
92
159
|
else
|
93
|
-
|
160
|
+
iam
|
94
161
|
end
|
95
162
|
end
|
96
163
|
end
|
@@ -99,10 +166,6 @@ module Mobj
|
|
99
166
|
|
100
167
|
alias_method :if?, :when
|
101
168
|
|
102
|
-
def iff?(value = nil, &block)
|
103
|
-
block ? instance_exec(value, &block) : value
|
104
|
-
end
|
105
|
-
|
106
169
|
end
|
107
170
|
|
108
171
|
end
|
data/lib/ext/string.rb
CHANGED
data/lib/mobj.rb
CHANGED
@@ -9,6 +9,8 @@ module Mobj
|
|
9
9
|
attr_accessor :root, :handler
|
10
10
|
def initialize(root = nil, &handler) @root, @handler = root, handler end
|
11
11
|
def method_missing(name, *args, &block) handler.call(name, *args, &block) end
|
12
|
+
def to_ary() [root, handler] end
|
13
|
+
def inspect() { class:self.class, root:root, handler:handler}.inspect end
|
12
14
|
end
|
13
15
|
|
14
16
|
class Token
|
@@ -16,15 +18,15 @@ module Mobj
|
|
16
18
|
@type, @path, @options = type.to_sym, nil, {}
|
17
19
|
tokens = []
|
18
20
|
args.each do |arg|
|
19
|
-
if arg.
|
21
|
+
if arg.h?
|
20
22
|
@options.merge!(arg)
|
21
|
-
elsif arg.
|
23
|
+
elsif arg.s?
|
22
24
|
tokens << arg.sym
|
23
25
|
else
|
24
26
|
tokens << arg
|
25
27
|
end
|
26
28
|
end
|
27
|
-
@path = tokens.sequester
|
29
|
+
@path = tokens.sequester!
|
28
30
|
end
|
29
31
|
|
30
32
|
def to_s() "#{@type.to_s.upcase}(#@path#{ " => #@options" unless @options.empty?})" end
|
@@ -33,18 +35,18 @@ module Mobj
|
|
33
35
|
obj.__mobj__reparent
|
34
36
|
if path == :* || obj.nil?
|
35
37
|
obj
|
36
|
-
elsif obj.
|
38
|
+
elsif obj.a?
|
37
39
|
if path[0] == '*' && obj.respond_to?(path[1..-1].sym)
|
38
40
|
obj.__send__(path[1..-1].sym)
|
39
41
|
else
|
40
42
|
obj.map { |o| extract(o, path) }
|
41
43
|
end
|
42
|
-
elsif path.
|
44
|
+
elsif path.a?
|
43
45
|
path.map { |pth| obj[pth.sym] }
|
44
46
|
elsif path[0] == '*' && obj.respond_to?(path[1..-1].sym)
|
45
47
|
obj.__send__(path[1..-1].sym)
|
46
48
|
elsif obj.respond_to?(:[]) && (obj.is_a?(Hash) || path.to_s =~ /[0-9.-]+/)
|
47
|
-
if obj.
|
49
|
+
if obj.h?
|
48
50
|
obj[path.sym]
|
49
51
|
else
|
50
52
|
obj[path.to_s.to_i] if path.to_s =~ /^\d+$/
|
@@ -75,7 +77,7 @@ module Mobj
|
|
75
77
|
else
|
76
78
|
named = m.to_h.invert
|
77
79
|
name = if named.empty?
|
78
|
-
m.captures.empty? ? key : m.captures.sequester
|
80
|
+
m.captures.empty? ? key : m.captures.sequester!
|
79
81
|
else
|
80
82
|
named.find { |k, v| !k.nil? }.attempt(key).last
|
81
83
|
end
|
@@ -87,7 +89,7 @@ module Mobj
|
|
87
89
|
end
|
88
90
|
|
89
91
|
def walk(obj, root = obj)
|
90
|
-
obj, root = Circle.wrap(obj), Circle.wrap(root)
|
92
|
+
obj, root = Circle.wrap!(obj), Circle.wrap!(root)
|
91
93
|
val = case @type
|
92
94
|
when :literal
|
93
95
|
@path.to_s
|
@@ -135,16 +137,16 @@ module Mobj
|
|
135
137
|
end
|
136
138
|
|
137
139
|
class Circle
|
138
|
-
def self.wrap(wrapped)
|
140
|
+
def self.wrap!(wrapped)
|
139
141
|
return wrapped if wrapped.is_a?(CircleHash) || wrapped.is_a?(CircleRay)
|
140
142
|
|
141
143
|
if wrapped.is_a?(Array)
|
142
144
|
circle = CircleRay.new
|
143
|
-
wrapped.each_with_index { |item, i| circle[i] = wrap(item) }
|
145
|
+
wrapped.each_with_index { |item, i| circle[i] = wrap!(item) }
|
144
146
|
circle
|
145
147
|
elsif wrapped.is_a?(Hash)
|
146
148
|
circle = CircleHash.new
|
147
|
-
wrapped.each_pair { |key, val| circle[key] = wrap(val) }
|
149
|
+
wrapped.each_pair { |key, val| circle[key] = wrap!(val) }
|
148
150
|
circle
|
149
151
|
else
|
150
152
|
wrapped
|
@@ -190,7 +192,7 @@ module Mobj
|
|
190
192
|
end
|
191
193
|
|
192
194
|
alias_method :lookup, :[]
|
193
|
-
def [](*keys) keys.map { |key| self.lookup(key) }.sequester end
|
195
|
+
def [](*keys) keys.map { |key| self.lookup(key) }.sequester! end
|
194
196
|
end
|
195
197
|
|
196
198
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mason Glaves
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|