dissociated_introspection 0.1.5 → 0.1.6

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 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