y_support 2.0.7 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79b3711ed303558aedfe7d53e3aeef0edd50bcc6
4
- data.tar.gz: 791cd64df5e2a2ca3df04ee734dd27585cdb331f
3
+ metadata.gz: d492494b1cf15742c2b407f187e650850633102c
4
+ data.tar.gz: e6c2136adbdd92e76f0b7231e73745536d903690
5
5
  SHA512:
6
- metadata.gz: 0beebdc94e5ace854f9d89f9c18eb2c5cda5591a60659e65eeb49ddeb9a8aabfe4796c083fddd180c1f67257a6fb6ad25e9478f0261e43da8010b11564e21e64
7
- data.tar.gz: a4535df1e3a5c7475469cbbd14aec4ed0d984169fbada2430c48499529a26dbfb07d042585d7aaa33091eb29092b1183c22cca17be6e92d31b6487b540e98fb8
6
+ metadata.gz: b48bb642dfd998952c56e5156ee432de0326847b35073a13f5fddde7666ba8d50932a22d10183b4c9a39b46648a43d73357133a3464763733a0f20c3efa481d1
7
+ data.tar.gz: 3564cbb4e43fd0a91d3aebf95336f9ff4b21392d341c99aa92d192406e443cbb597e1757eee97f69abdd1ca3f76a2cf46407d963c62fa0bcea293417d9e08c38
@@ -33,42 +33,29 @@ require 'y_support'
33
33
  module NameMagic
34
34
  DEBUG = false
35
35
 
36
- def self.included target
37
- case target
36
+ def self.included ɱ
37
+ case ɱ
38
38
  when Class then # we will decorate its #new method
39
- class << target
39
+ class << ɱ
40
40
  alias :original_method_new :new # Make space to decorate #new
41
41
  end
42
42
  # Attach the decorators etc.
43
- target.extend ::NameMagic::ClassMethods
44
- target.extend ::NameMagic::NamespaceMethods
43
+ ɱ.extend ::NameMagic::ClassMethods
44
+ ɱ.extend ::NameMagic::NamespaceMethods
45
45
  # Attach namespace methods also to the namespace, if given.
46
46
  begin
47
- if target.namespace == target then
48
- target.define_singleton_method :namespace do target end
47
+ if ɱ.namespace == ɱ then
48
+ ɱ.define_singleton_method :namespace do ɱ end
49
49
  else
50
- target.namespace.extend ::NameMagic::NamespaceMethods
50
+ ɱ.namespace.extend ::NameMagic::NamespaceMethods
51
51
  end
52
52
  rescue NoMethodError
53
53
  end
54
- else # it is a Module; we'll infect it with this #included method
55
- target_included = target.method( :included )
56
- this_included = self.method( :included )
57
- target_pre_included = begin
58
- target.method( :pre_included )
59
- rescue NameError
60
- end
61
- if target_pre_included then # target has #pre_included hook
62
- target.define_singleton_method :included do |ç|
63
- target_pre_included.( ç )
64
- this_included.( ç )
65
- target_included.( ç )
66
- end
67
- else # target has no #pre_included hook
68
- target.define_singleton_method :included do |ç|
69
- this_included.( ç )
70
- target_included.( ç )
71
- end
54
+ else # it is a Module; we'll infect it with our #included method
55
+ ɱ_included, this_included = ɱ.method( :included ), method( :included )
56
+ ɱ.define_singleton_method :included do |ç|
57
+ this_included.( ç )
58
+ ɱ_included.( ç )
72
59
  end
73
60
  end
74
61
  end # self.included
@@ -95,12 +82,14 @@ module NameMagic
95
82
  # Names an instance, cautiously (ie. no overwriting of existing names).
96
83
  #
97
84
  def name=( ɴ )
85
+ puts "NameMagic: Naming with argument #{ɴ}." if DEBUG
98
86
  # get previous name of this instance, if any
99
87
  old_ɴ = self.class.__instances__[ self ]
100
88
  # honor the hook
101
89
  name_set_closure = self.class.instance_variable_get :@name_set_closure
102
90
  ɴ = name_set_closure.call( ɴ, self, old_ɴ ) if name_set_closure
103
91
  ɴ = self.class.send( :validate_capitalization, ɴ ).to_sym
92
+ puts "NameMagic: Name adjusted to #{ɴ}." if DEBUG
104
93
  return if old_ɴ == ɴ # already named as required; nothing to do
105
94
  # otherwise, be cautious about name collision
106
95
  raise NameError, "Name '#{ɴ}' already exists in " +
@@ -114,11 +103,13 @@ module NameMagic
114
103
  # Names an instance, aggresively (overwrites existing names).
