extra_attributes 0.0.1 → 0.0.2
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/README.md +7 -0
- data/lib/extra_attribute.rb +9 -4
- data/lib/version.rb +1 -1
- data/spec/db/schema.rb +7 -0
- data/spec/lib/extra_attribute_spec.rb +39 -0
- data/spec/spec_helper.rb +1 -0
- metadata +94 -82
data/README.md
CHANGED
@@ -19,6 +19,13 @@ by Manic <http://tech.manic.tw>
|
|
19
19
|
....
|
20
20
|
end
|
21
21
|
|
22
|
+
### Configure extra\_attributes in you config/application.rb
|
23
|
+
|
24
|
+
require File.expand_path('../boot', __FILE__)
|
25
|
+
|
26
|
+
require 'rails/all'
|
27
|
+
require 'extra_attribute' # Add this line to enable
|
28
|
+
|
22
29
|
### Configure extra\_attributes in your model
|
23
30
|
|
24
31
|
class Person < ActiveRecord::Base
|
data/lib/extra_attribute.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
module ExtraAttribute
|
2
2
|
module ClassMethods
|
3
3
|
def extra_attributes(column, attribute_arrays)
|
4
|
-
|
4
|
+
@extra_attributes_column = column.to_s
|
5
|
+
|
6
|
+
class_eval %(
|
7
|
+
class << self; attr_accessor :extra_attributes_column end
|
8
|
+
)
|
9
|
+
|
5
10
|
attribute_arrays.each do |attr|
|
6
11
|
define_method "#{attr}" do
|
7
|
-
extra_data ||= JSON.parse(attributes[
|
12
|
+
extra_data ||= JSON.parse(attributes[self.class.extra_attributes_column] ? attributes[self.class.extra_attributes_column] : '{}')
|
8
13
|
return extra_data[attr.to_s].present? ? extra_data[attr.to_s] : nil
|
9
14
|
end
|
10
15
|
|
11
16
|
define_method "#{attr}=" do |val|
|
12
|
-
extra_data ||= JSON.parse(attributes[
|
17
|
+
extra_data ||= JSON.parse(attributes[self.class.extra_attributes_column] ? attributes[self.class.extra_attributes_column] : '{}')
|
13
18
|
extra_data[attr.to_s] = val
|
14
|
-
self.send("#{
|
19
|
+
self.send("#{self.class.extra_attributes_column}=", extra_data.to_json)
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
data/lib/version.rb
CHANGED
data/spec/db/schema.rb
CHANGED
@@ -8,6 +8,13 @@ ActiveRecord::Schema.define do
|
|
8
8
|
t.datetime 'updated_at'
|
9
9
|
end
|
10
10
|
|
11
|
+
create_table 'men', :force => true do |t|
|
12
|
+
t.string 'age'
|
13
|
+
t.text 'properties'
|
14
|
+
t.datetime 'created_at'
|
15
|
+
t.datetime 'updated_at'
|
16
|
+
end
|
17
|
+
|
11
18
|
create_table 'children', :force => true do |t|
|
12
19
|
t.string 'name'
|
13
20
|
t.belongs_to :person
|
@@ -56,4 +56,43 @@ describe ExtraAttribute do
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
describe "A custom attribute with another name" do
|
61
|
+
describe "John is a Man" do
|
62
|
+
before( :each ) do
|
63
|
+
@man = Man.new
|
64
|
+
end
|
65
|
+
it "who knows his name" do
|
66
|
+
@man.name = 'John'
|
67
|
+
@man.name.should eql('John')
|
68
|
+
end
|
69
|
+
|
70
|
+
it "who can change his name" do
|
71
|
+
@man.name = 'John'
|
72
|
+
@man.name = 'Joe'
|
73
|
+
@man.name.should eql('Joe')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "John is a Man whose name is changed" do
|
78
|
+
before( :each ) do
|
79
|
+
@man = Man.create(:name => "John")
|
80
|
+
end
|
81
|
+
|
82
|
+
it "who changes his name but not save." do
|
83
|
+
@man.name = 'Koh'
|
84
|
+
@man.name.should eql('Koh')
|
85
|
+
@man.reload
|
86
|
+
@man.name.should eql('John')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "who changes his name and saved." do
|
90
|
+
@man.name = 'Koh'
|
91
|
+
@man.name.should eql('Koh')
|
92
|
+
@man.save
|
93
|
+
@man.reload
|
94
|
+
@man.name.should eql('Koh')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
59
98
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,104 +1,107 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: extra_attributes
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Manic
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2013-04-24 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: activerecord
|
16
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
24
|
none: false
|
18
|
-
requirements:
|
25
|
+
requirements:
|
19
26
|
- - ~>
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 5
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 1
|
32
|
+
version: "3.1"
|
22
33
|
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: ruby-debug
|
23
37
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.1'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: ruby-debug19
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
33
39
|
none: false
|
34
|
-
requirements:
|
35
|
-
- -
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
38
47
|
type: :development
|
39
|
-
|
40
|
-
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
47
50
|
name: sqlite3
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.3.3
|
54
|
-
type: :development
|
55
51
|
prerelease: false
|
56
|
-
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
53
|
none: false
|
58
|
-
requirements:
|
54
|
+
requirements:
|
59
55
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 29
|
58
|
+
segments:
|
59
|
+
- 1
|
60
|
+
- 3
|
61
|
+
- 3
|
61
62
|
version: 1.3.3
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
63
|
type: :development
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: rake
|
71
67
|
prerelease: false
|
72
|
-
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: rspec
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
81
69
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
86
77
|
type: :development
|
78
|
+
version_requirements: *id004
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rspec
|
87
81
|
prerelease: false
|
88
|
-
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
83
|
none: false
|
90
|
-
requirements:
|
84
|
+
requirements:
|
91
85
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
hash: 23
|
88
|
+
segments:
|
89
|
+
- 2
|
90
|
+
- 6
|
91
|
+
- 0
|
93
92
|
version: 2.6.0
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id005
|
94
95
|
description: A simple alternative to acts_as_eav_model. Use JSON to store extra attrubutes.
|
95
|
-
email:
|
96
|
+
email:
|
96
97
|
- maniclf@gmail.com
|
97
98
|
executables: []
|
99
|
+
|
98
100
|
extensions: []
|
99
|
-
|
101
|
+
|
102
|
+
extra_rdoc_files:
|
100
103
|
- README.md
|
101
|
-
files:
|
104
|
+
files:
|
102
105
|
- .gitignore
|
103
106
|
- .rvmrc
|
104
107
|
- Gemfile
|
@@ -116,29 +119,38 @@ files:
|
|
116
119
|
- spec/support/person.rb
|
117
120
|
homepage: http://github.com/manic/extra_attributes
|
118
121
|
licenses: []
|
122
|
+
|
119
123
|
post_install_message:
|
120
124
|
rdoc_options: []
|
121
|
-
|
125
|
+
|
126
|
+
require_paths:
|
122
127
|
- lib
|
123
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
129
|
none: false
|
125
|
-
requirements:
|
126
|
-
- -
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
|
129
|
-
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
hash: 3
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
version: "0"
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
138
|
none: false
|
131
|
-
requirements:
|
132
|
-
- -
|
133
|
-
- !ruby/object:Gem::Version
|
134
|
-
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
135
146
|
requirements: []
|
147
|
+
|
136
148
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.8.
|
149
|
+
rubygems_version: 1.8.10
|
138
150
|
signing_key:
|
139
151
|
specification_version: 3
|
140
152
|
summary: A simple alternative to acts_as_eav_model.
|
141
|
-
test_files:
|
153
|
+
test_files:
|
142
154
|
- spec/db/schema.rb
|
143
155
|
- spec/lib/extra_attribute_spec.rb
|
144
156
|
- spec/spec_helper.rb
|