schematic 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -8
  3. data/.travis.yml +17 -0
  4. data/Gemfile +6 -1
  5. data/LICENSE +1 -1
  6. data/README.md +106 -0
  7. data/Rakefile +3 -8
  8. data/lib/schematic.rb +3 -42
  9. data/lib/schematic/exceptions.rb +13 -0
  10. data/lib/schematic/generator/column.rb +17 -11
  11. data/lib/schematic/generator/namespaces.rb +3 -3
  12. data/lib/schematic/generator/restrictions/base.rb +5 -5
  13. data/lib/schematic/generator/restrictions/custom.rb +3 -2
  14. data/lib/schematic/generator/restrictions/enumeration.rb +5 -2
  15. data/lib/schematic/generator/restrictions/length.rb +4 -2
  16. data/lib/schematic/generator/restrictions/numericality.rb +3 -1
  17. data/lib/schematic/generator/restrictions/pattern.rb +4 -3
  18. data/lib/schematic/generator/sandbox.rb +4 -1
  19. data/lib/schematic/generator/types.rb +14 -13
  20. data/lib/schematic/generator/uniqueness.rb +7 -8
  21. data/lib/schematic/generator/xsd.rb +32 -26
  22. data/lib/schematic/serializers/xsd.rb +6 -6
  23. data/lib/schematic/version.rb +1 -1
  24. data/schematic.gemspec +23 -24
  25. data/spec/schematic/generator/restrictions/custom_spec.rb +15 -18
  26. data/spec/schematic/generator/restrictions/enumeration_spec.rb +31 -31
  27. data/spec/schematic/generator/restrictions/length_spec.rb +35 -30
  28. data/spec/schematic/generator/restrictions/mixin_spec.rb +11 -15
  29. data/spec/schematic/generator/restrictions/numericality_spec.rb +11 -11
  30. data/spec/schematic/generator/restrictions/pattern_spec.rb +20 -21
  31. data/spec/schematic/generator/sandbox_spec.rb +17 -17
  32. data/spec/schematic/generator/uniqueness_spec.rb +38 -37
  33. data/spec/schematic/serializers/xsd_extend_spec.rb +11 -11
  34. data/spec/schematic/serializers/xsd_validation_presence_spec.rb +16 -11
  35. data/spec/schematic/serializers/xsd_xsd_ignore_methods_spec.rb +3 -3
  36. data/spec/schematic/serializers/xsd_xsd_methods_spec.rb +27 -24
  37. data/spec/schematic/serializers/xsd_xsd_minimum_occurrences_for_spec.rb +13 -8
  38. data/spec/schematic_serializers_xsd_spec.rb +70 -67
  39. data/spec/spec_helper.rb +8 -113
  40. data/spec/support/database.rb +9 -0
  41. data/spec/support/helpers.rb +111 -0
  42. data/spec/support/with_model.rb +5 -0
  43. data/spec/{xsd → support/xsd}/XMLSchema.xsd +0 -0
  44. data/spec/{xsd → support/xsd}/xml.xsd +0 -0
  45. metadata +54 -69
  46. data/.rspec +0 -1
  47. data/.rvmrc +0 -1
  48. data/README.rdoc +0 -103
  49. data/spec/support/extensions/active_model/validations/inclusion.rb +0 -69
@@ -1,3 +1,6 @@
1
+ require 'builder'
2
+ require 'schematic/generator/xsd'
3
+
1
4
  module Schematic
2
5
  module Generator
3
6
  class Sandbox
@@ -20,7 +23,7 @@ module Schematic
20
23
  end
21
24
 
22
25
  def to_xsd(options = {})
23
- output = ""
26
+ output = ''
24
27
  builder = Builder::XmlMarkup.new(:target => output, :indent => 2)
25
28
  xsd_generator.options = options
26
29
  xsd_generator.header(builder)
@@ -2,24 +2,25 @@ module Schematic
2
2
  module Generator
3
3
  class Types
