define-poro 0.0.1 → 0.1.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 +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
|