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