4
4
  COMPLEX = {
5
- :integer => { :complex_type => "Integer", :xsd_type => "xs:integer" },
6
- :float => { :complex_type => "Float", :xsd_type => "xs:float" },
7
- :string => { :complex_type => "String", :xsd_type => "xs:string" },
8
- :text => { :complex_type => "Text", :xsd_type => "xs:string" },
9
- :datetime => { :complex_type => "DateTime", :xsd_type => "xs:dateTime" },
10
- :date => { :complex_type => "Date", :xsd_type => "xs:date" },
11
- :boolean => { :complex_type => "Boolean", :xsd_type => "xs:boolean" },
12
- }
5
+ :integer => { :complex_type => 'Integer', :xsd_type => 'xs:integer' }.freeze,
6
+ :float => { :complex_type => 'Float', :xsd_type => 'xs:float' }.freeze,
7
+ :string => { :complex_type => 'String', :xsd_type => 'xs:string' }.freeze,
8
+ :text => { :complex_type => 'Text', :xsd_type => 'xs:string' }.freeze,
9
+ :datetime => { :complex_type => 'DateTime', :xsd_type => 'xs:dateTime' }.freeze,
10
+ :date => { :complex_type => 'Date', :xsd_type => 'xs:date' }.freeze,
11
+ :boolean => { :complex_type => 'Boolean', :xsd_type => 'xs:boolean' }.freeze,
12
+ :uuid => { :complex_type => 'String', :xsd_type => 'xs:string' }.freeze,
13
+ }.freeze
13
14
 
14
15
  def self.xsd(builder)
15
- Types::COMPLEX.each do |key, value|
16
+ Types::COMPLEX.values.uniq.each do |value|
16
17
  complex_type_name = value[:complex_type]
17
18
  xsd_type = value[:xsd_type]
18
- builder.xs :complexType, "name" => complex_type_name do |complex_type|
19
+ builder.xs :complexType, 'name' => complex_type_name do |complex_type|
19
20
  complex_type.xs :simpleContent do |simple_content|
20
- simple_content.xs :extension, "base" => xsd_type do |extension|
21
- extension.xs :attribute, "name" => "type", "type" => "xs:string", "use" => "optional"
22
- extension.xs :attribute, "name" => "nil", "type" => "xs:boolean", "use" => "optional"
21
+ simple_content.xs :extension, 'base' => xsd_type do |extension|
22
+ extension.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'use' => 'optional'
23
+ extension.xs :attribute, 'name' => 'nil', 'type' => 'xs:boolean', 'use' => 'optional'
23
24
  end
24
25
  end
25
26
  end
@@ -1,18 +1,20 @@
1
+ require 'active_record/validations/uniqueness'
2
+ require 'schematic/generator/column_validator'
3
+
1
4
  module Schematic
2
5
  module Generator
3
6
  class Uniqueness < ColumnValidator
4
-
5
7
  def generate(builder)
6
8
  for_validator ActiveRecord::Validations::UniquenessValidator do |validator|
7
9
  unique_name = validator.attributes.first.to_s.dasherize
8
10
  additional_fields = (Array.wrap(validator.options[:scope]) || []).map(&:to_s).map(&:dasherize)
9
11
 
10
12
  names = Schematic::Generator::Names.new(@klass)
11
- builder.xs :unique, "name" => "#{unique_name}-must-be-unique" do |unique|
12
- unique.xs :selector, "xpath" => "./#{names.element}"
13
- unique.xs :field, "xpath" => unique_name
13
+ builder.xs :unique, 'name' => "#{unique_name}-must-be-unique" do |unique|
14
+ unique.xs :selector, 'xpath' => "./#{names.element}"
15
+ unique.xs :field, 'xpath' => unique_name
14
16
  additional_fields.each do |additional_field|
15
- unique.xs :field, "xpath" => additional_field
17
+ unique.xs :field, 'xpath' => additional_field
16
18
  end
17
19
  end
18
20
  end
@@ -20,6 +22,3 @@ module Schematic
20
22
  end
21
23
  end
22
24
  end
23
-
24
-
25
-
@@ -1,3 +1,9 @@
1
+ require 'schematic/generator/column'
2
+ require 'schematic/generator/names'
3
+ require 'schematic/generator/namespaces'
4
+ require 'schematic/generator/types'
5
+ require 'schematic/generator/uniqueness'
6
+
1
7
  module Schematic
2
8
  module Generator
3
9
  class Xsd
@@ -21,7 +27,7 @@ module Schematic
21
27
  end
22
28
 
23
29
  def schema(builder)
24
- builder.xs :schema, ns("xs", :w3, :schema) do |schema|
30
+ builder.xs :schema, ns('xs', :w3, :schema) do |schema|
25
31
  Types.xsd(schema)
