dissociated_introspection 0.1.5 → 0.1.6

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: c7de5e97524155b0efde5a67e29a0fcf99091613
4
- data.tar.gz: 8e8fcf6b91d073ffaa5f539f1e17d07acaa41151
3
+ metadata.gz: 7052a41ca167f0a3c71da1b189c65b2f1bb4b4de
4
+ data.tar.gz: 64f62516603fcb83ac64e1c8c1030909d42e4bed
5
5
  SHA512:
6
- metadata.gz: 3e5cb27924dad988e494aa63e5e51074a6eebf7c69dddf37f25e8978c8d9a825c698a7bf002668a24227c2ee18a03fff83f1bbc71febf2c5827410e258acc604
7
- data.tar.gz: 62309ed059877884f91889bf211ff6bf6f9879e48c34d50f53dd2d579322c148219304115a8fdd2a1e9f4d432790e614240c9e40024e204fa0dfc85499215c48
6
+ metadata.gz: 6e1fc88468c673b89e02bf72fd254631afdce81eb6e3369113fb03e1b91576ee213d72ca81e9d6d483546470cf31ee82f112c5a730765e04f80ef51773680353
7
+ data.tar.gz: 09f111b9848cdbe7101c17e6e79a0a88129db5ad8d285f100349947b9b8347106cf843778e7edfd9d934d86b77638bf6642c0578e665d33d93ad88821e86c687
@@ -1,6 +1,6 @@
1
1
  module DissociatedIntrospection
2
2
  class RubyClass
3
- using ActiveSupport::Try
3
+ using Try
4
4
 
5
5
  def initialize(source: nil, ast: nil)
6
6
  @source = source
@@ -0,0 +1,146 @@
1
+ require 'delegate'
2
+
3
+ module DissociatedIntrospection
4
+ module Try
5
+ module Core
6
+ def try(*a, &b)
7
+ if a.empty? || respond_to?(a.first)
8
+ if a.empty? && block_given?
9
+ if b.arity.zero?
10
+ instance_eval(&b)
11
+ else
12
+ yield self
13
+ end
14
+ else
15
+ public_send(*a, &b)
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ refine Object do
22
+ include Core
23
+ end
24
+
25
+ refine Delegator do
26
+ include Core
27
+ end
28
+
29
+ refine NilClass do
30
+ def try(*args)
31
+ nil
32
+ end
33
+ end
34
+ end
35
+
36
+ # class Object
37
+ ##
38
+ # :method: try
39
+ #
40
+ # :call-seq:
41
+ # try(*a, &b)
42
+ #
43
+ # Invokes the public method whose name goes as first argument just like
44
+ # +public_send+ does, except that if the receiver does not respond to it the
45
+ # call returns +nil+ rather than raising an exception.
46
+ #
47
+ # This method is defined to be able to write
48
+ #
49
+ # @person.try(:name)
50
+ #
51
+ # instead of
52
+ #
53
+ # @person.name if @person
54
+ #
55
+ # +try+ calls can be chained:
56
+ #
57
+ # @person.try(:spouse).try(:name)
58
+ #
59
+ # instead of
60
+ #
61
+ # @person.spouse.name if @person && @person.spouse
62
+ #
63
+ # +try+ will also return +nil+ if the receiver does not respond to the method:
64
+ #
65
+ # @person.try(:non_existing_method) # => nil
66
+ #
67
+ # instead of
68
+ #
69
+ # @person.non_existing_method if @person.respond_to?(:non_existing_method) # => nil
70
+ #
71
+ # +try+ returns +nil+ when called on +nil+ regardless of whether it responds
72
+ # to the method:
73
+ #
74
+ # nil.try(:to_i) # => nil, rather than 0
75
+ #
76
+ # Arguments and blocks are forwarded to the method if invoked:
77
+ #
78
+ # @posts.try(:each_slice, 2) do |a, b|
79
+ # ...
80
+ # end
81
+ #
82
+ # The number of arguments in the signature must match. If the object responds
83
+ # to the method the call is attempted and +ArgumentError+ is still raised
84
+ # in case of argument mismatch.
85
+ #
86
+ # If +try+ is called without arguments it yields the receiver to a given
87
+ # block unless it is +nil+:
88
+ #
89
+ # @person.try do |p|
90
+ # ...
91
+ # end
92
+ #
93
+ # You can also call try with a block without accepting an argument, and the block
94
+ # will be instance_eval'ed instead:
95
+ #
96
+ # @person.try { upcase.truncate(50) }
97
+ #
98
+ # Please also note that +try+ is defined on +Object+. Therefore, it won't work
99
+ # with instances of classes that do not have +Object+ among their ancestors,
100
+ # like direct subclasses of +BasicObject+.
101
+
102
+ ##
103
+ # :method: try!
104
+ #
105
+ # :call-seq:
106
+ # try!(*a, &b)
107
+ #
108
+ # Same as #try, but raises a NoMethodError exception if the receiver is
109
+ # not +nil+ and does not implement the tried method.
110
+ #
111
+ # "a".try!(:upcase) # => "A"
112
+ # nil.try!(:upcase) # => nil
113
+ # 123.try!(:upcase) # => NoMethodError: undefined method `upcase' for 123:Fixnum
114
+ # end
115
+
116
+ # class Delegator
117
+ ##
118
+ # :method: try
119
+ #
120
+ # :call-seq:
121
+ # try(a*, &b)
122
+ #
123
+ # See Object#try
124
+
125
+ ##
126
+ # :method: try!
127
+ #
128
+ # :call-seq:
129
+ # try!(a*, &b)
130
+ #
131
+ # See Object#try!
132
+ # end
133
+
134
+ # class NilClass
135
+ # Calling +try+ on +nil+ always returns +nil+.
136
+ # It becomes especially helpful when navigating through associations that may return +nil+.
137
+ #
138
+ # nil.try(:name) # => nil
139
+ #
140
+ # Without +try+
141
+ # @person && @person.children.any? && @person.children.first.name
142
+ #
143
+ # With +try+
144
+ # @person.try(:children).try(:first).try(:name)
145
+ # end
146
+ end
@@ -1,3 +1,3 @@
1
1
  module DissociatedIntrospection
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'parser/current'
2
2
  require 'unparser'
