attribution 0.0.2 → 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.
- data/attribution.gemspec +1 -1
- data/lib/attribution/version.rb +1 -1
- data/lib/attribution.rb +21 -0
- data/test/attribution_test.rb +6 -0
- metadata +2 -2
data/attribution.gemspec
CHANGED
data/lib/attribution/version.rb
CHANGED
data/lib/attribution.rb
CHANGED
@@ -20,6 +20,13 @@ module Attribution
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def attributes
|
24
|
+
self.class.attributes.inject({}) do |attrs, attr|
|
25
|
+
attrs[attr] = send(attr)
|
26
|
+
attrs
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
23
30
|
module ClassMethods
|
24
31
|
def cast(obj)
|
25
32
|
case obj
|
@@ -29,8 +36,13 @@ module Attribution
|
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
39
|
+
def attributes
|
40
|
+
@attributes ||= []
|
41
|
+
end
|
42
|
+
|
32
43
|
# Attribute macros
|
33
44
|
def string(attr)
|
45
|
+
attributes << attr.to_sym
|
34
46
|
attr_reader(attr)
|
35
47
|
define_method("#{attr}=") do |arg|
|
36
48
|
instance_variable_set("@#{attr}", arg.to_s)
|
@@ -38,6 +50,7 @@ module Attribution
|
|
38
50
|
end
|
39
51
|
|
40
52
|
def boolean(attr)
|
53
|
+
attributes << attr.to_sym
|
41
54
|
attr_reader(attr)
|
42
55
|
define_method("#{attr}=") do |arg|
|
43
56
|
v = case arg
|
@@ -51,6 +64,7 @@ module Attribution
|
|
51
64
|
end
|
52
65
|
|
53
66
|
def integer(attr)
|
67
|
+
attributes << attr.to_sym
|
54
68
|
attr_reader(attr)
|
55
69
|
define_method("#{attr}=") do |arg|
|
56
70
|
instance_variable_set("@#{attr}", arg.to_i)
|
@@ -58,6 +72,7 @@ module Attribution
|
|
58
72
|
end
|
59
73
|
|
60
74
|
def float(attr)
|
75
|
+
attributes << attr.to_sym
|
61
76
|
attr_reader(attr)
|
62
77
|
define_method("#{attr}=") do |arg|
|
63
78
|
instance_variable_set("@#{attr}", arg.to_f)
|
@@ -65,6 +80,7 @@ module Attribution
|
|
65
80
|
end
|
66
81
|
|
67
82
|
def decimal(attr)
|
83
|
+
attributes << attr.to_sym
|
68
84
|
attr_reader(attr)
|
69
85
|
define_method("#{attr}=") do |arg|
|
70
86
|
instance_variable_set("@#{attr}", BigDecimal.new(arg.to_s))
|
@@ -72,6 +88,7 @@ module Attribution
|
|
72
88
|
end
|
73
89
|
|
74
90
|
def date(attr)
|
91
|
+
attributes << attr.to_sym
|
75
92
|
attr_reader(attr)
|
76
93
|
define_method("#{attr}=") do |arg|
|
77
94
|
v = case arg
|
@@ -85,6 +102,8 @@ module Attribution
|
|
85
102
|
end
|
86
103
|
|
87
104
|
def time(attr)
|
105
|
+
attributes << attr.to_sym
|
106
|
+
attributes << attr.to_sym
|
88
107
|
attr_reader(attr)
|
89
108
|
define_method("#{attr}=") do |arg|
|
90
109
|
v = case arg
|
@@ -98,6 +117,7 @@ module Attribution
|
|
98
117
|
end
|
99
118
|
|
100
119
|
def time_zone(attr)
|
120
|
+
attributes << attr.to_sym
|
101
121
|
attr_reader(attr)
|
102
122
|
define_method("#{attr}=") do |arg|
|
103
123
|
instance_variable_set("@#{attr}", ActiveSupport::TimeZone[arg.to_s])
|
@@ -107,6 +127,7 @@ module Attribution
|
|
107
127
|
# Association macros
|
108
128
|
def belongs_to(association_name)
|
109
129
|
# foo_id
|
130
|
+
attributes << "#{association_name}_id".to_sym
|
110
131
|
define_method("#{association_name}_id") do
|
111
132
|
ivar = "@#{association_name}_id"
|
112
133
|
if instance_variable_defined?(ivar)
|
data/test/attribution_test.rb
CHANGED
@@ -79,4 +79,10 @@ class AttributionTest < Test::Unit::TestCase
|
|
79
79
|
assert_equal 3, book.chapters.size
|
80
80
|
assert_equal book, book.chapters.first.book
|
81
81
|
end
|
82
|
+
|
83
|
+
def test_attributes
|
84
|
+
chapter = Chapter.new(:number => "1")
|
85
|
+
assert_equal [:number, :title, :page_number, :book_id], Chapter.attributes
|
86
|
+
assert_equal({ :number => 1, :title => nil, :page_number => nil, :book_id => nil }, chapter.attributes)
|
87
|
+
end
|
82
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attribution
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|