enum_help 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66948f4f12b02670eca05becf8556dc1c4b765f7
4
- data.tar.gz: f2a5ffef59a3f708dddaa285df1e4cd1cb17a8d1
3
+ metadata.gz: d9bab58fee36f103d6dac37d93f64f56ceaa870c
4
+ data.tar.gz: e6b064455eb7a58d63f568d03000d3cb458c5ec2
5
5
  SHA512:
6
- metadata.gz: d276091006d58d131fe38c1467a5fdf595592814cbfeb6a519fedd4200f9ee16d106de237f5cbb7916e0aa5bd6126e8cc62b197dd28a3b4880f9519fa53115a4
7
- data.tar.gz: c999f3fa91dd5c9485c6c7069cf5872b4fc762e78f8e7956a9681d5e46ea2a1206a2555d079e03cc57038ab8c2826c145e5a9606d3eeaedc5b282244527bb074
6
+ metadata.gz: 090068e7311f52bb00f9b2c0c6391144d50fefdf669aa38583b609d7c3da3de422da4e00429307463a4c45539c0518f135898f6dc2df21256c75e9c1782eba9b
7
+ data.tar.gz: 4079525deb12d50abce3806e0e5e14031ba0649c47a0c91cafd8a6828ef51914a100b6232e6d73c7c0d24513502a1f3e743c454fc873ebcf1614ad63a4156b21
data/README.md CHANGED
@@ -26,72 +26,96 @@ Or install it yourself as:
26
26
  ## Usage
27
27
 
28
28
 
29
- required Rails 4.1.x
29
+ Required Rails 4.1.x
30
30
 
31
31
  In model file:
32
32
 
33
- class Order < ActiveRecord::Base
34
- enum status: { "nopayment" => 0, "finished" => 1, "failed" => 2, "destroyed" => 3 }
33
+ ```ruby
34
+ class Order < ActiveRecord::Base
35
+ enum status: { "nopayment" => 0, "finished" => 1, "failed" => 2, "destroyed" => 3 }
35
36
 
36
- def self.restricted_statuses
37
- statuses.except :failed, :destroyed
38
- end
39
- end
37
+ def self.restricted_statuses
38
+ statuses.except :failed, :destroyed
39
+ end
40
+ end
41
+ ```
40
42
 
41
43
  You can call:
42
44
 
43
- order = Order.first
44
- order.update_attribute :status, 0
45
- order.status
46
- # > nopayment
47
- order.status_i18n # if you have an i18n file defined as following, it will return "未支付".
48
- # > 未支付
45
+ ```ruby
46
+ order = Order.first
47
+ order.update_attribute :status, 0
48
+ order.status
49
+ # > nopayment
50
+ order.status_i18n # if you have an i18n file defined as following, it will return "未支付".
51
+ # > 未支付
52
+ ```
49
53
 
50
- In _form.html.erb using simple_form:
54
+ You can also fetch the translated enum collection, if you need to:
51
55
 
52
- <%= f.input :status %>
56
+ ```ruby
57
+ Order.statuses_i18n
58
+ ```
59
+
60
+ In `_form.html.erb` using `simple_form`:
61
+
62
+ ```erb
63
+ <%= f.input :status %>
64
+ ```
53
65
 
54
66
  This will generate select field with translations automaticlly.
55
67
 
56
68
  And if you want to generate select except some values, then you can pass a collection option.
57
69
 
58
- <%= f.input :status Order.restricted_statuses %>
70
+ ```erb
71
+ <%= f.input :status, Order.restricted_statuses %>
72
+ ```
59
73
 
74
+ Other arguments for `simple_form` are supported perfectly.
75
+
76
+ e.g.
60
77
 
78
+ ```erb
79
+ <%= f.input :status, prompt: 'Please select a stauts' %>
61
80
 
62
- Other arguments for simple_form are supported perfectly.
81
+ <%= f.input :status, as: :string %>
82
+ ```
83
+
84
+ From version 0.0.10, enum_help can automaticlly generate radio buttons with i18n labels.
63
85
 
