factoryform 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +20 -0
- data/README.rdoc +2 -0
- data/Rakefile +41 -0
- data/VERSION +1 -0
- data/factoryform.gemspec +144 -0
- data/init.rb +2 -0
- data/lib/factoryform.rb +25 -0
- data/lib/factoryform/boolean.rb +17 -0
- data/lib/factoryform/currency.rb +7 -0
- data/lib/factoryform/date_answer.rb +10 -0
- data/lib/factoryform/descriptive_content.rb +17 -0
- data/lib/factoryform/email.rb +11 -0
- data/lib/factoryform/field.rb +29 -0
- data/lib/factoryform/form.rb +127 -0
- data/lib/factoryform/image_data.rb +13 -0
- data/lib/factoryform/long_answer.rb +12 -0
- data/lib/factoryform/multiple_choice.rb +39 -0
- data/lib/factoryform/number.rb +11 -0
- data/lib/factoryform/rating.rb +23 -0
- data/lib/factoryform/short_answer.rb +11 -0
- data/lib/factoryform/text_data.rb +11 -0
- data/lib/factoryform/time_answer.rb +11 -0
- data/lib/factoryform/url.rb +10 -0
- data/lib/factoryform/utils.rb +13 -0
- data/rdoc/classes/Array.html +171 -0
- data/rdoc/classes/FactoryForm.html +192 -0
- data/rdoc/classes/FactoryForm/Boolean.html +166 -0
- data/rdoc/classes/FactoryForm/Currency.html +113 -0
- data/rdoc/classes/FactoryForm/DateAnswer.html +149 -0
- data/rdoc/classes/FactoryForm/DescriptiveContent.html +173 -0
- data/rdoc/classes/FactoryForm/DuplicateIDException.html +117 -0
- data/rdoc/classes/FactoryForm/Email.html +150 -0
- data/rdoc/classes/FactoryForm/Field.html +205 -0
- data/rdoc/classes/FactoryForm/Form.html +477 -0
- data/rdoc/classes/FactoryForm/ImageData.html +178 -0
- data/rdoc/classes/FactoryForm/LongAnswer.html +162 -0
- data/rdoc/classes/FactoryForm/MultipleChoice.html +241 -0
- data/rdoc/classes/FactoryForm/Number.html +149 -0
- data/rdoc/classes/FactoryForm/ParameterExpectedException.html +118 -0
- data/rdoc/classes/FactoryForm/Rating.html +188 -0
- data/rdoc/classes/FactoryForm/ShortAnswer.html +150 -0
- data/rdoc/classes/FactoryForm/TextData.html +173 -0
- data/rdoc/classes/FactoryForm/TimeAnswer.html +149 -0
- data/rdoc/classes/FactoryForm/Url.html +149 -0
- data/rdoc/created.rid +1 -0
- data/rdoc/files/README_rdoc.html +108 -0
- data/rdoc/files/lib/factoryform/boolean_rb.html +101 -0
- data/rdoc/files/lib/factoryform/currency_rb.html +101 -0
- data/rdoc/files/lib/factoryform/date_answer_rb.html +101 -0
- data/rdoc/files/lib/factoryform/descriptive_content_rb.html +101 -0
- data/rdoc/files/lib/factoryform/email_rb.html +101 -0
- data/rdoc/files/lib/factoryform/field_rb.html +101 -0
- data/rdoc/files/lib/factoryform/form_rb.html +111 -0
- data/rdoc/files/lib/factoryform/image_data_rb.html +101 -0
- data/rdoc/files/lib/factoryform/long_answer_rb.html +101 -0
- data/rdoc/files/lib/factoryform/multiple_choice_rb.html +101 -0
- data/rdoc/files/lib/factoryform/number_rb.html +101 -0
- data/rdoc/files/lib/factoryform/rating_rb.html +101 -0
- data/rdoc/files/lib/factoryform/short_answer_rb.html +101 -0
- data/rdoc/files/lib/factoryform/text_data_rb.html +101 -0
- data/rdoc/files/lib/factoryform/time_answer_rb.html +101 -0
- data/rdoc/files/lib/factoryform/url_rb.html +101 -0
- data/rdoc/files/lib/factoryform/utils_rb.html +101 -0
- data/rdoc/files/lib/factoryform_rb.html +101 -0
- data/rdoc/fr_class_index.html +46 -0
- data/rdoc/fr_file_index.html +45 -0
- data/rdoc/fr_method_index.html +55 -0
- data/rdoc/index.html +26 -0
- data/rdoc/rdoc-style.css +208 -0
- data/test/boolean_test.rb +10 -0
- data/test/currency_test.rb +9 -0
- data/test/date_answer_test.rb +10 -0
- data/test/descriptive_content_test.rb +14 -0
- data/test/field_test.rb +19 -0
- data/test/form_test.rb +166 -0
- data/test/image_data_test.rb +18 -0
- data/test/long_answer_test.rb +54 -0
- data/test/multiple_choice_test.rb +61 -0
- data/test/number_test.rb +11 -0
- data/test/rating_test.rb +21 -0
- data/test/short_answer_test.rb +83 -0
- data/test/test_helper.rb +2 -0
- data/test/text_data_test.rb +17 -0
- data/test/time_answer_test.rb +10 -0
- data/test/url_test.rb +11 -0
- metadata +197 -0
data/History.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
=== 0.0.1 2010-08-23
|
2
|
+
|
3
|
+
* 1 major enhancement:
|
4
|
+
* Initial release
|
5
|
+
|
6
|
+
=== 0.0.2 2010-09-08
|
7
|
+
|
8
|
+
* Other fields added:
|
9
|
+
* included boolean field, rating field
|
10
|
+
* field types like select_box, check_box, radio_button are included in MultipleChoice Class
|
11
|
+
|
12
|
+
|
13
|
+
* TODO: Coming up for next release:
|
14
|
+
* Include advanced field types (priority wise)
|
15
|
+
* FileUploadField
|
16
|
+
* GoogleMapField
|
17
|
+
* RecordVideoField
|
18
|
+
* RecordAudioField
|
19
|
+
* TakePhotoField
|
20
|
+
NOTE:: Look for other options as well (Ref: formtastic.com, wufoo.com)
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |s|
|
7
|
+
s.name = "factoryform"
|
8
|
+
s.summary = "This is an API for interacting with simple HTML form."
|
9
|
+
s.description = "This is an API for interacting with simple HTML form."
|
10
|
+
s.email = "info@sproutify.com"
|
11
|
+
s.homepage = "http://github.com/sprout/factoryform"
|
12
|
+
s.authors = ["sprout"]
|
13
|
+
s.add_development_dependency("json_pure","~> 1.4.3")
|
14
|
+
s.add_runtime_dependency(%q<json_pure>, "~> 1.4.3")
|
15
|
+
end
|
16
|
+
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
|
19
|
+
require "rake/testtask"
|
20
|
+
Rake::TestTask.new(:test) do |test|
|
21
|
+
test.libs << "test"
|
22
|
+
test.ruby_opts << "-rubygems"
|
23
|
+
test.pattern = "test/**/*_test.rb"
|
24
|
+
test.verbose = true
|
25
|
+
end
|
26
|
+
|
27
|
+
task :default => :test
|
28
|
+
|
29
|
+
rescue LoadError
|
30
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'rake/rdoctask'
|
34
|
+
Rake::RDocTask.new do |rdoc|
|
35
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
36
|
+
|
37
|
+
rdoc.rdoc_dir = 'rdoc'
|
38
|
+
rdoc.title = "factoryform #{version}"
|
39
|
+
rdoc.rdoc_files.include('README*')
|
40
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
41
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/factoryform.gemspec
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{factoryform}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["sprout"]
|
12
|
+
s.date = %q{2010-10-01}
|
13
|
+
s.description = %q{This is an API for interacting with simple HTML form.}
|
14
|
+
s.email = %q{info@sproutify.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
"History.txt",
|
20
|
+
"README.rdoc",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION",
|
23
|
+
"factoryform.gemspec",
|
24
|
+
"init.rb",
|
25
|
+
"lib/factoryform.rb",
|
26
|
+
"lib/factoryform/boolean.rb",
|
27
|
+
"lib/factoryform/currency.rb",
|
28
|
+
"lib/factoryform/date_answer.rb",
|
29
|
+
"lib/factoryform/descriptive_content.rb",
|
30
|
+
"lib/factoryform/email.rb",
|
31
|
+
"lib/factoryform/field.rb",
|
32
|
+
"lib/factoryform/form.rb",
|
33
|
+
"lib/factoryform/image_data.rb",
|
34
|
+
"lib/factoryform/long_answer.rb",
|
35
|
+
"lib/factoryform/multiple_choice.rb",
|
36
|
+
"lib/factoryform/number.rb",
|
37
|
+
"lib/factoryform/rating.rb",
|
38
|
+
"lib/factoryform/short_answer.rb",
|
39
|
+
"lib/factoryform/text_data.rb",
|
40
|
+
"lib/factoryform/time_answer.rb",
|
41
|
+
"lib/factoryform/url.rb",
|
42
|
+
"lib/factoryform/utils.rb",
|
43
|
+
"rdoc/classes/Array.html",
|
44
|
+
"rdoc/classes/FactoryForm.html",
|
45
|
+
"rdoc/classes/FactoryForm/Boolean.html",
|
46
|
+
"rdoc/classes/FactoryForm/Currency.html",
|
47
|
+
"rdoc/classes/FactoryForm/DateAnswer.html",
|
48
|
+
"rdoc/classes/FactoryForm/DescriptiveContent.html",
|
49
|
+
"rdoc/classes/FactoryForm/DuplicateIDException.html",
|
50
|
+
"rdoc/classes/FactoryForm/Email.html",
|
51
|
+
"rdoc/classes/FactoryForm/Field.html",
|
52
|
+
"rdoc/classes/FactoryForm/Form.html",
|
53
|
+
"rdoc/classes/FactoryForm/ImageData.html",
|
54
|
+
"rdoc/classes/FactoryForm/LongAnswer.html",
|
55
|
+
"rdoc/classes/FactoryForm/MultipleChoice.html",
|
56
|
+
"rdoc/classes/FactoryForm/Number.html",
|
57
|
+
"rdoc/classes/FactoryForm/ParameterExpectedException.html",
|
58
|
+
"rdoc/classes/FactoryForm/Rating.html",
|
59
|
+
"rdoc/classes/FactoryForm/ShortAnswer.html",
|
60
|
+
"rdoc/classes/FactoryForm/TextData.html",
|
61
|
+
"rdoc/classes/FactoryForm/TimeAnswer.html",
|
62
|
+
"rdoc/classes/FactoryForm/Url.html",
|
63
|
+
"rdoc/created.rid",
|
64
|
+
"rdoc/files/README_rdoc.html",
|
65
|
+
"rdoc/files/lib/factoryform/boolean_rb.html",
|
66
|
+
"rdoc/files/lib/factoryform/currency_rb.html",
|
67
|
+
"rdoc/files/lib/factoryform/date_answer_rb.html",
|
68
|
+
"rdoc/files/lib/factoryform/descriptive_content_rb.html",
|
69
|
+
"rdoc/files/lib/factoryform/email_rb.html",
|
70
|
+
"rdoc/files/lib/factoryform/field_rb.html",
|
71
|
+
"rdoc/files/lib/factoryform/form_rb.html",
|
72
|
+
"rdoc/files/lib/factoryform/image_data_rb.html",
|
73
|
+
"rdoc/files/lib/factoryform/long_answer_rb.html",
|
74
|
+
"rdoc/files/lib/factoryform/multiple_choice_rb.html",
|
75
|
+
"rdoc/files/lib/factoryform/number_rb.html",
|
76
|
+
"rdoc/files/lib/factoryform/rating_rb.html",
|
77
|
+
"rdoc/files/lib/factoryform/short_answer_rb.html",
|
78
|
+
"rdoc/files/lib/factoryform/text_data_rb.html",
|
79
|
+
"rdoc/files/lib/factoryform/time_answer_rb.html",
|
80
|
+
"rdoc/files/lib/factoryform/url_rb.html",
|
81
|
+
"rdoc/files/lib/factoryform/utils_rb.html",
|
82
|
+
"rdoc/files/lib/factoryform_rb.html",
|
83
|
+
"rdoc/fr_class_index.html",
|
84
|
+
"rdoc/fr_file_index.html",
|
85
|
+
"rdoc/fr_method_index.html",
|
86
|
+
"rdoc/index.html",
|
87
|
+
"rdoc/rdoc-style.css",
|
88
|
+
"test/boolean_test.rb",
|
89
|
+
"test/currency_test.rb",
|
90
|
+
"test/date_answer_test.rb",
|
91
|
+
"test/descriptive_content_test.rb",
|
92
|
+
"test/field_test.rb",
|
93
|
+
"test/form_test.rb",
|
94
|
+
"test/image_data_test.rb",
|
95
|
+
"test/long_answer_test.rb",
|
96
|
+
"test/multiple_choice_test.rb",
|
97
|
+
"test/number_test.rb",
|
98
|
+
"test/rating_test.rb",
|
99
|
+
"test/short_answer_test.rb",
|
100
|
+
"test/test_helper.rb",
|
101
|
+
"test/text_data_test.rb",
|
102
|
+
"test/time_answer_test.rb",
|
103
|
+
"test/url_test.rb"
|
104
|
+
]
|
105
|
+
s.homepage = %q{http://github.com/sprout/factoryform}
|
106
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
107
|
+
s.require_paths = ["lib"]
|
108
|
+
s.rubygems_version = %q{1.3.7}
|
109
|
+
s.summary = %q{This is an API for interacting with simple HTML form.}
|
110
|
+
s.test_files = [
|
111
|
+
"test/boolean_test.rb",
|
112
|
+
"test/currency_test.rb",
|
113
|
+
"test/date_answer_test.rb",
|
114
|
+
"test/descriptive_content_test.rb",
|
115
|
+
"test/field_test.rb",
|
116
|
+
"test/form_test.rb",
|
117
|
+
"test/image_data_test.rb",
|
118
|
+
"test/long_answer_test.rb",
|
119
|
+
"test/multiple_choice_test.rb",
|
120
|
+
"test/number_test.rb",
|
121
|
+
"test/rating_test.rb",
|
122
|
+
"test/short_answer_test.rb",
|
123
|
+
"test/test_helper.rb",
|
124
|
+
"test/text_data_test.rb",
|
125
|
+
"test/time_answer_test.rb",
|
126
|
+
"test/url_test.rb"
|
127
|
+
]
|
128
|
+
|
129
|
+
if s.respond_to? :specification_version then
|
130
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
131
|
+
s.specification_version = 3
|
132
|
+
|
133
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
134
|
+
s.add_development_dependency(%q<json_pure>, ["~> 1.4.3"])
|
135
|
+
s.add_runtime_dependency(%q<json_pure>, ["~> 1.4.3"])
|
136
|
+
else
|
137
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4.3"])
|
138
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4.3"])
|
139
|
+
end
|
140
|
+
else
|
141
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4.3"])
|
142
|
+
s.add_dependency(%q<json_pure>, ["~> 1.4.3"])
|
143
|
+
end
|
144
|
+
end
|
data/init.rb
ADDED
data/lib/factoryform.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'factoryform/form')
|
2
|
+
require File.join(File.dirname(__FILE__),'factoryform/field')
|
3
|
+
require File.join(File.dirname(__FILE__),'factoryform/short_answer')
|
4
|
+
require File.join(File.dirname(__FILE__),'factoryform/long_answer')
|
5
|
+
require File.join(File.dirname(__FILE__),'factoryform/multiple_choice')
|
6
|
+
require File.join(File.dirname(__FILE__),'factoryform/utils')
|
7
|
+
require File.join(File.dirname(__FILE__),'factoryform/text_data')
|
8
|
+
require File.join(File.dirname(__FILE__),'factoryform/image_data')
|
9
|
+
require File.join(File.dirname(__FILE__),'factoryform/date_answer')
|
10
|
+
require File.join(File.dirname(__FILE__),'factoryform/email')
|
11
|
+
require File.join(File.dirname(__FILE__),'factoryform/number')
|
12
|
+
require File.join(File.dirname(__FILE__),'factoryform/url')
|
13
|
+
require File.join(File.dirname(__FILE__),'factoryform/time_answer')
|
14
|
+
require File.join(File.dirname(__FILE__),'factoryform/boolean')
|
15
|
+
require File.join(File.dirname(__FILE__),'factoryform/currency')
|
16
|
+
require File.join(File.dirname(__FILE__),'factoryform/rating')
|
17
|
+
require File.join(File.dirname(__FILE__),'factoryform/descriptive_content')
|
18
|
+
|
19
|
+
|
20
|
+
module FactoryForm
|
21
|
+
# Raised when FactoryForm::TextData.new doesn't include a required parameter
|
22
|
+
class ParameterExpectedException < RuntimeError
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FactoryForm
|
2
|
+
class Boolean < Field
|
3
|
+
attr_accessor :values # True/false values
|
4
|
+
|
5
|
+
def initialize(options={})
|
6
|
+
self.values = options[:values] = [true, false]
|
7
|
+
options[:field_type] = "boolean"
|
8
|
+
|
9
|
+
super(options)
|
10
|
+
|
11
|
+
# Unique is always false
|
12
|
+
self.unique = false
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FactoryForm
|
2
|
+
class DescriptiveContent
|
3
|
+
attr_reader :id
|
4
|
+
attr_accessor :label, :value
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
unless options.empty? || options[:id].empty? || options[:label].empty?
|
8
|
+
@id, @label, @value = options[:id], options[:label], options[:value] || options[:label]
|
9
|
+
else
|
10
|
+
raise(ParameterExpectedException, "Missing ID and label")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module FactoryForm
|
2
|
+
# Field is simply a hash of different attributes
|
3
|
+
class Field
|
4
|
+
attr_reader :id
|
5
|
+
attr_accessor :label, :hint, :required, :unique, :validation_format, :field_type
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
unless options.nil? || options[:id].nil? || options[:label].nil?
|
9
|
+
extra_options = options[:options] || { }
|
10
|
+
extra_options.merge!({
|
11
|
+
# defaults
|
12
|
+
:hint => extra_options[:hint] || " ",
|
13
|
+
:required => extra_options[:required] || true,
|
14
|
+
:unique => extra_options[:unique] || false,
|
15
|
+
:validation_format => extra_options[:validation_format] || "general",
|
16
|
+
})
|
17
|
+
options.merge!({:options => extra_options})
|
18
|
+
|
19
|
+
@id, @label, @hint, @required, @unique, @validation_format, @field_type = options[:id], options[:label],options[:options][:hint], options[:options][:required], options[:options][:unique], options[:options][:validation_format], options[:field_type]
|
20
|
+
else
|
21
|
+
raise(ParameterExpectedException, "Missing ID and label")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'json/pure' unless defined?(JSON::State)
|
4
|
+
require File.join(File.dirname(__FILE__),'utils')
|
5
|
+
require 'rexml/document'
|
6
|
+
|
7
|
+
module FactoryForm
|
8
|
+
# Form is simply an ordered array of fields. Each Field is simply a hash of field options.
|
9
|
+
class Form
|
10
|
+
attr_accessor :title, :fields
|
11
|
+
|
12
|
+
def initialize(options = {})
|
13
|
+
@title = options[:title] || ""
|
14
|
+
@fields = Array.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# Add field object
|
18
|
+
def add(field, position=@fields.length)
|
19
|
+
# Check for duplicate ID
|
20
|
+
unless get_ids.include?(field.id)
|
21
|
+
@fields.insert(position, field)
|
22
|
+
else
|
23
|
+
raise(DuplicateIDException, "Duplicate ID")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get field object by ID
|
29
|
+
# form.get(:id => "email_1")
|
30
|
+
# TODO:: Get element by other attributes as well
|
31
|
+
def get(option)
|
32
|
+
# @fields[@fields.index(option)]
|
33
|
+
@fields[get_ids.index(option[:id])]
|
34
|
+
end
|
35
|
+
|
36
|
+
# Remove field object
|
37
|
+
def remove(field)
|
38
|
+
@fields.delete(field)
|
39
|
+
end
|
40
|
+
|
41
|
+
def move_up(field, steps = 1)
|
42
|
+
@fields.move_object(field, @fields.index(field) - steps)
|
43
|
+
end
|
44
|
+
|
45
|
+
def move_down(field, steps = 1)
|
46
|
+
@fields.move_object(field, @fields.index(field) + steps)
|
47
|
+
end
|
48
|
+
|
49
|
+
def move_to_position(field, position)
|
50
|
+
@fields.move_object(field, position)
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_to_position(field, position)
|
54
|
+
@fields.insert(position, field)
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_yml
|
58
|
+
self.to_yaml
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_json
|
62
|
+
fields = Array.new
|
63
|
+
@fields.each do |f|
|
64
|
+
attributes = f.instance_variables.map{|a| a.gsub("@","")}
|
65
|
+
attributes_hash = {}
|
66
|
+
attributes.each do |a|
|
67
|
+
attributes_hash[a] = f.send(a)
|
68
|
+
end
|
69
|
+
fields << {f.class.name => attributes_hash }
|
70
|
+
end
|
71
|
+
fields
|
72
|
+
fields.to_json
|
73
|
+
end
|
74
|
+
|
75
|
+
def to_xml
|
76
|
+
doc = REXML::Document.new
|
77
|
+
root = doc.add_element("Form")
|
78
|
+
|
79
|
+
title_element = root.add_element("Title")
|
80
|
+
title_element.add_text("#{self.title}")
|
81
|
+
|
82
|
+
out_string = ''
|
83
|
+
@fields.each {|field|
|
84
|
+
field_element = root.add_element("Field")
|
85
|
+
field_type_element = field_element.add_element("#{field.class.name}")
|
86
|
+
|
87
|
+
field_type_element.add_attribute("id", field.id)
|
88
|
+
field_type_element.add_attribute("label", field.label)
|
89
|
+
|
90
|
+
attributes = field.instance_variables.map{|a| a.gsub("@","")}
|
91
|
+
attributes.each do |attrb|
|
92
|
+
attrb_element = field_type_element.add_element("#{attrb}")
|
93
|
+
|
94
|
+
# For option values of Multiple choice, separate them as option tags
|
95
|
+
if attrb == "values"
|
96
|
+
field.send(attrb).each do |option|
|
97
|
+
option_element = attrb_element.add_element("option")
|
98
|
+
option_element.add_text(option)
|
99
|
+
end
|
100
|
+
else
|
101
|
+
attrb_element.add_text(field.send(attrb).to_s)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
doc.write( out_string = "\n"+'<?xml version="1.0" encoding="UTF-8"?>'+"\n", 2 )
|
106
|
+
|
107
|
+
}
|
108
|
+
return out_string
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
# List of all IDs
|
114
|
+
def get_ids
|
115
|
+
@fields.map(& :id)
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
# Raised if the field with the same ID already exists
|
121
|
+
class DuplicateIDException < RuntimeError
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
|