define-poro 0.0.1 → 0.1.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 +34 -8
- data/lib/define-poro.rb +1 -1
- data/lib/define-poro/{define.rb → as.rb} +1 -1
- data/lib/define-poro/version.rb +1 -1
- data/spec/lib/{define_spec.rb → as_spec.rb} +5 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a146c56f301e4736fcbebd38b2009c426a0efce8
|
4
|
+
data.tar.gz: 3902688e7b28ed1ff378e438ecc83224d744fd2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d4784973eba13d96a8841d079ac0e1bdd121a26ca3d6abeda1e22d65c77fa31a49bf5dc6f248453e4050c19c8c8e7c0c8a0d124449ca9386c6dea88b5c4d556
|
7
|
+
data.tar.gz: 2936c60f6ae1b3a4667c407d23c844625ae9f9f794f8f34533ce8685874381c9d164453ad824b9d1f9d6fc7abcc134d52919b5cb9395faa2e1889ab092a8c955
|
data/README.md
CHANGED
@@ -2,7 +2,27 @@
|
|
2
2
|
|
3
3
|
Plain Old Ruby Object class builder from provided attribute list and block.
|
4
4
|
|
5
|
-
##
|
5
|
+
## WARNING
|
6
|
+
|
7
|
+
Sadly assignment does not handle constants scope well:
|
8
|
+
|
9
|
+
```
|
10
|
+
RegisterUser = DefinePoro::As.new(:user, :params) do
|
11
|
+
USER_TYPE = 1
|
12
|
+
|
13
|
+
# logic for registering user
|
14
|
+
end
|
15
|
+
|
16
|
+
puts USER_TYPE #> 1 WHAT! constant is bound to outer context
|
17
|
+
puts RegisterUser::USER_TYPE #> NameError: uninitialized constant RegisterUser::XX
|
18
|
+
```
|
19
|
+
|
20
|
+
Conclusion - please use old plain ruby objects with initializer and attr_reader,
|
21
|
+
fancy things are not always the best ones.
|
22
|
+
|
23
|
+
## History
|
24
|
+
|
25
|
+
### Rationale
|
6
26
|
|
7
27
|
I have been using Struct.new to dynamically create ruby objects that base their identity
|
8
28
|
on functionality and not on values.
|
@@ -39,21 +59,23 @@ end
|
|
39
59
|
Ruby guys are lazy so we would like to type something shorter - that's provided by DefinePoro:
|
40
60
|
|
41
61
|
```
|
42
|
-
RegisterUser = DefinePoro::
|
62
|
+
RegisterUser = DefinePoro::As.new(:user, :params) do
|
43
63
|
# logic for registering user
|
44
64
|
end
|
45
65
|
```
|
46
66
|
|
47
|
-
The `DefinePoro::
|
67
|
+
The `DefinePoro::As` implementation is easy and performant ruby code.
|
48
68
|
|
49
|
-
|
69
|
+
### Should you use it?
|
50
70
|
|
51
71
|
Yes - if you are lazy to type initializers.
|
52
72
|
|
53
73
|
No - if you think that dynamic class definition could be harmful.
|
54
74
|
And I believe that in some cases it could.
|
55
75
|
|
56
|
-
|
76
|
+
SURELY NOT - sadly assignment does not handle constants scope well.
|
77
|
+
|
78
|
+
### Installation
|
57
79
|
|
58
80
|
Add this line to your application's Gemfile:
|
59
81
|
|
@@ -69,7 +91,7 @@ Or install it yourself as:
|
|
69
91
|
|
70
92
|
$ gem install define-poro
|
71
93
|
|
72
|
-
|
94
|
+
### Usage
|
73
95
|
|
74
96
|
Instead of
|
75
97
|
|
@@ -88,12 +110,12 @@ end
|
|
88
110
|
Define you class via
|
89
111
|
|
90
112
|
```
|
91
|
-
RegisterUser = DefinePoro::
|
113
|
+
RegisterUser = DefinePoro::As.new(:user, :params) do
|
92
114
|
# logic for registering user
|
93
115
|
end
|
94
116
|
```
|
95
117
|
|
96
|
-
|
118
|
+
### Contributing
|
97
119
|
|
98
120
|
1. Fork it ( https://github.com/astrauka/define-poro/fork )
|
99
121
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
@@ -101,3 +123,7 @@ end
|
|
101
123
|
4. Ensure that you have written specs (rspec)
|
102
124
|
5. Push to the branch (`git push origin my-new-feature`)
|
103
125
|
6. Create a new Pull Request
|
126
|
+
|
127
|
+
### Changelog
|
128
|
+
|
129
|
+
`0.1.0` - renamed `DefinePoro::Define` to `DefinePoro::As`
|
data/lib/define-poro.rb
CHANGED
data/lib/define-poro/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module DefinePoro
|
4
|
-
describe
|
4
|
+
describe As do
|
5
5
|
describe '.new' do
|
6
6
|
let(:klass) { described_class.new(:b, :a) }
|
7
7
|
|
@@ -25,6 +25,8 @@ module DefinePoro
|
|
25
25
|
|
26
26
|
it 'supports block' do
|
27
27
|
klass2 = described_class.new(:a) do
|
28
|
+
KLASS2_CONSTANT = 1
|
29
|
+
|
28
30
|
def qq
|
29
31
|
"a is #{a}"
|
30
32
|
end
|
@@ -36,6 +38,8 @@ module DefinePoro
|
|
36
38
|
|
37
39
|
expect(klass2.new('1').qq).to eq 'a is 1'
|
38
40
|
expect(klass2.class_qq).to eq 'class qq'
|
41
|
+
# !!! constant not bound to klass2 but to outer scope :(
|
42
|
+
expect(KLASS2_CONSTANT).to eq 1
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: define-poro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karolis Astrauka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,10 +81,10 @@ files:
|
|
81
81
|
- README.md
|
82
82
|
- Rakefile
|
83
83
|
- lib/define-poro.rb
|
84
|
-
- lib/define-poro/
|
84
|
+
- lib/define-poro/as.rb
|
85
85
|
- lib/define-poro/version.rb
|
86
86
|
- poro.gemspec
|
87
|
-
- spec/lib/
|
87
|
+
- spec/lib/as_spec.rb
|
88
88
|
- spec/spec_helper.rb
|
89
89
|
homepage: ''
|
90
90
|
licenses:
|
@@ -111,5 +111,5 @@ signing_key:
|
|
111
111
|
specification_version: 4
|
112
112
|
summary: Plain Old Ruby Object class builder from provided attribute list.
|
113
113
|
test_files:
|
114
|
-
- spec/lib/
|
114
|
+
- spec/lib/as_spec.rb
|
115
115
|
- spec/spec_helper.rb
|