easy_model 1.0.2 → 1.0.3
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.rdoc +60 -12
- data/VERSION +1 -1
- data/easy_model.gemspec +2 -2
- data/lib/easy_model/column.rb +6 -0
- data/test/easy_model/test_column.rb +29 -0
- metadata +15 -15
data/README.rdoc
CHANGED
@@ -1,34 +1,81 @@
|
|
1
1
|
= easy_model
|
2
2
|
|
3
|
-
|
3
|
+
データベースに関連付かないモデルの基本クラスや,
|
4
|
+
代入時に ActiveRecord と同じ型変換が行われる属性を定義する機能を提供します.
|
4
5
|
|
5
|
-
==
|
6
|
+
== データベースに関連付かないモデル, 属性
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
Rails3 ではネーミングルールやバリデーションを扱う機能がモジュール分けされているため,
|
9
|
+
それらのモジュールを再利用することでデータベースに関連付かないモデルを作成することができます.
|
10
|
+
コーディング自体は簡単ですが, いくつもあるモジュールを include するコードを何度も書くことは手間です.
|
11
|
+
|
12
|
+
EasyModel::Base はデータベースに関連付かないモデルの基本クラスです.
|
13
|
+
以下のように EasyModel::Base を継承すれば, そのような手間を省くことができます.
|
14
|
+
|
15
|
+
#
|
16
|
+
# ログインフォーム.
|
17
|
+
#
|
18
|
+
class LoginForm < EasyModel::Base
|
19
|
+
|
20
|
+
...
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
属性を定義する場合は, 以下のように attr_accessor ではなく column メソッドを利用すると便利です.
|
25
|
+
column メソッドを利用すると, 属性の型とデフォルト値を指定することができます.
|
10
26
|
|
11
27
|
#
|
12
|
-
#
|
28
|
+
# ログインフォーム.
|
13
29
|
#
|
14
|
-
class
|
30
|
+
class LoginForm < EasyModel::Base
|
15
31
|
|
16
32
|
# 会員番号.
|
17
33
|
column :member_no, :integer
|
18
|
-
|
34
|
+
|
35
|
+
validates :member_no,
|
36
|
+
:presence => true,
|
37
|
+
:numericality => {:only_integer => true}
|
19
38
|
|
20
39
|
# パスワード.
|
21
40
|
column :password, :string
|
22
|
-
|
41
|
+
|
42
|
+
validates :password,
|
43
|
+
:presence => true
|
23
44
|
|
24
45
|
# ログイン状態を保持する (デフォルトは true).
|
25
46
|
column :remember, :boolean, :default => true
|
26
47
|
|
27
48
|
end
|
28
49
|
|
50
|
+
column メソッドで定義した属性は, 代入時に ActiveRecord と同様の型変換が行われます.
|
51
|
+
|
52
|
+
login_form = LoginForm.new(:member_no => '1234567',
|
53
|
+
:password => 'PASSWORD',
|
54
|
+
:remember => 'false')
|
55
|
+
|
56
|
+
login_form.member_no # => 1234567
|
57
|
+
login_form.member_no_before_type_cast # => '1234567'
|
58
|
+
login_form.password # => 'PASSWORD'
|
59
|
+
login_form.password_before_type_cast # => 'PASSWORD'
|
60
|
+
login_form.remember # => false
|
61
|
+
login_form.remember_before_type_cast # => 'false'
|
62
|
+
|
63
|
+
データベースのテーブルに関連付いているモデルでも column メソッドを利用したい場合は,
|
64
|
+
EasyModel::Column モジュールを include します.
|
65
|
+
|
66
|
+
class User < ActiveRecord::Base
|
67
|
+
|
68
|
+
include EasyModel::Column
|
69
|
+
|
70
|
+
column ...
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
29
76
|
== 検索フォーム
|
30
77
|
|
31
|
-
検索フォームを表すモデルを作成する場合は, EasyModel::SearchForm
|
78
|
+
検索フォームを表すモデルを作成する場合は, EasyModel::SearchForm を利用すると便利です.
|
32
79
|
EasyModel::SearchForm は EasyModel::Base に検索用に便利な機能を追加したクラスです.
|
33
80
|
EasyModel::SearchForm を継承したクラスは ActiveRecord::Relation を返す scoped メソッドを定義する必要があります.
|
34
81
|
|
@@ -42,8 +89,9 @@ EasyModel::SearchForm を継承したクラスは ActiveRecord::Relation を返
|
|
42
89
|
# 会員名.
|
43
90
|
column :name, :string
|
44
91
|
|
45
|
-
#
|
92
|
+
# ステータス.
|
46
93
|
column :status, :integer
|
94
|
+
|
47
95
|
validates :status, :inclusion => [1, 2, 3]
|
48
96
|
|
49
97
|
#
|
@@ -56,7 +104,7 @@ EasyModel::SearchForm を継承したクラスは ActiveRecord::Relation を返
|
|
56
104
|
scoped = scoped.where(:name => name) if self.name.present?
|
57
105
|
scoped = scoped.where(:status => status) if self.status.present?
|
58
106
|
|
59
|
-
# 検索条件を含む scope
|
107
|
+
# 検索条件を含む scope を返す.
|
60
108
|
scoped
|
61
109
|
end
|
62
110
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.3
|
data/easy_model.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "easy_model"
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["SUZUKI Kei"]
|
12
|
-
s.date = "2012-07-
|
12
|
+
s.date = "2012-07-30"
|
13
13
|
s.description = "\u{30c7}\u{30fc}\u{30bf}\u{30d9}\u{30fc}\u{30b9}\u{306b}\u{4f9d}\u{5b58}\u{3057}\u{306a}\u{3044}\u{30e2}\u{30c7}\u{30eb}\u{306e}\u{57fa}\u{672c}\u{30af}\u{30e9}\u{30b9}\u{3084}, ActiveRecord \u{3068}\u{540c}\u{3058}\u{578b}\u{5909}\u{63db}\u{3092}\u{884c}\u{3046}\u{5c5e}\u{6027}\u{5b9a}\u{7fa9}\u{30e1}\u{30bd}\u{30c3}\u{30c9}\u{3092}\u{63d0}\u{4f9b}\u{3057}\u{307e}\u{3059}."
|
14
14
|
s.email = "info-techscore@synergy101.jp"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/easy_model/column.rb
CHANGED
@@ -40,8 +40,14 @@ module EasyModel::Column::ClassMethods
|
|
40
40
|
def column(name, type, options={})
|
41
41
|
ActiveRecord::ConnectionAdapters::Column.new(name, options[:default], type, true).tap do |column|
|
42
42
|
define_method("#{name}=") do |value|
|
43
|
+
value = nil if column.number? and value.kind_of?(String) and value.blank?
|
44
|
+
instance_variable_set("@#{name}_before_type_cast", value)
|
43
45
|
instance_variable_set("@#{name}", column.type_cast(value))
|
44
46
|
end
|
47
|
+
define_method("#{name}_before_type_cast") do
|
48
|
+
instance_variable_set("@#{name}_before_type_cast", column.default) unless instance_variable_defined?("@#{name}_before_type_cast")
|
49
|
+
instance_variable_get("@#{name}_before_type_cast")
|
50
|
+
end
|
45
51
|
define_method(name) do
|
46
52
|
instance_variable_set("@#{name}", column.default) unless instance_variable_defined?("@#{name}")
|
47
53
|
instance_variable_get("@#{name}")
|
@@ -7,7 +7,36 @@ class EasyModel::TestColumn < Test::Unit::TestCase
|
|
7
7
|
def test_has_column_method
|
8
8
|
model = Class.new
|
9
9
|
model.send(:include, EasyModel::Column)
|
10
|
+
model.send(:column, :integer_column, :integer)
|
10
11
|
assert model.protected_methods.include?(:column)
|
12
|
+
|
13
|
+
object = model.new
|
14
|
+
assert object.respond_to?(:integer_column)
|
15
|
+
assert object.respond_to?(:integer_column=)
|
16
|
+
assert object.respond_to?(:integer_column_before_type_cast)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_before_type_cast
|
20
|
+
model = Class.new
|
21
|
+
model.send(:include, EasyModel::Column)
|
22
|
+
model.send(:column, :integer_column, :integer)
|
23
|
+
object = model.new
|
24
|
+
|
25
|
+
object.integer_column = ''
|
26
|
+
assert_nil object.integer_column
|
27
|
+
assert_nil object.integer_column_before_type_cast
|
28
|
+
|
29
|
+
object.integer_column = '777'
|
30
|
+
assert_equal 777, object.integer_column
|
31
|
+
assert_equal '777', object.integer_column_before_type_cast
|
32
|
+
|
33
|
+
object.integer_column = true
|
34
|
+
assert_equal 1, object.integer_column
|
35
|
+
assert_equal true, object.integer_column_before_type_cast
|
36
|
+
|
37
|
+
object.integer_column = false
|
38
|
+
assert_equal 0, object.integer_column
|
39
|
+
assert_equal false, object.integer_column_before_type_cast
|
11
40
|
end
|
12
41
|
|
13
42
|
def test_string_column
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &71228770 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *71228770
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &71228330 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.0.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *71228330
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rdoc
|
38
|
-
requirement: &
|
38
|
+
requirement: &71227660 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '3.12'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *71227660
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &71226630 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *71226630
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &71225660 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.8.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *71225660
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
requirement: &
|
71
|
+
requirement: &71224630 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *71224630
|
80
80
|
description: データベースに依存しないモデルの基本クラスや, ActiveRecord と同じ型変換を行う属性定義メソッドを提供します.
|
81
81
|
email: info-techscore@synergy101.jp
|
82
82
|
executables: []
|
@@ -114,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version: '0'
|
115
115
|
segments:
|
116
116
|
- 0
|
117
|
-
hash: -
|
117
|
+
hash: -442526499
|
118
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
119
|
none: false
|
120
120
|
requirements:
|