virtus-group 0.0.1 → 0.1
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 +8 -8
- data/.travis.yml +9 -0
- data/README.md +11 -4
- data/lib/virtus/group.rb +4 -1
- data/lib/virtus/group/version.rb +1 -1
- data/spec/integration/virtus_group_integration_spec.rb +21 -0
- data/virtus-group.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmMwZjhhMDkwYjIyZmY3MDZmNGUwNDczZDAwOGIzMzkwYWRkNzBkMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZDFkNzQzNjE2ODhlZDc5ZDBhYjIwODY2MzRlYmI2MjVkNDM2MmYzYw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzMzNTJlZTFkMGJiYjVhODcxN2E2ZWY4NTQ0ZDdjZWMxMzBlZTY2ZWQxZjIx
|
10
|
+
YTA3MWIwM2IxOTIwMzFiZGQyZWI1NzBhZjkxMjc3NjI5MTE0Mzk5MzcyOTNi
|
11
|
+
NGE2MWQ0NWRhNDA1Y2RiODQyMzZhMGUwMWIwODk0YzdmNTEwNTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTc3NzEwYTI3NmZjZGY4MjA5NWNlNzI4NWNhODI3ZGI0NzRjYTM5OTA1YjE3
|
14
|
+
NTYzNTYyZTM4NjA1Nzk2NDRiNDZjNzBmN2NkNmE1ZjNhNWUwYmVkNDNlOTdm
|
15
|
+
YTI5ZDI4MTZhYTFmNWI3NDJjZWFmNmMzYjI2YjgwMmJkYTkwMGU=
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Virtus.group
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/spoptchev/virtus-group)
|
4
|
+
|
5
|
+
The idea of this gem is to define groups over Virtus attributes.
|
4
6
|
Which is especially useful when you are working with [form objects](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/).
|
5
7
|
|
6
8
|
## Installation
|
@@ -37,7 +39,7 @@ class SignUpForm
|
|
37
39
|
end
|
38
40
|
```
|
39
41
|
|
40
|
-
Don't worry, the `SignUpForm`
|
42
|
+
Don't worry, the `SignUpForm` object will still behave like a regular Virtus object.
|
41
43
|
|
42
44
|
```ruby
|
43
45
|
# ---
|
@@ -65,7 +67,7 @@ sign_up_form.attributes_for :address
|
|
65
67
|
# => {street: 'ABC-Street 1', zipcode: 'Z1234', city: 'ABC'}
|
66
68
|
```
|
67
69
|
|
68
|
-
|
70
|
+
You can easily build your models from the attribute groups:
|
69
71
|
|
70
72
|
```ruby
|
71
73
|
class SignUpForm
|
@@ -84,7 +86,7 @@ class SignUpForm
|
|
84
86
|
end
|
85
87
|
|
86
88
|
def create
|
87
|
-
user = User.
|
89
|
+
user = User.new(attributes_for(:user))
|
88
90
|
user.build_address(attributes_for(:address))
|
89
91
|
user.save
|
90
92
|
end
|
@@ -102,3 +104,8 @@ end
|
|
102
104
|
5. Create new Pull Request
|
103
105
|
|
104
106
|
|
107
|
+
## TODO's
|
108
|
+
|
109
|
+
* remove dependency to `active_support` (needed for class level attribute inheritance)
|
110
|
+
|
111
|
+
|
data/lib/virtus/group.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "active_support/core_ext/class"
|
1
2
|
require "virtus/group/version"
|
2
3
|
require "virtus/group/attribute_tracker"
|
3
4
|
|
@@ -17,6 +18,8 @@ module Virtus
|
|
17
18
|
def self.included(base)
|
18
19
|
base.class_eval do
|
19
20
|
extend ClassMethods
|
21
|
+
|
22
|
+
class_attribute :attribute_groups
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -28,7 +31,7 @@ module Virtus
|
|
28
31
|
end
|
29
32
|
|
30
33
|
def attribute_group
|
31
|
-
|
34
|
+
self.attribute_groups ||= {}
|
32
35
|
end
|
33
36
|
|
34
37
|
end
|
data/lib/virtus/group/version.rb
CHANGED
@@ -53,6 +53,27 @@ describe Virtus::Group do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
+
it_behaves_like 'an object with a virtus group' do
|
57
|
+
let(:base_class) do
|
58
|
+
Class.new do
|
59
|
+
include Virtus.model
|
60
|
+
include Virtus.group
|
61
|
+
|
62
|
+
group :user do
|
63
|
+
attribute :email, String
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
let(:model_class) do
|
69
|
+
Class.new(base_class) do
|
70
|
+
group :address do
|
71
|
+
attribute :city, String
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
56
77
|
it_behaves_like 'an object with a virtus group' do
|
57
78
|
let(:model_class) do
|
58
79
|
Class.new do
|
data/virtus-group.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
19
|
spec.add_dependency "virtus", ">= 1.0.0"
|
20
|
+
spec.add_dependency "activesupport", ">= 3.0.0"
|
20
21
|
|
21
22
|
spec.add_development_dependency "bundler", "~> 1.5"
|
22
23
|
spec.add_development_dependency "rake", "~> 10.1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: virtus-group
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Spas Poptchev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -62,6 +76,7 @@ files:
|
|
62
76
|
- .gitignore
|
63
77
|
- .ruby-gemset
|
64
78
|
- .ruby-version
|
79
|
+
- .travis.yml
|
65
80
|
- Gemfile
|
66
81
|
- LICENSE.txt
|
67
82
|
- README.md
|