115
104
  #
116
105
  def name!( ɴ )
106
+ puts "NameMagic: Rudely naming with argument #{ɴ}." if DEBUG
117
107
  old_ɴ = self.class.__instances__[ self ] # get instance's old name, if any
118
108
  # honor the hook
119
109
  name_set_closure = self.class.instance_variable_get :@name_set_closure
120
110
  ɴ = name_set_closure.( ɴ, self, old_ɴ ) if name_set_closure
121
111
  ɴ = self.class.send( :validate_capitalization, ɴ ).to_sym
112
+ puts "NameMagic: Name adjusted to #{ɴ}." if DEBUG
122
113
  return false if old_ɴ == ɴ # already named as required; nothing to do
123
114
  # otherwise, rudely remove the collider, if any
124
115
  pair = self.class.__instances__.rassoc( ɴ )
@@ -168,10 +159,12 @@ module NameMagic
168
159
  end
169
160
 
170
161
  # Makes the class use the namespace supplied as the argument. If no argument
171
- # is given, self will be the namespace.
162
+ # is given, the class/module itself will be made its own namespace. Returns
163
+ # self.
172
164
  #
173
165
  def namespace! namespc=self
174
- namespc.tap { |n| define_singleton_method :namespace do n end }
166
+ namespc.extend ::NameMagic::NamespaceMethods unless namespc == self
167
+ tap { define_singleton_method :namespace do namespc end }
175
168
  end
176
169
 
177
170
  # Returns the instance identified by the argument. NameError is raised, if
@@ -181,6 +174,7 @@ module NameMagic
181
174
  #
182
175
  def instance arg
183
176
  # In @instances hash, name 'nil' means nameless!
177
+ puts "NameMagic: #instance called with argument #{arg}." if DEBUG
184
178
  msg = "'nil' is not a valid argument type for NameMagic#instance method!"
185
179
  fail TypeError, msg if arg.nil?
186
180
  # if the argument is an actual instance, just return it
@@ -283,31 +277,38 @@ module NameMagic
283
277
  def serve_all_modules
284
278
  todo = ( nameless_instances + __avid_instances__ ).map( &:object_id ).uniq
285
279
  ObjectSpace.each_object Module do |ɱ| # for all the modules...
286
- puts ɱ if ::NameMagic::DEBUG
280
+ # ( puts ɱ if DEBUG ) rescue
287
281
  ɱ.constants( false ).each do |const_ß| # and all the constants...
288
282
  begin # insurance against constant dynamic loading fails
289
283
  ◉ = ɱ.const_get( const_ß )
290
284
  rescue LoadError, StandardError
291
285
  next
292
286
  end
293
- if todo.include? ◉.object_id then # is it a wanted object?
287
+ if todo.include? ◉.object_id then # we found a wanted object
288
+ puts "NameMagic: Wanted object found under #{const_ß}." if DEBUG
294
289
  if __avid_instances__.map( &:object_id ).include? ◉.object_id # avid
290
+ puts "NameMagic: It is avid." if DEBUG
295
291
  __avid_instances__ # 1. remove from avid list
296
292
  .delete_if { |instance| instance.object_id == ◉.object_id }
297
293
  ◉.name! const_ß # 2. name rudely
298
294
  else # not avid
295
+ puts "NameMagic: It is not avid." if DEBUG
299
296
  ɴ = if @name_set_closure then # honor name_set_closure
300
297
  @name_set_closure.( const_ß, ◉, nil )
298
+ .tap { |r| puts "The resulting name is #{r}." }
301
299
  else const_ß end
302
300
  ɴ = validate_capitalization( ɴ ).to_sym
301
+ puts "NameMagic: Name adjusted to #{ɴ}." if DEBUG
303
302
  conflicter = begin # be cautious
304
303
  namespace.const_get( ɴ )
305
304
  rescue NameError
306
305
  end
307
306
  if conflicter then
307
+ puts "NameMagic: Conflicter exists named #{ɴ}." if DEBUG
308
308
  raise NameError, "Another #{self} named '#{ɴ}' already " +
309
309
  "exists!" unless conflicter == ◉
310
310
  else
311
+ puts "NameMagic: No conflicter named #{ɴ}, about to use it." if DEBUG
311
312
  __instances__[ ◉ ] = ɴ # add the instance to the namespace
312
313
  namespace.const_set ɴ, ◉ # add the instance to the namespace
313
314
  end
@@ -1,3 +1,3 @@
1
1
  module YSupport
2
- VERSION = "2.0.7"
2
+ VERSION = "2.0.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: y_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - boris