gourami 0.1.0 → 0.1.1
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 +4 -4
- data/README.md +154 -1
- data/gourami.gemspec +1 -0
- data/lib/gourami.rb +1 -0
- data/lib/gourami/validations.rb +17 -0
- data/lib/gourami/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7d45d0bcf1edbc6a81d3489bab6de5ccd4b0ea2
|
4
|
+
data.tar.gz: d04dff73bc07b0ad96aa619f11f710b6024b02e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95bbf65d77ce12927bed88dbeab0ceacd4cd9d57654d163e94e827f18623ca39cfb029d5e67d9a56593809c9ebcf27220e273a7ddd70fd451a098c62d35b25b1
|
7
|
+
data.tar.gz: 10eacdc7e10de57f2daa4c600d331936984753ee5749445c4bbda6e867442a36e14bdb8eb509fa9bbc65f54fcc2baa78d410158ad8c40bac6288cdaff63ac5f2
|
data/README.md
CHANGED
@@ -20,7 +20,160 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
### A Typical Gourami::Form will
|
24
|
+
|
25
|
+
- list a set of attributes
|
26
|
+
- validate user input
|
27
|
+
- perform an action
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
class TypicalForm < Gourami::Form
|
31
|
+
|
32
|
+
attribute(:typical_attribute)
|
33
|
+
|
34
|
+
def validate
|
35
|
+
# Define Your validation rules here
|
36
|
+
end
|
37
|
+
|
38
|
+
def perform
|
39
|
+
# Perform your action rules here
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
### Your Rails 5 ActionController for the New/Create action:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
def new
|
49
|
+
@form = CreateFishTank.new
|
50
|
+
end
|
51
|
+
|
52
|
+
def create
|
53
|
+
@form = CreateFishTank.new(fish_tank_params)
|
54
|
+
|
55
|
+
if @form.valid?
|
56
|
+
@form.perform
|
57
|
+
redirect_to @form.record
|
58
|
+
else
|
59
|
+
render "new"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
### Example of a form that Creates a record
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
class CreateFishTank < Gourami::Form
|
68
|
+
|
69
|
+
record(:fish_tank)
|
70
|
+
|
71
|
+
attribute(:width, type: :integer)
|
72
|
+
attribute(:height, type: :integer)
|
73
|
+
attribute(:liters, type: :float)
|
74
|
+
attribute(:name, type: :string)
|
75
|
+
attribute(:filter_included, type: :boolean, default: false)
|
76
|
+
|
77
|
+
def validate
|
78
|
+
validate_presence(:width)
|
79
|
+
validate_range(:width, min: 50, max: 1000)
|
80
|
+
|
81
|
+
validate_presence(:height)
|
82
|
+
validate_range(:height, min: 50, max: 1000)
|
83
|
+
|
84
|
+
validate_presence(:liters)
|
85
|
+
validate_range(:liters, min: 5, max: 200)
|
86
|
+
|
87
|
+
validate_presence(:name)
|
88
|
+
validate_uniqueness(:name) do |name|
|
89
|
+
FishTank.where(name: name).empty?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def perform
|
94
|
+
self.fish_tank = FishTank.create(attributes)
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
### Your Rails 5 ActionController for the Edit/Update action:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
def edit
|
104
|
+
fish_tank = FishTank.find(params[:id])
|
105
|
+
@form = UpdateFishTank.new_from_record(fish_tank)
|
106
|
+
end
|
107
|
+
|
108
|
+
def update
|
109
|
+
@form = UpdateFishTank.new(fish_tank_params)
|
110
|
+
|
111
|
+
if @form.valid?
|
112
|
+
@form.perform
|
113
|
+
redirect_to @form.record
|
114
|
+
else
|
115
|
+
render "edit"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
```
|
119
|
+
|
120
|
+
### Example of a form that Updates a record
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
class UpdateFishTank < CreateFishTank
|
124
|
+
|
125
|
+
record(:fish_tank)
|
126
|
+
|
127
|
+
attribute(:width, type: :integer)
|
128
|
+
attribute(:height, type: :integer)
|
129
|
+
attribute(:liters, type: :float)
|
130
|
+
attribute(:name, type: :string)
|
131
|
+
attribute(:filter_included, type: :boolean, default: false)
|
132
|
+
|
133
|
+
def self.new_from_record(fish_tank)
|
134
|
+
new({ fish_tank: fish_tank }.merge(fish_tank.attributes))
|
135
|
+
end
|
136
|
+
|
137
|
+
def validate
|
138
|
+
validate_presence(:width)
|
139
|
+
validate_range(:width, min: 50, max: 1000)
|
140
|
+
|
141
|
+
validate_presence(:height)
|
142
|
+
validate_range(:height, min: 50, max: 1000)
|
143
|
+
|
144
|
+
validate_presence(:liters)
|
145
|
+
validate_range(:liters, min: 5, max: 200)
|
146
|
+
|
147
|
+
validate_presence(:name)
|
148
|
+
validate_uniqueness(:name) do |name|
|
149
|
+
FishTank.where(name: name).empty?
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def perform
|
154
|
+
fish_tank.update(attributes)
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
```
|
159
|
+
|
160
|
+
#### Or inherit instead of duplicating the attributes and validations
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
class UpdateFishTank < CreateFishTank
|
164
|
+
|
165
|
+
# All attributes and validations inherited from CreateFishTank.
|
166
|
+
|
167
|
+
def self.new_from_record(fish_tank)
|
168
|
+
new({ fish_tank: fish_tank }.merge(fish_tank.attributes))
|
169
|
+
end
|
170
|
+
|
171
|
+
def perform
|
172
|
+
fish_tank.update(attributes)
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
```
|
24
177
|
|
25
178
|
## Development
|
26
179
|
|
data/gourami.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
+
spec.add_development_dependency "pry", "~>0.10"
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.13"
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
27
|
spec.add_development_dependency "minitest", "~> 5.0"
|
data/lib/gourami.rb
CHANGED
data/lib/gourami/validations.rb
CHANGED
@@ -5,6 +5,10 @@ module Gourami
|
|
5
5
|
|
6
6
|
include Gourami::FormattingConstants
|
7
7
|
|
8
|
+
def validate
|
9
|
+
# Override to add custom validations
|
10
|
+
end
|
11
|
+
|
8
12
|
# Validate and perform the form actions. If any errors come up during the
|
9
13
|
# validation or the #perform method, raise an exception with the errors.
|
10
14
|
#
|
@@ -40,6 +44,19 @@ module Gourami
|
|
40
44
|
!any_errors?
|
41
45
|
end
|
42
46
|
|
47
|
+
# Replace the existing errors with the provided errors Hash.
|
48
|
+
#
|
49
|
+
# @param new_errors [Hash<Symbol, nil>, Array<Symbol, String>]
|
50
|
+
#
|
51
|
+
# @return [Hash<Symbol, nil>, Array<Symbol, String>]
|
52
|
+
def clear_and_set_errors(new_errors)
|
53
|
+
new_errors = new_errors.dup
|
54
|
+
errors.clear
|
55
|
+
errors.merge!(new_errors)
|
56
|
+
|
57
|
+
errors
|
58
|
+
end
|
59
|
+
|
43
60
|
# Return true if there given attribute has any errors.
|
44
61
|
def attribute_has_errors?(attribute_name)
|
45
62
|
errors[attribute_name.to_sym].any?
|
data/lib/gourami/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gourami
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TSMMark
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.10'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|