3
3
  require 'dissociated_introspection/version'
4
- require 'dissociated_introspection/active_support'
4
+ require 'dissociated_introspection/try'
5
5
  require 'dissociated_introspection/eval_sandbox'
6
6
  require 'dissociated_introspection/ruby_class'
7
7
  require 'dissociated_introspection/inspection'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dissociated_introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Zeisler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-27 00:00:00.000000000 Z
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -100,11 +100,11 @@ files:
100
100
  - bin/setup
101
101
  - dissociated_introspection.gemspec
102
102
  - lib/dissociated_introspection.rb
103
- - lib/dissociated_introspection/active_support.rb
104
103
  - lib/dissociated_introspection/eval_sandbox.rb
105
104
  - lib/dissociated_introspection/inspection.rb
106
105
  - lib/dissociated_introspection/recording_parent.rb
107
106
  - lib/dissociated_introspection/ruby_class.rb
107
+ - lib/dissociated_introspection/try.rb
108
108
  - lib/dissociated_introspection/version.rb
109
109
  homepage: https://github.com/zeisler/dissociated_introspection
110
110
  licenses:
@@ -1,145 +0,0 @@
1
- require 'delegate'
2
- module ActiveSupport
3
- module Try
4
- module Core
5
- def try(*a, &b)
6
- if a.empty? || respond_to?(a.first)
7
- if a.empty? && block_given?
8
- if b.arity.zero?
9
- instance_eval(&b)
10
- else
11
- yield self
12
- end
13
- else
14
- public_send(*a, &b)
15
- end
16
- end
17
- end
18
- end
19
-
20
- refine Object do
21
- include Core
22
- end
23
-
24
- refine Delegator do
25
- include Core
26
- end
27
-
28
- refine NilClass do
29
- def try(*args)
30
- nil
31
- end
32
- end
33
- end
34
-
35
- # class Object
36
- ##
37
- # :method: try
38
- #
39
- # :call-seq:
40
- # try(*a, &b)
41
- #
42
- # Invokes the public method whose name goes as first argument just like
43
- # +public_send+ does, except that if the receiver does not respond to it the
44
- # call returns +nil+ rather than raising an exception.
45
- #
46
- # This method is defined to be able to write
47
- #
48
- # @person.try(:name)
49
- #
50
- # instead of
51
- #
52
- # @person.name if @person
53
- #
54
- # +try+ calls can be chained:
55
- #
56
- # @person.try(:spouse).try(:name)
57
- #
58
- # instead of
59
- #
60
- # @person.spouse.name if @person && @person.spouse
61
- #
62
- # +try+ will also return +nil+ if the receiver does not respond to the method:
63
- #
64
- # @person.try(:non_existing_method) # => nil
65
- #
66
- # instead of
67
- #
68
- # @person.non_existing_method if @person.respond_to?(:non_existing_method) # => nil
69
- #
70
- # +try+ returns +nil+ when called on +nil+ regardless of whether it responds
71
- # to the method:
72
- #
73
- # nil.try(:to_i) # => nil, rather than 0
74
- #
75
- # Arguments and blocks are forwarded to the method if invoked:
76
- #
77
- # @posts.try(:each_slice, 2) do |a, b|
78
- # ...
79
- # end
80
- #
81
- # The number of arguments in the signature must match. If the object responds
82
- # to the method the call is attempted and +ArgumentError+ is still raised
83
- # in case of argument mismatch.
84
- #
85
- # If +try+ is called without arguments it yields the receiver to a given
86
- # block unless it is +nil+:
87
- #
88
- # @person.try do |p|
89
- # ...
90
- # end
91
- #
92
- # You can also call try with a block without accepting an argument, and the block
93
- # will be instance_eval'ed instead:
94
- #
95
- # @person.try { upcase.truncate(50) }
96
- #
97
- # Please also note that +try+ is defined on +Object+. Therefore, it won't work
98
- # with instances of classes that do not have +Object+ among their ancestors,
99
- # like direct subclasses of +BasicObject+.
100
-
101
- ##
102
- # :method: try!
103
- #
104
- # :call-seq:
105
- # try!(*a, &b)
106
- #
107
- # Same as #try, but raises a NoMethodError exception if the receiver is
108
- # not +nil+ and does not implement the tried method.
109
- #
110
- # "a".try!(:upcase) # => "A"
111
- # nil.try!(:upcase) # => nil
112
- # 123.try!(:upcase) # => NoMethodError: undefined method `upcase' for 123:Fixnum
113
- # end
114
-
115
- class Delegator
116
- ##
117
- # :method: try
118
- #
119
- # :call-seq:
120
- # try(a*, &b)
121
- #
122
- # See Object#try
123
-
124
- ##
125
- # :method: try!
126
- #
127
- # :call-seq:
128
- # try!(a*, &b)
129
- #
130
- # See Object#try!
131
- end
132
-
133
- class NilClass
134
- # Calling +try+ on +nil+ always returns +nil+.
135
- # It becomes especially helpful when navigating through associations that may return +nil+.
136
- #
137
- # nil.try(:name) # => nil
138
- #
139
- # Without +try+
140
- # @person && @person.children.any? && @person.children.first.name
141
- #
142
- # With +try+
143
- # @person.try(:children).try(:first).try(:name)
144
- end
145
- end