enum_help 0.0.9 → 0.0.10

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