reform 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +0 -1
  3. data/CHANGES.md +13 -0
  4. data/Gemfile +0 -2
  5. data/README.md +276 -94
  6. data/Rakefile +6 -0
  7. data/TODO.md +10 -1
  8. data/database.sqlite3 +0 -0
  9. data/lib/reform/active_record.rb +2 -0
  10. data/lib/reform/composition.rb +55 -0
  11. data/lib/reform/form/active_model.rb +60 -15
  12. data/lib/reform/form/active_record.rb +3 -3
  13. data/lib/reform/form/composition.rb +69 -0
  14. data/lib/reform/form.rb +183 -80
  15. data/lib/reform/rails.rb +8 -1
  16. data/lib/reform/representer.rb +38 -0
  17. data/lib/reform/version.rb +1 -1
  18. data/lib/reform.rb +5 -2
  19. data/reform.gemspec +3 -2
  20. data/test/active_model_test.rb +83 -9
  21. data/test/coercion_test.rb +26 -0
  22. data/test/composition_test.rb +57 -0
  23. data/test/dummy/Rakefile +7 -0
  24. data/test/dummy/app/controllers/albums_controller.rb +18 -0
  25. data/test/dummy/app/controllers/application_controller.rb +4 -0
  26. data/test/dummy/app/controllers/musician_controller.rb +5 -0
  27. data/test/dummy/app/forms/album_form.rb +18 -0
  28. data/test/dummy/app/helpers/application_helper.rb +2 -0
  29. data/test/dummy/app/models/album.rb +4 -0
  30. data/test/dummy/app/models/song.rb +3 -0
  31. data/test/dummy/app/views/albums/new.html.erb +28 -0
  32. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  33. data/test/dummy/config/application.rb +20 -0
  34. data/test/dummy/config/boot.rb +10 -0
  35. data/test/dummy/config/database.yml +22 -0
  36. data/test/dummy/config/environment.rb +5 -0
  37. data/test/dummy/config/environments/development.rb +16 -0
  38. data/test/dummy/config/environments/production.rb +46 -0
  39. data/test/dummy/config/environments/test.rb +33 -0
  40. data/test/dummy/config/locales/en.yml +5 -0
  41. data/test/dummy/config/routes.rb +4 -0
  42. data/test/dummy/config.ru +4 -0
  43. data/test/dummy/db/test.sqlite3 +0 -0
  44. data/test/dummy/log/production.log +0 -0
  45. data/test/dummy/log/server.log +0 -0
  46. data/test/errors_test.rb +95 -0
  47. data/test/form_composition_test.rb +60 -0
  48. data/test/nested_form_test.rb +129 -0
  49. data/test/rails/integration_test.rb +54 -0
  50. data/test/reform_test.rb +80 -114
  51. data/test/test_helper.rb +14 -1
  52. metadata +86 -11
  53. data/lib/reform/form/dsl.rb +0 -38
  54. data/test/dsl_test.rb +0 -43
@@ -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