progne_tapera 0.5 → 0.5.1

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