syrup_form_object 0.0.3 → 0.0.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.
- data/README.md +46 -4
- data/lib/syrup/form_object.rb +18 -0
- data/lib/syrup/version.rb +1 -1
- data/spec/lib/syrup/form_object_spec.rb +1 -2
- data/spec/spec_helper.rb +11 -0
- metadata +1 -1
data/README.md
CHANGED
@@ -12,18 +12,26 @@ or in the *Gemfile*
|
|
12
12
|
|
13
13
|
##Examples
|
14
14
|
|
15
|
+
To update the ```Event``` class in your model
|
16
|
+
|
17
|
+
class Event < ActiveRecord::Base
|
18
|
+
validates :start_date, presence: true
|
19
|
+
validates :end_date, presence: true
|
20
|
+
end
|
21
|
+
|
22
|
+
You create the follwing form
|
23
|
+
|
15
24
|
class EventCreateForm < Syrup::FormObject
|
16
|
-
|
25
|
+
has_one :event
|
17
26
|
accepts_nested_attributes_for :event
|
18
27
|
|
19
28
|
attribute :length_of_the_event, Integer
|
20
29
|
validates :length_of_the_event, numericality:{greater_than: 0}
|
21
30
|
|
22
|
-
def save
|
31
|
+
def save
|
23
32
|
if self.valid?
|
24
33
|
end_date = event.start_date + length_of_the_event.hours
|
25
|
-
|
26
|
-
event = Event.new(event_attributes)
|
34
|
+
event.end_date = end_date
|
27
35
|
event.save
|
28
36
|
else
|
29
37
|
false
|
@@ -31,6 +39,40 @@ or in the *Gemfile*
|
|
31
39
|
end
|
32
40
|
end
|
33
41
|
|
42
|
+
Create a controller similar to this one
|
43
|
+
|
44
|
+
class EventController < ApplicationController
|
45
|
+
def new
|
46
|
+
@event_form = EventCreateForm.new
|
47
|
+
end
|
48
|
+
|
49
|
+
def create
|
50
|
+
@event_form = EventCreateForm.new(create_params)
|
51
|
+
if @event_form.save
|
52
|
+
redirect_to @event_form.event
|
53
|
+
else
|
54
|
+
render :new
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_params
|
59
|
+
params.require(:event_create_form)
|
60
|
+
.permit(:length_of_the_event)
|
61
|
+
.permit(event_attributes: [:start_date])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
And in the template:
|
67
|
+
|
68
|
+
<%= form_for @event_form do %>
|
69
|
+
<%= fields_for :event do %>
|
70
|
+
<%= input_tag :start_date %>
|
71
|
+
<% end %>
|
72
|
+
<%= input_tag :length_of_the_event %>
|
73
|
+
<% end %>
|
74
|
+
|
75
|
+
|
34
76
|
##Some sources for Form Objects
|
35
77
|
|
36
78
|
https://github.com/apotonick/reform An implementation of Form Objects
|
data/lib/syrup/form_object.rb
CHANGED
@@ -27,13 +27,31 @@ class Syrup::FormObject
|
|
27
27
|
end
|
28
28
|
EOH
|
29
29
|
end
|
30
|
+
|
31
|
+
def relations
|
32
|
+
@relations ||= []
|
33
|
+
end
|
34
|
+
|
35
|
+
def has_one(klass)
|
36
|
+
relations << klass
|
37
|
+
attr_accessor klass
|
38
|
+
end
|
39
|
+
|
40
|
+
|
30
41
|
end
|
31
42
|
|
32
43
|
def initialize(params={})
|
44
|
+
build_relations
|
33
45
|
build
|
34
46
|
assign_parameters(params)
|
35
47
|
end
|
36
48
|
|
49
|
+
def build_relations
|
50
|
+
self.class.relations.each do |klass|
|
51
|
+
self.send "#{klass}=", klass.to_s.camelize.constantize.new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
37
55
|
def assign_parameters(params)
|
38
56
|
@params = params
|
39
57
|
params.each do |key, value|
|
data/lib/syrup/version.rb
CHANGED
@@ -7,12 +7,11 @@ end
|
|
7
7
|
|
8
8
|
class TestSubclass < Syrup::FormObject
|
9
9
|
attribute :test_value, String
|
10
|
-
|
10
|
+
has_one :test_item
|
11
11
|
accepts_nested_attributes_for :test_item
|
12
12
|
|
13
13
|
def build
|
14
14
|
@built = true
|
15
|
-
self.test_item = TestItem.new
|
16
15
|
end
|
17
16
|
|
18
17
|
def has_called_build?
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
require 'rspec'
|
2
2
|
|
3
|
+
class String
|
4
|
+
def constantize
|
5
|
+
Object.const_get(self)
|
6
|
+
end
|
7
|
+
|
8
|
+
def camelize
|
9
|
+
string = sub(/^[a-z\d]*/) { $&.capitalize }
|
10
|
+
string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
3
14
|
module ActiveModel
|
4
15
|
module Naming; end
|
5
16
|
module Conversion; end
|