flap 0.1.1 → 0.2.0

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: ecd779bcb03ad4e4d4611fedb7ab4037103a032a
4
- data.tar.gz: 7aec48937813e3af6e3b854b8ec31515caefee40
3
+ metadata.gz: 218548f3e588ea9a8844809b21ce70319d829df2
4
+ data.tar.gz: f0c0a639432afc042a933b772bb1e27ce92e0e08
5
5
  SHA512:
6
- metadata.gz: 8c614cc7264bcac00bf928cd3c8b9eddcf776b60f60908740f449ea19ffa7485fd1e48e58bfd875e2304620970118fd6e891e1c88f4c9b0e6929971f9b19a69d
7
- data.tar.gz: ce2a6d0ad984addfcfb98b67c389aa9c27ceee53bf80be02b3e857225d58e81b5d90a59235a98966fbbcfbdf9789ec9f34be6462bebfa9b6682023ad6ca0fdeb
6
+ metadata.gz: c089770e5798a98609e2d757083951102ce5993fbf9727873845f202d8add950d49865a4a991909441e3e25ca5646164c0d1345439164c199a587960c15fe9c4
7
+ data.tar.gz: 4eefb23fbb54a134300c839a617aac17996d7c6c34a735eee6b75315e0962d963bd77aed07417a07e229dee7f93188170dae6df715fb3bf3c7ec3b1a993749e6
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v0.2.0
6
+
7
+ * Add instance_tap_eval and class_tap_eval ([@Sixeight])
8
+ * Object#flap becomes deprecated ([@Sixeight])
9
+
5
10
  ## v0.1.1
6
11
 
7
12
  * Fixed Module#include is private at under Ruby 2.0 bug ([@Sixeight])
data/lib/flap/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flap
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/flap.rb CHANGED
@@ -1,10 +1,63 @@
1
1
  require "flap/version"
2
2
 
3
3
  module Flap
4
- def flap(&block)
4
+ def self.included(base)
5
+ Module.__send__ :include, ModuleMethods
6
+ end
7
+
8
+ # Public: tap + instance_eval
9
+ #
10
+ # block - call in receiver's context
11
+ #
12
+ # Examples
13
+ # hash = {a: 1, b: 2}
14
+ # hash.instance_tap_eval { delete :a } #=> {:b => 2}
15
+ #
16
+ # Returns self
17
+ def instance_tap_eval(&block)
5
18
  self.instance_eval &block if block_given?
6
19
  self
7
20
  end
21
+
22
+ # Deprecated: same as instance_tap_eval
23
+ def flap(&block)
24
+ warn "[deprecated] this method will be removed."
25
+ instance_tap_eval &block
26
+ end
27
+
28
+ module ModuleMethods
29
+ # Public: tap + class_eval
30
+ #
31
+ # block - call in class context
32
+ #
33
+ # Examples
34
+ # Klass = Class.new.class_tap_eval { include Awesome }
35
+ # Klass.new.awesome_method
36
+ #
37
+ # Returns self
38
+ def class_tap_eval(&block)
39
+ class_eval &block if block_given?
40
+ self
41
+ end
42
+ end
43
+
44
+ # Public: define alias methods itap/ctap.
45
+ #
46
+ # Returns self
47
+ def self.enable_short_methods!
48
+ Object.__send__ :include, ShortMethods
49
+ end
50
+
51
+ module ShortMethods
52
+ def self.included(base)
53
+ base.class_eval do
54
+ alias_method :itap, :instance_tap_eval
55
+ Module.class_eval do
56
+ alias_method :ctap, :class_tap_eval
57
+ end
58
+ end
59
+ end
60
+ end
8
61
  end
9
62
 
10
63
  Object.__send__ :include, Flap
data/spec/flap_spec.rb CHANGED
@@ -1,19 +1,61 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Flap do
4
- it "Object has flap method" do
5
- expect(Object).to respond_to(:flap)
4
+ shared_examples_for "xxx_tap_eval" do
5
+ it "has method" do
6
+ expect(subject).to respond_to(meth)
7
+ end
8
+
9
+ it "returns self" do
10
+ expect(subject.public_send(meth)).to eql subject
11
+ end
12
+
13
+ it "block binded self context" do
14
+ ret = nil
15
+ subject.public_send(meth) { ret = self }
16
+ expect(ret).to eql subject
17
+ end
18
+ end
19
+
20
+ describe "instance_tap_eval" do
21
+ subject { Object.new }
22
+ let(:meth) { :instance_tap_eval }
23
+ it_behaves_like "xxx_tap_eval"
6
24
  end
7
25
 
8
- let(:object) { "object" }
26
+ describe "class_tap_eval" do
27
+ subject { Module }
28
+ let(:meth) { :class_tap_eval }
29
+ it_behaves_like "xxx_tap_eval"
30
+ end
31
+
32
+ describe ".enable_short_methods!" do
33
+ before do
34
+ Flap.enable_short_methods!
35
+ end
9
36
 
10
- it "returns self" do
11
- expect(object.flap).to eql object
37
+ it "Object has :itap instance method" do
38
+ expect(Object.new).to respond_to(:itap)
39
+ end
40
+
41
+ it "Module has :ctap class method" do
42
+ expect(Module).to respond_to(:ctap)
43
+ end
12
44
  end
13
45
 
14
- it "block binded self context" do
15
- ret = nil
16
- object.flap { ret = self }
17
- expect(ret).to eql object
46
+ context "deprecated" do
47
+ let(:meth) { :flap }
48
+ it_behaves_like "xxx_tap_eval"
49
+
50
+ it "shows deprecated message" do
51
+ begin
52
+ original = $stderr
53
+ $stderr = result = StringIO.new
54
+ flap
55
+ expect(result.string).to match("deprecated")
56
+ ensure
57
+ $stderr = original
58
+ end
59
+ end
18
60
  end
19
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomohiro Nishimura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-17 00:00:00.000000000 Z
11
+ date: 2014-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler