custom_fields 2.2.3 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,4 +12,4 @@ de:
12
12
  file: Datei
13
13
  belongs_to: gehört zu
14
14
  has_many: Hat viele
15
- many_to_many: Hat und gehört zu vielen
15
+ many_to_many: Hat und gehört zu vielen
data/lib/custom_fields.rb CHANGED
@@ -39,6 +39,7 @@ end
39
39
  types/text
40
40
  types/email
41
41
  types/date
42
+ types/date_time
42
43
  types/boolean
43
44
  types/file
44
45
  types/select
@@ -5,8 +5,8 @@ module CustomFields
5
5
  include ::Mongoid::Document
6
6
  include ::Mongoid::Timestamps
7
7
 
8
- AVAILABLE_TYPES = %w(default string text email date boolean file select float integer money
9
- tags relationship_default belongs_to has_many many_to_many)
8
+ AVAILABLE_TYPES = %w(default string text email date date_time boolean file select float integer
9
+ money tags relationship_default belongs_to has_many many_to_many)
10
10
 
11
11
  ## types ##
12
12
  AVAILABLE_TYPES.each do |type|
@@ -7,7 +7,7 @@ module CustomFields
7
7
  included do
8
8
 
9
9
  ## types ##
10
- %w(default string text email date boolean file select float integer money
10
+ %w(default string text email date date_time boolean file select float integer money
11
11
  belongs_to has_many many_to_many tags).each do |type|
12
12
  include "CustomFields::Types::#{type.camelize}::Target".constantize
13
13
  end
@@ -36,10 +36,10 @@ module CustomFields
36
36
  def custom_fields_safe_setters
37
37
  self.custom_fields_recipe['rules'].map do |rule|
38
38
  case rule['type'].to_sym
39
- when :date, :money then "formatted_#{rule['name']}"
40
- when :file then [rule['name'], "remove_#{rule['name']}"]
41
- when :select, :belongs_to then ["#{rule['name']}_id", "position_in_#{rule['name']}"]
42
- when :has_many, :many_to_many then nil
39
+ when :date, :date_time, :money then "formatted_#{rule['name']}"
40
+ when :file then [rule['name'], "remove_#{rule['name']}"]
41
+ when :select, :belongs_to then ["#{rule['name']}_id", "position_in_#{rule['name']}"]
42
+ when :has_many, :many_to_many then nil
43
43
  else
44
44
  rule['name']
45
45
  end
@@ -164,10 +164,10 @@ module CustomFields
164
164
  #
165
165
  def custom_fields_getters_for(name, type)
166
166
  case type.to_sym
167
- when :select then [name, "#{name}_id"]
168
- when :date, :money then "formatted_#{name}"
169
- when :file then "#{name}_url"
170
- when :belongs_to then "#{name}_id"
167
+ when :select then [name, "#{name}_id"]
168
+ when :date, :date_time, :money then "formatted_#{name}"
169
+ when :file then "#{name}_url"
170
+ when :belongs_to then "#{name}_id"
171
171
  else
172
172
  name
173
173
  end
@@ -68,7 +68,7 @@ module CustomFields
68
68
 
69
69
  def _set_formatted_date(name, value)
70
70
  if value.is_a?(::String) && !value.blank?
71
- date = ::Date._strptime(value, I18n.t('date.formats.default'))
71
+ date = ::Date._strptime(value, self._formatted_date_format)
72
72
 
73
73
  if date
74
74
  value = ::Date.new(date[:year], date[:mon], date[:mday])
@@ -81,7 +81,11 @@ module CustomFields
81
81
  end
82
82
 
83
83
  def _get_formatted_date(name)
84
- self.send(name.to_sym).strftime(I18n.t('date.formats.default')) rescue nil
84
+ self.send(name.to_sym).strftime(self._formatted_date_format) rescue nil
85
+ end
86
+
87
+ def _formatted_date_format
88
+ I18n.t('date.formats.default')
85
89
  end
86
90
 
87
91
  end
@@ -0,0 +1,97 @@
1
+ module CustomFields
2
+
3
+ module Types
4
+
5
+ module DateTime
6
+
7
+ module Field; end
8
+
9
+ module Target
10
+
11
+ extend ActiveSupport::Concern
12
+
13
+ module ClassMethods
14
+
15
+ # Adds a date_time field
16
+ #
17
+ # @param [ Class ] klass The class to modify
18
+ # @param [ Hash ] rule It contains the name of the field and if it is required or not
19
+ #
20
+ def apply_date_time_custom_field(klass, rule)
21
+ name = rule['name']
22
+
23
+ klass.field name, type: ::DateTime, localize: rule['localized'] || false
24
+
25
+ # other methods
26
+ klass.send(:define_method, :"formatted_#{name}") { _get_formatted_date_time(name) }
27
+ klass.send(:define_method, :"formatted_#{name}=") { |value| _set_formatted_date_time(name, value) }
28
+
29
+ if rule['required']
30
+ klass.validates_presence_of name, :"formatted_#{name}"
31
+ end
32
+ end
33
+
34
+ # Build a hash storing the formatted value for
35
+ # a date_time custom field of an instance.
36
+ #
37
+ # @param [ Object ] instance An instance of the class enhanced by the custom_fields
38
+ # @param [ String ] name The name of the date_time custom field
39
+ #
40
+ # @return [ Hash ] field name => formatted date_time
41
+ #
42
+ def date_time_attribute_get(instance, name)
43
+ if value = instance.send(:"formatted_#{name}")
44
+ { name => value, "formatted_#{name}" => value }
45
+ else
46
+ {}
47
+ end
48
+ end
49
+
50
+ # Set the value for the instance and the date_time field specified by
51
+ # the 2 params.
52
+ #
53
+ # @param [ Object ] instance An instance of the class enhanced by the custom_fields
54
+ # @param [ String ] name The name of the date_time custom field
55
+ # @param [ Hash ] attributes The attributes used to fetch the values
56
+ #
57
+ def date_time_attribute_set(instance, name, attributes)
58
+ return unless attributes.key?(name) || attributes.key?("formatted_#{name}")
59
+
60
+ value = attributes[name] || attributes["formatted_#{name}"]
61
+
62
+ instance.send(:"formatted_#{name}=", value)
63
+ end
64
+
65
+ end
66
+
67
+ protected
68
+
69
+ def _set_formatted_date_time(name, value)
70
+ if value.is_a?(::String) && !value.blank?
71
+ date_time = ::DateTime._strptime(value, self._formatted_date_time_format)
72
+
73
+ if date_time
74
+ value = ::Time.zone.local(date_time[:year], date_time[:mon], date_time[:mday], date_time[:hour], date_time[:min], date_time[:sec] || 0)#, date_time[:zone] || "")
75
+ else
76
+ value = ::Time.zone.parse(value) rescue nil
77
+ end
78
+ end
79
+
80
+ self.send(:"#{name}=", value)
81
+ end
82
+
83
+ def _get_formatted_date_time(name)
84
+ self.send(name.to_sym).strftime(self._formatted_date_time_format) rescue nil
85
+ end
86
+
87
+ def _formatted_date_time_format
88
+ I18n.t('time.formats.default')
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module CustomFields #:nodoc
3
3
 
4
- VERSION = '2.2.3'
4
+ VERSION = '2.3.0'
5
5
 
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-30 00:00:00.000000000 Z
12
+ date: 2013-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -218,6 +218,7 @@ files:
218
218
  - lib/custom_fields/types/belongs_to.rb
219
219
  - lib/custom_fields/types/boolean.rb
220
220
  - lib/custom_fields/types/date.rb
221
+ - lib/custom_fields/types/date_time.rb
221
222
  - lib/custom_fields/types/default.rb
222
223
  - lib/custom_fields/types/email.rb
223
224
  - lib/custom_fields/types/file.rb
@@ -252,7 +253,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
252
253
  version: '0'
253
254
  segments:
254
255
  - 0
255
- hash: -1041583237264786085
256
+ hash: 4124785133345041024
256
257
  required_rubygems_version: !ruby/object:Gem::Requirement
257
258
  none: false
258
259
  requirements: