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.
@@ -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.to_s => 'Female'
16
- User.new(:gender => 'F').gender.to_s(:amos) => 'M2'
17
- User.new(:gender => 'F').original_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').original_gender => 'M'
21
- User.new(:gender => 'Man').gender.to_s(:amos) => 'M1'
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.to_s => "translation missing: en.Gender.Man"
25
- user.gender2(:locale => "api").to_s => "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"]
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
- => ["translation missing: zh.Gender1.Man", "translation missing: zh.Gender1.Female"]
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.3.0
1
+ 1.4.0
@@ -5,13 +5,16 @@ class SuperList
5
5
  @@options = { :use_i18n => false}
6
6
  @@data = ActiveSupport::OrderedHash.new
7
7
 
8
- def self.default_option=(options)
9
- @@options.update(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
- # { :use_i18n => false, :i18n_scope => 'super_list'}
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(type=:default, options={})
47
- options, type = type, :default if type.is_a?(Hash)
48
- keys.map {|x| get_value(x, options).to_s(type) }
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 map(type=:default, options={}, &blk)
52
- keys.zip(values(type,options)).map &blk
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
- value = value.is_a?(Hash) ? value : {:default => value}
59
- List.new(value, options)
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,options={})
63
- keys[values(options).index(value)] rescue nil
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 = data.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 |*opt|
99
- opt = opt[0].is_a?(Hash) ? opt[0] : {}
100
- opt = options.merge(opt)
101
-
102
- data.get_value(attributes[column.to_s], opt)
103
- end
104
-
105
- define_method original_column do
106
- attributes[column.to_s]
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
@@ -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.to_s(:amos), 'M1'
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.to_s, 'Female'
46
- assert_equal u.gender.to_s(:amos), 'M2'
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.to_s, "translation missing: en.Gender.Female"
52
- assert_equal u.gender1(:locale => 'new_locale').to_s, "translation missing: new_locale.Gender.Female"
53
- assert_equal u.gender1(:locale => 'new_locale').to_s(:amos), "translation missing: new_locale.Gender.M2"
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.to_s, "未知"
59
- assert_equal u.gender2.to_s(:nokey), "未知"
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: 27
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 1.3.0
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-09 00:00:00 +08:00
18
+ date: 2011-03-11 00:00:00 +08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency