formidable 0.0.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.
Files changed (46) hide show
  1. data/.gitignore +10 -0
  2. data/CHANGELOG +2 -0
  3. data/Gemfile +7 -0
  4. data/LICENSE +20 -0
  5. data/README.textile +78 -0
  6. data/TODO.txt +3 -0
  7. data/deps.rip +5 -0
  8. data/examples/basic.rb +41 -0
  9. data/examples/post.rb +65 -0
  10. data/examples/posts/config.ru +48 -0
  11. data/examples/posts/form.html.haml +19 -0
  12. data/examples/posts/models.rb +7 -0
  13. data/formidable.gemspec +38 -0
  14. data/formidable.pre.gemspec +8 -0
  15. data/lib/formidable.rb +9 -0
  16. data/lib/formidable/coercions.rb +50 -0
  17. data/lib/formidable/elements.rb +196 -0
  18. data/lib/formidable/renderers/nokogiri.rb +53 -0
  19. data/lib/formidable/renderers/string.rb +115 -0
  20. data/lib/formidable/rendering.rb +42 -0
  21. data/lib/formidable/validations.rb +94 -0
  22. data/lib/formidable/validations/class.rb +24 -0
  23. data/lib/formidable/validations/confirmation.rb +58 -0
  24. data/lib/formidable/validations/equality.rb +25 -0
  25. data/lib/formidable/validations/format.rb +23 -0
  26. data/lib/formidable/validations/length.rb +39 -0
  27. data/lib/formidable/validations/presence.rb +17 -0
  28. data/lib/formidable/version.rb +5 -0
  29. data/spec/formidable/coercions_spec.rb +106 -0
  30. data/spec/formidable/elements_spec.rb +21 -0
  31. data/spec/formidable/renderers/nokogiri_spec.rb +9 -0
  32. data/spec/formidable/renderers/string_spec.rb +9 -0
  33. data/spec/formidable/rendering_spec.rb +0 -0
  34. data/spec/formidable/validations/class_spec.rb +0 -0
  35. data/spec/formidable/validations/confirmation_spec.rb +0 -0
  36. data/spec/formidable/validations/equality_spec.rb +0 -0
  37. data/spec/formidable/validations/format_spec.rb +0 -0
  38. data/spec/formidable/validations/length_spec.rb +0 -0
  39. data/spec/formidable/validations/presence_spec.rb +0 -0
  40. data/spec/formidable/validations_spec.rb +9 -0
  41. data/spec/formidable_spec.rb +51 -0
  42. data/spec/spec.opts +6 -0
  43. data/spec/spec_helper.rb +13 -0
  44. data/tasks.rb +38 -0
  45. data/vendor/cache/validatable-1.6.7.gem +0 -0
  46. metadata +107 -0
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Formidable
4
+ module Validations
5
+ class ValidatePresence < Validation
6
+ register(:validate_presence)
7
+
8
+ def valid?
9
+ ! element.cleaned_data.nil?
10
+ end
11
+
12
+ def message
13
+ "can't be empty"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module Formidable
4
+ VERSION = "0.0.1"
5
+ end
@@ -0,0 +1,106 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../spec_helper"
4
+
5
+ require "formidable/coercions"
6
+
7
+ describe "Formidable::Coercions" do
8
+ base_class = Class.new do
9
+ def self.to_s; "BaseClass"; end
10
+ attr_accessor :raw_data, :cleaned_data
11
+ end
12
+
13
+ coercions_class = Class.new(base_class) do
14
+ def self.to_s; "CoercionsClass"; end
15
+ include Formidable::Coercions
16
+ end
17
+
18
+ describe ".coercions" do
19
+ it "should have defined accessors" do
20
+ Formidable::Coercions.coercions.should respond_to(:[])
21
+ Formidable::Coercions.coercions.should respond_to(:[]=)
22
+ end
23
+
24
+ it "should raise MissingCoercion if there isn't any coercion for given key" do
25
+ -> { Formidable::Coercions.coercions[:not_found] }.should raise_error(Formidable::Coercions::MissingCoercion)
26
+ end
27
+ end
28
+
29
+ describe ".included" do
30
+ before(:each) do
31
+ @klass = Class.new
32
+ end
33
+
34
+ it "should fail if the class doesn't have method #raw_data nor #cleaned_data= defined" do
35
+ -> { Class.new.send(:include, Formidable::Coercions) }.should raise_error(Formidable::Coercions::IncompatibleInterface)
36
+ end
37
+
38
+ it "should fail if the class doesn't have method #raw_data defined" do
39
+ @klass.send(:attr_writer, :cleaned_data)
40
+ -> { @klass.send(:include, Formidable::Coercions) }.should raise_error(Formidable::Coercions::IncompatibleInterface)
41
+ end
42
+
43
+ it "should fail if the class doesn't have method #cleaned_data= defined" do
44
+ @klass.send(:attr_reader, :raw_data)
45
+ -> { @klass.send(:include, Formidable::Coercions) }.should raise_error(Formidable::Coercions::IncompatibleInterface)
46
+ end
47
+
48
+ it "should pass otherwise" do
49
+ @klass.send(:attr_accessor, :raw_data, :cleaned_data)
50
+ -> { @klass.send(:include, Formidable::Coercions) }.should_not raise_error(Formidable::Coercions::IncompatibleInterface)
51
+ end
52
+ end
53
+
54
+ describe "#coercions" do
55
+ before(:each) do
56
+ @instance = coercions_class.new
57
+ end
58
+
59
+ it "should have defined accessors" do
60
+ @instance.coercions.should respond_to(:[])
61
+ @instance.coercions.should respond_to(:[]=)
62
+ end
63
+ end
64
+
65
+ describe "#coerce" do
66
+ before(:each) do
67
+ @instance = coercions_class.new
68
+ end
69
+
70
+ it "should fail with ArgumentError if both block and type are provided" do
71
+ -> { @instance.coerce(:integer) { |value| } }.should raise_error(ArgumentError)
72
+ end
73
+
74
+ it "should fail with ArgumentError if neither block nor type are provided" do
75
+ -> { @instance.coerce }.should raise_error(ArgumentError)
76
+ end
77
+
78
+ it "should take a block as an argument and run it against the #raw_data" do
79
+ @instance.coerce { |value| value.to_i }
80
+ end
81
+
82
+ it "should take a block as an argument and run it against" do
83
+ @instance.coerce(:integer)
84
+ end
85
+
86
+ it "should -- not existing key" do
87
+ -> { @instance.coerce(:class) }.should raise_error()
88
+ end
89
+ end
90
+
91
+ describe "#coerce!" do
92
+ before(:each) do
93
+ @instance = coercions_class.new
94
+ end
95
+
96
+ it "should run all coercions against raw_data defined in the #raw_data method" do
97
+ end
98
+
99
+ it "should set #cleaned_data to the result of coercion" do
100
+ @instance.coerce!
101
+ end
102
+
103
+ it "should be chainable, so the next coercion proc will receive the result of the previous on" do
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../spec_helper"
4
+ require_relative "../../examples/basic"
5
+
6
+ describe "Formidable::Elements" do
7
+ before(:each) do
8
+ @form = BasicForm.new(action: "/create", method: "POST")
9
+ end
10
+
11
+ describe "#renderer" do
12
+ it "should be an object responding to #render method" do
13
+ # @form.renderer.should respond_to(:render)
14
+ end
15
+ end
16
+
17
+ describe "#render" do
18
+ it "should call the #call method on renderer" do
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../../spec_helper"
4
+ require_relative "../../../examples/basic"
5
+
6
+ describe "Formidable::Renderers::Nokogiri" do
7
+ before(:each) do
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../../spec_helper"
4
+ require_relative "../../../examples/basic"
5
+
6
+ describe "Formidable::Renderers::Nokogiri" do
7
+ before(:each) do
8
+ end
9
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../spec_helper"
4
+ require_relative "../../examples/basic"
5
+
6
+ describe "Formidable::Renderers::Nokogiri" do
7
+ before(:each) do
8
+ end
9
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "spec_helper"
4
+ require_relative "../examples/basic"
5
+
6
+ # TODO: odstranovani elementu (accessory)
7
+ describe "Formidable" do
8
+ before(:each) do
9
+
10
+ end
11
+
12
+ describe "#renderer" do
13
+ it "should be an object responding to #render method" do
14
+ # @form.renderer.should respond_to(:render)
15
+ end
16
+ end
17
+
18
+ describe "#render" do
19
+ it "should call the #render method on renderer" do
20
+ #params = {rating: "3"} # validations
21
+ params = {name: "Hello", rating: 3}
22
+ # params = {name: "Hello", rating: 3, :i_brake_it => {nono: 'test'}}
23
+ @form = BasicForm.new(:my_form, {action: "/create", method: "POST"}, params)
24
+
25
+ puts @form.inspect
26
+ puts "=== RENDER ==="
27
+ puts @form.render
28
+
29
+ puts "\n=== VALID? ==="
30
+ puts @form.valid?
31
+
32
+ puts "\n=== ERRORS ==="
33
+ p @form.errors
34
+
35
+ puts "\n=== ACCESSORS ==="
36
+ puts @form.rating.raw_data
37
+ puts @form.name.raw_data
38
+ puts @form.i_brake_it.raw_data.inspect
39
+ puts @form.i_brake_it.nono.raw_data
40
+
41
+ puts @form.i_brake_it.nono.raw_data = "NOTEST"
42
+ puts @form.i_brake_it.raw_data.inspect
43
+ # puts @form.submit
44
+
45
+ puts '=' * 80
46
+ @form1 = MyForm.new(:test_form)
47
+ puts @form1.render
48
+ p @form1.errors
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --backtrace
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ begin
4
+ require File.expand_path("../.bundle/environment", __FILE__)
5
+ rescue LoadError
6
+ require "bundler"
7
+ Bundler.setup
8
+ end
9
+
10
+ require "spec"
11
+
12
+ # setup load paths
13
+ $:.unshift(File.expand_path("../lib", __FILE__))
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env nake
2
+ # encoding: utf-8
3
+
4
+ begin
5
+ require File.expand_path("../.bundle/environment", __FILE__)
6
+ rescue LoadError
7
+ require "bundler"
8
+ Bundler.setup
9
+ end
10
+
11
+ $LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
12
+
13
+ require "nake/tasks/gem"
14
+ require "nake/tasks/spec"
15
+ require "nake/tasks/release"
16
+
17
+ require_relative "lib/formidable/version"
18
+
19
+ begin
20
+ load "code-cleaner.nake"
21
+ Nake::Task["hooks:whitespace:install"].tap do |task|
22
+ task.config[:path] = "script"
23
+ task.config[:encoding] = "utf-8"
24
+ task.config[:whitelist] = '(bin/[^/]+|.+\.(rb|rake|nake|thor|task))$'
25
+ end
26
+ rescue LoadError
27
+ warn "If you want to contribute to Form, please install code-cleaner and then run ./tasks.rb hooks:whitespace:install to get Git pre-commit hook for removing trailing whitespace."
28
+ end
29
+
30
+ # Setup encoding, so all the operations
31
+ # with strings from another files will work
32
+ Encoding.default_internal = "utf-8"
33
+ Encoding.default_external = "utf-8"
34
+
35
+ Task[:build].config[:gemspec] = "form.gemspec"
36
+ Task[:prerelease].config[:gemspec] = "form.pre.gemspec"
37
+ Task[:release].config[:name] = "form"
38
+ Task[:release].config[:version] = Formidable::VERSION
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: formidable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Jakub Stastny aka Botanicus
13
+ - Pavel Kunc
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain:
17
+ date: 2010-03-30 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: ""
22
+ email: stastny@101ideas.cz
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - .gitignore
31
+ - CHANGELOG
32
+ - Gemfile
33
+ - LICENSE
34
+ - README.textile
35
+ - TODO.txt
36
+ - deps.rip
37
+ - examples/basic.rb
38
+ - examples/post.rb
39
+ - examples/posts/config.ru
40
+ - examples/posts/form.html.haml
41
+ - examples/posts/models.rb
42
+ - formidable.gemspec
43
+ - formidable.pre.gemspec
44
+ - lib/formidable.rb
45
+ - lib/formidable/coercions.rb
46
+ - lib/formidable/elements.rb
47
+ - lib/formidable/renderers/nokogiri.rb
48
+ - lib/formidable/renderers/string.rb
49
+ - lib/formidable/rendering.rb
50
+ - lib/formidable/validations.rb
51
+ - lib/formidable/validations/class.rb
52
+ - lib/formidable/validations/confirmation.rb
53
+ - lib/formidable/validations/equality.rb
54
+ - lib/formidable/validations/format.rb
55
+ - lib/formidable/validations/length.rb
56
+ - lib/formidable/validations/presence.rb
57
+ - lib/formidable/version.rb
58
+ - spec/formidable/coercions_spec.rb
59
+ - spec/formidable/elements_spec.rb
60
+ - spec/formidable/renderers/nokogiri_spec.rb
61
+ - spec/formidable/renderers/string_spec.rb
62
+ - spec/formidable/rendering_spec.rb
63
+ - spec/formidable/validations/class_spec.rb
64
+ - spec/formidable/validations/confirmation_spec.rb
65
+ - spec/formidable/validations/equality_spec.rb
66
+ - spec/formidable/validations/format_spec.rb
67
+ - spec/formidable/validations/length_spec.rb
68
+ - spec/formidable/validations/presence_spec.rb
69
+ - spec/formidable/validations_spec.rb
70
+ - spec/formidable_spec.rb
71
+ - spec/spec.opts
72
+ - spec/spec_helper.rb
73
+ - tasks.rb
74
+ - vendor/cache/validatable-1.6.7.gem
75
+ has_rdoc: true
76
+ homepage: http://github.com/botanicus/formidable
77
+ licenses: []
78
+
79
+ post_install_message: "[\e[32mVersion 0.0.1\e[0m] Support for renderers\n"
80
+ rdoc_options: []
81
+
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ segments:
89
+ - 1
90
+ - 9
91
+ version: "1.9"
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ requirements: []
100
+
101
+ rubyforge_project: formidable
102
+ rubygems_version: 1.3.6
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: ""
106
+ test_files: []
107
+