tableless_model 0.0.3 → 0.0.4
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/Gemfile.lock +4 -17
- data/README.rdoc +5 -4
- data/lib/activerecord/base/class_methods.rb +7 -6
- data/lib/tableless_model/version.rb +1 -1
- data/spec/tableless_model_spec.rb +5 -4
- data/spec/test_helper.rb +6 -4
- metadata +5 -11
data/Gemfile.lock
CHANGED
@@ -1,34 +1,21 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
tableless_model (0.0.4)
|
5
5
|
validatable
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
|
11
|
-
activesupport (= 3.0.3)
|
12
|
-
builder (~> 2.1.2)
|
13
|
-
i18n (~> 0.4)
|
14
|
-
activerecord (3.0.3)
|
15
|
-
activemodel (= 3.0.3)
|
16
|
-
activesupport (= 3.0.3)
|
17
|
-
arel (~> 2.0.2)
|
18
|
-
tzinfo (~> 0.3.23)
|
19
|
-
activesupport (3.0.3)
|
20
|
-
arel (2.0.6)
|
21
|
-
builder (2.1.2)
|
22
|
-
i18n (0.5.0)
|
10
|
+
ansi (1.2.2)
|
23
11
|
minitest (2.0.2)
|
24
|
-
tzinfo (0.3.23)
|
25
12
|
validatable (1.6.7)
|
26
13
|
|
27
14
|
PLATFORMS
|
28
15
|
ruby
|
29
16
|
|
30
17
|
DEPENDENCIES
|
31
|
-
|
18
|
+
ansi
|
32
19
|
minitest
|
20
|
+
tableless_model!
|
33
21
|
validatable
|
34
|
-
vitobotta/tableless_model!
|
data/README.rdoc
CHANGED
@@ -7,6 +7,7 @@ Tableless Model behaves in a similar way to normal ActiveRecord models in that i
|
|
7
7
|
|
8
8
|
In particular, by using Tableless Model, you could save tables whenever you have one to one associations between a parent model and a child model containing options, settings, debugging information or any other collection of attributes that belongs uniquely to a single parent object.
|
9
9
|
|
10
|
+
Removing database tables also means reducing the number of queries to fetch associations, therefore it can also help a little bit with performance.
|
10
11
|
|
11
12
|
|
12
13
|
== Installation
|
@@ -15,7 +16,7 @@ Tableless Model is available as a Rubygem:
|
|
15
16
|
|
16
17
|
gem install tableless_model
|
17
18
|
|
18
|
-
(current version: 0.0.
|
19
|
+
(current version: 0.0.4)
|
19
20
|
|
20
21
|
|
21
22
|
== Usage
|
@@ -28,7 +29,7 @@ For example's sake, say we have these two models:
|
|
28
29
|
|
29
30
|
# having columns such as id, title, etc
|
30
31
|
|
31
|
-
has_one :
|
32
|
+
has_one :seo_options
|
32
33
|
|
33
34
|
end
|
34
35
|
|
@@ -48,7 +49,7 @@ For example's sake, say we have these two models:
|
|
48
49
|
|
49
50
|
So that each instance of Page has its own SEO options, and these options/settings only belong to a page, so we have a one to one association, and our database will have the tables "pages", and "seo_options".
|
50
51
|
|
51
|
-
Using Tableless Model, we could remove the association and the table seo_options altogether, by storing those options in a column
|
52
|
+
Using Tableless Model, we could remove the association and the table seo_options altogether, by storing those options in a column of the pages table, in a YAML-serialized form. So the models become:
|
52
53
|
|
53
54
|
|
54
55
|
1)
|
@@ -122,7 +123,7 @@ And this is how the content of the serialized column would look like in the data
|
|
122
123
|
|
123
124
|
== Validations
|
124
125
|
|
125
|
-
Tableless Model uses the gem
|
126
|
+
Tableless Model uses the Validatable gem to support validations methods and callbacks (such as "after_validation").
|
126
127
|
Note: it currently uses the Rails 2.x syntax only.
|
127
128
|
|
128
129
|
Example:
|
@@ -46,7 +46,7 @@ module Base
|
|
46
46
|
# model and not just a normal hash or the value of the attribute in the database,
|
47
47
|
# which is plain text
|
48
48
|
define_method column_name.to_s do
|
49
|
-
class_type.new(read_attribute(
|
49
|
+
class_type.new(read_attribute(column_name.to_sym) || {})
|
50
50
|
end
|
51
51
|
|
52
52
|
# Adding setter for the serialized column,
|
@@ -58,7 +58,8 @@ module Base
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
|
61
|
+
|
62
|
+
|
62
63
|
#
|
63
64
|
#
|
64
65
|
# Overriding the setter for the serialized column in the AR model,
|
@@ -68,20 +69,20 @@ module Base
|
|
68
69
|
#
|
69
70
|
def default_value_for(property, default_value)
|
70
71
|
unless method_defined? "after_initialize_with_default_value_for_#{property.to_s}"
|
71
|
-
|
72
|
+
|
72
73
|
unless method_defined? "after_initialize"
|
73
74
|
define_method "after_initialize" do |*args|
|
74
75
|
end
|
75
76
|
end
|
76
|
-
|
77
|
+
|
77
78
|
define_method "after_initialize_with_default_value_for_#{property.to_s}" do |*args|
|
78
79
|
send("after_initialize_without_default_value_for_#{property.to_s}", *args)
|
79
80
|
return unless new_record?
|
80
81
|
return unless self.respond_to?(property.to_sym)
|
81
|
-
|
82
|
+
|
82
83
|
self.send("#{property.to_s}=".to_sym, self.send(property.to_sym) || default_value)
|
83
84
|
end
|
84
|
-
|
85
|
+
|
85
86
|
alias_method_chain "after_initialize", "default_value_for_#{property.to_s}"
|
86
87
|
end
|
87
88
|
end
|
@@ -1,11 +1,12 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "test_helper")
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
2
2
|
|
3
3
|
require "active_record"
|
4
|
-
require "lib/tableless_model"
|
5
4
|
require 'minitest/autorun'
|
6
5
|
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "../lib/tableless_model"))
|
7
7
|
|
8
|
-
|
8
|
+
|
9
|
+
describe "A class inheriting from ActiveRecord::TablelessModel" do
|
9
10
|
before do
|
10
11
|
class TestClass1 < ActiveRecord::TablelessModel
|
11
12
|
end
|
@@ -119,7 +120,7 @@ describe "An instance of TablelessModel" do
|
|
119
120
|
# excluding some test values that would always fail depending on the type
|
120
121
|
exclude_test_values = case type
|
121
122
|
when :decimal then [ "test", true ]
|
122
|
-
when :time then [ 1234, true ]
|
123
|
+
when :time then [ "test", 1234, true ]
|
123
124
|
when :date then [ "test", 1234, true, "1234.12" ]
|
124
125
|
when :datetime then [ "test", 1234, true ]
|
125
126
|
else []
|
data/spec/test_helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
|
3
|
-
require 'minitest/
|
2
|
+
gem "minitest"
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
4
5
|
require 'ansi'
|
5
6
|
|
6
7
|
class MiniTest::Unit
|
@@ -43,13 +44,14 @@ class MiniTest::Unit
|
|
43
44
|
def run_test_suites(filter = /./)
|
44
45
|
@test_count, @assertion_count = 0, 0
|
45
46
|
old_sync, @@out.sync = @@out.sync, true if @@out.respond_to? :sync=
|
47
|
+
|
46
48
|
TestCase.test_suites.each do |suite|
|
47
49
|
test_cases = suite.test_methods.grep(filter)
|
48
50
|
if test_cases.size > 0
|
49
51
|
@@out.print "\n#{suite}:\n"
|
50
52
|
end
|
51
53
|
|
52
|
-
|
54
|
+
test_cases.each do |test|
|
53
55
|
inst = suite.new test
|
54
56
|
inst._assertions = 0
|
55
57
|
|
@@ -77,7 +79,7 @@ class MiniTest::Unit
|
|
77
79
|
@@out.print " (%.2fs) " % (Time.now - t)
|
78
80
|
|
79
81
|
if @broken
|
80
|
-
@@out.puts
|
82
|
+
@@out.puts
|
81
83
|
|
82
84
|
report = @report.last
|
83
85
|
@@out.puts pad(report[:message], 10)
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tableless_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Vito Botta
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-11 00:00:00 +00:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -40,7 +38,6 @@ dependencies:
|
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
@@ -54,7 +51,6 @@ dependencies:
|
|
54
51
|
requirements:
|
55
52
|
- - ">="
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
54
|
segments:
|
59
55
|
- 0
|
60
56
|
version: "0"
|
@@ -97,7 +93,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
93
|
requirements:
|
98
94
|
- - ">="
|
99
95
|
- !ruby/object:Gem::Version
|
100
|
-
hash: 3
|
101
96
|
segments:
|
102
97
|
- 0
|
103
98
|
version: "0"
|
@@ -106,14 +101,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
101
|
requirements:
|
107
102
|
- - ">="
|
108
103
|
- !ruby/object:Gem::Version
|
109
|
-
hash: 3
|
110
104
|
segments:
|
111
105
|
- 0
|
112
106
|
version: "0"
|
113
107
|
requirements: []
|
114
108
|
|
115
109
|
rubyforge_project: tableless_model
|
116
|
-
rubygems_version: 1.
|
110
|
+
rubygems_version: 1.3.7
|
117
111
|
signing_key:
|
118
112
|
specification_version: 3
|
119
113
|
summary: A serialisable and validatable table-less model with support for associations, useful to store settings, options, etc in a serialized form in a parent object
|