26
32
  element_for_klass(schema)
27
33
  generate(schema, @klass)
@@ -29,7 +35,7 @@ module Schematic
29
35
  end
30
36
 
31
37
  def element_for_klass(builder)
32
- builder.xs :element, "name" => @names.element_collection, "type" => @names.collection_type do |element|
38
+ builder.xs :element, 'name' => @names.element_collection, 'type' => @names.collection_type do |element|
33
39
  generate_uniqueness_constraints(element)
34
40
  end
35
41
  end
@@ -65,16 +71,16 @@ module Schematic
65
71
  end
66
72
 
67
73
  def generate_complex_type_for_collection(builder)
68
- builder.xs :complexType, "name" => @names.collection_type do |complex_type|
74
+ builder.xs :complexType, 'name' => @names.collection_type do |complex_type|
69
75
  complex_type.xs :sequence do |sequence|
70
- sequence.xs :element, "name" => @names.element, "type" => @names.type, "minOccurs" => "0", "maxOccurs" => "unbounded"
76
+ sequence.xs :element, 'name' => @names.element, 'type' => @names.type, 'minOccurs' => '0', 'maxOccurs' => 'unbounded'
71
77
  end
72
- complex_type.xs :attribute, "name" => "type", "type" => "xs:string", "fixed" => "array"
78
+ complex_type.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'fixed' => 'array'
73
79
  end
74
80
  end
75
81
 
76
82
  def generate_complex_type_for_model(builder)
77
- builder.xs :complexType, "name" => @names.type do |complex_type|
83
+ builder.xs :complexType, 'name' => @names.type do |complex_type|
78
84
  additional_methods = @klass.schematic_sandbox.added_elements.merge(@options[:methods] || {})
79
85
  ignored_methods = @klass.schematic_sandbox.ignored_elements.dup
80
86
  exclude = @exclude
@@ -98,22 +104,22 @@ module Schematic
98
104
  case nested_attribute.macro
99
105
  when :has_many
100
106
  all.xs :element,
101
- "name" => nested_attribute_name(nested_attribute.name),
102
- "type" => nested_attribute.klass.schematic_sandbox.xsd_generator.names.collection_type,
103
- "minOccurs" => "0",
104
- "maxOccurs" => "1"
107
+ 'name' => nested_attribute_name(nested_attribute.name),
108
+ 'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.collection_type,
109
+ 'minOccurs' => '0',
110
+ 'maxOccurs' => '1'
105
111
  when :has_one
106
112
  all.xs :element,
107
- "name" => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
108
- "type" => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
109
- "minOccurs" => "0",
110
- "maxOccurs" => "1"
113
+ 'name' => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
114
+ 'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
115
+ 'minOccurs' => '0',
116
+ 'maxOccurs' => '1'
111
117
  when :belongs_to
112
118
  all.xs :element,
113
- "name" => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
114
- "type" => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
115
- "minOccurs" => "0",
116
- "maxOccurs" => "1"
119
+ 'name' => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
120
+ 'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
121
+ 'minOccurs' => '0',
122
+ 'maxOccurs' => '1'
117
123
  end
118
124
  end
119
125
 
@@ -140,10 +146,10 @@ module Schematic
140
146
  enumeration_method = "xsd_#{value}_enumeration_restrictions".to_sym
141
147
  builder.xs :complexType do |complex_type|
142
148
  complex_type.xs :simpleContent do |simple_content|
143
- simple_content.xs :restriction, "base" => "String" do |restriction|
149
+ simple_content.xs :restriction, 'base' => 'String' do |restriction|
144
150
  if @klass.respond_to? enumeration_method
145
151
  @klass.send(enumeration_method).each do |enumeration|
146
- restriction.xs :enumeration, "value" => enumeration
152
+ restriction.xs :enumeration, 'value' => enumeration
147
153
  end
148
154
  end
149
155
  end
@@ -155,18 +161,18 @@ module Schematic
155
161
  additional_methods.each do |method_name, values|
156
162
  method_xsd_name = method_name.to_s.dasherize
157
163
  if values.is_a?(Array) || values.is_a?(Hash)
158
- builder.xs :element, "name" => method_xsd_name, "minOccurs" => "0", "maxOccurs" => "1" do |element|
164
+ builder.xs :element, 'name' => method_xsd_name, 'minOccurs' => '0', 'maxOccurs' => '1' do |element|
159
165
  element.xs :complexType do |complex_type|
160
166
  if values.is_a?(Array)
161
167
  complex_type.xs :sequence do |nested_sequence|
162
168
  if values.present?
163
169
  values.each do |value|
164
- nested_sequence.xs :element, "name" => value.to_s.dasherize, "minOccurs" => "0", "maxOccurs" => "unbounded" do |sequence_element|
170
+ nested_sequence.xs :element, 'name' => value.to_s.dasherize, 'minOccurs' => '0', 'maxOccurs' => 'unbounded' do |sequence_element|
165
171
  generate_inclusion_value_restrictions(sequence_element, value)
166
172
  end
167
173
  end
168
174
  else
169
- nested_sequence.xs :any, "processContents" => "skip", "minOccurs" => "0", "maxOccurs" => "unbounded"
175
+ nested_sequence.xs :any, 'processContents' => 'skip', 'minOccurs' => '0', 'maxOccurs' => 'unbounded'
170
176
  end
171
177
  end
172
178
  elsif values.is_a?(Hash)
@@ -174,9 +180,9 @@ module Schematic
174
180
  generate_additional_methods(nested_all, values)
175
181
  end
176
182
  else
177
- raise "Additional methods must be a hash of hashes or hash of arrays"
183
+ raise 'Additional methods must be a hash of hashes or hash of arrays'
178
184
  end
179
- complex_type.xs :attribute, "name" => "type", "type" => "xs:string", "fixed" => "array", "use" => "optional"
185
+ complex_type.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'fixed' => 'array', 'use' => 'optional'
180
186
  end
181
187
  end
182
188
  else
@@ -203,7 +209,7 @@ module Schematic
203
209
  def nested_attribute_name(name, options={})
204
210
  pluralized = options.delete(:pluralized)
205
211
  pluralized = true if pluralized.nil?
206
- name = name.to_s.gsub("_", "-")
212
+ name = name.to_s.gsub('_', '-')
207
213
  name = name.pluralize if pluralized
208
214
  "#{name}-attributes"
209
215
  end
@@ -1,11 +1,12 @@
1
+ require 'schematic/generator/sandbox'
2
+ require 'schematic/exceptions'
3
+
1
4
  module Schematic
2
5
  module Serializers
3
6
  module Xsd
4
- class << self
5
- def extended(klass)
6
- raise ClassMissingXmlSerializer unless klass.ancestors.include?(ActiveModel::Serializers::Xml)
7
- raise ClassMissingAttributes unless klass.instance_methods.include?(:attributes)
8
- end
7
+ def self.extended(klass)
8
+ raise ClassMissingXmlSerializer unless klass.ancestors.include?(ActiveModel::Serializers::Xml)
9
+ raise ClassMissingAttributes unless klass.instance_methods.include?(:attributes)
9
10
  end
10
11
 
11
12
  def schematic(&block)
@@ -19,7 +20,6 @@ module Schematic
19
20
  def to_xsd(options = {})
20
21
  schematic_sandbox.to_xsd(options)
21
22
  end
22
-
23
23
  end
24
24
  end
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.6.2"
2
+ VERSION = '0.7.0'.freeze
3
3
  end
data/schematic.gemspec CHANGED
@@ -1,29 +1,28 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "schematic/version"
1
+ # encoding: utf-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'schematic/version'
4
4
 
5
- Gem::Specification.new do |s|
6
- s.name = "schematic"
7
- s.version = Schematic::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Case Commons, LLC"]
10
- s.email = ["casecommons-dev@googlegroups.com"]
11
- s.homepage = "https://github.com/Casecommons/schematic"
12
- s.summary = %q{Automatic XSD generation from ActiveRecord models}
13
- s.description = %q{Automatic XSD generation from ActiveRecord models}
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'schematic'
7
+ spec.version = Schematic::VERSION
8
+ spec.authors = ['Case Commons, LLC']
9
+ spec.email = ['casecommons-dev@googlegroups.com', 'andrew@johnandrewmarshall.com']
10
+ spec.homepage = 'https://github.com/Casecommons/schematic'
11
+ spec.summary = %q{Automatic XSD generation from ActiveRecord models}
12
+ spec.description = spec.summary
13
+ spec.license = 'MIT'
14
14
 
15
- s.rubyforge_project = "schematic"
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
16
19
 
17
- s.add_dependency('activerecord', '>= 3.0.0')
18
- s.add_dependency('builder')
19
- s.add_development_dependency('rspec-rails', '= 2.7')
20
- s.add_development_dependency('with_model', '>= 0.2.4')
21
- s.add_development_dependency('nokogiri')
22
- s.add_development_dependency('sqlite3')
23
- s.add_development_dependency('autotest')
20
+ spec.add_dependency 'activerecord', '~> 4.0'
21
+ spec.add_dependency 'builder'
24
22
 
25
- s.files = `git ls-files`.split("\n")
26
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
- s.require_paths = ["lib"]
23
+ spec.add_development_dependency 'nokogiri'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec', '~> 2.14'
26
+ spec.add_development_dependency 'sqlite3'
27
+ spec.add_development_dependency 'with_model', '~> 1.0'
29
28
  end
@@ -1,12 +1,12 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
- describe Schematic::Generator::Restrictions::Enumeration do
3
+ describe "Schematic::Generator::Restrictions::Custom" do
4
4
  describe ".to_xsd" do
5
5
  context "with a model with custom validations" do
6
6
  before do
7
7
  class CrazyTownValidator < ActiveModel::EachValidator
8
8
  def validate_each(record, attribute, value)
9
- record.errors.add(attribute, "must be crazy") unless value.match /.*crazy.*|\w/
9
+ record.errors.add(attribute, 'must be crazy') unless value.match /.*crazy.*|\w/
10
10
  end
11
11
 
12
12
  def xsd_pattern_restrictions
@@ -18,30 +18,31 @@ describe Schematic::Generator::Restrictions::Enumeration do
18
18
  subject { sanitize_xml(CustomModel.to_xsd) }
19
19
  with_model :custom_model do
20
20
  table :id => false do |t|
21
- t.string "title"
21
+ t.string 'title'
22
22
  end
23
23
 
24
24
  model do
25
+ self.primary_key = :title
25
26
  validates :title, :crazy_town => true
26
27
  end
27
28
  end
28
29
 
29
30
  it "should validate against it's own XSD" do
30
- invalid_instance = CustomModel.new(:title => "happy today")
31
+ invalid_instance = CustomModel.new(:title => 'happy today')
31
32
  xml = [invalid_instance].to_xml
32
- lambda {
33
+ expect {
33
34
  validate_xml_against_xsd(xml, subject)
34
- }.should raise_error
35
- invalid_instance = CustomModel.new(:title => "happytoday")
35
+ }.to raise_error
36
+ invalid_instance = CustomModel.new(:title => 'happytoday')
36
37
  xml = [invalid_instance].to_xml
37
- lambda {
38
+ expect {
38
39
  validate_xml_against_xsd(xml, subject)
39
- }.should raise_error
40
- valid_instance = CustomModel.new(:title => "iamcrazytoday")
40
+ }.to raise_error
41
+ valid_instance = CustomModel.new(:title => 'iamcrazytoday')
41
42
  xml = [valid_instance].to_xml
42
- lambda {
43
+ expect {
43
44
  validate_xml_against_xsd(xml, subject)
44
- }.should_not raise_error
45
+ }.not_to raise_error
45
46
  end
46
47
 
47
48
  it "should mark that the field with the allowed values" do
@@ -60,12 +61,8 @@ describe Schematic::Generator::Restrictions::Enumeration do
60
61
  XML
61
62
  end
62
63
 
63
- subject.should == xsd
64
+ expect(subject).to eq(xsd)
64
65
  end
65
66
  end
66
67
  end
67
68
  end
68
-
69
-
70
-
71
-
@@ -1,32 +1,32 @@
1
- require "spec_helper"
2
- require "support/extensions/active_model/validations/inclusion"
1
+ require 'spec_helper'
3
2
 
4
- describe Schematic::Generator::Restrictions::Enumeration do
3
+ describe "Schematic::Generator::Restrictions::Enumeration" do
5
4
  describe ".to_xsd" do
6
5
  context "with a model with inclusion validations" do
7
6
  subject { sanitize_xml(EnumerationModel.to_xsd) }
8
7
  with_model :enumeration_model do
9
8
  table :id => false do |t|