64
86
  e.g.
87
+ ```erb
88
+ <%= f.input :status, as: :radio_buttons %>
89
+ ```
90
+
65
91
 
66
- <%= f.input :status, prompt: 'Please select a stauts' %>
67
-
68
- <%= f.input :status, as: :string %>
69
92
 
70
93
 
71
94
  I18n local file example:
72
95
 
73
- # config/locals/model/order.zh-cn.yml
74
- zh-cn:
75
- enums:
76
- order:
77
- status:
78
- finished: 完成
79
- nopayment: 未支付
80
- failed: 失败
81
- destroyed: 已删除
96
+ ```yaml
97
+ # config/locals/model/order.zh-cn.yml
98
+ zh-cn:
99
+ enums:
100
+ order:
101
+ status:
102
+ finished: 完成
103
+ nopayment: 未支付
104
+ failed: 失败
105
+ destroyed: 已删除
106
+ ```
82
107
 
83
108
 
84
109
  ## Notice
85
- If you want to use enum feature,
86
- field of your table can't be named with reference.
110
+ If you want to use enum feature, field of your table can't be named with `reference`.
87
111
  When it is named with 'reference' and define enum in model file, there will be raise an error as below:
88
112
 
89
113
  NoMethodError: super: no superclass method `enum' for...
90
114
 
91
115
 
92
116
  ## Thanks
93
- * [mrhead](https://github.com/mrhead)
94
- * [Jin Lee](https://github.com/neojin)
117
+
118
+ Thanks for all the [contributors](https://github.com/zmbacker/enum_help/graphs/contributors).
95
119
 
96
120
  ## Contributing
97
121
 
@@ -1,25 +1,16 @@
1
1
  module EnumHelp
2
+
2
3
  module I18n
3
4
 
4
5
  # overwrite the enum method
5
6
  def enum( definitions )
6
- klass = self
7
7
  super( definitions )
8
- definitions.each do |name, values|
9
- # def status_i18n() statuses.key self[:status] end
10
- i18n_method_name = "#{name}_i18n".to_sym
11
- define_method(i18n_method_name) do
12
- enum_value = self.send(name)
13
- if enum_value
14
- ::I18n.t("enums.#{klass.to_s.underscore}.#{name}.#{enum_value}", default: enum_value)
15
- else
16
- nil
17
- end
18
- end
8
+ definitions.each do |name, _|
9
+ Helper.define_attr_i18n_method(self, name)
10
+ Helper.define_collection_i18n_method(self, name)
19
11
  end
20
12
  end
21
13
 
22
-
23
14
  def self.extended(receiver)
24
15
  # receiver.class_eval do
25
16
  # # alias_method_chain :enum, :enum_help
@@ -27,5 +18,44 @@ module EnumHelp
27
18
  end
28
19
 
29
20
  end
30
- end
31
21
 
22
+ module Helper
23
+
24
+ def self.define_attr_i18n_method(klass, attr_name)
25
+ attr_i18n_method_name = "#{attr_name}_i18n"
26
+
27
+ klass.class_eval <<-METHOD, __FILE__, __LINE__
28
+ def #{attr_i18n_method_name}
29
+ enum_label = self.send(:#{attr_name})
30
+ if enum_label
31
+ ::EnumHelp::Helper.translate_enum_label(self.class, :#{attr_name}, enum_label)
32
+ else
33
+ nil
34
+ end
35
+ end
36
+ METHOD
37
+ end
38
+
39
+ def self.define_collection_i18n_method(klass, attr_name)
40
+ collection_method_name = "#{attr_name.to_s.pluralize}"
41
+ collection_i18n_method_name = "#{collection_method_name}_i18n"
42
+
43
+ klass.instance_eval <<-METHOD, __FILE__, __LINE__
44
+ def #{collection_i18n_method_name}(*args)
45
+ options = args.extract_options!
46
+ collection = args[0] || send(:#{collection_method_name})
47
+ collection.except! options[:except] if options[:except]
48
+
49
+ collection.map do |label, value|
50
+ [::EnumHelp::Helper.translate_enum_label(self, :#{attr_name}, label), value]
51
+ end.to_h
52
+ end
53
+ METHOD
54
+ end
55
+
56
+ def self.translate_enum_label(klass, attr_name, enum_label)
57
+ ::I18n.t("enums.#{klass.to_s.underscore}.#{attr_name}.#{enum_label}", default: enum_label)
58
+ end
59
+
60
+ end
61
+ end
@@ -6,13 +6,22 @@ module EnumHelp
6
6
 
7
7
  def default_input_type_with_enum(*args, &block)
8
8
  att_name = (args.first || @attribute_name).to_s
9
+ options = args.last
10
+ return :enum_radio_buttons if options.is_a?(Hash) && options[:as] == :radio_buttons &&
11
+ is_enum_attributes?( att_name )
9
12
 
10
- return :enum if (args.last.is_a?(Hash) ? args.last[:as] : @options[:as]).nil? &&
11
- object.class.respond_to?(att_name.pluralize) && att_name.pluralize != "references"
13
+ return :enum if (options.is_a?(Hash) ? options[:as] : @options[:as]).nil? &&
14
+ is_enum_attributes?( att_name )
12
15
 
13
16
  default_input_type_without_enum(*args, &block)
14
17
  end
15
18
 
19
+
20
+ def is_enum_attributes?( attribute_name )
21
+ object.class.respond_to?(attribute_name.pluralize) && attribute_name.pluralize != "references"
22
+ end
23
+
24
+
16
25
  end
17
26
 
18
27
  module InputExtension
@@ -22,7 +31,7 @@ module EnumHelp
22
31
  enum = input_options[:collection] || @builder.options[:collection]
23
32
  raise "Attribute '#{attribute_name}' has no enum class" unless enum ||= object.class.send(attribute_name.to_s.pluralize)
24
33
 
25
- collect = enum.collect{|k,v| [::I18n.t("enums.#{object.class.to_s.underscore}.#{attribute_name}.#{k}", default: k),k] }
34
+ collect = object.class.send("#{attribute_name.to_s.pluralize}_i18n", enum.to_h).to_a
26
35
  # collect.unshift [args.last[:prompt],''] if args.last.is_a?(Hash) && args.last[:prompt]
27
36
 
28
37
  if respond_to?(:input_options)
@@ -45,10 +54,19 @@ class EnumHelp::SimpleForm::EnumInput < ::SimpleForm::Inputs::CollectionSelectIn
45
54
  end
46
55
  end
47
56
 
57
+
58
+ class EnumHelp::SimpleForm::EnumRadioButtons < ::SimpleForm::Inputs::CollectionRadioButtonsInput
59
+ include EnumHelp::SimpleForm::InputExtension
60
+
61
+ end
62
+
63
+
48
64
  SimpleForm::FormBuilder.class_eval do
49
65
  include EnumHelp::SimpleForm::BuilderExtension
50
66
 
51
- map_type :enum, :to => EnumHelp::SimpleForm::EnumInput
67
+ map_type :enum, :to => EnumHelp::SimpleForm::EnumInput
68
+ map_type :enum_radio_buttons, :to => EnumHelp::SimpleForm::EnumRadioButtons
69
+ alias_method :collection_enum_radio_buttons, :collection_radio_buttons
52
70
  alias_method :collection_enum, :collection_select
53
71
  alias_method_chain :default_input_type, :enum
54
72
  end
@@ -1,3 +1,3 @@
1
1
  module EnumHelp
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_help
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lester Zhao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-25 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler