selfies 0.1.1 → 0.2.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 +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
|