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.
@@ -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