spectifly 0.0.10 → 0.0.11
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.
- 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
|