10
- t.string "title"
11
- t.string "should_be_skipped"
12
- t.string "should_also_be_skipped"
13
- t.string "and_also_be_skipped"
14
- t.boolean "active"
15
- t.string "options"
16
- t.string "more_options"
17
- t.integer "force_enumeration"
18
- t.integer "skip_enumeration"
19
- t.integer "skip_inclusion_set_lambda"
9
+ t.string 'title'
10
+ t.string 'should_be_skipped'
11
+ t.string 'should_also_be_skipped'
12
+ t.string 'and_also_be_skipped'
13
+ t.boolean 'active'
14
+ t.string 'options'
15
+ t.string 'more_options'
16
+ t.integer 'force_enumeration'
17
+ t.integer 'skip_enumeration'
18
+ t.integer 'skip_inclusion_set_lambda'
20
19
  end
21
20
 
22
21
  model do
23
- validates :title, :inclusion => { :in => ["a", "b", "c"] }
24
- validates :should_be_skipped, :inclusion => ["a", "b", "c"], :if => lambda { false }
25
- validates :should_also_be_skipped, :inclusion => ["a", "b", "c"], :unless => lambda { false }
26
- validates :and_also_be_skipped, :inclusion => ["a", "b", "c"], :if => lambda { true}, :unless => lambda { false }
22
+ self.primary_key = :title
23
+ validates :title, :inclusion => { :in => ['a', 'b', 'c'] }
24
+ validates :should_be_skipped, :inclusion => ['a', 'b', 'c'], :if => lambda { false }
25
+ validates :should_also_be_skipped, :inclusion => ['a', 'b', 'c'], :unless => lambda { false }
26
+ validates :and_also_be_skipped, :inclusion => ['a', 'b', 'c'], :if => lambda { true}, :unless => lambda { false }
27
27
  validates :active, :inclusion => { :in => [true, false] }
28
- validates :options, :inclusion => { :in => lambda { |f| ["some valid attribute"] } }
29
- validates :more_options, :inclusion => { :in => lambda { |f| f.title == "something" ? ["test"] : ["something else"] } }
28
+ validates :options, :inclusion => { :in => lambda { |f| ['some valid attribute'] } }
29
+ validates :more_options, :inclusion => { :in => lambda { |f| f.title == 'something' ? ['test'] : ['something else'] } }
30
30
  validates :force_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => true} }, :if => lambda { false }
31
31
  validates :skip_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => false} }, :if => lambda { true }
32
32
  validates :skip_inclusion_set_lambda, :inclusion => { :in => lambda { |x| [1, 2] } }, :if => :some_method
@@ -38,25 +38,25 @@ describe Schematic::Generator::Restrictions::Enumeration do
38
38
  end
39
39
 
40
40
  it "should validate against it's own XSD" do
41
- invalid_instance = EnumerationModel.new(:title => "d")
41
+ invalid_instance = EnumerationModel.new(:title => 'd')
42
42
  xml = [invalid_instance].to_xml
43
- lambda {
43
+ expect {
44
44
  validate_xml_against_xsd(xml, subject)
45
- }.should raise_error
46
- valid_instance = EnumerationModel.new(:title => "a",
47
- :should_be_skipped => "a",
48
- :should_also_be_skipped => "a",
49
- :and_also_be_skipped => "a",
45
+ }.to raise_error
46
+ valid_instance = EnumerationModel.new(:title => 'a',
47
+ :should_be_skipped => 'a',
48
+ :should_also_be_skipped => 'a',
49
+ :and_also_be_skipped => 'a',
50
50
  :active => true,
51
- :options => "some valid attribute",
52
- :more_options => "something else",
51
+ :options => 'some valid attribute',
52
+ :more_options => 'something else',
53
53
  :force_enumeration => 2,
54
54
  :skip_enumeration => 2,
55
55
  :skip_inclusion_set_lambda => 2)
56
56
  xml = [valid_instance].to_xml
57
- lambda {
57
+ expect {
58
58
  validate_xml_against_xsd(xml, subject)
59
- }.should_not raise_error
59
+ }.not_to raise_error
60
60
  end
61
61
 
62
62
  it "should mark that the field with the allowed values" do
@@ -151,7 +151,7 @@ describe Schematic::Generator::Restrictions::Enumeration do
151
151
  XML
152
152
  end
153
153
 
154
- subject.should == xsd
154
+ expect(subject).to eq(xsd)
155
155
  end
156
156
  end
157
157
  end