virtus_dynamic 0.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.
@@ -0,0 +1,18 @@
1
+ module Virtus
2
+ module Dynamic
3
+ module Attribute
4
+ def self.extended(instance)
5
+ virtus_was_mixed_in = Virtus::virtus?(instance)
6
+ previous_attribute_set = instance.send :attribute_set if virtus_was_mixed_in
7
+
8
+ instance.extend Virtus
9
+
10
+ if virtus_was_mixed_in
11
+ instance.instance_eval do
12
+ @attribute_set.merge previous_attribute_set
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module Virtus
2
+ module Dynamic
3
+ module Expando
4
+ def self.extended(instance)
5
+ instance.extend Dynamic::Attribute
6
+ end
7
+
8
+ def method_missing(meth, *args, &block)
9
+ writer_pattern = /^([_ | \w])([_ | \w | \d ])*=$/
10
+
11
+ if writer_pattern !~ meth.to_s or args.length == 0
12
+ super
13
+ else
14
+ val = args[0]
15
+ attribute_name = meth.to_s.chomp('=')
16
+ attribute :"#{attribute_name}", val.class
17
+ send meth, val
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1 @@
1
+ require 'virtus/dynamic/expando/expando'
@@ -0,0 +1,17 @@
1
+ require 'virtus'
2
+
3
+ require 'virtus/dynamic/attribute'
4
+ require 'virtus/dynamic/expando'
5
+
6
+ module Virtus
7
+ def self.virtus?(obj)
8
+ obj.is_a? Virtus
9
+ end
10
+
11
+ module Dynamic
12
+ def self.extended(instance)
13
+ instance.extend Attribute
14
+ instance.extend Expando
15
+ end
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: virtus_dynamic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - The Sans Collective
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-20 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/virtus/dynamic/attribute.rb
21
+ - lib/virtus/dynamic/expando/expando.rb
22
+ - lib/virtus/dynamic/expando.rb
23
+ - lib/virtus/dynamic.rb
24
+ homepage: https://github.com/Sans/virtus-dynamic
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 1.9.2
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.25
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: Virtus Dynamic Library
48
+ test_files: []