super_list 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +19 -14
- data/VERSION +1 -1
- data/lib/super_list.rb +39 -43
- data/test/super_list_test.rb +22 -8
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -12,28 +12,33 @@
|
|
12
12
|
|
13
13
|
User.new(:gender => 'NF').valid? => false
|
14
14
|
User.new(:gender => 'M').valid? => true
|
15
|
-
User.new(:gender => 'F').gender
|
16
|
-
User.new(:gender => 'F').gender
|
17
|
-
User.new(:gender => 'F').
|
15
|
+
User.new(:gender => 'F').gender(:default) => 'Female'
|
16
|
+
User.new(:gender => 'F').gender(:amos) => 'M2'
|
17
|
+
User.new(:gender => 'F').gender => 'F'
|
18
18
|
|
19
19
|
User.new(:gender => 'Man').valid? => true
|
20
|
-
User.new(:gender => 'Man').
|
21
|
-
User.new(:gender => 'Man').gender
|
20
|
+
User.new(:gender => 'Man').gender => 'M'
|
21
|
+
User.new(:gender => 'Man').gender(:amos) => 'M1'
|
22
22
|
|
23
23
|
user = User.new(:gender => 'F', :gender2 => 'M')
|
24
|
-
user.gender2
|
25
|
-
user.gender2(:locale => "api")
|
26
|
-
|
27
|
-
SuperList["Gender"].get_value("M").to_s
|
28
|
-
SuperList["Gender"].get_key("Man")
|
29
|
-
SuperList["Gender1"].get_key("translation missing: en.Gender1.Female")
|
30
|
-
SuperList["Gender"].options
|
31
|
-
SuperList["Gender"].keys
|
24
|
+
user.gender2(:default) => "translation missing: en.Gender.Man"
|
25
|
+
user.gender2(:locale => "api") => "translation missing: api.Gender.Man"
|
26
|
+
|
27
|
+
SuperList["Gender"].get_value("M").to_s => "Man"
|
28
|
+
SuperList["Gender"].get_key("Man") => "M"
|
29
|
+
SuperList["Gender1"].get_key("translation missing: en.Gender1.Female") => "F"
|
30
|
+
SuperList["Gender"].options => {:use_i18n=>false, :i18n_scope=>"Gender", :allow_blank=>true}
|
31
|
+
SuperList["Gender"].keys => ["M", "F"]
|
32
32
|
SuperList["Gender"].values(:use_i18n => true, :locale => 'zh')
|
33
|
-
|
33
|
+
=> ["translation missing: zh.Gender1.Man", "translation missing: zh.Gender1.Female"]
|
34
|
+
|
34
35
|
assert_equal ["M","F"], SuperList["Gender"].map {|k,v| k }
|
35
36
|
assert_equal ["Man", "Female"], SuperList["Gender"].map {|k,v| v }
|
36
37
|
|
38
|
+
assert_equal ["M","F"], SuperList["Gender"].select_options {|k,v| v }
|
39
|
+
assert_equal ["Man", "Female"], SuperList["Gender"].select_options {|k,v| k }
|
40
|
+
|
41
|
+
|
37
42
|
== Please refer {test file}[https://github.com/jinzhu/super_list/blob/master/test/super_list_test.rb] for more examples.
|
38
43
|
|
39
44
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/lib/super_list.rb
CHANGED
@@ -5,13 +5,16 @@ class SuperList
|
|
5
5
|
@@options = { :use_i18n => false}
|
6
6
|
@@data = ActiveSupport::OrderedHash.new
|
7
7
|
|
8
|
-
def self.
|
9
|
-
@@options.
|
8
|
+
def self.options=(options)
|
9
|
+
Thread.current[:super_list_options] = @@options.merge(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.options
|
13
|
+
Thread.current[:super_list_options] || @@options
|
10
14
|
end
|
11
15
|
|
12
16
|
def initialize(name, values, options={})
|
13
|
-
|
14
|
-
options = @@options.merge(:i18n_scope => name).merge(options)
|
17
|
+
options = { :i18n_scope => name}.merge(options)
|
15
18
|
@@data[name] = Data.new(values, options)
|
16
19
|
end
|
17
20
|
|
@@ -19,20 +22,6 @@ class SuperList
|
|
19
22
|
@@data[name]
|
20
23
|
end
|
21
24
|
|
22
|
-
class List
|
23
|
-
def initialize(data, options)
|
24
|
-
@data, @options = data, options
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_s(type=:default, options={})
|
28
|
-
options = options.merge(@options)
|
29
|
-
key = @data[type] || @data[:default]
|
30
|
-
|
31
|
-
return I18n.t(key, :scope => options[:i18n_scope], :default => options[:i18n_default], :locale => options[:locale]) if options[:use_i18n]
|
32
|
-
key
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
25
|
## Data Store
|
37
26
|
class Data
|
38
27
|
def initialize(values, options)
|
@@ -43,28 +32,36 @@ class SuperList
|
|
43
32
|
@values.keys
|
44
33
|
end
|
45
34
|
|
46
|
-
def values(
|
47
|
-
|
48
|
-
keys.map {|
|
35
|
+
def values(format=nil, opts={})
|
36
|
+
opts, format = format, nil if format.is_a?(Hash)
|
37
|
+
keys.map {|key| get_value(key, format, opts) }
|
49
38
|
end
|
50
39
|
|
51
|
-
def
|
52
|
-
|
53
|
-
end
|
40
|
+
def get_value(key, format=nil, opts={})
|
41
|
+
opts = options.merge(opts)
|
54
42
|
|
55
|
-
def get_value(key,options={})
|
56
|
-
options = @options.merge(options)
|
57
43
|
value = @values[key]
|
58
|
-
|
59
|
-
|
44
|
+
format = format || opts[:format] || :default
|
45
|
+
result = value.is_a?(Hash) ? value[format] : value
|
46
|
+
|
47
|
+
return I18n.t(result, :scope => opts[:i18n_scope], :default => opts[:i18n_default], :locale => opts[:locale]) if opts[:use_i18n]
|
48
|
+
result
|
60
49
|
end
|
61
50
|
|
62
|
-
def get_key(value,
|
63
|
-
keys[values(
|
51
|
+
def get_key(value, opts={})
|
52
|
+
keys[values(opts).index(value)] rescue nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def map(format=nil, opts={}, &blk)
|
56
|
+
keys.zip(values(format, opts)).map &blk
|
57
|
+
end
|
58
|
+
|
59
|
+
def select_options(format=nil, opts={}, &blk)
|
60
|
+
values(format, opts).zip(keys).map &blk
|
64
61
|
end
|
65
62
|
|
66
63
|
def options
|
67
|
-
@options
|
64
|
+
SuperList.options.merge(@options)
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
@@ -75,17 +72,15 @@ module SuperListActiveRecord
|
|
75
72
|
|
76
73
|
module ClassMethods
|
77
74
|
def super_list(column, data, options={})
|
78
|
-
original_column = "original_#{column}".to_sym
|
79
75
|
data = SuperList[data]
|
80
76
|
options = data.options.merge(options)
|
81
77
|
|
82
78
|
before_validation do
|
83
79
|
value = attributes[column.to_s]
|
84
|
-
keys
|
80
|
+
keys = data.keys
|
85
81
|
|
86
82
|
if !keys.include?(value)
|
87
83
|
index = data.values.find_index(value)
|
88
|
-
|
89
84
|
if index
|
90
85
|
self.send("#{column}=", keys[index])
|
91
86
|
elsif !options[:no_validation]
|
@@ -93,17 +88,18 @@ module SuperListActiveRecord
|
|
93
88
|
return false
|
94
89
|
end
|
95
90
|
end
|
91
|
+
return true
|
96
92
|
end
|
97
93
|
|
98
|
-
define_method "#{column}" do |*
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
94
|
+
define_method "#{column}" do |*opts|
|
95
|
+
key = attributes[column.to_s]
|
96
|
+
if opts.blank? && SuperList.options[:format].blank?
|
97
|
+
key
|
98
|
+
else
|
99
|
+
format = opts[0].is_a?(Symbol) ? opts[0] : nil
|
100
|
+
opts = opts[1].is_a?(Hash) ? opts[1] : (opts[0].is_a?(Hash) ? opts[0] : {})
|
101
|
+
data.get_value(key, format, options.merge(opts))
|
102
|
+
end
|
107
103
|
end
|
108
104
|
end
|
109
105
|
end
|
data/test/super_list_test.rb
CHANGED
@@ -10,8 +10,12 @@ class SuperListTest < ActiveSupport::TestCase
|
|
10
10
|
assert_equal SuperList["Gender"].get_value("M").to_s, "Man"
|
11
11
|
assert_equal SuperList["Gender"].get_key("Man"), "M"
|
12
12
|
assert_equal SuperList["Gender1"].get_key("translation missing: en.Gender1.Female"), "F"
|
13
|
+
|
13
14
|
assert_equal ["M","F"], SuperList["Gender"].map {|k,v| k }
|
14
15
|
assert_equal ["Man", "Female"], SuperList["Gender"].map {|k,v| v }
|
16
|
+
|
17
|
+
assert_equal ["M","F"], SuperList["Gender"].select_options {|k,v| v }
|
18
|
+
assert_equal ["Man", "Female"], SuperList["Gender"].select_options {|k,v| k }
|
15
19
|
end
|
16
20
|
|
17
21
|
test "only valid when included" do
|
@@ -30,7 +34,7 @@ class SuperListTest < ActiveSupport::TestCase
|
|
30
34
|
test "set value" do
|
31
35
|
user = Factory.build(:user, :gender => 'Man')
|
32
36
|
assert user.valid?
|
33
|
-
assert_equal user.gender
|
37
|
+
assert_equal user.gender(:amos), 'M1'
|
34
38
|
user = Factory.build(:user, :gender => 'NoValue')
|
35
39
|
assert user.invalid?
|
36
40
|
end
|
@@ -42,20 +46,30 @@ class SuperListTest < ActiveSupport::TestCase
|
|
42
46
|
|
43
47
|
test "SuperList gender (don't use i18n)" do
|
44
48
|
u = Factory(:user, :gender => 'F')
|
45
|
-
assert_equal u.gender
|
46
|
-
assert_equal u.gender
|
49
|
+
assert_equal u.gender, 'F'
|
50
|
+
assert_equal u.gender(:default), 'Female'
|
51
|
+
assert_equal u.gender(:amos), 'M2'
|
47
52
|
end
|
48
53
|
|
49
54
|
test "SuperList gender (use i18n, no default translation)" do
|
50
55
|
u = Factory(:user, :gender1 => 'F')
|
51
|
-
assert_equal u.gender1
|
52
|
-
assert_equal u.gender1(:locale => 'new_locale')
|
53
|
-
assert_equal u.gender1(:locale => 'new_locale')
|
56
|
+
assert_equal u.gender1(:default), "translation missing: en.Gender.Female"
|
57
|
+
assert_equal u.gender1(:default, :locale => 'new_locale'), "translation missing: new_locale.Gender.Female"
|
58
|
+
assert_equal u.gender1(:amos, :locale => 'new_locale'), "translation missing: new_locale.Gender.M2"
|
54
59
|
end
|
55
60
|
|
56
61
|
test "SuperList gender (use i18n wtih default translation)" do
|
57
62
|
u = Factory(:user, :gender2 => 'F')
|
58
|
-
assert_equal u.gender2
|
59
|
-
assert_equal u.gender2
|
63
|
+
assert_equal u.gender2, "F"
|
64
|
+
assert_equal u.gender2(:nokey), "未知"
|
65
|
+
end
|
66
|
+
|
67
|
+
test "global options" do
|
68
|
+
user = Factory(:user, :gender => 'Man')
|
69
|
+
SuperList.options = {:format => :amos}
|
70
|
+
assert_equal user.gender, 'M1'
|
71
|
+
SuperList.options = {:format => :default}
|
72
|
+
assert_equal user.gender, 'Man'
|
73
|
+
SuperList.options = {}
|
60
74
|
end
|
61
75
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jinzhu
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-11 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|