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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b6804ef3c20e8b2da7b66a7eedb281dcb916614
4
- data.tar.gz: ff9a72cca796a7887f4886f528316e7d500ef3f7
3
+ metadata.gz: 8ba49d8320ff6acedb3e41fb564e3566333b50ca
4
+ data.tar.gz: 2ab1f3809213567f3509b864670d349ea1d35d09
5
5
  SHA512:
6
- metadata.gz: 43d17ed4e3ba64e58b6f6051091525cd906f1f4c88eb9fe01f42ab7b22bda4b5a8ab6fcbe322acd291b5c89e87e9e08eaf50f52ba3b9f8e7cec7b4acb3f82d8a
7
- data.tar.gz: f0ba4aba97b195398efccc335dd4339d4e7c83890fd0874c72105eadbcb4a101af892f9b27c8db3fc9e09dbb5a0abcc16964fef77b57f4991c235de6f890c757
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
@@ -3,4 +3,8 @@ module Kernel
3
3
  def self_init(*variable_names)
4
4
  Selfies.generate_initializer(self, *variable_names)
5
5
  end
6
+
7
+ def selfie(*method_names)
8
+ Selfies.generate_class_methods(self, *method_names)
9
+ end
6
10
  end
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Selfies
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
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.1.1
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