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.
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