Skip to content

Commit d101af9

Browse files
author
Alex Tharp
authored
Merge pull request #15 from cortex-cms/float-number-fields
Numeric Field Types
2 parents b9a23db + ac18a58 commit d101af9

File tree

7 files changed

+181
-1
lines changed

7 files changed

+181
-1
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.mdl-textfield.mdl-js-textfield.mdl-textfield--floating-label
2+
= render_field_id
3+
= render_label
4+
= render_input
5+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
module Plugins
2+
module Core
3+
class FloatCell < Plugins::Core::Cell
4+
def input
5+
render
6+
end
7+
8+
private
9+
10+
def max
11+
field.validations[:max]
12+
end
13+
14+
def min
15+
field.validations[:min]
16+
end
17+
18+
def step
19+
field.validations[:step] || 0.01
20+
end
21+
22+
def input_display
23+
@options[:input_options]&.[](:display)
24+
end
25+
26+
def input_classes
27+
input_display&.[](:classes)
28+
end
29+
30+
def input_styles
31+
input_display&.[](:styles)
32+
end
33+
34+
def value
35+
data&.[]('float') || @options[:default_value]
36+
end
37+
38+
def render_label
39+
@options[:form].label 'data[float]', field.name, class: 'mdl-textfield__label'
40+
end
41+
42+
def render_input
43+
@options[:form].number_field 'data[float]', value: value, placeholder: @options[:placeholder], step: step, max: max, min: min , class: 'mdl-textfield__input'
44+
end
45+
end
46+
end
47+
end
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.mdl-textfield.mdl-js-textfield
2+
= render_field_id
3+
= render_label
4+
= render_input
5+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
module Plugins
2+
module Core
3+
class IntegerCell < Plugins::Core::Cell
4+
def input
5+
render
6+
end
7+
8+
private
9+
10+
def max
11+
field.validations[:max]
12+
end
13+
14+
def min
15+
field.validations[:min]
16+
end
17+
18+
def input_display
19+
@options[:input_options]&.[](:display)
20+
end
21+
22+
def input_classes
23+
input_display&.[](:classes)
24+
end
25+
26+
def input_styles
27+
input_display&.[](:styles)
28+
end
29+
30+
def value
31+
data&.[]('integer') || @options[:default_value]
32+
end
33+
34+
def render_label
35+
@options[:form].label 'data[integer]', field.name, class: 'mdl-textfield__label'
36+
end
37+
38+
def render_input
39+
@options[:form].number_field 'data[integer]', value: value, placeholder: @options[:placeholder] , max: max, min: min, class: 'mdl-textfield__input'
40+
end
41+
end
42+
end
43+
end

app/cells/plugins/core/text_cell.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def input_classes
2626
def input_styles
2727
input_display&.[](:styles)
2828
end
29-
29+
3030
def value
3131
data&.[]('text') || @options[:default_value]
3232
end

app/models/float_field_type.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class FloatFieldType < FieldType
2+
attr_accessor :float
3+
4+
validates :float, presence: true, if: Proc.new { |float| validate_key(:presence) }
5+
validates_numericality_of :float, unless: "float.nil?"
6+
validate :less_than, if: Proc.new { |float| validate_key(:max) }
7+
validate :greater_than, if: Proc.new { |float| validate_key(:min) }
8+
9+
def data=(data_hash)
10+
@float = data_hash.deep_symbolize_keys[:float]
11+
end
12+
13+
def field_item_as_indexed_json_for_field_type(field_item, options = {})
14+
json = {}
15+
json[mapping_field_name] = field_item.data['float']
16+
json
17+
end
18+
19+
def mapping
20+
{name: mapping_field_name, type: :float}
21+
end
22+
23+
private
24+
25+
def mapping_field_name
26+
"#{field_name.parameterize('_')}_float"
27+
end
28+
29+
def validate_key(key)
30+
@validations.key? key
31+
end
32+
33+
def less_than
34+
errors.add(:float, "must be less_than #{@validations[:max]}") if :float <= @validations[:max]
35+
end
36+
37+
def greater_than
38+
errors.add(:float, "must be greater_than #{@validations[:min]}") if :float >= @validations[:min]
39+
end
40+
end

app/models/integer_field_type.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class IntegerFieldType < FieldType
2+
attr_accessor :integer
3+
4+
validates :integer, presence: true, if: Proc.new { |int| validate_key(:presence) }
5+
validates_numericality_of :integer, unless: "integer.nil?"
6+
validate :less_than, if: Proc.new { |int| validate_key(:max) }
7+
validate :greater_than, if: Proc.new { |int| validate_key(:min) }
8+
9+
def data=(data_hash)
10+
@integer = data_hash.deep_symbolize_keys[:integer]
11+
end
12+
13+
def field_item_as_indexed_json_for_field_type(field_item, options = {})
14+
json = {}
15+
json[mapping_field_name] = field_item.data['integer']
16+
json
17+
end
18+
19+
def mapping
20+
{name: mapping_field_name, type: :integer}
21+
end
22+
23+
private
24+
25+
def mapping_field_name
26+
"#{field_name.parameterize('_')}_integer"
27+
end
28+
29+
def validate_key
30+
@validations.key? key
31+
end
32+
33+
def less_than
34+
errors.add(:integer, "must be less_than #{@validations[:max]}") if :integer <= @validations[:max]
35+
end
36+
37+
def greater_than
38+
errors.add(:integer, "must be greater_than #{@validations[:min]}") if :integer >= @validations[:min]
39+
end
40+
end

0 commit comments

Comments
 (0)