super_list 1.3.0 → 1.4.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/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
|