factoryform 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/History.txt +20 -0
  2. data/README.rdoc +2 -0
  3. data/Rakefile +41 -0
  4. data/VERSION +1 -0
  5. data/factoryform.gemspec +144 -0
  6. data/init.rb +2 -0
  7. data/lib/factoryform.rb +25 -0
  8. data/lib/factoryform/boolean.rb +17 -0
  9. data/lib/factoryform/currency.rb +7 -0
  10. data/lib/factoryform/date_answer.rb +10 -0
  11. data/lib/factoryform/descriptive_content.rb +17 -0
  12. data/lib/factoryform/email.rb +11 -0
  13. data/lib/factoryform/field.rb +29 -0
  14. data/lib/factoryform/form.rb +127 -0
  15. data/lib/factoryform/image_data.rb +13 -0
  16. data/lib/factoryform/long_answer.rb +12 -0
  17. data/lib/factoryform/multiple_choice.rb +39 -0
  18. data/lib/factoryform/number.rb +11 -0
  19. data/lib/factoryform/rating.rb +23 -0
  20. data/lib/factoryform/short_answer.rb +11 -0
  21. data/lib/factoryform/text_data.rb +11 -0
  22. data/lib/factoryform/time_answer.rb +11 -0
  23. data/lib/factoryform/url.rb +10 -0
  24. data/lib/factoryform/utils.rb +13 -0
  25. data/rdoc/classes/Array.html +171 -0
  26. data/rdoc/classes/FactoryForm.html +192 -0
  27. data/rdoc/classes/FactoryForm/Boolean.html +166 -0
  28. data/rdoc/classes/FactoryForm/Currency.html +113 -0
  29. data/rdoc/classes/FactoryForm/DateAnswer.html +149 -0
  30. data/rdoc/classes/FactoryForm/DescriptiveContent.html +173 -0
  31. data/rdoc/classes/FactoryForm/DuplicateIDException.html +117 -0
  32. data/rdoc/classes/FactoryForm/Email.html +150 -0
  33. data/rdoc/classes/FactoryForm/Field.html +205 -0
  34. data/rdoc/classes/FactoryForm/Form.html +477 -0
  35. data/rdoc/classes/FactoryForm/ImageData.html +178 -0
  36. data/rdoc/classes/FactoryForm/LongAnswer.html +162 -0
  37. data/rdoc/classes/FactoryForm/MultipleChoice.html +241 -0
  38. data/rdoc/classes/FactoryForm/Number.html +149 -0
  39. data/rdoc/classes/FactoryForm/ParameterExpectedException.html +118 -0
  40. data/rdoc/classes/FactoryForm/Rating.html +188 -0
  41. data/rdoc/classes/FactoryForm/ShortAnswer.html +150 -0
  42. data/rdoc/classes/FactoryForm/TextData.html +173 -0
  43. data/rdoc/classes/FactoryForm/TimeAnswer.html +149 -0
  44. data/rdoc/classes/FactoryForm/Url.html +149 -0
  45. data/rdoc/created.rid +1 -0
  46. data/rdoc/files/README_rdoc.html +108 -0
  47. data/rdoc/files/lib/factoryform/boolean_rb.html +101 -0
  48. data/rdoc/files/lib/factoryform/currency_rb.html +101 -0
  49. data/rdoc/files/lib/factoryform/date_answer_rb.html +101 -0
  50. data/rdoc/files/lib/factoryform/descriptive_content_rb.html +101 -0
  51. data/rdoc/files/lib/factoryform/email_rb.html +101 -0
  52. data/rdoc/files/lib/factoryform/field_rb.html +101 -0
  53. data/rdoc/files/lib/factoryform/form_rb.html +111 -0
  54. data/rdoc/files/lib/factoryform/image_data_rb.html +101 -0
  55. data/rdoc/files/lib/factoryform/long_answer_rb.html +101 -0
  56. data/rdoc/files/lib/factoryform/multiple_choice_rb.html +101 -0
  57. data/rdoc/files/lib/factoryform/number_rb.html +101 -0
  58. data/rdoc/files/lib/factoryform/rating_rb.html +101 -0
  59. data/rdoc/files/lib/factoryform/short_answer_rb.html +101 -0
  60. data/rdoc/files/lib/factoryform/text_data_rb.html +101 -0
  61. data/rdoc/files/lib/factoryform/time_answer_rb.html +101 -0
  62. data/rdoc/files/lib/factoryform/url_rb.html +101 -0
  63. data/rdoc/files/lib/factoryform/utils_rb.html +101 -0
  64. data/rdoc/files/lib/factoryform_rb.html +101 -0
  65. data/rdoc/fr_class_index.html +46 -0
  66. data/rdoc/fr_file_index.html +45 -0
  67. data/rdoc/fr_method_index.html +55 -0
  68. data/rdoc/index.html +26 -0
  69. data/rdoc/rdoc-style.css +208 -0
  70. data/test/boolean_test.rb +10 -0
  71. data/test/currency_test.rb +9 -0
  72. data/test/date_answer_test.rb +10 -0
  73. data/test/descriptive_content_test.rb +14 -0
  74. data/test/field_test.rb +19 -0
  75. data/test/form_test.rb +166 -0
  76. data/test/image_data_test.rb +18 -0
  77. data/test/long_answer_test.rb +54 -0
  78. data/test/multiple_choice_test.rb +61 -0
  79. data/test/number_test.rb +11 -0
  80. data/test/rating_test.rb +21 -0
  81. data/test/short_answer_test.rb +83 -0
  82. data/test/test_helper.rb +2 -0
  83. data/test/text_data_test.rb +17 -0
  84. data/test/time_answer_test.rb +10 -0
  85. data/test/url_test.rb +11 -0
  86. metadata +197 -0
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class BooleanTest < Test::Unit::TestCase
4
+
5
+ def test_should_create_boolean_answer_field
6
+ bool = FactoryForm::Boolean.new(:id => "fav-color", :label => "Choose your favourite color")
7
+ assert_equal [true, false], bool.values
8
+ end
9
+
10
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class CurrencyTest < Test::Unit::TestCase
4
+
5
+ def test_should_create_currency_field
6
+
7
+ end
8
+
9
+ end
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class DateAnswerTest < Test::Unit::TestCase
4
+
5
+ def test_should_create_date_answer_field
6
+ date = FactoryForm::DateAnswer.new(:id => "date_1", :label => "Give date of establishment")
7
+ assert_equal "date", date.validation_format
8
+ end
9
+
10
+ end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class DescriptiveContentTest < Test::Unit::TestCase
4
+ def test_should_create_descriptive_content_field_with_minimum_params_passed
5
+ dc = FactoryForm::DescriptiveContent.new(:id => "field_3", :label => "Personal email address")
6
+ assert_equal "Personal email address",dc.label
7
+
8
+ end
9
+
10
+ def test_should_raise_exception_unless_required_params_passed
11
+ # Raise expected argument exception as ID,label are required
12
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::DescriptiveContent.new() }
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class FieldTest < Test::Unit::TestCase
4
+
5
+ def test_should_check_of_having_validation
6
+ sa1 = FactoryForm::ShortAnswer.new(:id => "email_1", :label => "Personal email address")
7
+ la1 = FactoryForm::LongAnswer.new(:id => "comments", :label => "Provide your comments below")
8
+
9
+ # By default, no validation for different formats unless explicitly specified
10
+ assert_equal "general",sa1.validation_format
11
+
12
+ # By default, answer for this field is optional unless explicitly specified as required
13
+ assert_equal true,sa1.required
14
+
15
+ # By default, no uniqueness of answer for this field unless explicitly specified as unique
16
+ assert_equal false,sa1.unique
17
+ end
18
+
19
+ end
@@ -0,0 +1,166 @@
1
+ require 'test_helper'
2
+
3
+ class FormTest < Test::Unit::TestCase
4
+
5
+ def test_should_create_form
6
+ # Create short answer and long answer objects
7
+ sa = FactoryForm::ShortAnswer.new(:id => "email_1",:label => "Personal email address" )
8
+ la = FactoryForm::LongAnswer.new(:id => "comment_1",:label => "Provide your comments below")
9
+ form = FactoryForm::Form.new()
10
+
11
+ # Add short answer and long answer objects
12
+ form.add(sa)
13
+ form.add(la)
14
+
15
+ assert_equal 2,form.fields.length
16
+
17
+ # Create form object with title
18
+ form2 = FactoryForm::Form.new({:title => "Data collection"})
19
+ assert_equal "Data collection", form2.title
20
+
21
+ end
22
+
23
+ def test_should_list_all_the_fields
24
+ sa = FactoryForm::ShortAnswer.new(:id => "url_1",:label => "Personal web address",
25
+ :options => {
26
+ :hint => "It should be his/her personal web address",
27
+ :validation_format => "url",
28
+ :required => true,
29
+ :unique => false
30
+ }
31
+ )
32
+
33
+ la = FactoryForm::LongAnswer.new(:id => "comment_1",:label => "Provide your comments below",
34
+ :options => {
35
+ :hint => "Up to a maximum of 250 characters",
36
+ :required => false,
37
+ :unique => true,
38
+ :min_chars => 50,
39
+ :rows => 6,
40
+ :cols => 5
41
+ }
42
+ )
43
+ form = FactoryForm::Form.new()
44
+ form.add(sa)
45
+ form.add(la)
46
+
47
+ # Get the list of all fields in the form
48
+ list = form.fields
49
+
50
+ assert_equal true,list.first.required
51
+ assert_equal "url", list.first.validation_format
52
+
53
+ assert_equal true,list.last.required
54
+
55
+ end
56
+
57
+ def test_should_get_field
58
+ form = create_form
59
+ assert_equal 3, form.fields.length
60
+
61
+ # Get email field
62
+ field_to_delete = form.get(:id => "email_1")
63
+ assert_instance_of FactoryForm::ShortAnswer,field_to_delete
64
+
65
+ # Delete email field
66
+ form.remove(field_to_delete)
67
+
68
+ assert_equal 2, form.fields.length
69
+ assert_instance_of FactoryForm::LongAnswer, form.fields.first
70
+
71
+ end
72
+
73
+ def test_should_re_order_fields
74
+ form = create_form
75
+ field1 = form.get(:id => "email_1")
76
+ field2 = form.get(:id => "comment_1")
77
+ field3 = form.get(:id => "name_1")
78
+
79
+ assert_equal 0,form.fields.index(field1)
80
+ assert_equal 1,form.fields.index(field2)
81
+
82
+ # Move email field down
83
+ form.move_down(field1)
84
+
85
+ assert_equal 1,form.fields.index(field1)
86
+ assert_equal 0,form.fields.index(field2)
87
+
88
+ # Move comment field up
89
+ form.move_up(field3)
90
+
91
+ assert_equal 0,form.fields.index(field2)
92
+ assert_equal 1,form.fields.index(field3)
93
+ assert_equal 2,form.fields.index(field1)
94
+
95
+ end
96
+
97
+ def test_should_change_to_yml
98
+ form = create_form
99
+ changed_yml = form.to_yml
100
+ # TODO: FIND BETTER WAY FOR TESTING .yml CONTENT-TYPE
101
+ assert_kind_of(String, changed_yml)
102
+
103
+ # Create short answer and long answer objects
104
+ sa = FactoryForm::ShortAnswer.new(:id => "email_1",:label => "Personal email address" )
105
+ la = FactoryForm::LongAnswer.new(:id => "comment_1",:label => "Provide your comments below")
106
+ td = FactoryForm::TextData.new(:id => "name_1", :label => "Person's name")
107
+ img = FactoryForm::ImageData.new(:id => "photo_1", :label => "Photo of person")
108
+ form = FactoryForm::Form.new(:title => "Survey form")
109
+
110
+ # Add short answer and long answer objects
111
+ form.add(sa)
112
+ form.add(la)
113
+ form.add(td)
114
+ form.add(img)
115
+ assert_instance_of FactoryForm::ImageData, form.fields.last
116
+
117
+
118
+ end
119
+
120
+ def test_should_change_position_in_yml_string
121
+ form = create_form
122
+ field1 = form.get(:id => "email_1")
123
+ field2 = form.get(:id => "comment_1")
124
+ changed_yml = form.to_yml
125
+
126
+ # Convert to hash for making sure that yaml string is also changed
127
+ before_hash = YAML::load(changed_yml)
128
+ assert_instance_of FactoryForm::ShortAnswer, before_hash.fields.first
129
+
130
+ # Move email field down
131
+ form.move_down(field1)
132
+ after_hash = YAML::load(form.to_yml)
133
+ assert_instance_of FactoryForm::LongAnswer, after_hash.fields.first
134
+
135
+ form.add(FactoryForm::TextData.new(:id => "my-name", :label => "my name"))
136
+ assert_instance_of FactoryForm::TextData, after_hash.fields.last
137
+
138
+ end
139
+
140
+ def test_should_change_to_xml
141
+ form = create_form
142
+ changed_xml = form.to_xml
143
+ # TODO: FIND BETTER WAY FOR TESTING .xml CONTENT-TYPE
144
+ assert_kind_of(String, changed_xml)
145
+ end
146
+
147
+ def test_should_change_to_json
148
+ form = create_form
149
+ changed_json = form.to_json
150
+
151
+ # TODO: FIND BETTER WAY FOR TESTING json CONTENT-TYPE
152
+ assert_kind_of(String, changed_json)
153
+ end
154
+
155
+ private
156
+ def create_form
157
+ sa = FactoryForm::ShortAnswer.new(:id => "email_1", :label => "Personal email address" )
158
+ la = FactoryForm::LongAnswer.new(:id => "comment_1", :label => "Provide your comments below")
159
+ td = FactoryForm::TextData.new(:id => "name_1", :label => "Person's name")
160
+ form = FactoryForm::Form.new()
161
+ form.add(sa)
162
+ form.add(la)
163
+ form.add(td)
164
+ return form
165
+ end
166
+ end
@@ -0,0 +1,18 @@
1
+ require 'test_helper'
2
+
3
+ class ImageDataTest < Test::Unit::TestCase
4
+ def test_should_create_image_data_field_with_minimum_params_passed
5
+ td = FactoryForm::ImageData.new(:id => "photo_1", :label => "Photo of child")
6
+ assert_equal "Photo of child",td.label
7
+
8
+ # By default alt attribute is same as field id
9
+ assert_equal "Photo of child",td.alt
10
+ assert_equal "image_data",td.field_type
11
+ assert_equal true,td.required
12
+ end
13
+
14
+ def test_should_raise_exception_unless_required_params_passed
15
+ # Raise expected argument exception as ID,label are required
16
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::ImageData.new() }
17
+ end
18
+ end
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+
3
+ class LongAnswerTest < Test::Unit::TestCase
4
+ def test_should_create_long_answer_field
5
+ la = FactoryForm::LongAnswer.new(:id => "comments", :label => "Provide your comments below")
6
+
7
+ # Long answer text should not have any validation format
8
+ assert_equal "general", la.validation_format
9
+
10
+ la.hint = "Up to a maximum of 250 characters"
11
+ assert_equal "Up to a maximum of 250 characters", la.hint
12
+
13
+ # By default, answer for this field is optional unless explicitly specified as required
14
+ assert_equal true,la.required
15
+
16
+ # By default, no uniqueness of answer for this field unless explicitly specified as unique
17
+ assert_equal false,la.unique
18
+
19
+ # Set answer for this field as required
20
+ la.required = true
21
+
22
+ # Set answer for this field to be unique
23
+ la.unique = true
24
+
25
+ # Should have required attribute to be true
26
+ assert_equal true, la.required
27
+
28
+ # Should have unique answers
29
+ assert_equal true, la.unique
30
+
31
+ # Should have 500 min_chars
32
+ assert_equal 500, la.min_chars
33
+
34
+ # Pass min_chars
35
+ la2 = FactoryForm::LongAnswer.new(:id => "comments", :label => "Provide your comments below", :options => {:min_chars => 700 })
36
+ assert_equal 700, la2.min_chars
37
+
38
+ # Field type
39
+ assert_equal "long_answer", la.field_type
40
+
41
+ end
42
+
43
+ def test_should_not_create_long_answer_field_if_ID_label_are_missing
44
+ # Raise expected argument exception as ID,label are required
45
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::LongAnswer.new() }
46
+ end
47
+
48
+ def test_should_set_minimum_number_of_characters
49
+ la = FactoryForm::LongAnswer.new(:id => "comments", :label => "Provide your comments below")
50
+ la.min_chars = 500
51
+ assert_equal 500,la.min_chars
52
+ end
53
+
54
+ end
@@ -0,0 +1,61 @@
1
+ require 'test_helper'
2
+
3
+ class MultipleChoiceTest < Test::Unit::TestCase
4
+ def test_should_create_multiple_choice_answer_field
5
+
6
+ # Multiple choice should have value attributes passed as well
7
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color") }
8
+
9
+ mc = FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color",
10
+ :values => ["Red color","Green color"]
11
+ )
12
+
13
+ # There should be at least two values for this field
14
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color") }
15
+ assert_equal 2, mc.values.length
16
+
17
+ end
18
+
19
+ def test_should_add_remove_new_option
20
+ mc = FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color",
21
+ :values => ["Red color","Green color"]
22
+ )
23
+ assert_equal "Green color", mc.values.last
24
+ assert_equal 2, mc.values.length
25
+
26
+ # Add other option values
27
+ mc.add_option("Blue Color")
28
+ assert_equal "Blue Color", mc.values.last
29
+ assert_equal 3, mc.values.length
30
+
31
+ mc.remove_option("Blue Color")
32
+ assert_equal 2, mc.values.length
33
+
34
+ end
35
+
36
+ def test_should_support_different_field_types
37
+ mc = FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color",
38
+ :values => ["Red color","Green color"]
39
+ )
40
+ assert_equal "radio_button", mc.field_type
41
+
42
+ mc = FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color",
43
+ :values => ["Red color","Green color"],
44
+ :field_type => "check_box"
45
+ )
46
+ assert_equal "check_box", mc.field_type
47
+
48
+ # Should not allow field types other than "select_box", "check_box", "radio_button"
49
+ assert_raise(ArgumentError){ FactoryForm::MultipleChoice.new(:id => "fav-color", :label => "Choose your favourite color",
50
+ :values => ["Red color","Green color"],
51
+ :field_type => "list"
52
+ )
53
+ }
54
+
55
+ # Change field type to select_box
56
+ mc.field_type = "select_box"
57
+ assert_equal "select_box", mc.field_type
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class NumberTest < Test::Unit::TestCase
4
+
5
+ def test_should_create_number_answer_field
6
+ number = FactoryForm::Number.new(:id => "number_1", :label => "Give phone number")
7
+ assert_equal "number", number.validation_format
8
+ assert_equal "short_answer", number.field_type
9
+ end
10
+
11
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class RatingTest < Test::Unit::TestCase
4
+ def test_should_create_rating_answer_field
5
+
6
+ # Rating answer field should have scale attributes passed as well
7
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::Rating.new(:id => "rating_1", :label => "Choose your ranking" ) }
8
+
9
+ # Create rating answer field providing scales
10
+ rating = FactoryForm::Rating.new(:id => "rating_1", :label => "Choose your ranking" , :scale => "5" )
11
+ assert_equal 5, rating.scale
12
+ assert_equal "", rating.from_label
13
+
14
+ # Create rating answer field providing from and to label
15
+ rating = FactoryForm::Rating.new(:id => "rating_1", :label => "How would you rank this website, on the basis of easiness of UI ?" , :scale => 5, :from_label => "bad", :to_label => "good" )
16
+ assert_equal "bad", rating.from_label
17
+ assert_equal "good", rating.to_label
18
+ assert_equal "rating", rating.field_type
19
+ end
20
+
21
+ end
@@ -0,0 +1,83 @@
1
+ require 'test_helper'
2
+
3
+ class ShortAnswerTest < Test::Unit::TestCase
4
+ def test_should_create_short_answer_field_with_minimum_params_passed
5
+ sa1 = FactoryForm::ShortAnswer.new(:id => "email_1", :label => "Personal email address")
6
+
7
+ # By default, no validation for different formats unless explicitly specified
8
+ assert_equal "general",sa1.validation_format
9
+
10
+ # By default, answer for this field is optional unless explicitly specified as required
11
+ assert_equal true,sa1.required
12
+
13
+ # By default, no uniqueness of answer for this field unless explicitly specified as unique
14
+ assert_equal false,sa1.unique
15
+
16
+ # Set validation format as email
17
+ sa1.validation_format = "email"
18
+
19
+ # Should have email format as validation_format
20
+ assert_equal "email", sa1.validation_format
21
+
22
+ # Set answer for this field as required
23
+ sa1.required = true
24
+
25
+ # Set answer for this field to be unique
26
+ sa1.unique = true
27
+
28
+ # Should have required attribute to be true
29
+ assert_equal true, sa1.required
30
+
31
+ # Should have unique answers
32
+ assert_equal true, sa1.unique
33
+
34
+ assert_equal "short_answer", sa1.field_type
35
+
36
+
37
+ sa1.hint = "It should be his/her personal email address, not his official address."
38
+ assert_equal "It should be his/her personal email address, not his official address.", sa1.hint
39
+
40
+ # Ensures object of this class
41
+ assert_instance_of FactoryForm::ShortAnswer, sa1
42
+
43
+ end
44
+
45
+ def test_should_create_short_answer_field_with_all_other_optional_params
46
+ sa = FactoryForm::ShortAnswer.new(:id => "url_1", :label => "Personal web address",
47
+ :options => {
48
+ :hint => "It should be his/her personal web address",
49
+ :validation_format => "url",
50
+ :required => true,
51
+ :unique => false
52
+ }
53
+ )
54
+ assert_equal "url_1", sa.id
55
+ assert_equal "Personal web address", sa.label
56
+ assert_equal "It should be his/her personal web address", sa.hint
57
+ assert_equal "url", sa.validation_format
58
+ assert_equal true, sa.required
59
+ assert_equal false, sa.unique
60
+
61
+ end
62
+
63
+ def test_should_not_create_short_answer_field_if_required_params_are_missing
64
+ # Raise expected argument exception as ID,label are required
65
+ assert_raise(FactoryForm::ParameterExpectedException){ FactoryForm::ShortAnswer.new() }
66
+ end
67
+
68
+ def test_should_not_raise_exception_for_valid_params_passed
69
+ assert_nothing_raised(Exception){ FactoryForm::ShortAnswer.new(:id => "phone_number", :label => "Phone Number") }
70
+ end
71
+
72
+ def test_should_raise_exception_if_duplicate_ID_exists
73
+ sa1 = FactoryForm::ShortAnswer.new(:id => "email_1", :label => "Official email address")
74
+ sa2 = FactoryForm::ShortAnswer.new(:id => "email_1", :label => "Personal email address")
75
+ form = FactoryForm::Form.new
76
+ form.add(sa1)
77
+
78
+ # Raise duplicate ID exception
79
+ assert_raise(FactoryForm::DuplicateIDException){ form.add(sa2) }
80
+ end
81
+
82
+
83
+ end