apexgen 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +45 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +60 -0
- data/Rakefile +44 -0
- data/apexgen.gemspec +30 -0
- data/apexgen.rdoc +5 -0
- data/bin/apexgen +66 -0
- data/features/apexgen.feature +8 -0
- data/features/object.feature +142 -0
- data/features/step_definitions/apexgen_steps.rb +6 -0
- data/features/step_definitions/object_steps.rb +19 -0
- data/features/support/env.rb +21 -0
- data/lib/apexgen.rb +24 -0
- data/lib/apexgen/custom_object.rb +85 -0
- data/lib/apexgen/field/auto_number.rb +29 -0
- data/lib/apexgen/field/checkbox.rb +27 -0
- data/lib/apexgen/field/currency.rb +31 -0
- data/lib/apexgen/field/date.rb +27 -0
- data/lib/apexgen/field/date_time.rb +27 -0
- data/lib/apexgen/field/email.rb +31 -0
- data/lib/apexgen/field/encrypted_text.rb +33 -0
- data/lib/apexgen/field/geolocation.rb +31 -0
- data/lib/apexgen/field/long_text_area.rb +31 -0
- data/lib/apexgen/field/number.rb +33 -0
- data/lib/apexgen/field/percent.rb +31 -0
- data/lib/apexgen/field/phone.rb +28 -0
- data/lib/apexgen/field/rich_text_area.rb +31 -0
- data/lib/apexgen/field/text.rb +31 -0
- data/lib/apexgen/field/text_area.rb +28 -0
- data/lib/apexgen/field/url.rb +29 -0
- data/lib/apexgen/version.rb +3 -0
- data/results.html +472 -0
- data/test/default_test.rb +14 -0
- data/test/test_helper.rb +9 -0
- metadata +179 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
Given /^the file "([^"]*)" doesn't exist$/ do |file|
|
2
|
+
FileUtils.rm(file) if File.exists? file
|
3
|
+
end
|
4
|
+
|
5
|
+
Given /^the file "([^"]*)" doesn't exist in my current directory$/ do |filename|
|
6
|
+
step %(the file "#{ENV['PWD']}/#{filename}" doesn't exist)
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^a file named "([^"]*)" should exist in my current directory$/ do |filename|
|
10
|
+
step %(a file named "#{ENV['PWD']}/#{filename}" should exist)
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^the file "([^"]*)" in my current directory should contain "(.*?)"$/ do |filename, matcher|
|
14
|
+
step %(the file "#{ENV['PWD']}/#{filename}" should contain "#{matcher}")
|
15
|
+
end
|
16
|
+
|
17
|
+
# Then /^the file "([^"]*)" in my current directory should contain:$/ do |filename, partial_content|
|
18
|
+
# check_file_content("#{ENV['PWD']}/#{filename}", partial_content, true)
|
19
|
+
# end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
|
3
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
4
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
5
|
+
|
6
|
+
Before do
|
7
|
+
# Using "announce" causes massive warnings on 1.9.2
|
8
|
+
@puts = true
|
9
|
+
@original_rubylib = ENV['RUBYLIB']
|
10
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
11
|
+
@real_pwd = ENV['PWD']
|
12
|
+
fake_pwd = File.join('/tmp', 'fake_pwd')
|
13
|
+
FileUtils.rm_rf fake_pwd, secure: true
|
14
|
+
Dir.mkdir fake_pwd
|
15
|
+
ENV['PWD'] = fake_pwd
|
16
|
+
end
|
17
|
+
|
18
|
+
After do
|
19
|
+
ENV['RUBYLIB'] = @original_rubylib
|
20
|
+
ENV['PWD'] = @real_pwd
|
21
|
+
end
|
data/lib/apexgen.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'apexgen/version.rb'
|
2
|
+
|
3
|
+
# Add requires for other files you add to your project here, so
|
4
|
+
# you just need to require this one file in your bin file
|
5
|
+
|
6
|
+
# CustomObject Classes
|
7
|
+
require 'apexgen/custom_object.rb'
|
8
|
+
# CustomObject Field Formatters
|
9
|
+
require 'apexgen/field/auto_number.rb'
|
10
|
+
require 'apexgen/field/checkbox.rb'
|
11
|
+
require 'apexgen/field/currency.rb'
|
12
|
+
require 'apexgen/field/date.rb'
|
13
|
+
require 'apexgen/field/date_time.rb'
|
14
|
+
require 'apexgen/field/encrypted_text.rb'
|
15
|
+
require 'apexgen/field/email.rb'
|
16
|
+
require 'apexgen/field/geolocation.rb'
|
17
|
+
require 'apexgen/field/long_text_area.rb'
|
18
|
+
require 'apexgen/field/number.rb'
|
19
|
+
require 'apexgen/field/percent.rb'
|
20
|
+
require 'apexgen/field/phone.rb'
|
21
|
+
require 'apexgen/field/rich_text_area.rb'
|
22
|
+
require 'apexgen/field/text.rb'
|
23
|
+
require 'apexgen/field/text_area.rb'
|
24
|
+
require 'apexgen/field/url.rb'
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
class CustomObject
|
5
|
+
def initialize(name, fields=[])
|
6
|
+
# Set up vars
|
7
|
+
@name = name
|
8
|
+
@fields = fields
|
9
|
+
@name_plural = name.pluralize
|
10
|
+
@object_name = "#{@name}__c"
|
11
|
+
formats = {
|
12
|
+
'text' => Apexgen::Field::Text.new,
|
13
|
+
'encryptedtext' => Apexgen::Field::EncryptedText.new,
|
14
|
+
'textarea' => Apexgen::Field::TextArea.new,
|
15
|
+
'longtextarea' => Apexgen::Field::LongTextArea.new,
|
16
|
+
'richtextarea' => Apexgen::Field::RichTextArea.new,
|
17
|
+
'url' => Apexgen::Field::Url.new,
|
18
|
+
'autonumber' => Apexgen::Field::AutoNumber.new,
|
19
|
+
'checkbox' => Apexgen::Field::Checkbox.new,
|
20
|
+
'currency' => Apexgen::Field::Currency.new,
|
21
|
+
'datetime' => Apexgen::Field::DateTime.new,
|
22
|
+
'date' => Apexgen::Field::Date.new,
|
23
|
+
'email' => Apexgen::Field::Email.new,
|
24
|
+
'geolocation' => Apexgen::Field::Geolocation.new,
|
25
|
+
'number' => Apexgen::Field::Number.new,
|
26
|
+
'percent' => Apexgen::Field::Percent.new,
|
27
|
+
'phone' => Apexgen::Field::Phone.new,
|
28
|
+
}
|
29
|
+
|
30
|
+
# Filename and path setup
|
31
|
+
@file_name = "#{@object_name}.object"
|
32
|
+
@dir_name = File.join(ENV['PWD'], 'objects')
|
33
|
+
|
34
|
+
# Make the directory if it doesn't exist yet
|
35
|
+
Dir.mkdir @dir_name unless File.directory? @dir_name
|
36
|
+
|
37
|
+
# Make the file
|
38
|
+
File.open(File.join(@dir_name, @file_name), "w") do |f|
|
39
|
+
xml = String.new
|
40
|
+
xml << header
|
41
|
+
|
42
|
+
@fields.each do |field|
|
43
|
+
name, type = field.split(':')
|
44
|
+
type = 'text' if type == nil
|
45
|
+
formatter = formats[type.downcase]
|
46
|
+
xml << formatter.format(name)
|
47
|
+
end
|
48
|
+
|
49
|
+
xml << footer
|
50
|
+
f.write xml
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Private Classes
|
55
|
+
private
|
56
|
+
|
57
|
+
def header
|
58
|
+
"""
|
59
|
+
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
|
60
|
+
<CustomObject xmlns=\"http://soap.sforce.com/2006/04/metadata\">
|
61
|
+
<deploymentStatus>Deployed</deploymentStatus>
|
62
|
+
<description>A custom object named #{@name}</description>
|
63
|
+
<enableActivities>true</enableActivities>
|
64
|
+
<enableFeeds>false</enableFeeds>
|
65
|
+
<enableHistory>true</enableHistory>
|
66
|
+
<enableReports>true</enableReports>
|
67
|
+
"""
|
68
|
+
end
|
69
|
+
|
70
|
+
def footer
|
71
|
+
"""
|
72
|
+
<label>#{@name.titleize}</label>
|
73
|
+
<nameField>
|
74
|
+
<label>#{@name.titleize} Name</label>
|
75
|
+
<displayFormat>{0000}</displayFormat>
|
76
|
+
<type>AutoNumber</type>
|
77
|
+
</nameField>
|
78
|
+
<pluralLabel>#{@name_plural.titleize}</pluralLabel>
|
79
|
+
<searchLayouts/>
|
80
|
+
<sharingModel>ReadWrite</sharingModel>
|
81
|
+
</CustomObject>
|
82
|
+
"""
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class AutoNumber
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:displayFormat] = o[:displayFormat] || '{0000}'
|
13
|
+
o[:inlineHelpText] = o[:inlineHelpText] || "#{name_title} Help Text"
|
14
|
+
"""
|
15
|
+
<fields>
|
16
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
17
|
+
<description>#{name_title} Description</description>
|
18
|
+
<displayFormat>#{o[:displayFormat]}</displayFormat>
|
19
|
+
<externalId>#{o[:externalId]}</externalId>
|
20
|
+
<inlineHelpText>#{o[:inlineHelpText]}</inlineHelpText>
|
21
|
+
<label>#{name_title}</label>
|
22
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
23
|
+
<type>Url</type>
|
24
|
+
</fields>
|
25
|
+
"""
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Checkbox
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:defaultValue] = o[:defaultValue] || 'false'
|
13
|
+
"""
|
14
|
+
<fields>
|
15
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
16
|
+
<description>#{name_title} Description</description>
|
17
|
+
<externalId>#{o[:externalId]}</externalId>
|
18
|
+
<defaultValue>#{o[:defaultValue]}</defaultValue>
|
19
|
+
<label>#{name_title}</label>
|
20
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
21
|
+
<type>Checkbox</type>
|
22
|
+
</fields>
|
23
|
+
"""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Currency
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:required] = o[:required] || 'false'
|
13
|
+
o[:precision] = o[:precision] || '14'
|
14
|
+
o[:scale] = o[:scale] || '2'
|
15
|
+
"""
|
16
|
+
<fields>
|
17
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
18
|
+
<description>#{name_title} Description</description>
|
19
|
+
<externalId>#{o[:externalId]}</externalId>
|
20
|
+
<label>#{name_title}</label>
|
21
|
+
<required>#{o[:required]}}</required>
|
22
|
+
<precision>#{o[:precision]}</precision>
|
23
|
+
<scale>#{o[:scale]}</scale>
|
24
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
25
|
+
<type>Currency</type>
|
26
|
+
</fields>
|
27
|
+
"""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Date
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:required] = o[:required] || 'false'
|
13
|
+
"""
|
14
|
+
<fields>
|
15
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
16
|
+
<description>#{name_title} Description</description>
|
17
|
+
<externalId>#{o[:externalId]}</externalId>
|
18
|
+
<label>#{name_title}</label>
|
19
|
+
<required>#{o[:required]}}</required>
|
20
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
21
|
+
<type>Date</type>
|
22
|
+
</fields>
|
23
|
+
"""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class DateTime
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:required] = o[:required] || 'false'
|
13
|
+
"""
|
14
|
+
<fields>
|
15
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
16
|
+
<description>#{name_title} Description</description>
|
17
|
+
<externalId>#{o[:externalId]}</externalId>
|
18
|
+
<label>#{name_title}</label>
|
19
|
+
<required>#{o[:required]}}</required>
|
20
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
21
|
+
<type>DateTime</type>
|
22
|
+
</fields>
|
23
|
+
"""
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Email
|
6
|
+
def format(name, o={})
|
7
|
+
# Set up default opts
|
8
|
+
o[:externalId] = o[:externalId] || 'false'
|
9
|
+
o[:length] = o[:length] || '128'
|
10
|
+
o[:required] = o[:required] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:unique] = o[:unique] || 'false'
|
13
|
+
# Titleize the name so we don't need to repeat the method several times
|
14
|
+
name_title = name.titleize
|
15
|
+
"""
|
16
|
+
<fields>
|
17
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
18
|
+
<description>#{name_title} Description</description>
|
19
|
+
<externalId>#{o[:externalId]}</externalId>
|
20
|
+
<label>#{name_title}</label>
|
21
|
+
<length>#{o[:length]}</length>
|
22
|
+
<required>#{o[:required]}</required>
|
23
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
24
|
+
<type>Email</type>
|
25
|
+
<unique>#{o[:unique]}</unique>
|
26
|
+
</fields>
|
27
|
+
"""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class EncryptedText
|
6
|
+
def format(name, o={})
|
7
|
+
# Set up default opts
|
8
|
+
o[:externalId] = o[:externalId] || 'false'
|
9
|
+
o[:length] = o[:length] || '128'
|
10
|
+
o[:required] = o[:required] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:maskChar] = o[:maskChar] || 'asterisk'
|
13
|
+
o[:maskType] = o[:maskType] || 'all'
|
14
|
+
# Titleize the name so we don't need to repeat the method several times
|
15
|
+
name_title = name.titleize
|
16
|
+
"""
|
17
|
+
<fields>
|
18
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
19
|
+
<description>#{name_title} Description</description>
|
20
|
+
<externalId>#{o[:externalId]}</externalId>
|
21
|
+
<label>#{name_title}</label>
|
22
|
+
<length>#{o[:length]}</length>
|
23
|
+
<maskChar>#{o[:maskChar]}</maskChar>
|
24
|
+
<maskType>#{o[:maskType]}</maskType>
|
25
|
+
<required>#{o[:required]}</required>
|
26
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
27
|
+
<type>EncryptedText</type>
|
28
|
+
</fields>
|
29
|
+
"""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Geolocation
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:required] = o[:required] || 'false'
|
13
|
+
o[:displayLocationInDecimal] = o[:displayLocationInDecimal] || 'false'
|
14
|
+
o[:scale] = o[:scale] || '2'
|
15
|
+
"""
|
16
|
+
<fields>
|
17
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
18
|
+
<description>#{name_title} Description</description>
|
19
|
+
<displayLocationInDecimal>#{o[:displayLocationInDecimal]}</displayLocationInDecimal>
|
20
|
+
<externalId>#{o[:externalId]}</externalId>
|
21
|
+
<label>#{name_title}</label>
|
22
|
+
<required>#{o[:required]}</required>
|
23
|
+
<scale>#{o[:scale]}</scale>
|
24
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
25
|
+
<type>Location</type>
|
26
|
+
</fields>
|
27
|
+
"""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class LongTextArea
|
6
|
+
def format(name, o={})
|
7
|
+
# Set up default opts
|
8
|
+
o[:externalId] = o[:externalId] || 'false'
|
9
|
+
o[:length] = o[:length] || '32768'
|
10
|
+
o[:required] = o[:required] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:visibleLines] = o[:visibleLines] || '3'
|
13
|
+
# Titleize the name so we don't need to repeat the method several times
|
14
|
+
name_title = name.titleize
|
15
|
+
"""
|
16
|
+
<fields>
|
17
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
18
|
+
<description>#{name_title} Description</description>
|
19
|
+
<externalId>#{o[:externalId]}</externalId>
|
20
|
+
<label>#{name_title}</label>
|
21
|
+
<length>#{o[:length]}</length>
|
22
|
+
<required>#{o[:required]}</required>
|
23
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
24
|
+
<type>LongTextArea</type>
|
25
|
+
<visibleLines>#{o[:visibleLines]}</visibleLines>
|
26
|
+
</fields>
|
27
|
+
"""
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
3
|
+
module Apexgen
|
4
|
+
module Field
|
5
|
+
class Number
|
6
|
+
def format(name, o={})
|
7
|
+
# Titleize the name so we don't need to repeat the method several times
|
8
|
+
name_title = name.titleize
|
9
|
+
# Set up default opts
|
10
|
+
o[:externalId] = o[:externalId] || 'false'
|
11
|
+
o[:trackHistory] = o[:trackHistory] || 'false'
|
12
|
+
o[:required] = o[:required] || 'false'
|
13
|
+
o[:precision] = o[:precision] || '18'
|
14
|
+
o[:scale] = o[:scale] || '2'
|
15
|
+
o[:unique] = o[:unique] || 'false'
|
16
|
+
"""
|
17
|
+
<fields>
|
18
|
+
<fullName>#{name_title.gsub(/\s/, '_')}__c</fullName>
|
19
|
+
<description>#{name_title} Description</description>
|
20
|
+
<externalId>#{o[:externalId]}</externalId>
|
21
|
+
<label>#{name_title}</label>
|
22
|
+
<required>#{o[:required]}</required>
|
23
|
+
<precision>#{o[:precision]}</precision>
|
24
|
+
<scale>#{o[:scale]}</scale>
|
25
|
+
<trackHistory>#{o[:trackHistory]}</trackHistory>
|
26
|
+
<unique>#{o[:unique]}</unique>
|
27
|
+
<type>Number</type>
|
28
|
+
</fields>
|
29
|
+
"""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|