spectifly 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -1
- data/.travis.yml +2 -0
- data/lib/spectifly/configuration.rb +13 -8
- data/lib/spectifly/tasks.rb +13 -8
- data/lib/spectifly/version.rb +1 -1
- data/lib/tasks/spectifly.rake +3 -4
- data/spec/spectifly/base/builder_spec.rb +3 -6
- data/spec/spectifly/base/entity_node_spec.rb +9 -11
- data/spec/spectifly/base/field_spec.rb +18 -20
- data/spec/spectifly/configuration_spec.rb +13 -10
- data/spec/spectifly/entity_spec.rb +26 -28
- data/spec/spectifly/json/builder_spec.rb +6 -7
- data/spec/spectifly/json/field_spec.rb +2 -4
- data/spec/spectifly/support_spec.rb +12 -14
- data/spec/spectifly/xsd/builder_spec.rb +7 -8
- data/spec/spectifly/xsd/field_spec.rb +2 -4
- data/spec/spectifly/xsd/types_spec.rb +2 -4
- data/spectifly.gemspec +0 -1
- metadata +7 -41
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjRjMmEzZWVjMjgwZmI5ZGYxNzZhZWZjMzljOGViZWIxMDY0ZmE0Yg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NWI0OTcxMGVkZjM4N2UxMzE1MTdjMDc3NzhlZWY2ZGI1MDAwNmYwMA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGQ4MWFjZTUwNzkxYzlmYjhhZGE1N2Q5ZGZjNTI2MjEwMzdjZDBjYjE0N2I0
|
10
|
+
NDhiMThjYjZmOThhYzg0Mzc1MGRmMzAwZmJmMWVlZWQxNTg2MTEyYTUzY2M1
|
11
|
+
ZWI4ZjQ5ZDM3OWFhNmJmNjk4ZjY2YTEzNGQ2ZmFiMGZmN2Y3NmI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NWY5OGI1OWUzOWJmODZlZTUzYzQ3MTYxOWU4NjkzNWUxNGE0Y2JlZTA4MmMy
|
14
|
+
OGM1NmViNGE4OTA5MzA4OGQwZTA4Y2ViMmYxNzYxMWI1MTJkMDRjZTRmY2U5
|
15
|
+
YmI4OWQ0YzU0MTQ2MGJhYzczMDY2YzE4M2VhNGU0YjBkYzE2ODI=
|
data/.rspec
ADDED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.9.3-
|
1
|
+
1.9.3-p484
|
data/.travis.yml
ADDED
@@ -1,17 +1,22 @@
|
|
1
1
|
module Spectifly
|
2
2
|
class Configuration
|
3
|
-
|
3
|
+
class InvalidPresenterPath < StandardError; end
|
4
|
+
attr_accessor :entity_path, :presenter_path
|
5
|
+
|
4
6
|
def initialize(config = {})
|
5
7
|
@entity_path = config.fetch('entity_path')
|
6
|
-
|
8
|
+
set_presenter_path(config['presenter_path'])
|
7
9
|
end
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
private
|
12
|
+
|
13
|
+
def set_presenter_path(path = nil)
|
14
|
+
path = 'presenters' if path.nil?
|
15
|
+
proposed_path = File.join(@entity_path, path)
|
16
|
+
if Dir.exists?(proposed_path)
|
17
|
+
@presenter_path = proposed_path
|
18
|
+
else
|
19
|
+
raise InvalidPresenterPath, "#{proposed_path} does not exist"
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
data/lib/spectifly/tasks.rb
CHANGED
@@ -7,21 +7,26 @@ module Spectifly
|
|
7
7
|
class Task < ::Rake::TaskLib
|
8
8
|
attr_accessor :configuration
|
9
9
|
|
10
|
-
def configure!
|
11
|
-
config_path = File.join(Rake.original_dir, 'config', 'spectifly.yml')
|
12
|
-
config_hash = File.exist?(config_path) ? YAML.load_file(config_path) : {}
|
13
|
-
@configuration = Spectifly::Configuration.new(config_hash)
|
14
|
-
end
|
15
|
-
|
16
10
|
def initialize(task_name, *args, &block)
|
17
|
-
configure!
|
18
11
|
task task_name, *args do |task_name, task_args|
|
12
|
+
configure!(task_args)
|
19
13
|
block.call(configuration, task_args) if block
|
20
14
|
end
|
21
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def configure!(options = {})
|
20
|
+
config_path = File.join(Rake.original_dir, 'config', 'spectifly.yml')
|
21
|
+
config_hash = File.exist?(config_path) ? YAML.load_file(config_path) : {}
|
22
|
+
|
23
|
+
# Stringify the options hash and merge it in to the config_hash
|
24
|
+
config_hash.merge!(Hash[options.map{ |k, v| [k.to_s, v] }])
|
25
|
+
@configuration = Spectifly::Configuration.new(config_hash)
|
26
|
+
end
|
22
27
|
end
|
23
28
|
end
|
24
29
|
|
25
30
|
Dir[File.join(File.dirname(__FILE__), '..', 'tasks', '*.rake')].each do |path|
|
26
31
|
load path
|
27
|
-
end
|
32
|
+
end
|
data/lib/spectifly/version.rb
CHANGED
data/lib/tasks/spectifly.rake
CHANGED
@@ -8,9 +8,8 @@ namespace :spectifly do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
Spectifly::Task.new('generate_from_entities', [:destination_path]) do |spectifly, args|
|
11
|
+
Spectifly::Task.new('generate_from_entities', [:destination_path, :presenter_path]) do |spectifly, args|
|
12
12
|
options = File.exist?(spectifly.presenter_path) ? { :presenter_path => spectifly.presenter_path } : {}
|
13
|
-
|
14
13
|
Spectifly::Entity.from_directory(spectifly.entity_path, options).each do |name, entity|
|
15
14
|
if entity.is_a? Spectifly::Entity
|
16
15
|
write_entity(entity, args[:destination_path])
|
@@ -24,7 +23,7 @@ namespace :spectifly do
|
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
|
-
Spectifly::Task.new('generate_extended_types', [:destination_path]) do |spectifly, args|
|
26
|
+
Spectifly::Task.new('generate_extended_types', [:destination_path, :presenter_path]) do |spectifly, args|
|
28
27
|
extended = File.join(args[:destination_path], 'extended.xsd')
|
29
28
|
File.open(extended, 'w') do |f|
|
30
29
|
f.write Spectifly::Xsd::Types.build_extended
|
@@ -36,6 +35,6 @@ namespace :spectifly do
|
|
36
35
|
end
|
37
36
|
|
38
37
|
desc 'Generate all XSDs for the configured entity directory, including extended type definitions'
|
39
|
-
task :generate_all, [:destination_path] => [:generate_from_entities, :generate_extended_types]
|
38
|
+
task :generate_all, [:destination_path, :presenter_path] => [:generate_from_entities, :generate_extended_types]
|
40
39
|
end
|
41
40
|
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
require 'spec_helper'
|
2
1
|
require 'json'
|
3
2
|
|
4
3
|
describe Spectifly::Base::Builder do
|
5
4
|
describe '.from_path' do
|
6
5
|
it 'generates builder from entity at given path' do
|
7
6
|
path_builder = described_class.from_path(fixture_path('individual'))
|
8
|
-
path_builder.root.
|
7
|
+
expect(path_builder.root).to eq('Individual')
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
@@ -21,9 +20,7 @@ describe Spectifly::Base::Builder do
|
|
21
20
|
describe '#custom_types' do
|
22
21
|
it 'return an array of all non-built-in types in result' do
|
23
22
|
entity = Spectifly::Entity.parse(fixture_path('group'))
|
24
|
-
described_class.new(entity).custom_types.
|
25
|
-
'individual'
|
26
|
-
]
|
23
|
+
expect(described_class.new(entity).custom_types).to match_array(['individual'])
|
27
24
|
end
|
28
25
|
end
|
29
|
-
end
|
26
|
+
end
|
@@ -1,29 +1,27 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Base::EntityNode do
|
4
2
|
describe 'uniqueness restriction' do
|
5
3
|
it 'unique should be false by default and there should be no unique restriction' do
|
6
4
|
field = described_class.new("Mini me")
|
7
|
-
field.
|
8
|
-
field.restrictions.keys.
|
5
|
+
expect(field).to_not be_unique
|
6
|
+
expect(field.restrictions.keys.include?('unique')).to be_falsey
|
9
7
|
end
|
10
8
|
|
11
9
|
it 'adds a restriction and returns true for unique? if there is a uniqueness validation' do
|
12
10
|
field = described_class.new("Little Snowflake", {"Validations" => "must be unique"})
|
13
|
-
field.
|
14
|
-
field.restrictions.keys.include?('unique').
|
11
|
+
expect(field).to be_unique
|
12
|
+
expect(field.restrictions.keys.include?('unique')).to be_truthy
|
15
13
|
end
|
16
14
|
|
17
15
|
it 'adds a restriction and returns true for unique? if there is an attribute Unique set to true' do
|
18
16
|
field = described_class.new("Little Snowflake", {"Unique" => "true"})
|
19
|
-
field.
|
20
|
-
field.restrictions.keys.include?('unique').
|
17
|
+
expect(field).to be_unique
|
18
|
+
expect(field.restrictions.keys.include?('unique')).to be_truthy
|
21
19
|
end
|
22
20
|
|
23
21
|
it 'throws an error if the two ways of setting uniqueness contradict each other' do
|
24
|
-
|
22
|
+
expect{
|
25
23
|
field = described_class.new("Little Snowflake?", {"Validations" => "must be unique", "Unique" => false})
|
26
|
-
}.
|
24
|
+
}.to raise_error
|
27
25
|
end
|
28
26
|
end
|
29
|
-
end
|
27
|
+
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Base::Field do
|
4
2
|
describe '#name' do
|
5
3
|
it 'returns tokenized version of field name' do
|
6
4
|
field = described_class.new('A really cool hat')
|
7
|
-
field.name.
|
5
|
+
expect(field.name).to eq('a_really_cool_hat')
|
8
6
|
end
|
9
7
|
end
|
10
8
|
|
@@ -19,17 +17,17 @@ describe Spectifly::Base::Field do
|
|
19
17
|
describe '#type' do
|
20
18
|
it 'defaults to string if no type specified' do
|
21
19
|
field = described_class.new('A really cool hat')
|
22
|
-
field.type.
|
20
|
+
expect(field.type).to eq('string')
|
23
21
|
end
|
24
22
|
|
25
23
|
it 'returns boolean if field name has "?" token' do
|
26
24
|
field = described_class.new('A really cool hat?')
|
27
|
-
field.type.
|
25
|
+
expect(field.type).to eq('boolean')
|
28
26
|
end
|
29
27
|
|
30
28
|
it 'returns type if specified' do
|
31
29
|
field = described_class.new('some field', 'Type' => 'Rhubarb')
|
32
|
-
field.type.
|
30
|
+
expect(field.type).to eq('rhubarb')
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
@@ -38,63 +36,63 @@ describe Spectifly::Base::Field do
|
|
38
36
|
field = described_class.new('some field', {
|
39
37
|
'Minimum Value' => 3, 'Maximum Value' => 145
|
40
38
|
})
|
41
|
-
field.restrictions.
|
39
|
+
expect(field.restrictions).to eq({
|
42
40
|
'minimum_value' => 3,
|
43
41
|
'maximum_value' => 145
|
44
|
-
}
|
42
|
+
})
|
45
43
|
end
|
46
44
|
|
47
45
|
it 'sets up enumerations' do
|
48
46
|
field = described_class.new('some field', {
|
49
47
|
'Valid Values' => [34, 52, 100, 4]
|
50
48
|
})
|
51
|
-
field.restrictions.
|
49
|
+
expect(field.restrictions).to eq({
|
52
50
|
'valid_values' => [34, 52, 100, 4]
|
53
|
-
}
|
51
|
+
})
|
54
52
|
end
|
55
53
|
|
56
54
|
it 'pulls regex restriction from validations' do
|
57
55
|
field = described_class.new('some field', {
|
58
56
|
'Validations' => 'Must match regex "^[0-9]{4}"'
|
59
57
|
})
|
60
|
-
field.validations.
|
61
|
-
field.restrictions.
|
58
|
+
expect(field.validations).to be_empty
|
59
|
+
expect(field.restrictions).to eq({
|
62
60
|
'regex' => /^[0-9]{4}/
|
63
|
-
}
|
61
|
+
})
|
64
62
|
end
|
65
63
|
|
66
64
|
it 'sets restrictions to empty hash if none exist' do
|
67
65
|
field = described_class.new('some field')
|
68
|
-
field.restrictions.
|
66
|
+
expect(field.restrictions).to be_empty
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
72
70
|
describe '#multiple?' do
|
73
71
|
it 'returns true if multiple set to true' do
|
74
72
|
field = described_class.new('some field', 'Multiple' => true)
|
75
|
-
field.
|
73
|
+
expect(field).to be_multiple
|
76
74
|
end
|
77
75
|
|
78
76
|
it 'returns false if multiple set to anything but true' do
|
79
77
|
field = described_class.new('some field', 'Multiple' => 'Whatever')
|
80
|
-
field.
|
78
|
+
expect(field).not_to be_multiple
|
81
79
|
end
|
82
80
|
|
83
81
|
it 'returns false if multiple not set' do
|
84
82
|
field = described_class.new('some field')
|
85
|
-
field.
|
83
|
+
expect(field).not_to be_multiple
|
86
84
|
end
|
87
85
|
end
|
88
86
|
|
89
87
|
describe '#required?' do
|
90
88
|
it 'returns true if field name has "*" token' do
|
91
89
|
field = described_class.new('some field*')
|
92
|
-
field.
|
90
|
+
expect(field).to be_required
|
93
91
|
end
|
94
92
|
|
95
93
|
it 'returns false if field name does not have "*" token' do
|
96
94
|
field = described_class.new('some field')
|
97
|
-
field.
|
95
|
+
expect(field).not_to be_required
|
98
96
|
end
|
99
97
|
end
|
100
|
-
end
|
98
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Configuration do
|
4
2
|
let(:configuration_args) {
|
5
3
|
{
|
@@ -18,25 +16,30 @@ describe Spectifly::Configuration do
|
|
18
16
|
end
|
19
17
|
|
20
18
|
describe '#presenter_path' do
|
21
|
-
it '
|
22
|
-
|
19
|
+
it 'raises an exception if configured value is set but does not exist' do
|
20
|
+
expect{described_class.new(
|
23
21
|
configuration_args.merge('presenter_path' => 'goose')
|
24
|
-
)
|
25
|
-
configuration.presenter_path.should == 'goose'
|
22
|
+
)}.to raise_error(Spectifly::Configuration::InvalidPresenterPath)
|
26
23
|
end
|
27
24
|
|
28
|
-
it '
|
29
|
-
|
25
|
+
it 'raises an exception if no default presenter path exists' do
|
26
|
+
expect{described_class.new(
|
30
27
|
configuration_args.merge('entity_path' => spec_path)
|
28
|
+
)}.to raise_error(Spectifly::Configuration::InvalidPresenterPath)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns presenter path when passed in' do
|
32
|
+
configuration = described_class.new(
|
33
|
+
configuration_args.merge('presenter_path' => 'presenters/masterless_group')
|
31
34
|
)
|
32
|
-
configuration.presenter_path.
|
35
|
+
expect(configuration.presenter_path).to eq(base_presenter_path + "/masterless_group")
|
33
36
|
end
|
34
37
|
|
35
38
|
it 'returns {entity_path}/presenters if exists' do
|
36
39
|
configuration = described_class.new(
|
37
40
|
configuration_args
|
38
41
|
)
|
39
|
-
configuration.presenter_path.
|
42
|
+
expect(configuration.presenter_path).to eq(base_presenter_path)
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Entity do
|
4
2
|
before :each do
|
5
3
|
@entity = Spectifly::Entity.parse(fixture_path('individual'))
|
@@ -8,9 +6,9 @@ describe Spectifly::Entity do
|
|
8
6
|
describe '.from_directory' do
|
9
7
|
it 'returns entities generated from files at given path' do
|
10
8
|
entities = Spectifly::Entity.from_directory(fixture_path)
|
11
|
-
entities.keys.
|
12
|
-
entities.values.map(&:class).uniq.
|
13
|
-
entities.values.map(&:name).
|
9
|
+
expect(entities.keys).to match_array(['individual', 'group'])
|
10
|
+
expect(entities.values.map(&:class).uniq).to eq([Spectifly::Entity])
|
11
|
+
expect(entities.values.map(&:name)).to match_array(['individual', 'group'])
|
14
12
|
end
|
15
13
|
|
16
14
|
it 'includes presenters if option passed' do
|
@@ -18,20 +16,20 @@ describe Spectifly::Entity do
|
|
18
16
|
fixture_path, :presenter_path => base_presenter_path
|
19
17
|
)
|
20
18
|
|
21
|
-
entities.keys.
|
22
|
-
entities['positionless_individual'].keys.
|
23
|
-
entities['positionless_individual'].values.map(&:name).
|
24
|
-
entities['masterless_group'].keys.
|
25
|
-
entities['masterless_group'].values.map(&:name).
|
19
|
+
expect(entities.keys).to match_array(['individual', 'group', 'positionless_individual', 'masterless_group'])
|
20
|
+
expect(entities['positionless_individual'].keys).to eq(['individual'])
|
21
|
+
expect(entities['positionless_individual'].values.map(&:name)).to eq(['individual'])
|
22
|
+
expect(entities['masterless_group'].keys).to eq(['group'])
|
23
|
+
expect(entities['masterless_group'].values.map(&:name)).to eq(['group'])
|
26
24
|
['positionless_individual', 'masterless_group'].each do |presenter|
|
27
|
-
entities[presenter].values.map(&:class).uniq.
|
25
|
+
expect(entities[presenter].values.map(&:class).uniq).to eq([Spectifly::Entity])
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
|
32
30
|
describe '.parse' do
|
33
31
|
it 'delegates to initializer' do
|
34
|
-
Spectifly::Entity.
|
32
|
+
expect(Spectifly::Entity).to receive(:new).with(:arguments)
|
35
33
|
Spectifly::Entity.parse(:arguments)
|
36
34
|
end
|
37
35
|
end
|
@@ -58,7 +56,7 @@ describe Spectifly::Entity do
|
|
58
56
|
|
59
57
|
describe '#root' do
|
60
58
|
it 'returns root element of parsed yaml' do
|
61
|
-
@entity.root.
|
59
|
+
expect(@entity.root).to eq('Individual')
|
62
60
|
end
|
63
61
|
end
|
64
62
|
|
@@ -70,39 +68,39 @@ describe Spectifly::Entity do
|
|
70
68
|
end
|
71
69
|
|
72
70
|
it 'returns name from entity file' do
|
73
|
-
@entity.name.
|
74
|
-
@presenter_entity.name.
|
71
|
+
expect(@entity.name).to eq('individual')
|
72
|
+
expect(@presenter_entity.name).to eq('individual')
|
75
73
|
end
|
76
74
|
|
77
75
|
it 'returns presenter name when presented' do
|
78
|
-
@entity.present_as(@presenter_entity).name.
|
76
|
+
expect(@entity.present_as(@presenter_entity).name).to eq('individual')
|
79
77
|
end
|
80
78
|
end
|
81
79
|
|
82
80
|
describe '#presented_as' do
|
83
81
|
it 'returns nil if not presented' do
|
84
|
-
@entity.presented_as.
|
82
|
+
expect(@entity.presented_as).to be_nil
|
85
83
|
end
|
86
84
|
|
87
85
|
it 'returns presenter if presented' do
|
88
86
|
@presenter_entity = Spectifly::Entity.parse(
|
89
87
|
fixture_path('presenters/positionless_individual/individual.entity')
|
90
88
|
)
|
91
|
-
@entity.present_as(@presenter_entity).presented_as.
|
89
|
+
expect(@entity.present_as(@presenter_entity).presented_as).to eq(@presenter_entity)
|
92
90
|
end
|
93
91
|
end
|
94
92
|
|
95
93
|
describe '#metadata' do
|
96
94
|
it 'returns metadata from parsed yaml' do
|
97
|
-
@entity.metadata.
|
95
|
+
expect(@entity.metadata).to eq({
|
98
96
|
"Description" => "An Individual"
|
99
|
-
}
|
97
|
+
})
|
100
98
|
end
|
101
99
|
end
|
102
100
|
|
103
101
|
describe '#fields' do
|
104
102
|
it 'returns fields from parsed yaml' do
|
105
|
-
@entity.fields.
|
103
|
+
expect(@entity.fields).to eq({
|
106
104
|
"Name*" => {
|
107
105
|
"Description" => "The individual's name",
|
108
106
|
"Example" => "Randy McTougherson",
|
@@ -129,7 +127,7 @@ describe Spectifly::Entity do
|
|
129
127
|
"Pickled?*" => {
|
130
128
|
"Description" => "Whether or not this individual is pickled"
|
131
129
|
}
|
132
|
-
}
|
130
|
+
})
|
133
131
|
end
|
134
132
|
end
|
135
133
|
|
@@ -147,7 +145,7 @@ describe Spectifly::Entity do
|
|
147
145
|
|
148
146
|
it 'uses presenter fields only, but merges metadata and field attributes' do
|
149
147
|
@merged_entity = @entity.present_as(@presenter_entity)
|
150
|
-
@merged_entity.fields.
|
148
|
+
expect(@merged_entity.fields).to eq({
|
151
149
|
"Name*" => {
|
152
150
|
"Description" => "The individual's name",
|
153
151
|
"Example" => "Wussy O'Weakling",
|
@@ -166,17 +164,17 @@ describe Spectifly::Entity do
|
|
166
164
|
"Pickled?" => {
|
167
165
|
"Description" => "Whether or not this individual is pickled"
|
168
166
|
}
|
169
|
-
}
|
170
|
-
@merged_entity.metadata.
|
167
|
+
})
|
168
|
+
expect(@merged_entity.metadata).to eq({
|
171
169
|
"Description" => "A Positionless Individual"
|
172
|
-
}
|
170
|
+
})
|
173
171
|
end
|
174
172
|
end
|
175
173
|
|
176
174
|
describe '#relationships' do
|
177
175
|
it 'returns relationships from parsed yaml' do
|
178
176
|
@group_entity = Spectifly::Entity.parse(fixture_path('group'))
|
179
|
-
@group_entity.relationships.
|
177
|
+
expect(@group_entity.relationships).to eq({
|
180
178
|
"Has Many" => {
|
181
179
|
"Peeps" => {
|
182
180
|
"Description" => "Who is in the group",
|
@@ -189,7 +187,7 @@ describe Spectifly::Entity do
|
|
189
187
|
"Type" => "Individual"
|
190
188
|
}
|
191
189
|
}
|
192
|
-
}
|
190
|
+
})
|
193
191
|
end
|
194
192
|
end
|
195
193
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
1
|
require 'json'
|
3
2
|
|
4
3
|
describe Spectifly::Json::Builder do
|
@@ -7,14 +6,14 @@ describe Spectifly::Json::Builder do
|
|
7
6
|
entity = Spectifly::Entity.parse(fixture_path('individual'))
|
8
7
|
json_path = expectation_path('individual', 'json')
|
9
8
|
hash = described_class.new(entity).build
|
10
|
-
JSON.pretty_generate(hash).strip.
|
9
|
+
expect(JSON.pretty_generate(hash).strip).to eq(File.read(json_path).strip)
|
11
10
|
end
|
12
11
|
|
13
12
|
it 'works with containing relationships' do
|
14
13
|
entity = Spectifly::Entity.parse(fixture_path('group'))
|
15
14
|
json_path = expectation_path('group', 'json')
|
16
15
|
hash = described_class.new(entity).build
|
17
|
-
JSON.pretty_generate(hash).
|
16
|
+
expect(JSON.pretty_generate(hash)).to eq(File.read(json_path))
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
@@ -24,9 +23,9 @@ describe Spectifly::Json::Builder do
|
|
24
23
|
presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual/individual'))
|
25
24
|
json_path = expectation_path('presented/positionless_individual', 'json')
|
26
25
|
builder = described_class.new(entity)
|
27
|
-
builder.present_as(presenter_entity).
|
26
|
+
expect(builder.present_as(presenter_entity)).to eq(builder)
|
28
27
|
hash = builder.build
|
29
|
-
JSON.pretty_generate(hash).strip.
|
28
|
+
expect(JSON.pretty_generate(hash).strip).to eq(File.read(json_path).strip)
|
30
29
|
end
|
31
30
|
|
32
31
|
it 'works with overriding relationships' do
|
@@ -34,9 +33,9 @@ describe Spectifly::Json::Builder do
|
|
34
33
|
presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group/group'))
|
35
34
|
json_path = expectation_path('presented/masterless_group', 'json')
|
36
35
|
builder = described_class.new(entity)
|
37
|
-
builder.present_as(presenter_entity).
|
36
|
+
expect(builder.present_as(presenter_entity)).to eq(builder)
|
38
37
|
hash = builder.build
|
39
|
-
JSON.pretty_generate(hash).
|
38
|
+
expect(JSON.pretty_generate(hash)).to eq(File.read(json_path))
|
40
39
|
end
|
41
40
|
end
|
42
41
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Json::Field do
|
4
2
|
describe '#to_h' do
|
5
3
|
it 'returns hash format of field' do
|
@@ -20,7 +18,7 @@ describe Spectifly::Json::Field do
|
|
20
18
|
'Example' => 'children',
|
21
19
|
'Validations' => ['Must be young', 'Must love eating mud']
|
22
20
|
})
|
23
|
-
field.to_h.
|
21
|
+
expect(field.to_h).to eq(expected)
|
24
22
|
end
|
25
23
|
end
|
26
|
-
end
|
24
|
+
end
|
@@ -1,53 +1,51 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Support do
|
4
2
|
|
5
3
|
describe '.camelize' do
|
6
4
|
it 'removes underscores and spaces and capitalizes the first' do
|
7
|
-
Spectifly::Support.camelize('foo_bar One two 3').
|
5
|
+
expect(Spectifly::Support.camelize('foo_bar One two 3')).to eq('FooBarOneTwo3')
|
8
6
|
end
|
9
7
|
|
10
8
|
it 'deals with nested classes' do
|
11
|
-
Spectifly::Support.camelize('foo_bar/bar_foo').
|
9
|
+
expect(Spectifly::Support.camelize('foo_bar/bar_foo')).to eq('FooBar::BarFoo')
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
13
|
describe '.lower_camelize' do
|
16
14
|
it 'camelizes but with lowercase first character' do
|
17
|
-
Spectifly::Support.lower_camelize('we Are the_toasty').
|
18
|
-
Spectifly::Support.lower_camelize('PleaseChange me').
|
15
|
+
expect(Spectifly::Support.lower_camelize('we Are the_toasty')).to eq('weAreTheToasty')
|
16
|
+
expect(Spectifly::Support.lower_camelize('PleaseChange me')).to eq('pleaseChangeMe')
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
22
20
|
describe '.tokenize' do
|
23
21
|
it 'creates snake_case version of string' do
|
24
|
-
Spectifly::Support.tokenize('Albus Dumbledore & his_friend').
|
22
|
+
expect(Spectifly::Support.tokenize('Albus Dumbledore & his_friend')).to eq('albus_dumbledore_and_his_friend')
|
25
23
|
end
|
26
24
|
|
27
25
|
it 'uncamelizes' do
|
28
|
-
Spectifly::Support.tokenize('thisStrangeJavalikeWord').
|
26
|
+
expect(Spectifly::Support.tokenize('thisStrangeJavalikeWord')).to eq('this_strange_javalike_word')
|
29
27
|
end
|
30
28
|
|
31
29
|
it 'returns nil if given nil' do
|
32
|
-
Spectifly::Support.tokenize(nil).
|
30
|
+
expect(Spectifly::Support.tokenize(nil)).to be_nil
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
34
|
describe '.get_module' do
|
37
35
|
it 'returns module from constant' do
|
38
|
-
Spectifly::Support.get_module(Spectifly::Support).
|
36
|
+
expect(Spectifly::Support.get_module(Spectifly::Support)).to eq('Spectifly')
|
39
37
|
end
|
40
38
|
|
41
39
|
it 'works with strings' do
|
42
|
-
Spectifly::Support.get_module('Spectifly::Support').
|
40
|
+
expect(Spectifly::Support.get_module('Spectifly::Support')).to eq('Spectifly')
|
43
41
|
end
|
44
42
|
|
45
43
|
it 'works with multiple parent modules' do
|
46
|
-
Spectifly::Support.get_module('The::Way::It::Is').
|
44
|
+
expect(Spectifly::Support.get_module('The::Way::It::Is')).to eq('The::Way::It')
|
47
45
|
end
|
48
46
|
|
49
47
|
it 'returns nil if no module' do
|
50
|
-
Spectifly::Support.get_module('LonelyConstant').
|
48
|
+
expect(Spectifly::Support.get_module('LonelyConstant')).to be_nil
|
51
49
|
end
|
52
50
|
end
|
53
|
-
end
|
51
|
+
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'spec_helper'
|
2
1
|
require 'json'
|
3
2
|
|
4
3
|
describe Spectifly::Xsd::Builder do
|
@@ -7,7 +6,7 @@ describe Spectifly::Xsd::Builder do
|
|
7
6
|
path_builder = Spectifly::Xsd::Builder.from_path(fixture_path('individual'))
|
8
7
|
xsd_path = expectation_path('individual', 'xsd')
|
9
8
|
xsd = path_builder.build
|
10
|
-
xsd.
|
9
|
+
expect(xsd).to eq(File.read(xsd_path))
|
11
10
|
end
|
12
11
|
end
|
13
12
|
|
@@ -16,14 +15,14 @@ describe Spectifly::Xsd::Builder do
|
|
16
15
|
entity = Spectifly::Entity.parse(fixture_path('individual'))
|
17
16
|
xsd_path = expectation_path('individual', 'xsd')
|
18
17
|
xsd = Spectifly::Xsd::Builder.new(entity).build
|
19
|
-
xsd.
|
18
|
+
expect(xsd).to eq(File.read(xsd_path))
|
20
19
|
end
|
21
20
|
|
22
21
|
it 'includes import directives for custom field types' do
|
23
22
|
entity = Spectifly::Entity.parse(fixture_path('group'))
|
24
23
|
xsd_path = expectation_path('group', 'xsd')
|
25
24
|
xsd = Spectifly::Xsd::Builder.new(entity).build
|
26
|
-
xsd.
|
25
|
+
expect(xsd).to eq(File.read(xsd_path))
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
@@ -33,9 +32,9 @@ describe Spectifly::Xsd::Builder do
|
|
33
32
|
presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual/individual'))
|
34
33
|
xsd_path = expectation_path('presented/positionless_individual', 'xsd')
|
35
34
|
builder = Spectifly::Xsd::Builder.new(entity)
|
36
|
-
builder.present_as(presenter_entity).
|
35
|
+
expect(builder.present_as(presenter_entity)).to eq(builder)
|
37
36
|
xsd = builder.build
|
38
|
-
xsd.
|
37
|
+
expect(xsd).to eq(File.read(xsd_path))
|
39
38
|
end
|
40
39
|
|
41
40
|
it 'works with presented relationship-having entities' do
|
@@ -43,9 +42,9 @@ describe Spectifly::Xsd::Builder do
|
|
43
42
|
presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group/group'))
|
44
43
|
xsd_path = expectation_path('presented/masterless_group', 'xsd')
|
45
44
|
builder = Spectifly::Xsd::Builder.new(entity)
|
46
|
-
builder.present_as(presenter_entity).
|
45
|
+
expect(builder.present_as(presenter_entity)).to eq(builder)
|
47
46
|
xsd = builder.build
|
48
|
-
xsd.
|
47
|
+
expect(xsd).to eq(File.read(xsd_path))
|
49
48
|
end
|
50
49
|
end
|
51
50
|
end
|
@@ -1,12 +1,10 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Xsd::Field do
|
4
2
|
describe '#regex' do
|
5
3
|
it 'formats regex to xsd-compatible pattern restriction' do
|
6
4
|
field = Spectifly::Xsd::Field.new('some field', {
|
7
5
|
'Validations' => 'Must match regex "^[0-9]{4}"'
|
8
6
|
})
|
9
|
-
field.regex.
|
7
|
+
expect(field.regex).to eq('[0-9]{4}[\s\S]*')
|
10
8
|
end
|
11
9
|
end
|
12
|
-
end
|
10
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Spectifly::Xsd::Types do
|
4
2
|
describe '.build_extended' do
|
5
3
|
it 'builds xsd for extended types' do
|
6
4
|
expected_path = expectation_path('extended', 'xsd')
|
7
5
|
expected = File.read(expected_path)
|
8
|
-
Spectifly::Xsd::Types.build_extended.
|
6
|
+
expect(Spectifly::Xsd::Types.build_extended).to eq(expected)
|
9
7
|
end
|
10
8
|
end
|
11
|
-
end
|
9
|
+
end
|
data/spectifly.gemspec
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectifly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.11
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ravi Gadad
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: builder
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: json
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bundler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,31 +62,13 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '1.3'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: rake
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: rspec
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
72
|
requirements:
|
99
73
|
- - ! '>='
|
100
74
|
- !ruby/object:Gem::Version
|
@@ -102,7 +76,6 @@ dependencies:
|
|
102
76
|
type: :development
|
103
77
|
prerelease: false
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
79
|
requirements:
|
107
80
|
- - ! '>='
|
108
81
|
- !ruby/object:Gem::Version
|
@@ -110,7 +83,6 @@ dependencies:
|
|
110
83
|
- !ruby/object:Gem::Dependency
|
111
84
|
name: simplecov
|
112
85
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
86
|
requirements:
|
115
87
|
- - ! '>='
|
116
88
|
- !ruby/object:Gem::Version
|
@@ -118,7 +90,6 @@ dependencies:
|
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
93
|
requirements:
|
123
94
|
- - ! '>='
|
124
95
|
- !ruby/object:Gem::Version
|
@@ -132,7 +103,9 @@ extensions: []
|
|
132
103
|
extra_rdoc_files: []
|
133
104
|
files:
|
134
105
|
- .gitignore
|
106
|
+
- .rspec
|
135
107
|
- .ruby-version
|
108
|
+
- .travis.yml
|
136
109
|
- Gemfile
|
137
110
|
- LICENSE.txt
|
138
111
|
- README.md
|
@@ -197,33 +170,26 @@ files:
|
|
197
170
|
homepage: ''
|
198
171
|
licenses:
|
199
172
|
- MIT
|
173
|
+
metadata: {}
|
200
174
|
post_install_message:
|
201
175
|
rdoc_options: []
|
202
176
|
require_paths:
|
203
177
|
- lib
|
204
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
-
none: false
|
206
179
|
requirements:
|
207
180
|
- - ! '>='
|
208
181
|
- !ruby/object:Gem::Version
|
209
182
|
version: '0'
|
210
|
-
segments:
|
211
|
-
- 0
|
212
|
-
hash: -190850164299161101
|
213
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
|
-
none: false
|
215
184
|
requirements:
|
216
185
|
- - ! '>='
|
217
186
|
- !ruby/object:Gem::Version
|
218
187
|
version: '0'
|
219
|
-
segments:
|
220
|
-
- 0
|
221
|
-
hash: -190850164299161101
|
222
188
|
requirements: []
|
223
189
|
rubyforge_project:
|
224
|
-
rubygems_version:
|
190
|
+
rubygems_version: 2.2.2
|
225
191
|
signing_key:
|
226
|
-
specification_version:
|
192
|
+
specification_version: 4
|
227
193
|
summary: Generate schema files from business entity YAML specs.
|
228
194
|
test_files:
|
229
195
|
- spec/expectations/extended.xsd
|