nrser 0.2.2 → 0.3.0

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.
Files changed (188) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nrser/char/alpha_numeric_sub.rb +1 -2
  3. data/lib/nrser/char.rb +0 -6
  4. data/lib/nrser/core_ext/array.rb +120 -0
  5. data/lib/nrser/core_ext/binding.rb +44 -0
  6. data/lib/nrser/{functions → core_ext}/enumerable/find_map.rb +18 -15
  7. data/lib/nrser/{ext → core_ext}/enumerable.rb +10 -24
  8. data/lib/nrser/core_ext/exception.rb +30 -0
  9. data/lib/nrser/core_ext/hash/extract_values_at.rb +49 -0
  10. data/lib/nrser/core_ext/hash/transform_values_with_keys.rb +24 -0
  11. data/lib/nrser/core_ext/hash.rb +50 -0
  12. data/lib/nrser/core_ext/module/method_objects.rb +96 -0
  13. data/lib/nrser/core_ext/module/names.rb +69 -0
  14. data/lib/nrser/core_ext/module/source_locations.rb +214 -0
  15. data/lib/nrser/core_ext/module.rb +2 -0
  16. data/lib/nrser/core_ext/object/lazy_var.rb +31 -0
  17. data/lib/nrser/core_ext/object.rb +46 -0
  18. data/lib/nrser/core_ext/open_struct.rb +6 -0
  19. data/lib/nrser/{ext → core_ext}/pathname.rb +8 -5
  20. data/lib/nrser/{ext → core_ext}/string.rb +6 -12
  21. data/lib/nrser/core_ext/symbol.rb +13 -0
  22. data/lib/nrser/core_ext/time.rb +46 -0
  23. data/lib/nrser/core_ext.rb +13 -0
  24. data/lib/nrser/errors/abstract_method_error.rb +150 -0
  25. data/lib/nrser/errors/argument_error.rb +42 -0
  26. data/lib/nrser/errors/nicer_error.rb +298 -72
  27. data/lib/nrser/errors/type_error.rb +46 -0
  28. data/lib/nrser/errors.rb +4 -53
  29. data/lib/nrser/ext/tree.rb +3 -0
  30. data/lib/nrser/functions/enumerable/associate.rb +6 -9
  31. data/lib/nrser/functions/enumerable/include_slice.rb +2 -3
  32. data/lib/nrser/functions/enumerable.rb +1 -3
  33. data/lib/nrser/functions/exception.rb +1 -1
  34. data/lib/nrser/functions/hash.rb +0 -6
  35. data/lib/nrser/functions/merge_by.rb +2 -2
  36. data/lib/nrser/functions/module/method_objects.rb +77 -0
  37. data/lib/nrser/functions/module.rb +1 -2
  38. data/lib/nrser/functions/open_struct.rb +25 -35
  39. data/lib/nrser/functions/proc.rb +1 -6
  40. data/lib/nrser/functions/string/looks_like.rb +32 -1
  41. data/lib/nrser/functions/string.rb +1 -40
  42. data/lib/nrser/functions/text/lines.rb +2 -1
  43. data/lib/nrser/functions.rb +0 -1
  44. data/lib/nrser/graph/tsorter.rb +41 -0
  45. data/lib/nrser/labs/core_ext/binding.rb +37 -0
  46. data/lib/nrser/labs/stash.rb +372 -0
  47. data/lib/nrser/{logging → log}/appender/sync.rb +3 -3
  48. data/lib/nrser/log/appender.rb +3 -0
  49. data/lib/nrser/{logging → log}/formatters/color.rb +47 -20
  50. data/lib/nrser/log/formatters/mixin.rb +270 -0
  51. data/lib/nrser/{logging → log}/formatters.rb +0 -0
  52. data/lib/nrser/log/logger.rb +229 -0
  53. data/lib/nrser/log/mixin.rb +56 -0
  54. data/lib/nrser/log.rb +723 -0
  55. data/lib/nrser/message.rb +24 -3
  56. data/lib/nrser/meta/source/location.rb +158 -0
  57. data/lib/nrser/meta.rb +1 -1
  58. data/lib/nrser/props/class_methods.rb +118 -0
  59. data/lib/nrser/props/immutable/hash.rb +111 -0
  60. data/lib/nrser/props/immutable/hash_variable.rb +82 -0
  61. data/lib/nrser/props/immutable/instance_variables.rb +48 -0
  62. data/lib/nrser/props/immutable/vector.rb +107 -0
  63. data/lib/nrser/props/instance_methods.rb +184 -0
  64. data/lib/nrser/props/metadata.rb +359 -0
  65. data/lib/nrser/props/mutable/instance_variables.rb +60 -0
  66. data/lib/nrser/props/mutable/stash.rb +199 -0
  67. data/lib/nrser/{meta/props → props}/prop.rb +217 -112
  68. data/lib/nrser/props/storage/instance_variable.rb +85 -0
  69. data/lib/nrser/props/storage/instance_variables.rb +67 -0
  70. data/lib/nrser/props/storage/key.rb +88 -0
  71. data/lib/nrser/props.rb +9 -0
  72. data/lib/nrser/refinements/sugar.rb +41 -0
  73. data/lib/nrser/refinements/types.rb +2 -2
  74. data/lib/nrser/refinements.rb +14 -16
  75. data/lib/nrser/rspex/example_group/describe_attribute.rb +24 -0
  76. data/lib/nrser/rspex/example_group/describe_called_with.rb +1 -6
  77. data/lib/nrser/rspex/example_group/{describe_use_case.rb → describe_case.rb} +6 -3
  78. data/lib/nrser/rspex/example_group/describe_class.rb +1 -0
  79. data/lib/nrser/rspex/example_group/describe_group.rb +29 -0
  80. data/lib/nrser/rspex/example_group/describe_instance_method.rb +2 -2
  81. data/lib/nrser/rspex/example_group/describe_message.rb +35 -0
  82. data/lib/nrser/rspex/example_group/describe_method.rb +23 -2
  83. data/lib/nrser/rspex/example_group/describe_module.rb +19 -0
  84. data/lib/nrser/rspex/example_group/describe_response_to.rb +32 -0
  85. data/lib/nrser/rspex/example_group/describe_section.rb +38 -0
  86. data/lib/nrser/rspex/example_group/describe_sent_to.rb +52 -0
  87. data/lib/nrser/rspex/example_group/describe_source_file.rb +49 -0
  88. data/lib/nrser/rspex/example_group/describe_spec_file.rb +41 -108
  89. data/lib/nrser/rspex/example_group/describe_when.rb +14 -7
  90. data/lib/nrser/rspex/example_group/describe_x.rb +39 -12
  91. data/lib/nrser/rspex/example_group/overrides.rb +66 -0
  92. data/lib/nrser/rspex/example_group.rb +20 -252
  93. data/lib/nrser/rspex/format.rb +83 -17
  94. data/lib/nrser/rspex.rb +4 -34
  95. data/lib/nrser/sugar/method_missing_forwarder.rb +50 -0
  96. data/lib/nrser/{env → sys/env}/path.rb +1 -2
  97. data/lib/nrser/{env.rb → sys/env.rb} +2 -1
  98. data/lib/nrser/sys.rb +5 -0
  99. data/lib/nrser/types/any.rb +36 -7
  100. data/lib/nrser/types/{array.rb → arrays.rb} +32 -81
  101. data/lib/nrser/types/attrs.rb +68 -15
  102. data/lib/nrser/types/booleans.rb +95 -34
  103. data/lib/nrser/types/bounded.rb +12 -10
  104. data/lib/nrser/types/combinators.rb +74 -37
  105. data/lib/nrser/types/errors/check_error.rb +86 -0
  106. data/lib/nrser/types/errors/from_string_error.rb +82 -0
  107. data/lib/nrser/types/factory.rb +91 -0
  108. data/lib/nrser/types/hashes.rb +171 -26
  109. data/lib/nrser/types/in.rb +25 -12
  110. data/lib/nrser/types/is.rb +50 -18
  111. data/lib/nrser/types/is_a.rb +52 -33
  112. data/lib/nrser/types/labels.rb +6 -33
  113. data/lib/nrser/types/maybe.rb +12 -4
  114. data/lib/nrser/types/nil.rb +24 -4
  115. data/lib/nrser/types/not.rb +6 -16
  116. data/lib/nrser/types/numbers.rb +94 -57
  117. data/lib/nrser/types/pairs.rb +57 -57
  118. data/lib/nrser/types/paths.rb +112 -133
  119. data/lib/nrser/types/responds.rb +64 -74
  120. data/lib/nrser/types/shape.rb +29 -24
  121. data/lib/nrser/types/strings.rb +25 -17
  122. data/lib/nrser/types/symbols.rb +19 -17
  123. data/lib/nrser/types/trees.rb +18 -70
  124. data/lib/nrser/types/tuples.rb +36 -40
  125. data/lib/nrser/types/type.rb +342 -91
  126. data/lib/nrser/types/when.rb +40 -18
  127. data/lib/nrser/types/where.rb +94 -9
  128. data/lib/nrser/types.rb +72 -63
  129. data/lib/nrser/version.rb +1 -1
  130. data/lib/nrser.rb +18 -18
  131. data/spec/lib/nrser/{functions/binding/template_spec.rb → core_ext/binding/erb_spec.rb} +5 -5
  132. data/spec/lib/nrser/{functions → core_ext}/enumerable/find_map_spec.rb +8 -6
  133. data/spec/lib/nrser/{refinements → core_ext}/hash_spec.rb +9 -22
  134. data/spec/lib/nrser/errors/abstract_method_error_spec.rb +12 -5
  135. data/spec/lib/nrser/functions/enumerable/{to_h_by_spec.rb → associate_spec.rb} +1 -1
  136. data/spec/lib/nrser/functions/merge_by_spec.rb +1 -1
  137. data/spec/lib/nrser/functions/tree/each_branch_spec.rb +3 -3
  138. data/spec/lib/nrser/functions/tree/transform_spec.rb +14 -15
  139. data/spec/lib/nrser/gem_ext/hamster/json_spec.rb +4 -0
  140. data/spec/lib/nrser/meta/source/location_spec.rb +86 -0
  141. data/spec/lib/nrser/props/immutable/hash_spec.rb +297 -0
  142. data/spec/lib/nrser/props/immutable/vector_spec.rb +296 -0
  143. data/spec/lib/nrser/{meta/props_spec.rb → props/original_props_spec.rb} +11 -16
  144. data/spec/lib/nrser/{meta/props → props}/to_and_from_data_spec.rb +10 -8
  145. data/spec/lib/nrser/refinements/array_spec.rb +2 -15
  146. data/spec/lib/nrser/refinements/erb_spec.rb +5 -7
  147. data/spec/lib/nrser/refinements/set_spec.rb +2 -15
  148. data/spec/lib/nrser/{env → sys/env}/path/insert_spec.rb +4 -2
  149. data/spec/lib/nrser/{env → sys/env}/path_spec.rb +4 -2
  150. data/spec/lib/nrser/types/array_spec.rb +8 -8
  151. data/spec/lib/nrser/types/paths_spec.rb +15 -18
  152. data/spec/spec_helper.rb +4 -0
  153. metadata +109 -69
  154. data/lib/nrser/ext/binding.rb +0 -36
  155. data/lib/nrser/ext/module.rb +0 -62
  156. data/lib/nrser/ext.rb +0 -8
  157. data/lib/nrser/functions/binding.rb +0 -76
  158. data/lib/nrser/functions/enumerable/map_keys.rb +0 -0
  159. data/lib/nrser/functions/enumerable/map_values.rb +0 -94
  160. data/lib/nrser/functions/hash/deep_merge.rb +0 -57
  161. data/lib/nrser/functions/hash/except_keys.rb +0 -44
  162. data/lib/nrser/functions/hash/slice_keys.rb +0 -43
  163. data/lib/nrser/functions/hash/stringify_keys.rb +0 -55
  164. data/lib/nrser/functions/hash/symbolize_keys.rb +0 -57
  165. data/lib/nrser/functions/hash/transform_keys.rb +0 -140
  166. data/lib/nrser/functions/module/methods.rb +0 -206
  167. data/lib/nrser/functions/module/source_locations.rb +0 -213
  168. data/lib/nrser/logging/appender.rb +0 -3
  169. data/lib/nrser/logging.rb +0 -353
  170. data/lib/nrser/meta/props/base.rb +0 -31
  171. data/lib/nrser/meta/props.rb +0 -357
  172. data/lib/nrser/refinements/array.rb +0 -133
  173. data/lib/nrser/refinements/binding.rb +0 -6
  174. data/lib/nrser/refinements/enumerator.rb +0 -5
  175. data/lib/nrser/refinements/exception.rb +0 -35
  176. data/lib/nrser/refinements/hash.rb +0 -150
  177. data/lib/nrser/refinements/module.rb +0 -5
  178. data/lib/nrser/refinements/object.rb +0 -42
  179. data/lib/nrser/refinements/open_struct.rb +0 -28
  180. data/lib/nrser/refinements/pathname.rb +0 -5
  181. data/lib/nrser/refinements/set.rb +0 -5
  182. data/lib/nrser/refinements/string.rb +0 -5
  183. data/lib/nrser/refinements/symbol.rb +0 -20
  184. data/lib/nrser/rspex/described.rb +0 -99
  185. data/spec/design/mapping_spec.rb +0 -42
  186. data/spec/lib/nrser/functions/hash_spec.rb +0 -41
  187. data/spec/lib/nrser/functions/string/truncate_spec.rb +0 -11
  188. data/spec/lib/nrser/refinements/truncate_spec.rb +0 -10
