custom_fielder 0.6.3 → 0.6.4

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: 25400fa066980421a9c8baec140f8b59b4eb1068
4
- data.tar.gz: 83acde8a17a5ecdd4dfb0091a9e79d70d704649e
3
+ metadata.gz: 3e99d0877255c6feab7652bd4fa0cc3e5ae95a76
4
+ data.tar.gz: 0d825d0f7af1a89e0bf680b399b3e7e7168521c1
5
5
  SHA512:
6
- metadata.gz: 070d4897d2cb4ee6f26b89cee76ff0ad7386d17a7fc2aad531625151ffb14af8fab80dff58eb7ff8547d0dfbd0f1cb17aed43f894290fb750744602cc3f56c3b
7
- data.tar.gz: 4a8bf34693dd7cbaa8c15730a1362168ccd85ba79bbec0b49c971c022c0750ca6d5da5c5fd3a4f3964fb5e268fe1959190f80e3015db125a22e499cc17fa2654
6
+ metadata.gz: 86626bfeb0a08b957ffad288338260add169e423f57e6781792ee03404db2dd20db82b9ac223fccbeba3e1a3d6c9edfa4958d0751cad938d34b772ed4fabd74e
7
+ data.tar.gz: 881e26cf496358268982bc42381a973e4e50e033782e3547eeb8fa8a84b734c7ecb75ccae64ef66e56bbc62e52976e897f76208793ab2b1010506ca00eb245e2
@@ -39,7 +39,7 @@ module CustomFielder
39
39
  ##
40
40
  # @return [Integer]
41
41
  #
42
- def integer(value)
42
+ def fixnum(value)
43
43
  value.to_i
44
44
  end
45
45
 
@@ -21,7 +21,7 @@ module CustomFielder
21
21
  ##
22
22
  # @return [Boolean]
23
23
  #
24
- def is_integer?(value)
24
+ def is_fixnum?(value)
25
25
  value =~ /^\d+$/
26
26
  end
27
27
 
@@ -1,14 +1,49 @@
1
1
  module CustomFielder
2
2
  class Field < ActiveRecord::Base
3
+ include TypeCheckingHelper
3
4
  include DeserializationHelper
4
5
 
6
+ FIELD_TYPE_MAP = {
7
+ 'Text' => 'String',
8
+ 'Integer' => 'Fixnum',
9
+ 'Decmial' => 'Float',
10
+ 'Date' => 'Date',
11
+ 'Date & Time' => 'DateTime',
12
+ 'True/False' => 'Boolean',
13
+ 'List' => 'Array'
14
+ }
15
+
16
+ FORM_FIELD_TYPES = ['Text Entry', 'Multiple Choice', 'Date', 'DateTime', 'Boolean', 'List']
17
+
5
18
  has_many :values
6
19
 
7
- validates :name, presence: true
8
- validates :field_type, presence: true,
9
- inclusion: { in: %w[Array Integer Float Date DateTime Boolean String] }
10
- validates :fieldable_type, presence: true
11
- validates :allow_blank, inclusion: { in: [true, false] }
20
+ validates :name, presence: true
21
+ validates :field_type, presence: true,
22
+ inclusion: { in: %w[Array Fixnum Float Date DateTime Boolean String] }
23
+ validates :fieldable_type, presence: true
24
+ validates :allow_blank, inclusion: { in: [true, false] }
25
+ validate :type_of_allowed_values
26
+
27
+ scope :text_entry_fields, -> { all.where(field_type: ['String', 'Fixnum', 'Float'], allowed_values: nil) }
28
+ scope :multiple_choice_fields, -> { all.where.not(allowed_values: nil) }
29
+ scope :date_fields, -> { all.where(field_type: 'Date', allowed_values: nil) }
30
+ scope :date_time_fields, -> { all.where(field_type: 'DateTime', allowed_values: nil) }
31
+ scope :boolean_fields, -> { all.where(field_type: 'Boolean', allowed_values: nil) }
32
+ scope :list_fields, -> { all.where(field_type: 'Array') }
33
+
34
+ ##
35
+ # Creates a hash of form field types mapped to array of field, field id pairs
36
+ # meant for use in a form select dropdown with options group
37
+ #
38
+ # @return [Hash]
39
+ #
40
+ def self.all_fields_hashed_for_opt_group
41
+ FORM_FIELD_TYPES.inject(Hash.new) do |hash, form_field|
42
+ fields = send("#{form_field.delete(' ').underscore}_fields")
43
+ hash[form_field] = fields.map { |field| [field, field.id] }
44
+ hash
45
+ end.delete_if { |k, v| v == [] }
46
+ end
12
47
 
13
48
  ##
14
49
  # Returns the deserialized version of allowed_values
@@ -19,5 +54,27 @@ module CustomFielder
19
54
  allowed_values.nil? ? nil : deserialize('Array', allowed_values)
20
55
  end
21
56
 
57
+
58
+ private
59
+
60
+ ##
61
+ # Checks to make sure all values in allowed_values are of the correct type
62
+ #
63
+ # @return [Nil]
64
+ #
65
+ def type_of_allowed_values
66
+ return if allowed_values.nil?
67
+ options.each { |v| allowed_values_error unless v.class.to_s == field_type }
68
+ end
69
+
70
+ ##
71
+ # Adds error if there is an allowed_values_error
72
+ #
73
+ # @return [Nil]
74
+ #
75
+ def allowed_values_error
76
+ errors.add(:allowed_values, 'Value in options is not the correct type')
77
+ end
78
+
22
79
  end
23
80
  end
@@ -1,3 +1,3 @@
1
1
  module CustomFielder
2
- VERSION = "0.6.3"
2
+ VERSION = "0.6.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_fielder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Hurst