datts_right 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +10 -4
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/datts_right.gemspec +21 -3
- data/lib/generators/migration/migration_generator.rb +1 -1
- metadata +95 -5
data/README.textile
CHANGED
@@ -20,6 +20,7 @@ h2. Installation
|
|
20
20
|
Create a migration:
|
21
21
|
|
22
22
|
pre. create_table :datts do |t|
|
23
|
+
t.string :name, :null => false
|
23
24
|
t.string :attr_key, :null => false
|
24
25
|
t.string :object_type, :null => false
|
25
26
|
t.string :attributable_type, :null => false
|
@@ -29,6 +30,12 @@ pre. create_table :datts do |t|
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
33
|
+
* *name* is not important at the moment, but I intend to make better use of it in the future.
|
34
|
+
* *attr_key* the name of the dynamic attribute
|
35
|
+
* *object_type* what type of value is saved. See "object_type":#object_type.
|
36
|
+
* *attributable_id* and *attributable_type* are for the polymorphic association
|
37
|
+
* *integer_value*, *string_value*, *boolean_value*, *text_value*, *float_value* are used to store the data. See "object_type":#object_type.
|
38
|
+
|
32
39
|
Add this to your Gemfile:
|
33
40
|
|
34
41
|
@gem 'datts_right'@
|
@@ -63,7 +70,7 @@ h3. @instance.dynamic_columns
|
|
63
70
|
|
64
71
|
However, dynamic_attributes doesn't give us much information. What if we want to find out the list of dynamic attributes already available?
|
65
72
|
|
66
|
-
@user.dynamic_columns # {:age => {:object_type => "integer", :value => 820}}
|
73
|
+
pre. @user.dynamic_columns # {:age => {:object_type => "integer", :value => 820}}
|
67
74
|
|
68
75
|
h3. dynamic_attribute?(:some_attribute)
|
69
76
|
|
@@ -75,10 +82,8 @@ The dynamic attributes are only actually saved when save is called on the record
|
|
75
82
|
|
76
83
|
pre. @user.add_dynamic_attribute(:gunslinger, "boolean") # a column is already written on the "datts" table, with a null value.
|
77
84
|
@user.add_dynamic_attribute(:middle_name, "string") # a column is already written on the "datts" table, with a null value.
|
78
|
-
|
79
85
|
@user.gunslinger = true # saves into memory
|
80
86
|
@user.middle_name = "Unknown" # saves into memory
|
81
|
-
|
82
87
|
@user.save # the respective dynamic attribute columns are written in the datts table
|
83
88
|
|
84
89
|
h2. Structure of the datts table
|
@@ -86,6 +91,7 @@ h2. Structure of the datts table
|
|
86
91
|
Although you probably shouldn't work with it directly, the datts table looks like this:
|
87
92
|
|
88
93
|
pre. ActiveRecord::Base.connection.create_table(:datts) do |t|
|
94
|
+
t.string :name, :null => false
|
89
95
|
t.string :attr_key, :null => false
|
90
96
|
t.string :object_type, :null => false
|
91
97
|
t.string :attributable_type, :null => false
|
@@ -110,7 +116,7 @@ pre. {
|
|
110
116
|
|
111
117
|
*Why have different value columns?* Because I couldn't find any other way to perform SQL operations/calculations on a generic "value" column. Besides, what kind of column would that be? A text blob?
|
112
118
|
|
113
|
-
h2. Dynamic attribute "type"
|
119
|
+
h2(#object_type). Dynamic attribute "type"
|
114
120
|
|
115
121
|
Here are the different types of dynamic attributes you can save:
|
116
122
|
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
|
|
18
18
|
gem.summary = %Q{Allows saving of dynamic attributes in your ActiveRecord model}
|
19
19
|
gem.description = %Q{Creates a separate table that saves all your dynamic attributes.}
|
20
20
|
gem.email = "ramon@tayag.net"
|
21
|
-
gem.authors = ["
|
21
|
+
gem.authors = ["Ramon Tayag"]
|
22
22
|
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
23
|
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
24
|
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/datts_right.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{datts_right}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["
|
12
|
-
s.date = %q{2011-04-
|
11
|
+
s.authors = ["Ramon Tayag"]
|
12
|
+
s.date = %q{2011-04-11}
|
13
13
|
s.description = %q{Creates a separate table that saves all your dynamic attributes.}
|
14
14
|
s.email = %q{ramon@tayag.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -114,6 +114,12 @@ Gem::Specification.new do |s|
|
|
114
114
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
115
115
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
116
116
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
117
|
+
s.add_development_dependency(%q<autotest>, [">= 0"])
|
118
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
119
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
120
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
121
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
122
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
117
123
|
else
|
118
124
|
s.add_dependency(%q<datts_right>, [">= 0"])
|
119
125
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
@@ -172,6 +178,12 @@ Gem::Specification.new do |s|
|
|
172
178
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
173
179
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
174
180
|
s.add_dependency(%q<rcov>, [">= 0"])
|
181
|
+
s.add_dependency(%q<autotest>, [">= 0"])
|
182
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
183
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
184
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
185
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
186
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
175
187
|
end
|
176
188
|
else
|
177
189
|
s.add_dependency(%q<datts_right>, [">= 0"])
|
@@ -231,6 +243,12 @@ Gem::Specification.new do |s|
|
|
231
243
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
232
244
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
233
245
|
s.add_dependency(%q<rcov>, [">= 0"])
|
246
|
+
s.add_dependency(%q<autotest>, [">= 0"])
|
247
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
248
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
249
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
250
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
251
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
234
252
|
end
|
235
253
|
end
|
236
254
|
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datts_right
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
-
|
13
|
+
- Ramon Tayag
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-11 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -874,6 +874,96 @@ dependencies:
|
|
874
874
|
name: rcov
|
875
875
|
version_requirements: *id057
|
876
876
|
prerelease: false
|
877
|
+
- !ruby/object:Gem::Dependency
|
878
|
+
type: :development
|
879
|
+
requirement: &id058 !ruby/object:Gem::Requirement
|
880
|
+
none: false
|
881
|
+
requirements:
|
882
|
+
- - ">="
|
883
|
+
- !ruby/object:Gem::Version
|
884
|
+
hash: 3
|
885
|
+
segments:
|
886
|
+
- 0
|
887
|
+
version: "0"
|
888
|
+
name: autotest
|
889
|
+
version_requirements: *id058
|
890
|
+
prerelease: false
|
891
|
+
- !ruby/object:Gem::Dependency
|
892
|
+
type: :development
|
893
|
+
requirement: &id059 !ruby/object:Gem::Requirement
|
894
|
+
none: false
|
895
|
+
requirements:
|
896
|
+
- - ">="
|
897
|
+
- !ruby/object:Gem::Version
|
898
|
+
hash: 3
|
899
|
+
segments:
|
900
|
+
- 0
|
901
|
+
version: "0"
|
902
|
+
name: sqlite3
|
903
|
+
version_requirements: *id059
|
904
|
+
prerelease: false
|
905
|
+
- !ruby/object:Gem::Dependency
|
906
|
+
type: :development
|
907
|
+
requirement: &id060 !ruby/object:Gem::Requirement
|
908
|
+
none: false
|
909
|
+
requirements:
|
910
|
+
- - ~>
|
911
|
+
- !ruby/object:Gem::Version
|
912
|
+
hash: 3
|
913
|
+
segments:
|
914
|
+
- 2
|
915
|
+
- 3
|
916
|
+
- 0
|
917
|
+
version: 2.3.0
|
918
|
+
name: rspec
|
919
|
+
version_requirements: *id060
|
920
|
+
prerelease: false
|
921
|
+
- !ruby/object:Gem::Dependency
|
922
|
+
type: :development
|
923
|
+
requirement: &id061 !ruby/object:Gem::Requirement
|
924
|
+
none: false
|
925
|
+
requirements:
|
926
|
+
- - ~>
|
927
|
+
- !ruby/object:Gem::Version
|
928
|
+
hash: 23
|
929
|
+
segments:
|
930
|
+
- 1
|
931
|
+
- 0
|
932
|
+
- 0
|
933
|
+
version: 1.0.0
|
934
|
+
name: bundler
|
935
|
+
version_requirements: *id061
|
936
|
+
prerelease: false
|
937
|
+
- !ruby/object:Gem::Dependency
|
938
|
+
type: :development
|
939
|
+
requirement: &id062 !ruby/object:Gem::Requirement
|
940
|
+
none: false
|
941
|
+
requirements:
|
942
|
+
- - ~>
|
943
|
+
- !ruby/object:Gem::Version
|
944
|
+
hash: 7
|
945
|
+
segments:
|
946
|
+
- 1
|
947
|
+
- 5
|
948
|
+
- 2
|
949
|
+
version: 1.5.2
|
950
|
+
name: jeweler
|
951
|
+
version_requirements: *id062
|
952
|
+
prerelease: false
|
953
|
+
- !ruby/object:Gem::Dependency
|
954
|
+
type: :development
|
955
|
+
requirement: &id063 !ruby/object:Gem::Requirement
|
956
|
+
none: false
|
957
|
+
requirements:
|
958
|
+
- - ">="
|
959
|
+
- !ruby/object:Gem::Version
|
960
|
+
hash: 3
|
961
|
+
segments:
|
962
|
+
- 0
|
963
|
+
version: "0"
|
964
|
+
name: rcov
|
965
|
+
version_requirements: *id063
|
966
|
+
prerelease: false
|
877
967
|
description: Creates a separate table that saves all your dynamic attributes.
|
878
968
|
email: ramon@tayag.net
|
879
969
|
executables: []
|