@@ -1,357 +0,0 @@
1
- # Refinements
2
- # =======================================================================
3
-
4
- using NRSER
5
- using NRSER::Types
6
-
7
-
8
- # Definitions
9
- # =======================================================================
10
-
11
- module NRSER::Meta::Props
12
- DEFAULT_CLASS_KEY = '__class__';
13
-
14
- PROPS_VARIABLE_NAME = :@__NRSER_props
15
- PROP_VALUES_VARIABLE_NAME = :@__NRSER_prop_values
16
-
17
-
18
- # Module Methods (Utilities)
19
- # =====================================================================
20
- #
21
- # These are *NOT* mixed in to including classes, and must be accessed
22
- # via `NRSER::Meta::Props.<method_name>`.
23
- #
24
- # They're utilities that should only really need to be used internally.
25
- #
26
-
27
-
28
- # @todo Document get_props_ref method.
29
- #
30
- # @param [type] arg_name
31
- # @todo Add name param description.
32
- #
33
- # @return [return_type]
34
- # @todo Document return value.
35
- #
36
- def self.get_props_ref klass
37
- unless klass.instance_variable_defined? PROPS_VARIABLE_NAME
38
- klass.instance_variable_set PROPS_VARIABLE_NAME, {}
39
- end
40
-
41
- klass.instance_variable_get PROPS_VARIABLE_NAME
42
- end # .get_props_ref
43
-
44
-
45
- # Instantiate a class from a data hash. The hash must contain the
46
- # `__class__` key and the target class must be loaded already.
47
- #
48
- # **WARNING**
49
- #
50
- # I'm sure this is all-sorts of unsafe. Please don't ever think this is
51
- # reasonable to use on untrusted data.
52
- #
53
- # @param [Hash<String, Object>] data
54
- # Data hash to load from.
55
- #
56
- # @param
57
- #
58
- # @return [NRSER::Meta::Props]
59
- # Instance of a propertied class.
60
- #
61
- def self.UNSAFE_load_instance_from_data data, class_key: DEFAULT_CLASS_KEY
62
- t.hash_.check data
63
-
64
- unless data.key?( class_key )
65
- raise ArgumentError.new binding.erb <<-ERB
66
- Data is missing <%= class_key %> key - no idea what class to
67
- instantiate.
68
-
69
- Data:
70
-
71
- <%= data.pretty_inspect %>
72
-
73
- ERB
74
- end
75
-
76
- # Get the class name from the data hash using the key, checking that it's
77
- # a non-empty string.
78
- class_name = t.non_empty_str.check data[class_key]
79
-
80
- # Resolve the constant at that name.
81
- klass = class_name.to_const
82
-
83
- # Make sure it's one of ours
84
- unless klass.included_modules.include?( NRSER::Meta::Props )
85
- raise ArgumentError.new binding.erb <<-ERB
86
- Can not load instance from data - bad class name.
87
-
88
- Extracted class name
89
-
90
- <%= class_name.inspect %>
91
-
92
- from class key
93
-
94
- <%= class_key.inspect %>
95
-
96
- which resolved to constant
97
-
98
- <%= klass.inspect %>
99
-
100
- but that class does not include the NRSER::Meta::Props mixin, which we
101
- check for to help protect against executing an unrelated `.from_data`
102
- class method when attempting to load.
103
-
104
- Data:
105
-
106
- <%= data.pretty_inspect %>
107
-
108
- ERB
109
- end
110
-
111
- # Kick off the restore and return the result
112
- klass.from_data data
113
-
114
- end # .UNSAFE_load_instance_from_data
115
-
116
-
117
- # Hook to extend the including class with {NRSER::Meta::Props:ClassMethods}
118
- def self.included base
119
- base.extend ClassMethods
120
- end
121
-
122
-
123
- # Mixed-In Class Methods
124
- # =====================================================================
125
-
126
- # Methods added to the including *class* via `extend`.
127
- #
128
- module ClassMethods
129
-
130
- # Get a map of property names to property instances.
131
- #
132
- # @param [Boolean] only_own:
133
- # Don't include super-class properties.
134
- #
135
- # @param [Boolean] only_primary:
136
- # Don't include properties that have a {NRSER::Meta::Props::Prop#source}.
137
- #
138
- # @return [Hash{ Symbol => NRSER::Meta::Props::Prop }]
139
- # Hash mapping property name to property instance.
140
- #
141
- def props only_own: false, only_primary: false
142
- result = if !only_own && superclass.respond_to?(:props)
143
- superclass.props only_own: only_own, only_primary: only_primary
144
- else
145
- {}
146
- end
147
-
148
- own_props = NRSER::Meta::Props.get_props_ref self
149
-
150
- if only_primary
151
- own_props.each {|name, prop|
152
- if prop.primary?
153
- result[name] = prop
154
- end
155
- }
156
- else
157
- result.merge! own_props
158
- end
159
-
160
- result
161
- end # #own_props
162
-
163
-
164
- # Define a property.
165
- #
166
- # @param [Symbol] name
167
- # The name of the property.
168
- #
169
- # @param [Hash{ Symbol => Object }] **opts
170
- # Constructor options for {NRSER::Meta::Props::Prop}.
171
- #
172
- # @return [NRSER::Meta::Props::Prop]
173
- # The newly created prop, thought you probably don't need it (it's
174
- # already all bound up on the class at this point), but why not?
175
- #
176
- def prop name, **opts
177
- ref = NRSER::Meta::Props.get_props_ref self
178
-
179
- t.sym.check name
180
-
181
- if ref.key? name
182
- raise ArgumentError.new NRSER.squish <<-END
183
- Prop #{ name.inspect } already set for #{ self }:
184
- #{ ref[name].inspect }
185
- END
186
- end
187
-
188
- prop = Prop.new self, name, **opts
189
- ref[name] = prop
190
-
191
- if prop.create_reader?
192
- class_eval do
193
- define_method prop.name do
194
- prop.get self
195
- end
196
- end
197
- end
198
-
199
- if prop.create_writer?
200
- class_eval do
201
- define_method "#{ prop.name }=" do |value|
202
- prop.set self, value
203
- end
204
- end
205
- end
206
-
207
- prop
208
- end # #prop
209
-
210
-
211
- # Instantiate from a data hash.
212
- #
213
- # @todo
214
- # This needs to be extended to handle prop'd classes nested in
215
- # arrays and hashes... but for the moment, it is what it is.
216
- #
217
- # @param [Hash<String, Object>] data
218
- #
219
- # @return [self]
220
- #
221
- def from_data data
222
- values = {}
223
- props = self.props
224
-
225
- data.each { |data_key, data_value|
226
- prop_key = case data_key
227
- when Symbol
228
- data_key
229
- when String
230
- data_key.to_sym
231
- end
232
-
233
- if prop_key &&
234
- prop = props[prop_key]
235
- values[prop_key] = prop.value_from_data data_value
236
- end
237
- }
238
-
239
- self.new values
240
- end # #from_data
241
-
242
-
243
- end # module ClassMethods
244
-
245
-
246
- # Mixed-In Instance Methods
247
- # =====================================================================
248
-
249
- # @todo Document initialize_props method.
250
- #
251
- # @param [type] arg_name
252
- # @todo Add name param description.
253
- #
254
- # @return [return_type]
255
- # @todo Document return value.
256
- #
257
- def initialize_props values
258
- self.class.props(only_primary: true).each { |name, prop|
259
- prop.set_from_values_hash self, values
260
- }
261
-
262
- # TODO Now trigger all eager defaults (check prop getting trigger
263
- # correctly)
264
- end # #initialize_props
265
-
266
-
267
- def merge overrides = {}
268
- self.class.new(
269
- self.to_h(only_primary: true).merge(overrides.symbolize_keys)
270
- )
271
- end
272
-
273
-
274
- # @todo Document to_h method.
275
- #
276
- # @param [type] arg_name
277
- # @todo Add name param description.
278
- #
279
- # @return [Hash<Symbol, Object>]
280
- # @todo Document return value.
281
- #
282
- def to_h only_own: false, only_primary: false
283
- self.class.
284
- props(only_own: only_own, only_primary: only_primary).
285
- map_values { |name, prop| prop.get self }
286
- end # #to_h
287
-
288
-
289
- # Create a "data" representation suitable for transport, storage, etc.
290
- #
291
- # The result is meant to consist of only basic data types and structures -
292
- # strings, numbers, arrays, hashes, datetimes, etc... though it depends on
293
- # any custom objects it encounters correctly responding to `#to_data` for
294
- # this to happen (as is implemented from classes that mix in Props here).
295
- #
296
- # Prop names are converted to strings (from symbols) since though YAML
297
- # supports symbol values, they have poor portability across languages,
298
- # and they mean the same thing in this situation.
299
- #
300
- # @param [type] arg_name
301
- # @todo Add name param description.
302
- #
303
- # @return [Hash<String, Object>]
304
- # @todo Document return value.
305
- #
306
- def to_data only_own: false,
307
- only_primary: false,
308
- add_class: true,
309
- class_key: NRSER::Meta::Props::DEFAULT_CLASS_KEY
310
-
311
- self.class.props(only_own: false, only_primary: false).
312
- map { |name, prop|
313
- [name.to_s, prop.to_data(self)]
314
- }.
315
- to_h.
316
- tap { |hash|
317
- hash[class_key] = self.class.name if add_class
318
- }
319
- end # #to_data
320
-
321
-
322
- # Language Inter-Op
323
- # ---------------------------------------------------------------------
324
-
325
- # Get a JSON {String} encoding the instance's data.
326
- #
327
- # @param [Array] *args
328
- # I really don't know. `#to_json` takes at last one argument, but I've
329
- # had trouble finding a spec for it :/
330
- #
331
- # @return [String]
332
- #
333
- def to_json *args
334
- to_data.to_json *args
335
- end # #to_json
336
-
337
-
338
- # Get a YAML {String} encoding the instance's data.
339
- #
340
- # @param [Array] *args
341
- # I really don't know... whatever {YAML.dump} sends to it i guess.
342
- #
343
- # @return [String]
344
- #
345
- def to_yaml *args
346
- to_data.to_yaml *args
347
- end
348
-
349
-
350
- end # module Props
351
-
352
-
353
- # Post-Processing
354
- # =======================================================================
355
-
356
- require_relative './props/prop'
357
- require_relative './props/base'
@@ -1,133 +0,0 @@
1
- module NRSER
2
- refine ::Array do
3
- include NRSER::Ext::Enumerable
4
- include NRSER::Ext::Tree
5
-
6
-
7
- # @return [Array]
8
- # new array consisting of all elements after the first (which may be
9
- # none, resulting in an empty array).
10
- #
11
- def rest
12
- NRSER.rest self
13
- end # #rest
14
-
15
-
16
- def extract! &block
17
- NRSER.extract_from_array! self, &block
18
- end
19
-
20
-
21
- # Calls {NRSER.ellipsis} on `self`.
22
- def ellipsis *args
23
- NRSER.ellipsis self, *args
24
- end
25
-
26
-
27
- # `to_*` Converters
28
- # =====================================================================
29
-
30
- # Checks that length is 2 and returns `self`.
31
- #
32
- # @return [Array]
33
- # Array of length 2.
34
- #
35
- # @raise [TypeError]
36
- # If length is not 2.
37
- #
38
- def to_pair
39
- unless length == 2
40
- raise TypeError,
41
- "Array is not of length 2: #{ self.inspect }"
42
- end
43
-
44
- self
45
- end # #to_pair
46
-
47
-
48
- # To Operation Objects
49
- # ---------------------------------------------------------------------
50
-
51
- # Creates a new {NRSER::Message} from the array.
52
- #
53
- # @example
54
- #
55
- # message = [:fetch, :x].to_message
56
- # message.send_to x: 'ex', y: 'why?'
57
- # # => 'ex'
58
- #
59
- # @return [NRSER::Message]
60
- #
61
- def to_message
62
- NRSER::Message.new *self
63
- end # #to_message
64
-
65
- alias_method :to_m, :to_message
66
-
67
-
68
- # Create a {Proc} that accepts a single `receiver` and provides this array's
69
- # entries as the arguments to `#public_send` (or `#send` if the `publicly`
70
- # option is `false`).
71
- #
72
- # Equivalent to
73
- #
74
- # to_message.to_proc publicly: boolean
75
- #
76
- # @example
77
- #
78
- # [:fetch, :x].sender.call x: 'ex'
79
- # # => 'ex'
80
- #
81
- # @param [Boolean] publicly:
82
- # When `true`, uses `#public_send` in liu of `#send`.
83
- #
84
- # @return [Proc]
85
- #
86
- def to_sender publicly: true
87
- to_message.to_proc publicly: publicly
88
- end
89
-
90
- alias_method :sender, :to_sender
91
- alias_method :sndr, :to_sender
92
-
93
-
94
- # See {NRSER.chainer}.
95
- #
96
- def to_chainer publicly: true
97
- NRSER.chainer self, publicly: publicly
98
- end # #to_chainer
99
-
100
- alias_method :chainer, :to_chainer
101
- alias_method :chnr, :to_chainer
102
-
103
-
104
- # Returns a lambda that calls accepts a single arg and calls `#dig` on it
105
- # with the elements of *this* array as arguments.
106
- #
107
- # @example
108
- # list = [{id: 1, name: "Neil"}, {id: 2, name: "Mica"}]
109
- # list.to_h_by &[:id].digger
110
- # # => {
111
- # # 1 => {id: 1, name: "Neil"},
112
- # # 2 => {id: 2, name: "Mica"},
113
- # # }
114
- #
115
- # @todo
116
- # I wanted to use `#to_proc` so that you could use `&[:id]`, but unary
117
- # `&` doesn't invoke refinements, and I don't really want to monkey-patch
118
- # anything, especially something as core as `#to_proc` and `Array`.
119
- #
120
- # @return [Proc]
121
- # Lambda proc that accepts a single argument and calls `#dig` with this
122
- # array's contents as the `#dig` arguments.
123
- #
124
- def to_digger
125
- NRSER::Message.new( :dig, *self ).to_proc
126
- end # #to_digger
127
-
128
- alias_method :digger, :to_digger
129
- alias_method :dggr, :to_digger
130
-
131
-
132
- end # refine ::Array
133
- end # NRSER
@@ -1,6 +0,0 @@
1
- module NRSER
2
- # Harness to include {NRSER::Ext::Binding} in {Binding}
3
- refine Binding do
4
- include NRSER::Ext::Binding
5
- end
6
- end # NRSER
@@ -1,5 +0,0 @@
1
- module NRSER
2
- refine ::Enumerator do
3
- include NRSER::Ext::Enumerable
4
- end # refine ::Enumerator
5
- end # NRSER
@@ -1,35 +0,0 @@
1
- module NRSER
2
- refine Exception do
3
- def format
4
- NRSER.format_exception self
5
- end
6
- end
7
-
8
- refine Exception.singleton_class do
9
-
10
- # Create a new instance from the squished message.
11
- #
12
- # See {NRSER.squish}.
13
- #
14
- # @param [String] message
15
- #
16
- # @return [Exception]
17
- #
18
- def squished message
19
- new NRSER.squish( message )
20
- end
21
-
22
- # Create a new instance from the dedented message.
23
- #
24
- # See {NRSER.dedent}.
25
- #
26
- # @param [String] message
27
- #
28
- # @return [Exception]
29
- #
30
- def dedented message
31
- new NRSER.dedent( message )
32
- end
33
-
34
- end # refine Exception.singleton_class
35
- end # NRSER
@@ -1,150 +0,0 @@
1
- module NRSER
2
-
3
- refine ::Hash do
4
- include NRSER::Ext::Enumerable
5
- include NRSER::Ext::Tree
6
-
7
-
8
- # See {NRSER.except_keys!}.
9
- def except! *keys
10
- NRSER.except_keys! self, *keys
11
- end
12
-
13
- alias_method :omit!, :except!
14
-
15
-
16
- # See {NRSER.except_keys}.
17
- def except *keys
18
- NRSER.except_keys self, *keys
19
- end
20
-
21
- alias_method :omit, :except
22
-
23
-
24
- # See {NRSER.slice_keys}.
25
- def slice *keys
26
- NRSER.slice_keys self, *keys
27
- end
28
-
29
-
30
- # See {NRSER.transform_keys!}
31
- def transform_keys! &block
32
- return enum_for(:transform_keys!) { size } unless block_given?
33
- NRSER.transform_keys! self, &block
34
- end
35
-
36
-
37
- # See {NRSER.deep_transform_keys!}
38
- def deep_transform_keys! &block
39
- return enum_for(:deep_transform_keys!) { size } unless block_given?
40
- NRSER.deep_transform_keys! self, &block
41
- end
42
-
43
- alias_method :deep_map_keys!, :deep_transform_keys!
44
- alias_method :map_keys_r!, :deep_transform_keys!
45
- alias_method :deep_rekey!, :deep_transform_keys!
46
- alias_method :rekey_r!, :deep_transform_keys!
47
-
48
-
49
- # See {NRSER.transform_keys}
50
- def transform_keys &block
51
- return enum_for(:transform_keys) { size } unless block_given?
52
- NRSER.transform_keys self, &block
53
- end
54
-
55
-
56
- # See {NRSER.deep_transform_keys}
57
- def deep_transform_keys &block
58
- return enum_for(:deep_transform_keys) { size } unless block_given?
59
- NRSER.deep_transform_keys self, &block
60
- end
61
-
62
- alias_method :deep_map_keys, :deep_transform_keys
63
- alias_method :map_keys_r, :deep_transform_keys
64
- alias_method :deep_rekey, :deep_transform_keys
65
- alias_method :rekey_r, :deep_transform_keys
66
-
67
-
68
- # See {NRSER.symbolize_keys!}
69
- def symbolize_keys!
70
- NRSER.symbolize_keys! self
71
- end
72
-
73
- alias_method :sym_keys!, :symbolize_keys!
74
-
75
-
76
- # See {NRSER.symbolize_keys}
77
- def symbolize_keys
78
- NRSER.symbolize_keys self
79
- end
80
-
81
- alias_method :sym_keys, :symbolize_keys
82
-
83
-
84
- # See {NRSER.stringify_keys!}
85
- def stringify_keys!
86
- NRSER.stringify_keys! self
87
- end
88
-
89
- alias_method :str_keys!, :stringify_keys!
90
-
91
-
92
- # See {NRSER.stringify_keys}
93
- def stringify_keys
94
- NRSER.stringify_keys self
95
- end
96
-
97
- alias_method :str_keys, :stringify_keys
98
-
99
-
100
- # See {NRSER.map_hash_keys}
101
- def map_keys &block
102
- NRSER.map_keys self, &block
103
- end
104
-
105
-
106
- # See {NRSER.bury!}
107
- def bury! key_path,
108
- value,
109
- parsed_key_type: :guess,
110
- clobber: false
111
- NRSER.bury! self,
112
- key_path,
113
- value,
114
- parsed_key_type: parsed_key_type,
115
- clobber: clobber
116
- end
117
-
118
-
119
- # Checks that `self` contains a single key/value pair (`#length` of 1)
120
- # and returns it as an array of length 2.
121
- #
122
- # @return [Array]
123
- # Array of length 2.
124
- #
125
- # @raise [TypeError]
126
- # If `self` has more than one key/value pair.
127
- #
128
- def to_pair
129
- unless length == 1
130
- raise TypeError,
131
- "Hash has more than one pair: #{ self.inspect }"
132
- end
133
-
134
- first
135
- end
136
-
137
-
138
- # See {NRSER.deep_merge}
139
- def deep_merge other_hash, &block
140
- NRSER.deep_merge self, other_hash, &block
141
- end
142
-
143
-
144
- # See {NRSER.deep_merge!}
145
- def deep_merge! other_hash, &block
146
- NRSER.deep_merge! self, other_hash, &block
147
- end
148
-
149
- end # refine ::Hash
150
- end # NRSER
@@ -1,5 +0,0 @@
1
- module NRSER
2
- refine Module do
3
- include NRSER::Ext::Module
4
- end
5
- end