konstructor 0.4.0 → 0.4.1

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: 8450249cb7a42cc6608c42e20d66d897c73779b6
4
- data.tar.gz: cf0e8b2bdb6643b4debcb2cc67c11ba5c07b159f
3
+ metadata.gz: 44c51074d47f8b7b6fef07e36772b81c4fc5de71
4
+ data.tar.gz: 840b1dea7dee69bceb9595d73d76a9722bc87455
5
5
  SHA512:
6
- metadata.gz: 23c32f2916a283b9ce2d26098dc2d13159bea35f3db0b109d01e4d92a43c7b50471b3b5a5c7f7d128fc1d821b5945ca5155f1f2095e1f4569dd88518a2b1f821
7
- data.tar.gz: 47987108eb3206829bb5cb26f4d38c692edc1ced8da0a64cbbe46e66adeb833ec871b899a665838cb59a330713e0b526771f8a1be28287760e6756dc48623517
6
+ metadata.gz: 6b245d765c1dde3f18b88e4efe57f597cb9057d63eaebf100c04d94fa22cfbb2dd2890260590fed106a3a88a301f83b1a5bbca659fb2d86367ee977313291e9d
7
+ data.tar.gz: f7e2d3ff8a3382fdf764829e32cda532a27257c57f12d6391fe5eaebf1852b493bd12db5afdf6d6f129528639bb5c0e856fc162b7d1d52e776db3834db588b77
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  [![Gem Version](http://img.shields.io/gem/v/konstructor.svg)][gem]
2
- [![Build Status](http://img.shields.io/travis/snovity/konstructor.svg)][travis]
3
- [![Coverage Status](http://img.shields.io/coveralls/snovity/konstructor.svg)][coveralls]
2
+ [![Build Status](https://travis-ci.org/snovity/konstructor.svg?branch=master)][travis]
3
+ [![Coverage Status](https://coveralls.io/repos/github/snovity/konstructor/badge.svg?branch=master)][coveralls]
4
4
 
5
5
  [gem]: https://rubygems.org/gems/konstructor
6
6
  [travis]: http://travis-ci.org/snovity/konstructor
7
- [coveralls]: https://coveralls.io/r/snovity/konstructor
7
+ [coveralls]: https://coveralls.io/github/snovity/konstructor
8
8
 
9
9
  # Konstructor
10
10
 
@@ -54,7 +54,7 @@ keyword in your classes only when you need it, see
54
54
  In its simplest form `konstructor` declaration creates a
55
55
  constructor from the next method.
56
56
 
57
- ```ruby
57
+ ```ruby
58
58
  konstructor
59
59
  def create
60
60
  end
@@ -62,15 +62,15 @@ constructor from the next method.
62
62
  konstructor
63
63
  def recreate
64
64
  end
65
- ```
65
+ ```
66
66
 
67
67
  When method names are given, it creates constructors from
68
68
  those methods without affecting the next method.
69
69
 
70
- ```ruby
70
+ ```ruby
71
71
  konstructor :create, :recreate
72
72
 
73
- def not_constructor
73
+ def not_a_constructor
74
74
  end
75
75
 
76
76
  def create
@@ -78,12 +78,12 @@ those methods without affecting the next method.
78
78
 
79
79
  def recreate
80
80
  end
81
- ```
81
+ ```
82
82
 
83
- Declaration with method names can be placed anywhere in
84
- class definition.
83
+ Declaration with method names can be placed anywhere in
84
+ class definition.
85
85
 
86
- ```ruby
86
+ ```ruby
87
87
  def create
88
88
  end
89
89
  konstructor :create
@@ -91,26 +91,39 @@ those methods without affecting the next method.
91
91
  konstructor
92
92
  def recreate
93
93
  end
94
- ```
94
+ ```
95
+
96
+ Several declarations may be used,
97
+ all declarations add up without overwriting each other.
98
+ ```ruby
99
+ def create
100
+ end
101
+
102
+ konstructor :recreate
103
+ konstructor :create
104
+
105
+ def recreate
106
+ end
107
+ ```
95
108
 
96
- In all above cases `SomeClass` will have the default constructor
97
- and two additional ones.
109
+ In all above cases `SomeClass` will have the default constructor
110
+ and two additional ones.
98
111
 
99
- ```ruby
112
+ ```ruby
100
113
  obj0 = SomeClass.new
101
114
  obj1 = SomeClass.create
102
115
  obj2 = SomeClass.recreate
103
- ```
116
+ ```
104
117
 
105
- If you decide to remove the default Ruby constructor for some reason,
106
- you can effectively do it by marking it as private using Ruby
107
- method `private_class_method`:
118
+ If you decide to remove the default Ruby constructor for some reason,
119
+ you can effectively do it by marking it as private using Ruby
120
+ method `private_class_method`:
108
121
 
109
- ```ruby
122
+ ```ruby
110
123
  class SomeClass
111
124
  private_class_method :new
112
125
  end
113
- ```
126
+ ```
114
127
 
115
128
  #### Same as default constructor
116
129
 
@@ -198,7 +211,7 @@ it's roughly the same as declaring 3 properties with `attr_accessor`.
198
211
  ```ruby
199
212
  attr_accessor :one, :two, :three
200
213
 
201
- # following declaration take the same time as above declaration
214
+ # following declaration takes the same time as above declaration
202
215
  konstructor
203
216
  def create
204
217
  end
@@ -206,6 +219,8 @@ it's roughly the same as declaring 3 properties with `attr_accessor`.
206
219
  See [Benchmarks page](https://github.com/snovity/konstructor/wiki/Benchmarks)
207
220
  for details.
208
221
 
222
+ #### Dependencies
223
+
209
224
  Konstructor doesn't depend on other gems.
210
225
 
211
226
  #### Thread safety
@@ -1,24 +1,31 @@
1
1
  module Konstructor
2
2
 
3
- class ReservedNameError < StandardError
3
+ class Error < StandardError
4
+ end
5
+
6
+ # Raised if reserved names <code>new</code> or <code>initialize</code>
7
+ # are used in declaration.
8
+ class ReservedNameError < Error
4
9
  def initialize(name)
5
10
  super "Custom constructor can't have name '#{name}', "
6
11
  "it is reserved for default constructor."
7
12
  end
8
13
  end
9
14
 
10
- class IncludeInModuleError < StandardError
11
- def initialize(base)
12
- super "Konstructor can't be included in module '#{base.name}' directly, " +
13
- "please, use ActiveSupport::Concern or standard included hook."
14
- end
15
- end
16
-
17
- class DeclaringInheritedError < StandardError
15
+ # Raised if declaring inherited method as constructor.
16
+ class DeclaringInheritedError < Error
18
17
  def initialize(name)
19
18
  super "You are declaring an inherited method '#{name}' as konstructor, "
20
19
  "this is not allowed."
21
20
  end
22
21
  end
23
22
 
23
+ # Raised if <code>konstructor</code> is used inside module.
24
+ class IncludingInModuleError < Error
25
+ def initialize(base)
26
+ super "Konstructor can't be included in module '#{base.name}' directly, " +
27
+ "please, use ActiveSupport::Concern or standard included hook."
28
+ end
29
+ end
30
+
24
31
  end
@@ -8,9 +8,57 @@ module Konstructor
8
8
  module KonstructorMethod
9
9
  private
10
10
 
11
- # TODO: ADD DOCS
12
- def konstructor(*new_names)
13
- Konstructor.declare(self, new_names)
11
+ # konstructor -> nil
12
+ # konstructor(symbol, ...) -> nil
13
+ # konstructor(string, ...) -> nil
14
+ #
15
+ # If used without params, declares next method as constructor.
16
+ #
17
+ # module SomeClass
18
+ # attr_reader :val
19
+ #
20
+ # konstructor
21
+ # def create(val)
22
+ # @val = val
23
+ # end
24
+ # end
25
+ #
26
+ # If names are given, call can be placed anywhere, only methods with
27
+ # those names will be declared as constructors.
28
+ #
29
+ # module SomeClass
30
+ # attr_reader :val
31
+ #
32
+ # def create(val)
33
+ # @val = val
34
+ # end
35
+ #
36
+ # konstructor :create, :recreate
37
+ #
38
+ # def recreate(val)
39
+ # @val = val * 2
40
+ # end
41
+ # end
42
+ #
43
+ # <em>then:</em>
44
+ #
45
+ # SomeClass.new.val
46
+ # => nil
47
+ # SomeClass.create(3).val
48
+ # => 3
49
+ # SomeClass.recreate(3).val
50
+ # => 6
51
+ #
52
+ # Can be used multiple times with various arguments,
53
+ # all calls add up without overwriting each other.
54
+ #
55
+ # Can raise several errors inheriting from <code>Konstructor::Error</code>
56
+ # ReservedNameError
57
+ # DeclaringInheritedError
58
+ # IncludingInModuleError
59
+ def konstructor(*several_variants)
60
+ Konstructor.declare(self, several_variants)
61
+ nil
14
62
  end
15
63
  end
16
64
 
@@ -72,7 +120,7 @@ module Konstructor
72
120
  # It adds only one method 'konstructor'.
73
121
  def append_features(klass)
74
122
  unless klass.is_a? Class
75
- raise IncludeInModuleError, klass
123
+ raise IncludingInModuleError, klass
76
124
  end
77
125
 
78
126
  klass.extend(KonstructorMethod)
@@ -1,3 +1,3 @@
1
1
  module Konstructor
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: konstructor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dima Lashkov