british 0.2.2 → 0.2.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/lib/british.rb +119 -12
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca12a1028d620d5acb7449788a9cc4cd9d687c6e
|
4
|
+
data.tar.gz: abf7dc891caacbaa8af865505b4239cb3cbe0c57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3cddb6ed91db752f4a1732af9532627cfe0ce08b51126e10a625a2e86fab01a4217b9da0f73c57e0646e40d4a6dc8c1dfac0fb8ba763bc8992314d68e0aabe8
|
7
|
+
data.tar.gz: 212803711ca2b2f0a86ff3c714843d244b214e97cf8a8b2da01d5d005c7736c3fa221716d8fea69f325d0c9f786f3101753cf800602d60b085db5214afcb57c7
|
data/lib/british.rb
CHANGED
@@ -78,7 +78,14 @@ module British
|
|
78
78
|
# 2. Add and alias of the parent's `initialize` (for `super` calls)
|
79
79
|
# 3. Create your own initialize method (to be auto-called by the `new`)
|
80
80
|
#
|
81
|
-
#
|
81
|
+
# Warning
|
82
|
+
# By including this module you redefine your initialiZe method.
|
83
|
+
# Use initialiSe method instead of the original, but not both!
|
84
|
+
#
|
85
|
+
# Example:
|
86
|
+
# include British::Initialisable
|
87
|
+
#
|
88
|
+
# Returns nothing
|
82
89
|
def self.included(host_class)
|
83
90
|
unless host_class == Object
|
84
91
|
# alias parent's initialise method
|
@@ -86,10 +93,19 @@ module British
|
|
86
93
|
alias_method :initialise, :initialize
|
87
94
|
end
|
88
95
|
|
89
|
-
#
|
96
|
+
# suppress 'method redefined; discarding old initialize' warning
|
97
|
+
# https://goo.gl/PSzrbF ¯\_(ツ)_/¯
|
98
|
+
verbose = $VERBOSE
|
99
|
+
$VERBOSE = nil
|
100
|
+
|
101
|
+
# Once again: since we use this Initialisable module in our classes
|
102
|
+
# ONLY, and create our own initialiSe method, we can't break anything
|
103
|
+
# by redefining initialiZe
|
90
104
|
define_method :initialize do |*args|
|
91
105
|
initialise(*args)
|
92
106
|
end
|
107
|
+
|
108
|
+
$VERBOSE = verbose
|
93
109
|
end
|
94
110
|
end
|
95
111
|
end
|
@@ -98,36 +114,80 @@ module British
|
|
98
114
|
alias is_an? is_a?
|
99
115
|
alias an? is_an?
|
100
116
|
|
117
|
+
# Hook to be called when British module being included
|
118
|
+
# Add method_missing method with all the British 'magic' behaviour
|
119
|
+
# Extends a class to make it British
|
120
|
+
#
|
121
|
+
# Example:
|
122
|
+
#
|
123
|
+
# class Example
|
124
|
+
# include British
|
125
|
+
#
|
126
|
+
# def color
|
127
|
+
# 'red'
|
128
|
+
# end
|
129
|
+
# end
|
130
|
+
#
|
131
|
+
# example = Example.new
|
132
|
+
# example.colour # => "red"
|
133
|
+
#
|
134
|
+
# Returns nothing
|
101
135
|
def self.included(host_class)
|
102
136
|
host_class.extend ClassMethods
|
103
|
-
host_class.
|
137
|
+
host_class.class_overwrite_method_missing
|
104
138
|
|
105
139
|
host_class.instance_eval do
|
106
140
|
def method_added(name)
|
107
|
-
|
108
|
-
overwrite_method_missing
|
141
|
+
class_overwrite_method_missing if name == :method_missing
|
109
142
|
end
|
110
143
|
end
|
111
144
|
end
|
112
145
|
|
113
|
-
#
|
146
|
+
# Hook to be called when British module being used to extend an object
|
147
|
+
# Add method_missing method with all the British 'magic' behaviour
|
148
|
+
# Extends an object instance to make it British
|
149
|
+
#
|
150
|
+
# Example:
|
151
|
+
#
|
152
|
+
# not_british = SomeClass.new # with color method
|
153
|
+
# refugee = SomeClass.new # with color method
|
154
|
+
#
|
155
|
+
# # Make it British
|
156
|
+
# british = refugee.extend(British)
|
157
|
+
#
|
158
|
+
# not_british.colour # undefined method `colour'
|
159
|
+
# british.colour # works well
|
160
|
+
#
|
161
|
+
# Returns nothing
|
162
|
+
def self.extended(host_object)
|
163
|
+
host_object.extend ClassMethods
|
164
|
+
host_object.object_overwrite_method_missing
|
165
|
+
|
166
|
+
host_object.instance_eval do
|
167
|
+
def singleton_method_added(name)
|
168
|
+
object_overwrite_method_missing if name == :method_missing
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
# Public: ClassMethods to extend in self.included/self.extended
|
114
174
|
# Defines an?, is_an?, method_missing
|
115
175
|
module ClassMethods
|
116
|
-
|
117
|
-
# Public: method to overwrite original method_missing with magic one:
|
176
|
+
# Public: method to overwrite original method_missing with a magic one:
|
118
177
|
# this method_missing tries to translate British methods to American
|
119
|
-
# ones before throwing NoMethodError if neither method was found.
|
178
|
+
# ones before throwing NoMethodError if neither method was found. Works
|
179
|
+
# on a class level.
|
120
180
|
#
|
121
181
|
# name - original method name
|
122
182
|
# *args - original method args
|
123
183
|
#
|
124
|
-
# Example
|
184
|
+
# Example:
|
125
185
|
#
|
126
186
|
# # with any British object
|
127
187
|
# british_object.colour # will be translated into color
|
128
188
|
# british_object.magnetise # will be translated into magnetize
|
129
189
|
#
|
130
|
-
# # all method endings
|
190
|
+
# # all method endings are allowed
|
131
191
|
# british_object.surprize!
|
132
192
|
# british_object.surprize?
|
133
193
|
# british_object.surprize=
|
@@ -138,10 +198,11 @@ module British
|
|
138
198
|
# Returns the original method's result
|
139
199
|
# Calls original method_missing (if British didn't hook anything)
|
140
200
|
# Raises NoMethodError if the method cannot be found
|
141
|
-
def
|
201
|
+
def class_overwrite_method_missing
|
142
202
|
class_eval do
|
143
203
|
unless method_defined?(:british_method_missing)
|
144
204
|
define_method(:british_method_missing) do |name, *args|
|
205
|
+
|
145
206
|
# do British magic
|
146
207
|
americanised_name = name.to_s.gsub(BRITISH_ENDING_PATTERN, ENDINGS)
|
147
208
|
return send(americanised_name, *args) if respond_to?(americanised_name)
|
@@ -161,5 +222,51 @@ module British
|
|
161
222
|
end
|
162
223
|
end
|
163
224
|
end
|
225
|
+
|
226
|
+
# Public: method to overwrite original method_missing with a magic one:
|
227
|
+
# this method_missing tries to translate British methods to American
|
228
|
+
# ones before throwing NoMethodError if neither method was found. Works
|
229
|
+
# on an instance level.
|
230
|
+
#
|
231
|
+
# name - original method name
|
232
|
+
# *args - original method args
|
233
|
+
#
|
234
|
+
# Example:
|
235
|
+
#
|
236
|
+
# # with any British object
|
237
|
+
# british_object.colour # will be translated into color
|
238
|
+
# british_object.magnetise # will be translated into magnetize
|
239
|
+
#
|
240
|
+
# # all method endings are allowed
|
241
|
+
# british_object.surprize!
|
242
|
+
# british_object.surprize?
|
243
|
+
# british_object.surprize=
|
244
|
+
#
|
245
|
+
# # complex names are supported
|
246
|
+
# british_object.initialise_something # initialize_something will be called
|
247
|
+
#
|
248
|
+
# Returns the original method's result
|
249
|
+
# Calls original method_missing (if British didn't hook anything)
|
250
|
+
# Raises NoMethodError if the method cannot be found
|
251
|
+
def object_overwrite_method_missing
|
252
|
+
instance_eval do
|
253
|
+
unless respond_to?(:british_method_missing)
|
254
|
+
def british_method_missing(name, *args)
|
255
|
+
$stdout.flush
|
256
|
+
# do British magic
|
257
|
+
americanised_name = name.to_s.gsub(BRITISH_ENDING_PATTERN, ENDINGS)
|
258
|
+
return send(americanised_name, *args) if respond_to?(americanised_name)
|
259
|
+
|
260
|
+
# call original method_missing (avoid double original method calls)
|
261
|
+
return original_method_missing(name, *args) if caller[0] !~ /method_missing/ && defined?(:original_method_missing)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
if method(:method_missing) != method(:british_method_missing)
|
266
|
+
alias :original_method_missing :method_missing
|
267
|
+
alias :method_missing :british_method_missing
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
164
271
|
end
|
165
272
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: british
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serge Bedzhyk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Allows to use alternative words endings: -ise instead of -ize etc. Defines
|
14
14
|
`is_an?` as an alias of the is_a? method. Provides module to use `initialise` in
|
@@ -39,7 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
39
39
|
version: '0'
|
40
40
|
requirements: []
|
41
41
|
rubyforge_project:
|
42
|
-
rubygems_version: 2.5.
|
42
|
+
rubygems_version: 2.5.1
|
43
43
|
signing_key:
|
44
44
|
specification_version: 4
|
45
45
|
summary: A tiny module that is supposed to help Brits to use Ruby with more comfort
|