formwandler 0.3.3 → 0.4.0

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: 6011a520443fcae28ca1add84173e8b4865c47ee
4
- data.tar.gz: da179196042b570f0703ec256c3852532cbdf4bb
3
+ metadata.gz: 66c573ed311eeaed84bd8a92801b60d04d2fc550
4
+ data.tar.gz: d8c0f269f19e42d4a31ccbecfdbb69db6c04ba89
5
5
  SHA512:
6
- metadata.gz: 036b9f41f72eaff27756c2930c3ba545627b99dc45eb89117bdcfec196d1616c1b604034e3a0ab34555e7fef3c1feb12578feca60b8dd5a3e58b777d7f9fd222
7
- data.tar.gz: 5d59e7001c1550101229734a5fac4637a4bb59b74a5392798e83ba54998dfbb28b3768c0ea34c5b77d4ea0bbf55ba9c0352002ad076f2a76e161bdd8d254b50c
6
+ metadata.gz: e1f2fa32f9e1248e50bf8bd4dc3d6dd17aacf85650832cc93beac1cca3172b6462ea1d3b87e71a8d0a4fb476b911cc91bc30b296bf5bfdf4762266752071ed3f
7
+ data.tar.gz: 4c6b3d9bd15d0cde087c295a9996ccd3e6a314bd5f6e98a447a0a19f354ae0a390b1b8de0d2a8d6dff8ffec5e899d3f06ec1be55362c459d27ef7896ba78d738
@@ -11,6 +11,20 @@ module Formwandler
11
11
  @field_definition = field_definition
12
12
  end
13
13
 
14
+ def value=(new_value)
15
+ new_value = transform_value(new_value, field_definition.in_transformation)
16
+ if model_instance
17
+ model_instance.public_send("#{field_definition.source}=", new_value)
18
+ else
19
+ @value = new_value
20
+ end
21
+ end
22
+
23
+ def value
24
+ _value = (model_instance ? model_instance.public_send(field_definition.source) : @value)
25
+ transform_value(_value, field_definition.out_transformation)
26
+ end
27
+
14
28
  def hidden?
15
29
  _evaluate_field_definition_value(:hidden)
16
30
  end
@@ -41,6 +55,15 @@ module Formwandler
41
55
 
42
56
  private
43
57
 
58
+ def transform_value(value, transformation)
59
+ return if value.nil?
60
+ if transformation.respond_to?(:call)
61
+ form.instance_exec(value, &transformation)
62
+ else
63
+ value
64
+ end
65
+ end
66
+
44
67
  def all_options
45
68
  _evaluate_field_definition_value(:options) || options_from_model || []
46
69
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'field_value_transformer'
4
+
3
5
  module Formwandler
4
6
  class FieldDefinition
5
7
  attr_reader :name, :hidden, :disabled, :default, :delocalize, :model, :source, :options
@@ -22,5 +24,21 @@ module Formwandler
22
24
  def hidden_options
23
25
  @hidden_options ||= {}
24
26
  end
27
+
28
+ def transform(&block)
29
+ @value_transformer = FieldValueTransformer.new(&block)
30
+ end
31
+
32
+ def in_transformation
33
+ value_transformer&.in_transformation
34
+ end
35
+
36
+ def out_transformation
37
+ value_transformer&.out_transformation
38
+ end
39
+
40
+ private
41
+
42
+ attr_reader :value_transformer
25
43
  end
26
44
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Formwandler
4
+ class FieldValueTransformer
5
+ attr_reader :in_transformation, :out_transformation
6
+
7
+ def initialize(&block)
8
+ instance_exec(&block)
9
+ end
10
+
11
+ def incoming(&block)
12
+ @in_transformation = block
13
+ end
14
+
15
+ def outgoing(&block)
16
+ @out_transformation = block
17
+ end
18
+ end
19
+ end
@@ -17,25 +17,22 @@ module Formwandler
17
17
  @field_definitions ||= {}
18
18
  end
19
19
 
20
- def field(name, opts = {})
21
- field_definitions[name] = FieldDefinition.new(name, opts)
20
+ def field(name, opts = {}, &block)
21
+ field_definition = FieldDefinition.new(name, opts)
22
+ field_definitions[name] = field_definition
22
23
 
23
- yield(field_definitions[name]) if block_given?
24
+ field_definition.instance_exec(&block) if block_given?
24
25
 
25
- if field_definitions[name].model.present?
26
- attribute_accessor(name, field_definitions[name])
27
- else
28
- attr_accessor name
29
- end
26
+ attribute_accessor(name)
30
27
  end
31
28
 
32
- def attribute_accessor(name, field_definition)
29
+ def attribute_accessor(name)
33
30
  define_method "#{name}=" do |value|
34
- models[field_definition.model].send("#{field_definition.source}=", value)
31
+ field(name).value = value
35
32
  end
36
33
 
37
34
  define_method name do
38
- models[field_definition.model].send(field_definition.source)
35
+ field(name).value
39
36
  end
40
37
  end
41
38
 
@@ -1,3 +1,3 @@
1
1
  module Formwandler
2
- VERSION = '0.3.3'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formwandler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Bilharz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-11 00:00:00.000000000 Z
11
+ date: 2017-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -118,6 +118,7 @@ files:
118
118
  - lib/formwandler.rb
119
119
  - lib/formwandler/field.rb
120
120
  - lib/formwandler/field_definition.rb
121
+ - lib/formwandler/field_value_transformer.rb
121
122
  - lib/formwandler/form.rb
122
123
  - lib/formwandler/form_loader.rb
123
124
  - lib/formwandler/railtie.rb