reform 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/CHANGES.md +13 -0
- data/Gemfile +0 -2
- data/README.md +276 -94
- data/Rakefile +6 -0
- data/TODO.md +10 -1
- data/database.sqlite3 +0 -0
- data/lib/reform/active_record.rb +2 -0
- data/lib/reform/composition.rb +55 -0
- data/lib/reform/form/active_model.rb +60 -15
- data/lib/reform/form/active_record.rb +3 -3
- data/lib/reform/form/composition.rb +69 -0
- data/lib/reform/form.rb +183 -80
- data/lib/reform/rails.rb +8 -1
- data/lib/reform/representer.rb +38 -0
- data/lib/reform/version.rb +1 -1
- data/lib/reform.rb +5 -2
- data/reform.gemspec +3 -2
- data/test/active_model_test.rb +83 -9
- data/test/coercion_test.rb +26 -0
- data/test/composition_test.rb +57 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/controllers/albums_controller.rb +18 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/controllers/musician_controller.rb +5 -0
- data/test/dummy/app/forms/album_form.rb +18 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/album.rb +4 -0
- data/test/dummy/app/models/song.rb +3 -0
- data/test/dummy/app/views/albums/new.html.erb +28 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +20 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +22 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +16 -0
- data/test/dummy/config/environments/production.rb +46 -0
- data/test/dummy/config/environments/test.rb +33 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/production.log +0 -0
- data/test/dummy/log/server.log +0 -0
- data/test/errors_test.rb +95 -0
- data/test/form_composition_test.rb +60 -0
- data/test/nested_form_test.rb +129 -0
- data/test/rails/integration_test.rb +54 -0
- data/test/reform_test.rb +80 -114
- data/test/test_helper.rb +14 -1
- metadata +86 -11
- data/lib/reform/form/dsl.rb +0 -38
- data/test/dsl_test.rb +0 -43
data/lib/reform/form/dsl.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
class Reform::Form
|
2
|
-
module DSL
|
3
|
-
def self.included(base)
|
4
|
-
base.class_eval do
|
5
|
-
extend ClassMethods
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
def property(name, *args)
|
11
|
-
representer_class.property(name, *args)
|
12
|
-
end
|
13
|
-
|
14
|
-
def properties(names, *args)
|
15
|
-
names.each do |name|
|
16
|
-
property(name, *args)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
#private
|
21
|
-
def representer_class
|
22
|
-
@representer_class ||= Class.new(Reform::Representer)
|
23
|
-
end
|
24
|
-
|
25
|
-
def model_class
|
26
|
-
rpr = representer_class
|
27
|
-
@model_class ||= Class.new(Reform::Composition) do
|
28
|
-
map_from rpr
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def initialize(models)
|
34
|
-
composition = self.class.model_class.new(models)
|
35
|
-
super(self.class.representer_class, composition)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/test/dsl_test.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DslTest < MiniTest::Spec
|
4
|
-
class SongForm < Reform::Form
|
5
|
-
include DSL
|
6
|
-
|
7
|
-
property :title, :on => :song
|
8
|
-
properties [:name, :genre], :on => :artist
|
9
|
-
|
10
|
-
validates :name, :title, :genre, :presence => true
|
11
|
-
end
|
12
|
-
|
13
|
-
let (:form) { SongForm.new(:song => OpenStruct.new(:title => "Rio"), :artist => OpenStruct.new()) }
|
14
|
-
|
15
|
-
it "works by creating Representer and Composition for you" do
|
16
|
-
form.validate("title" => "Greyhound", "name" => "Frenzal Rhomb").must_equal false
|
17
|
-
end
|
18
|
-
|
19
|
-
require 'reform/form/coercion'
|
20
|
-
it "allows coercion" do
|
21
|
-
form = Class.new(Reform::Form) do
|
22
|
-
include Reform::Form::DSL
|
23
|
-
include Reform::Form::Coercion
|
24
|
-
|
25
|
-
property :written_at, :type => DateTime, :on => :song
|
26
|
-
end.new(:song => OpenStruct.new(:written_at => "31/03/1981"))
|
27
|
-
|
28
|
-
form.written_at.must_be_kind_of DateTime
|
29
|
-
form.written_at.must_equal DateTime.parse("Tue, 31 Mar 1981 00:00:00 +0000")
|
30
|
-
end
|
31
|
-
|
32
|
-
it "allows coercion in validate" do
|
33
|
-
form = Class.new(Reform::Form) do
|
34
|
-
include Reform::Form::DSL
|
35
|
-
include Reform::Form::Coercion
|
36
|
-
|
37
|
-
property :id, :type => Integer, :on => :song
|
38
|
-
end.new(:song => OpenStruct.new())
|
39
|
-
|
40
|
-
form.validate("id" => "1")
|
41
|
-
form.to_hash.must_equal("id" => 1)
|
42
|
-
end
|
43
|
-
end
|