y_support 2.0.7 → 2.0.8

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: 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