selfies 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 +4 -4
- data/README.md +102 -4
- data/lib/kernel.rb +4 -0
- data/lib/selfies/selfie.rb +13 -0
- data/lib/selfies/version.rb +1 -1
- data/lib/selfies.rb +6 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ba49d8320ff6acedb3e41fb564e3566333b50ca
|
4
|
+
data.tar.gz: 2ab1f3809213567f3509b864670d349ea1d35d09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fe532606d20e991b83d8eed8240b91fdfbfde4db16fa096b270fa933539331407a753f324daaef7912387561743b81d953a9ff15ea547c179ee5c628b6c2bfc
|
7
|
+
data.tar.gz: 29e8d0793f74a06ffc3a138aa94ef67a50f2632d93bc32fd9eab06c1cf8dc6ab681fb6dbd3c8d19bee557903afd2ac05e1f5afd78c7be7c55c823914e03b4d50
|
data/README.md
CHANGED
@@ -60,12 +60,110 @@ class Search
|
|
60
60
|
end
|
61
61
|
```
|
62
62
|
|
63
|
+
***selfie***: can be used to automatically create a class method that reference to the instance method of the same class
|
64
|
+
|
65
|
+
This code:
|
66
|
+
```ruby
|
67
|
+
class Search
|
68
|
+
attr_reader :term, :page, :limit
|
69
|
+
|
70
|
+
def initialize(term, page, limit)
|
71
|
+
@term = term
|
72
|
+
@page = page
|
73
|
+
@limit = limit
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.execute!
|
77
|
+
new(term, page, limit).execute!
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.next
|
81
|
+
new(term, page, limit).next
|
82
|
+
end
|
83
|
+
|
84
|
+
def execute!
|
85
|
+
# does something
|
86
|
+
end
|
87
|
+
|
88
|
+
def next
|
89
|
+
# does something else
|
90
|
+
end
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
Can be written as:
|
95
|
+
```ruby
|
96
|
+
class Search
|
97
|
+
self_init :term, :page, :limit
|
98
|
+
|
99
|
+
def execute!
|
100
|
+
# does something
|
101
|
+
end
|
102
|
+
selfie :execute!
|
103
|
+
|
104
|
+
def next
|
105
|
+
# does something else
|
106
|
+
end
|
107
|
+
selfie :next
|
108
|
+
end
|
109
|
+
```
|
110
|
+
|
111
|
+
If preferred, more methods can be 'selfied' in one liner:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
class Search
|
115
|
+
...
|
116
|
+
selfie :execute!, :next
|
117
|
+
|
118
|
+
def execute!
|
119
|
+
# does something
|
120
|
+
end
|
121
|
+
|
122
|
+
def next
|
123
|
+
# does something else
|
124
|
+
end
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
## TL;DR
|
129
|
+
|
130
|
+
You write this:
|
131
|
+
```ruby
|
132
|
+
class Rectangle
|
133
|
+
self_init :width, :height
|
134
|
+
selfie :area, :perimeter
|
135
|
+
|
136
|
+
def area
|
137
|
+
width * height
|
138
|
+
end
|
139
|
+
|
140
|
+
def perimeter
|
141
|
+
(width + height) * 2
|
142
|
+
end
|
143
|
+
end
|
144
|
+
```
|
145
|
+
|
146
|
+
You get this:
|
147
|
+
```ruby
|
148
|
+
>> Rectangle.area(8, 4)
|
149
|
+
=> 32
|
150
|
+
>> Rectangle.perimeter(5, 3)
|
151
|
+
=> 16
|
152
|
+
```
|
153
|
+
|
63
154
|
## Next Steps
|
64
155
|
|
65
|
-
***self_init
|
66
|
-
- Implement the possibility to pass defaults
|
67
|
-
- Specify which parameters will get an attr_reader, attr_accessor or none
|
68
|
-
- Specify wich parameters on attr_reader are to consider private
|
156
|
+
***self_init:***
|
157
|
+
- Implement the possibility to pass defaults;
|
158
|
+
- Specify which parameters will get an attr_reader, attr_accessor or none;
|
159
|
+
- Specify wich parameters on attr_reader are to consider private;
|
160
|
+
|
161
|
+
***selfie:***
|
162
|
+
- Allow the possibility to declare all selfies at the top (if possible);
|
163
|
+
- Find a suitable syntax that would allow to 'selfie' an instance method that has arguments;
|
164
|
+
|
165
|
+
***more?:***
|
166
|
+
- If you also often write repetitive bolierplate, and would like some code to get smaller, drop me a line and we might be able to add more macros.
|
69
167
|
|
70
168
|
## Development
|
71
169
|
|
data/lib/kernel.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Selfies
|
2
|
+
class Selfie
|
3
|
+
def self.generate(class_name, *method_names)
|
4
|
+
class_name.class_eval do
|
5
|
+
method_names.each do |method_name|
|
6
|
+
define_singleton_method(method_name) do |*args|
|
7
|
+
new(*args).public_send(method_name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/selfies/version.rb
CHANGED
data/lib/selfies.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'kernel'
|
2
2
|
require 'selfies/self_init'
|
3
|
+
require 'selfies/selfie'
|
3
4
|
require 'selfies/version'
|
4
5
|
|
6
|
+
# Index of the Selfies utilities
|
5
7
|
module Selfies
|
6
8
|
def self.generate_initializer(class_name, *variable_names)
|
7
9
|
SelfInit.generate(class_name, *variable_names)
|
8
10
|
end
|
11
|
+
|
12
|
+
def self.generate_class_methods(class_name, *method_names)
|
13
|
+
Selfie.generate(class_name, *method_names)
|
14
|
+
end
|
9
15
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selfies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mario D’Arco
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/kernel.rb
|
72
72
|
- lib/selfies.rb
|
73
73
|
- lib/selfies/self_init.rb
|
74
|
+
- lib/selfies/selfie.rb
|
74
75
|
- lib/selfies/version.rb
|
75
76
|
- selfies.gemspec
|
76
77
|
homepage: https://github.com/mariodarco/selfies
|