progne_tapera 0.5 → 0.5.1

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: 2c2a069aea2e81297eeac4d046451dbc3f94601c
4
- data.tar.gz: b71391edfc0e159fbe3897b26181cf8db8042aa5
3
+ metadata.gz: 1b75c6db277e6d4dc91e00f4ec698c406dfedecf
4
+ data.tar.gz: cea58d461a2471da8240fb568c70d26e07cb5360
5
5
  SHA512:
6
- metadata.gz: 6304fa68a8688b52add3af79d93912a5d0db3af98f15c12a0f6dff3408f4b63d21dcbb787ca72b882c344f0030cf43c1bf2c3b44a817a5b9832905475c670506
7
- data.tar.gz: f0b24325729107a134e6994ca57196f9f18d2e657938b44ad10f2b54be30dad1435b21423c91366dcd859f885b57625cec8ba4793a307987213e30e384a5cb0b
6
+ metadata.gz: 6ed8152f257cba6d28b8160e38161f332dc5a561d2ec67963c2263480624008d9d5a9c3e096e0e05e4342834034c6e527fa289c2d8fe58cf3ff34b9ea33af07a
7
+ data.tar.gz: 125805f2dd69b3f4867be5500ccd73535eec0a05b17e1df5bd3fe80048c3a4a3d6eab645808eb9179e68f0ea8aa6ce36d219ed85576082109801eeac4a67fe2f
data/CHANGELOG.md CHANGED
@@ -19,4 +19,7 @@
19
19
  1. Improved the Enum List concern to add the .``lookup`` method
20
20
 
21
21
  ## v0.5
22
- 1. Improve the Enum Code concern to be able to be extended by lambda
22
+ 1. Improved the Enum Config concern to be able to be extended by lambda
23
+
24
+ ## v0.5.1
25
+ 1. Improve the Enum config concern for the Item Methods module
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- progne_tapera (0.4)
4
+ progne_tapera (0.5)
5
5
  rails (>= 4.2)
6
6
 
7
7
  GEM
@@ -61,7 +61,7 @@ GEM
61
61
  mime-types-data (~> 3.2015)
62
62
  mime-types-data (3.2016.0521)
63
63
  mini_portile2 (2.1.0)
64
- minitest (5.9.1)
64
+ minitest (5.10.1)
65
65
  nio4r (1.2.1)
66
66
  nokogiri (1.6.8.1)
67
67
  mini_portile2 (~> 2.1.0)
@@ -112,7 +112,7 @@ GEM
112
112
  actionpack (>= 4.0)
113
113
  activesupport (>= 4.0)
114
114
  sprockets (>= 3.0.0)
115
- thor (0.19.1)
115
+ thor (0.19.4)
116
116
  thread_safe (0.3.5)
117
117
  tzinfo (1.2.2)
118
118
  thread_safe (~> 0.1)
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Progne Tapera
2
2
 
