corefines 1.0.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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.adoc +198 -0
- data/Rakefile +23 -0
- data/lib/corefines/array.rb +30 -0
- data/lib/corefines/enumerable.rb +64 -0
- data/lib/corefines/hash.rb +164 -0
- data/lib/corefines/module.rb +95 -0
- data/lib/corefines/object.rb +389 -0
- data/lib/corefines/string.rb +211 -0
- data/lib/corefines/support/alias_submodules.rb +103 -0
- data/lib/corefines/support/classes_including_module.rb +27 -0
- data/lib/corefines/support/fake_refinements.rb +86 -0
- data/lib/corefines/symbol.rb +32 -0
- data/lib/corefines/version.rb +3 -0
- data/lib/corefines.rb +14 -0
- data/spec/array/second_spec.rb +10 -0
- data/spec/array/third_spec.rb +10 -0
- data/spec/enumerable/index_by_spec.rb +13 -0
- data/spec/enumerable/map_send_spec.rb +24 -0
- data/spec/hash/compact_spec.rb +48 -0
- data/spec/hash/op_plus_spec.rb +11 -0
- data/spec/hash/rekey_spec.rb +100 -0
- data/spec/hash/symbolize_keys_spec.rb +21 -0
- data/spec/module/alias_class_method_spec.rb +21 -0
- data/spec/module/alias_method_chain_spec.rb +76 -0
- data/spec/object/blank_spec.rb +128 -0
- data/spec/object/deep_dup_spec.rb +61 -0
- data/spec/object/else_spec.rb +24 -0
- data/spec/object/in_spec.rb +21 -0
- data/spec/object/instance_values_spec.rb +22 -0
- data/spec/object/then_if_spec.rb +64 -0
- data/spec/object/then_spec.rb +26 -0
- data/spec/object/try_spec.rb +47 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/string/color_spec.rb +82 -0
- data/spec/string/concat_spec.rb +36 -0
- data/spec/string/decolor_spec.rb +27 -0
- data/spec/string/remove_spec.rb +57 -0
- data/spec/string/unindent_spec.rb +66 -0
- data/spec/support/alias_submodules_spec.rb +83 -0
- data/spec/support/classes_including_module_spec.rb +35 -0
- data/spec/support/fake_refinements_spec.rb +118 -0
- data/spec/symbol/call_spec.rb +16 -0
- metadata +175 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
describe Corefines::Support::FakeRefinements do
|
2
|
+
|
3
|
+
before :all do
|
4
|
+
if Module.private_method_defined? :refine
|
5
|
+
Module.send(:alias_method, :_old_refine, :refine)
|
6
|
+
end
|
7
|
+
described_class.define_refine(Module)
|
8
|
+
described_class.define_using(Object)
|
9
|
+
end
|
10
|
+
|
11
|
+
after :all do
|
12
|
+
if Module.private_method_defined? :_old_refine
|
13
|
+
Module.send(:alias_method, :refine, :_old_refine)
|
14
|
+
end
|
15
|
+
Object.send(:remove_method, :using)
|
16
|
+
end
|
17
|
+
|
18
|
+
before(:each) { F = create_fixture_modules }
|
19
|
+
after(:each) { Object.send(:remove_const, :F) }
|
20
|
+
|
21
|
+
let(:chip) { F::Chip.new }
|
22
|
+
let(:dale) { F::Dale.new }
|
23
|
+
|
24
|
+
|
25
|
+
describe 'Module#refine' do
|
26
|
+
|
27
|
+
it "raises TypeError when argument is not a Class" do
|
28
|
+
expect { Module.new { refine(:Foo) {} } }.to raise_error TypeError
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises ArgumentError when no block given" do
|
32
|
+
expect { Module.new { refine(F::Chip) } }.to raise_error ArgumentError
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe 'Object#using' do
|
38
|
+
|
39
|
+
# Precondition checks
|
40
|
+
before do
|
41
|
+
expect(chip).to_not respond_to :run, :climb, :salute
|
42
|
+
expect(dale).to_not respond_to :walk
|
43
|
+
end
|
44
|
+
|
45
|
+
context "module with no refines" do
|
46
|
+
it "does nothing" do
|
47
|
+
using F
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "module with refines" do
|
52
|
+
|
53
|
+
it "evals refinements defined in the module" do
|
54
|
+
using F::Refs::A
|
55
|
+
expect(chip).to respond_to :run, :climb
|
56
|
+
expect(dale).to respond_to :walk
|
57
|
+
expect(chip).to_not respond_to :salute
|
58
|
+
end
|
59
|
+
|
60
|
+
it "evals refinement only once" do
|
61
|
+
expect(F::Dale).to receive(:class_eval).exactly(1).times
|
62
|
+
2.times { using F::Refs::A }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "module that includes another modules" do
|
67
|
+
|
68
|
+
before do
|
69
|
+
F::Refs.send(:include, F::Refs::A, F::Refs::B)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "evals refinements from submodules recursively" do
|
73
|
+
using F::Refs
|
74
|
+
expect(chip).to respond_to :run, :climb, :salute
|
75
|
+
expect(dale).to respond_to :walk
|
76
|
+
end
|
77
|
+
|
78
|
+
it "doesn't eval refinements from submodules that have already been evaluated" do
|
79
|
+
using F::Refs::A
|
80
|
+
|
81
|
+
expect(F::Dale).to_not receive(:class_eval)
|
82
|
+
expect(F::Chip).to receive(:class_eval).exactly(1).times
|
83
|
+
using F::Refs
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
def create_fixture_modules
|
90
|
+
# Define dynamically to not pollute global context of other tests.
|
91
|
+
::Module.new.tap do |m|
|
92
|
+
m.class_eval <<-CODE
|
93
|
+
class Chip; end
|
94
|
+
class Dale; end
|
95
|
+
|
96
|
+
module Refs
|
97
|
+
module A
|
98
|
+
refine Chip do
|
99
|
+
def run; end
|
100
|
+
end
|
101
|
+
refine Chip do
|
102
|
+
def climb; end
|
103
|
+
end
|
104
|
+
refine Dale do
|
105
|
+
def walk; end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
module B
|
110
|
+
refine Chip do
|
111
|
+
def salute; end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
CODE
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
describe Symbol do
|
2
|
+
using Corefines::Symbol::call
|
3
|
+
|
4
|
+
describe '#call' do
|
5
|
+
|
6
|
+
it "invokes method with one argument" do
|
7
|
+
ary = [1, 2, 3]
|
8
|
+
expect(ary.map(&:to_s.(2))).to eq ary.map { |n| n.to_s(2) }
|
9
|
+
end
|
10
|
+
|
11
|
+
it "invokes method with two arguments" do
|
12
|
+
ary = %w[Chloe Drew Uma]
|
13
|
+
expect(ary.map(&:gsub.('e', 'E'))).to eq ary.map { |s| s.gsub('e', 'E') }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: corefines
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jakub Jirutka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: asciidoctor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.0
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: codeclimate-test-reporter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.4'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.9'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: yard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.8'
|
97
|
+
description: |
|
98
|
+
Corefines is a collection of general purpose refinements for extending the core
|
99
|
+
capabilities of Ruby's built-in classes. It also provides a compatibility mode
|
100
|
+
for older Ruby versions and alternative Ruby implementations that
|
101
|
+
don't support refinements (yet).
|
102
|
+
email: jakub@jirutka.cz
|
103
|
+
executables: []
|
104
|
+
extensions: []
|
105
|
+
extra_rdoc_files: []
|
106
|
+
files:
|
107
|
+
- LICENSE
|
108
|
+
- README.adoc
|
109
|
+
- Rakefile
|
110
|
+
- lib/corefines.rb
|
111
|
+
- lib/corefines/array.rb
|
112
|
+
- lib/corefines/enumerable.rb
|
113
|
+
- lib/corefines/hash.rb
|
114
|
+
- lib/corefines/module.rb
|
115
|
+
- lib/corefines/object.rb
|
116
|
+
- lib/corefines/string.rb
|
117
|
+
- lib/corefines/support/alias_submodules.rb
|
118
|
+
- lib/corefines/support/classes_including_module.rb
|
119
|
+
- lib/corefines/support/fake_refinements.rb
|
120
|
+
- lib/corefines/symbol.rb
|
121
|
+
- lib/corefines/version.rb
|
122
|
+
- spec/array/second_spec.rb
|
123
|
+
- spec/array/third_spec.rb
|
124
|
+
- spec/enumerable/index_by_spec.rb
|
125
|
+
- spec/enumerable/map_send_spec.rb
|
126
|
+
- spec/hash/compact_spec.rb
|
127
|
+
- spec/hash/op_plus_spec.rb
|
128
|
+
- spec/hash/rekey_spec.rb
|
129
|
+
- spec/hash/symbolize_keys_spec.rb
|
130
|
+
- spec/module/alias_class_method_spec.rb
|
131
|
+
- spec/module/alias_method_chain_spec.rb
|
132
|
+
- spec/object/blank_spec.rb
|
133
|
+
- spec/object/deep_dup_spec.rb
|
134
|
+
- spec/object/else_spec.rb
|
135
|
+
- spec/object/in_spec.rb
|
136
|
+
- spec/object/instance_values_spec.rb
|
137
|
+
- spec/object/then_if_spec.rb
|
138
|
+
- spec/object/then_spec.rb
|
139
|
+
- spec/object/try_spec.rb
|
140
|
+
- spec/spec_helper.rb
|
141
|
+
- spec/string/color_spec.rb
|
142
|
+
- spec/string/concat_spec.rb
|
143
|
+
- spec/string/decolor_spec.rb
|
144
|
+
- spec/string/remove_spec.rb
|
145
|
+
- spec/string/unindent_spec.rb
|
146
|
+
- spec/support/alias_submodules_spec.rb
|
147
|
+
- spec/support/classes_including_module_spec.rb
|
148
|
+
- spec/support/fake_refinements_spec.rb
|
149
|
+
- spec/symbol/call_spec.rb
|
150
|
+
homepage: https://github.com/jirutka/corefines
|
151
|
+
licenses:
|
152
|
+
- MIT
|
153
|
+
metadata: {}
|
154
|
+
post_install_message:
|
155
|
+
rdoc_options: []
|
156
|
+
require_paths:
|
157
|
+
- lib
|
158
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 1.9.3
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
requirements: []
|
169
|
+
rubyforge_project:
|
170
|
+
rubygems_version: 2.4.6
|
171
|
+
signing_key:
|
172
|
+
specification_version: 4
|
173
|
+
summary: A collection of refinements for Ruby core classes.
|
174
|
+
test_files: []
|
175
|
+
has_rdoc: yard
|