reform 0.1.2 → 0.2.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.
- 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
|