3
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](http://www.rubydoc.info/gems/progne_tapera/frames)
3
4
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT)
5
+
4
6
  [![Gem Version](https://badge.fury.io/rb/progne_tapera.svg)](https://badge.fury.io/rb/progne_tapera)
5
7
  [![Dependency Status](https://gemnasium.com/badges/github.com/topbitdu/progne_tapera.svg)](https://gemnasium.com/github.com/topbitdu/progne_tapera)
6
8
 
@@ -97,21 +99,28 @@ app/types/ethnicity.rb
97
99
  ```ruby
98
100
  class Ethnicity < ActiveRecord::Type::Value
99
101
 
100
- include ProgneTapera::EnumConfig
102
+ # The Item Methods module must be defined before the ``enum :china_ethnicity`` code block, so it could be called there.
103
+ module ItemMethods
101
104
 
102
- enum :china_ethnicity
103
- # 用 :china_ethnicity 指定的 i18n 资源。
105
+ extend ActiveSupport::Concern
104
106
 
105
- module ItemMethods
107
+ included do |includer|
108
+
109
+ def major?
110
+ 'HA'==code
111
+ end
112
+ # Ethnicity::HAN.major? returns true
113
+ # Ethnicity::MONGEL.major? returns false
106
114
 
107
- def major?
108
- 'HA'==code
109
115
  end
110
- # Ethnicity::HAN.major? returns true
111
- # Ethnicity::MONGEL.major? returns false
112
116
 
113
117
  end
114
118
 
119
+ include ProgneTapera::EnumConfig
120
+
121
+ enum :china_ethnicity
122
+ # 用 :china_ethnicity 指定的 i18n 资源。
123
+
115
124
  end
116
125
  ```
117
126
 
@@ -169,19 +178,19 @@ include ProgneTapera::EnumCode
169
178
 
170
179
  ### Enum List concern
171
180
 
172
- The Enum List concern do the following tasks for the includer automatically:
173
- 1. Include the Enumerable module
174
- 2. Define the .enum_name method as: ``enum_name(name = nil)``
175
- 3. Define the .item_defined? method as: ``item_defined?(item)``
176
- 4. Define the .add_item method as: ``add_item(item)``
177
- 5. Define the .safe_add_item method as: ``safe_add_item(item)``
178
- 6. Define the .enum_constants method as: ``enum_constants``
179
- 7. Define the .all method as: ``all``
180
- 8. Define the .selected method as: ``selected(&block)``
181
- 9. Define the .each method as: ``each(&block)``
181
+ The Enum List concern do the following tasks for the includer automatically:
182
+ 1. Include the Enumerable module
183
+ 2. Define the .enum_name method as: ``enum_name(name = nil)``
184
+ 3. Define the .item_defined? method as: ``item_defined?(item)``
185
+ 4. Define the .add_item method as: ``add_item(item)``
186
+ 5. Define the .safe_add_item method as: ``safe_add_item(item)``
187
+ 6. Define the .enum_constants method as: ``enum_constants``
188
+ 7. Define the .all method as: ``all``
189
+ 8. Define the .selected method as: ``selected(&block)``
190
+ 9. Define the .each method as: ``each(&block)``
182
191
  10. Define the .lookup method as: ``lookup(code)``
183
- 11. Define the .form_options method as: ``form_options(&block)``
184
- 12. Define the .deserialize method as: ``deserialize(value)``
192
+ 11. Define the .form_options method as: ``form_options(&block)``
193
+ 12. Define the .deserialize method as: ``deserialize(value)``
185
194
  13. Define the .serialize method as: ``serialize(value)``
186
195
 
187
196
  ```ruby
@@ -194,8 +203,8 @@ Gender.form_options # { '男' => '1', '女' => '2', '未指定' => '9' }
194
203
 
195
204
  ### Enum Config concern
196
205
 
197
- The Enum Config concern do the following tasks for the includer automatically:
198
- 1. Include the Enum List concern
206
+ The Enum Config concern do the following tasks for the includer automatically:
207
+ 1. Include the Enum List concern
199
208
  2. Define the .enum method as: ``enum(name = nil, localized_name = name, &block)``
200
209
  3. Define the .overload_enum_i18n method as: ``overload_enum_i18n(localized_name = nil)``
201
210
 
@@ -239,7 +248,7 @@ Ethnicity::YI.localized_name # '彝'
239
248
 
240
249
  ### Enum Code concern
241
250
 
242
- The Enum Code concern do the following tasks for the includer automatically:
251
+ The Enum Code concern do the following tasks for the includer automatically:
243
252
  1. Define the .code method as: ``code(field, enum)``
244
253
 
245
254
 
data/ROADMAP.md CHANGED
@@ -20,3 +20,9 @@
20
20
 
21
21
  ## v0.5
22
22
  1. Improve the Enum Code concern to be able to be extended by lambda
23
+
24
+ ## v0.5.1
25
+ 1. Improve the Enum config concern for the Item Methods module
26
+
27
+ ## v0.6
28
+ 1. Improve the Enum Config concern to make the enum items be able to be updated or destroyable through the #enum method
@@ -1,3 +1,6 @@
1
+ ##
2
+ # Enum Code 是在模型层配置知识层枚举的关注点,提供 .code 宏方法。
3
+
1
4
  module ProgneTapera::EnumCode
2
5
 
3
6
  extend ActiveSupport::Concern
@@ -7,6 +10,11 @@ module ProgneTapera::EnumCode
7
10
 
8
11
  module ClassMethods
9
12
 
13
+ ##
14
+ # 为关注的类提供以下逻辑:
15
+ # 1. 验证 ``field``_code 字段的值,是否在枚举类型的定义中。
16
+ # 2. 定义 ``field`` 方法,用于获取枚举型的值。
17
+ # 3. 定义 ``field``= 方法,用于为枚举型字段赋值。
10
18
  def code(field, enum)
11
19
  code_field_name = :"#{field}_code"
12
20
  validates code_field_name, inclusion: enum.all.map { |item| item.code }
@@ -1,3 +1,6 @@
1
+ ##
2
+ # Enum Config 是知识层枚举类型的配置关注点。提供 .enum 和 .overload_enum_i18n 方法。
3
+
1
4
  module ProgneTapera::EnumConfig
2
5
 
3
6
  extend ActiveSupport::Concern
@@ -14,6 +17,7 @@ module ProgneTapera::EnumConfig
14
17
 
15
18
  yield.each do |key, value|
16
19
  options = value.map { |k, v| [ k.to_sym, v ] }.to_h
20
+ #options[:optional] = true if options[:optional].nil?
17
21
  code = options.delete :code
18
22
  safe_add_item ProgneTapera::EnumItem.new(code, key.to_s, options)
19
23
  end
@@ -26,9 +30,15 @@ module ProgneTapera::EnumConfig
26
30
 
27
31
  enumerations.each do |key, value|
28
32
  options = value.map { |k, v| [ k.to_sym, v ] }.to_h
33
+ #options[:optional] = false
29
34
  code = options.delete :code
30
35
  options[:localized_name] = I18n.t "enum.#{localized_name||name}.#{key}"
31
- safe_add_item ProgneTapera::EnumItem.new(code, key, options)
36
+ item = ProgneTapera::EnumItem.new code, key, options
37
+ class << item
38
+ item_method_module = "#{self.name}::ItemMethods".safe_constantize
39
+ include item_method_module if item_method_module.present?
40
+ end
41
+ safe_add_item item
32
42
  end
33
43
 
34
44
  end
@@ -1,5 +1,9 @@
1
1
  require 'rails'
2
2
 
3
+ ##
4
+ # Enum Item 是枚举项。
5
+ # enum_item = ProgneTapera::EnumItem.new '1', 'male', { localized_name: '男' }
6
+
3
7
  class ProgneTapera::EnumItem
4
8
 
5
9
  attr_reader :code, :name, :options
@@ -1,4 +1,5 @@
1
- require 'rails'
1
+ ##
2
+ # Enum List 是知识层枚举列表的领域逻辑关注点。
2
3
 
3
4
  module ProgneTapera::EnumList
4
5
 
@@ -26,9 +27,6 @@ module ProgneTapera::EnumList
26
27
  raise ArgumentError.new "The #{item.inspect} item should be an instance of ProgneTapera::EnumItem." unless item.is_a? ProgneTapera::EnumItem
27
28
  raise ArgumentError.new "The #{item.constant_name} enum item was defined already." if item_defined? item
28
29
 
29
- item_methods_module = "#{self.name}::ItemMethods".safe_constantize
30
- item.class.include item_methods_module if item_methods_module.present?
31
-
32
30
  const_set item.constant_name, item
33
31
  end
34
32
 
@@ -36,6 +34,11 @@ module ProgneTapera::EnumList
36
34
  const_set item.constant_name, item if item.is_a?(ProgneTapera::EnumItem)&&!item_defined?(item)
37
35
  end
38
36
 
37
+ # Destroy or Update the Enum Items
38
+ #def clear_optional_items
39
+ #
40
+ #end
41
+
39
42
  # Infrastructure for the Enumerable
40
43
  def enum_constants
41
44
  constants.select { |constant|
@@ -1,3 +1,3 @@
1
1
  module ProgneTapera
2
- VERSION = '0.5'
2
+ VERSION = '0.5.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progne_tapera
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.5'
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Topbit Du
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-16 00:00:00.000000000 Z
11
+ date: 2017-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails