factoryform 0.1.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.
- 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
|
+
|