attribute_enums 0.1.8 → 0.2.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/.gitignore +1 -3
- data/.rspec +1 -0
- data/CHANGELOG +4 -0
- data/Gemfile +1 -1
- data/README.markdown +61 -59
- data/attribute_enums.gemspec +5 -16
- data/lib/attribute_enums.rb +0 -4
- data/lib/attribute_enums/active_record.rb +122 -0
- data/lib/attribute_enums/common.rb +168 -0
- data/lib/attribute_enums/railtie.rb +2 -2
- data/lib/attribute_enums/version.rb +1 -1
- data/spec/common_and_active_record/ask_methods_options_spec.rb +58 -0
- data/spec/common_and_active_record/attribute_name_spec.rb +7 -0
- data/spec/common_and_active_record/boolean_options_spec.rb +43 -0
- data/spec/common_and_active_record/default_options_spec.rb +77 -0
- data/spec/common_and_active_record/i18n_options_spec.rb +116 -0
- data/spec/common_and_active_record/in_options_spec.rb +38 -0
- data/spec/common_and_active_record/readme_user_example_spec.rb +87 -0
- data/spec/common_and_active_record/scopeds_options_spec.rb +114 -0
- data/spec/common_and_active_record/validate_options_spec.rb +82 -0
- data/spec/spec_helper.rb +5 -12
- data/spec/support/locales/person_en.yml +14 -0
- data/spec/support/locales/person_zh-CN.yml +14 -0
- data/spec/support/locales/user_en.yml +7 -15
- data/spec/support/models/person.rb +23 -0
- metadata +34 -229
- data/Guardfile +0 -22
- data/lib/attribute_enums/active_record_extension.rb +0 -88
- data/spec/models/active_record/user_spec.rb +0 -67
- data/spec/rails3_0_app/.gitignore +0 -4
- data/spec/rails3_0_app/.rspec +0 -1
- data/spec/rails3_0_app/Gemfile +0 -13
- data/spec/rails3_0_app/Rakefile +0 -7
- data/spec/rails3_0_app/app/controllers/application_controller.rb +0 -3
- data/spec/rails3_0_app/app/helpers/application_helper.rb +0 -2
- data/spec/rails3_0_app/app/models/user.rb +0 -2
- data/spec/rails3_0_app/app/views/layouts/application.html.erb +0 -14
- data/spec/rails3_0_app/config.ru +0 -4
- data/spec/rails3_0_app/config/application.rb +0 -44
- data/spec/rails3_0_app/config/boot.rb +0 -6
- data/spec/rails3_0_app/config/database.yml +0 -19
- data/spec/rails3_0_app/config/environment.rb +0 -6
- data/spec/rails3_0_app/config/environments/development.rb +0 -26
- data/spec/rails3_0_app/config/environments/production.rb +0 -49
- data/spec/rails3_0_app/config/environments/test.rb +0 -35
- data/spec/rails3_0_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails3_0_app/config/initializers/inflections.rb +0 -10
- data/spec/rails3_0_app/config/initializers/mime_types.rb +0 -5
- data/spec/rails3_0_app/config/initializers/secret_token.rb +0 -7
- data/spec/rails3_0_app/config/initializers/session_store.rb +0 -8
- data/spec/rails3_0_app/config/locales/en.yml +0 -5
- data/spec/rails3_0_app/config/routes.rb +0 -58
- data/spec/rails3_0_app/db/migrate/20111129011508_create_users.rb +0 -14
- data/spec/rails3_0_app/db/schema.rb +0 -23
- data/spec/rails3_0_app/db/seeds.rb +0 -7
- data/spec/rails3_0_app/lib/tasks/.gitkeep +0 -0
- data/spec/rails3_0_app/public/404.html +0 -26
- data/spec/rails3_0_app/public/422.html +0 -26
- data/spec/rails3_0_app/public/500.html +0 -26
- data/spec/rails3_0_app/public/favicon.ico +0 -0
- data/spec/rails3_0_app/public/images/rails.png +0 -0
- data/spec/rails3_0_app/public/index.html +0 -239
- data/spec/rails3_0_app/public/robots.txt +0 -5
- data/spec/rails3_0_app/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3_0_app/script/rails +0 -6
- data/spec/rails3_0_app/vendor/plugins/.gitkeep +0 -0
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'attribute_enums/
|
1
|
+
require 'attribute_enums/active_record'
|
2
2
|
|
3
3
|
module AttributeEnums
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
5
|
initializer 'attribute_enums' do |app|
|
6
6
|
ActiveSupport.on_load :active_record do
|
7
|
-
include AttributeEnums::
|
7
|
+
include ::AttributeEnums::ActiveRecord
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ":methods options" do
|
4
|
+
|
5
|
+
describe "string attribute" do
|
6
|
+
describe "default methods" do
|
7
|
+
let(:model_klass) do
|
8
|
+
_person = Person.dup
|
9
|
+
_person.instance_eval do
|
10
|
+
include AttributeEnums::ActiveRecord
|
11
|
+
attribute_enums :gender, in: [:male, :female], ask_methods: true
|
12
|
+
end
|
13
|
+
_person
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { model_klass.new }
|
17
|
+
|
18
|
+
it do
|
19
|
+
subject.should respond_to(:male?)
|
20
|
+
subject.should respond_to(:female?)
|
21
|
+
end
|
22
|
+
it do
|
23
|
+
subject.gender = :male
|
24
|
+
subject.male?.should be_true
|
25
|
+
subject.female?.should be_false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
describe "prefix methods" do
|
31
|
+
let(:model_klass) do
|
32
|
+
_person = Person.dup
|
33
|
+
_person.instance_eval do
|
34
|
+
include AttributeEnums::ActiveRecord
|
35
|
+
attribute_enums :gender, in: [:male, :female], ask_methods: {prefix: 'gender_'}
|
36
|
+
end
|
37
|
+
_person
|
38
|
+
end
|
39
|
+
|
40
|
+
subject { model_klass.new }
|
41
|
+
|
42
|
+
it do
|
43
|
+
subject.should respond_to(:gender_male?)
|
44
|
+
end
|
45
|
+
it do
|
46
|
+
subject.gender = :male
|
47
|
+
subject.gender_male?.should be_true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
describe "boolean attribute" do
|
54
|
+
# this option is invalid boolean attribute.
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ":boolean options" do
|
4
|
+
|
5
|
+
let(:model_klass) do
|
6
|
+
_person = Person.dup
|
7
|
+
_person.instance_eval do
|
8
|
+
include AttributeEnums::ActiveRecord
|
9
|
+
attribute_enums :enable, boolean: true
|
10
|
+
end
|
11
|
+
_person
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { model_klass.new }
|
15
|
+
|
16
|
+
it do
|
17
|
+
model_klass.should respond_to(:get_enable_values)
|
18
|
+
end
|
19
|
+
|
20
|
+
it do
|
21
|
+
model_klass.get_enable_values.should == [['Yes', true], ['No', false]]
|
22
|
+
end
|
23
|
+
|
24
|
+
it do
|
25
|
+
subject.should respond_to(:enable_text)
|
26
|
+
end
|
27
|
+
|
28
|
+
it do
|
29
|
+
subject.enable = nil
|
30
|
+
subject.enable_text.should == ''
|
31
|
+
end
|
32
|
+
|
33
|
+
it do
|
34
|
+
subject.enable = true
|
35
|
+
subject.enable_text.should == 'Yes'
|
36
|
+
end
|
37
|
+
|
38
|
+
it do
|
39
|
+
subject.enable = false
|
40
|
+
subject.enable_text.should == 'No'
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ":default options" do
|
4
|
+
|
5
|
+
describe "string attribute" do
|
6
|
+
|
7
|
+
let(:model_klass) do
|
8
|
+
_person = Person.dup
|
9
|
+
_person.instance_eval do
|
10
|
+
include AttributeEnums::ActiveRecord
|
11
|
+
attribute_enums :gender, in: [:male, :female], default: :male
|
12
|
+
end
|
13
|
+
_person
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { model_klass.new }
|
17
|
+
|
18
|
+
it do
|
19
|
+
subject.gender = nil
|
20
|
+
subject.valid?
|
21
|
+
subject.gender.should == :male
|
22
|
+
end
|
23
|
+
|
24
|
+
it do
|
25
|
+
subject.gender = :female
|
26
|
+
subject.valid?
|
27
|
+
subject.gender.should == :female
|
28
|
+
end
|
29
|
+
|
30
|
+
it do
|
31
|
+
my_person = Person.dup
|
32
|
+
lambda do
|
33
|
+
my_person.instance_eval do
|
34
|
+
include AttributeEnums::ActiveRecord
|
35
|
+
attribute_enums :gender, in: [:male, :female], default: :unknow
|
36
|
+
end
|
37
|
+
end.should raise_error(Exception, /default value not match/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it do
|
41
|
+
my_person = Person.dup
|
42
|
+
lambda do
|
43
|
+
my_person.instance_eval do
|
44
|
+
include AttributeEnums::ActiveRecord
|
45
|
+
attribute_enums :gender, in: [:male, :female], default: 'male'
|
46
|
+
end
|
47
|
+
end.should_not raise_error(Exception, /default value not match/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "boolean attribute" do
|
52
|
+
|
53
|
+
let(:model_klass) do
|
54
|
+
_person = Person.dup
|
55
|
+
_person.instance_eval do
|
56
|
+
include AttributeEnums::ActiveRecord
|
57
|
+
attribute_enums :enable, boolean: true, default: true
|
58
|
+
end
|
59
|
+
_person
|
60
|
+
end
|
61
|
+
|
62
|
+
subject { model_klass.new }
|
63
|
+
|
64
|
+
it do
|
65
|
+
subject.enable = nil
|
66
|
+
subject.valid?
|
67
|
+
subject.enable.should == true
|
68
|
+
end
|
69
|
+
|
70
|
+
it do
|
71
|
+
subject.enable = false
|
72
|
+
subject.valid?
|
73
|
+
subject.enable.should == false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
#coding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe ":i18n options" do
|
5
|
+
#
|
6
|
+
# it i18n xxx_text and get_xxx_values methods result
|
7
|
+
#
|
8
|
+
describe "string attribute" do
|
9
|
+
describe "default translation namespace" do
|
10
|
+
let(:model_klass) do
|
11
|
+
_person = Person.dup
|
12
|
+
_person.instance_eval do
|
13
|
+
include AttributeEnums::ActiveRecord
|
14
|
+
attribute_enums :gender, in: [:male, :female], i18n: true
|
15
|
+
end
|
16
|
+
_person
|
17
|
+
end
|
18
|
+
|
19
|
+
subject { model_klass.new }
|
20
|
+
|
21
|
+
it do
|
22
|
+
model_klass.should respond_to(:get_gender_values)
|
23
|
+
end
|
24
|
+
|
25
|
+
it do
|
26
|
+
I18n.locale = :en
|
27
|
+
model_klass.get_gender_values.should == [['Boy', 'male'], ['Girl', 'female']]
|
28
|
+
end
|
29
|
+
|
30
|
+
it do
|
31
|
+
I18n.locale = :'zh-TW'
|
32
|
+
model_klass.get_gender_values.first[0].should start_with('translation missing:')
|
33
|
+
end
|
34
|
+
|
35
|
+
it do
|
36
|
+
subject.should respond_to(:gender_text)
|
37
|
+
end
|
38
|
+
|
39
|
+
it do
|
40
|
+
I18n.locale = :en
|
41
|
+
subject.gender = :male
|
42
|
+
subject.gender_text.should == 'Boy'
|
43
|
+
end
|
44
|
+
|
45
|
+
it do
|
46
|
+
I18n.locale = :'zh-CN'
|
47
|
+
subject.gender = :male
|
48
|
+
subject.gender_text.should == '男'
|
49
|
+
end
|
50
|
+
|
51
|
+
it do
|
52
|
+
I18n.locale = :'zh-TW'
|
53
|
+
subject.gender = :male
|
54
|
+
subject.gender_text.should start_with('translation missing:')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "prefix translation namespace" do
|
59
|
+
let(:model_klass) do
|
60
|
+
_person = Person.dup
|
61
|
+
_person.instance_eval do
|
62
|
+
include AttributeEnums::ActiveRecord
|
63
|
+
attribute_enums :gender, in: [:male, :female], i18n: {t_prefix: :person_}
|
64
|
+
end
|
65
|
+
_person
|
66
|
+
end
|
67
|
+
|
68
|
+
subject { model_klass.new }
|
69
|
+
|
70
|
+
it do
|
71
|
+
I18n.locale = :en
|
72
|
+
model_klass.get_gender_values.first[0].should_not start_with('translation missing:')
|
73
|
+
model_klass.get_gender_values.should == [['Boy', 'male'], ['Girl', 'female']]
|
74
|
+
end
|
75
|
+
|
76
|
+
it do
|
77
|
+
I18n.locale = :en
|
78
|
+
subject.gender = :male
|
79
|
+
subject.gender_text.should == 'Boy'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
describe "boolean attribute" do
|
88
|
+
describe "default namespace" do
|
89
|
+
let(:model_klass) do
|
90
|
+
_person = Person.dup
|
91
|
+
_person.instance_eval do
|
92
|
+
include AttributeEnums::ActiveRecord
|
93
|
+
attribute_enums :enable, boolean: true, i18n: true
|
94
|
+
end
|
95
|
+
_person
|
96
|
+
end
|
97
|
+
|
98
|
+
subject { model_klass.new }
|
99
|
+
|
100
|
+
it do
|
101
|
+
I18n.locale = :en
|
102
|
+
model_klass.get_enable_values.should == [['Enable', true], ['Disable', false]]
|
103
|
+
end
|
104
|
+
|
105
|
+
it do
|
106
|
+
subject.should respond_to(:enable_text)
|
107
|
+
end
|
108
|
+
|
109
|
+
it do
|
110
|
+
I18n.locale = :en
|
111
|
+
subject.enable = true
|
112
|
+
subject.enable_text.should == 'Enable'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ":in options" do
|
4
|
+
|
5
|
+
let(:model_klass) do
|
6
|
+
_person = Person.dup
|
7
|
+
_person.instance_eval do
|
8
|
+
include AttributeEnums::ActiveRecord
|
9
|
+
attribute_enums :gender, in: [:male, :female]
|
10
|
+
end
|
11
|
+
_person
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { model_klass.new }
|
15
|
+
|
16
|
+
it do
|
17
|
+
model_klass.should respond_to(:get_gender_values)
|
18
|
+
end
|
19
|
+
|
20
|
+
it do
|
21
|
+
model_klass.get_gender_values.should == [['male', 'male'], ['female', 'female']]
|
22
|
+
end
|
23
|
+
|
24
|
+
it do
|
25
|
+
subject.should respond_to(:gender_text)
|
26
|
+
end
|
27
|
+
|
28
|
+
it do
|
29
|
+
subject.gender = nil
|
30
|
+
subject.gender_text.should == ''
|
31
|
+
end
|
32
|
+
|
33
|
+
it do
|
34
|
+
subject.gender = :male
|
35
|
+
subject.gender_text.should == 'male'
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "readme user example" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
User.instance_eval do
|
7
|
+
include AttributeEnums::ActiveRecord
|
8
|
+
attribute_enums :status, in: [:pending, :accredited], default: :pending, scopeds: true, ask_methods: true, i18n: true, validate: true
|
9
|
+
attribute_enums :gender, in: [:female, :male], default: :male, scopeds: true, ask_methods: true, i18n: true, validate: true
|
10
|
+
|
11
|
+
attribute_enums :enable, boolean: true, default: true, scopeds: :disable, i18n: {t_prefix: :person_}
|
12
|
+
attribute_enums :removed, boolean: true, default: true, scopeds: :existed, i18n: true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { User.new }
|
17
|
+
|
18
|
+
=begin
|
19
|
+
User.get_gender_values
|
20
|
+
User.get_enable_values
|
21
|
+
user = User.new(gender: :male, enable: true)
|
22
|
+
user.gender_text
|
23
|
+
user.enable_text
|
24
|
+
=end
|
25
|
+
|
26
|
+
=begin
|
27
|
+
User.get_gender_values #=> [["Girl", "female"], ["Boy", "male"]]
|
28
|
+
User.get_enable_values #=> [["Enable", true], ["Disable", false]]
|
29
|
+
user = User.new(gender: :male, enable: true)
|
30
|
+
user.gender_text #=> "Boy"
|
31
|
+
user.enable_text #=> "Enable"
|
32
|
+
=end
|
33
|
+
|
34
|
+
it do
|
35
|
+
User.get_gender_values.should == [["Girl", "female"], ["Boy", "male"]]
|
36
|
+
User.get_enable_values.should == [["Enable", true], ["Disable", false]]
|
37
|
+
user = User.new(gender: :male, enable: true)
|
38
|
+
user.gender_text.should == "Boy"
|
39
|
+
user.enable_text.should == "Enable"
|
40
|
+
end
|
41
|
+
|
42
|
+
=begin
|
43
|
+
User.male #=> User.where(gender: :male)
|
44
|
+
User.female #=> User.where(gender: :female)
|
45
|
+
User.enable #=> User.where(enable: true)
|
46
|
+
User.disable #=> User.where(enable: false)
|
47
|
+
=end
|
48
|
+
|
49
|
+
it do
|
50
|
+
User.delete_all
|
51
|
+
user_a = User.create!(gender: :male)
|
52
|
+
user_b = User.create!(gender: :female)
|
53
|
+
User.male.map(&:id).should == [user_a.id]
|
54
|
+
User.female.map(&:id).should == [user_b.id]
|
55
|
+
|
56
|
+
User.delete_all
|
57
|
+
user_c = User.create!(enable: true)
|
58
|
+
user_d = User.create!(enable: false)
|
59
|
+
User.enable.map(&:id).should == [user_c.id]
|
60
|
+
User.disable.map(&:id).should == [user_d.id]
|
61
|
+
end
|
62
|
+
|
63
|
+
=begin
|
64
|
+
user = User.new(gender: :male, enable: true)
|
65
|
+
user.male? #=> true
|
66
|
+
user.female? #=> false
|
67
|
+
=end
|
68
|
+
|
69
|
+
it do
|
70
|
+
user = User.new(gender: :male, enable: true)
|
71
|
+
user.male?.should == true
|
72
|
+
user.female?.should == false
|
73
|
+
end
|
74
|
+
|
75
|
+
=begin
|
76
|
+
user = User.new
|
77
|
+
user.valid?
|
78
|
+
user.gender #=> :male
|
79
|
+
=end
|
80
|
+
|
81
|
+
it do
|
82
|
+
user = User.new(gender: :male, enable: true)
|
83
|
+
user.valid?
|
84
|
+
user.gender.should == :male
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|