spectifly 0.0.2 → 0.0.3

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.
@@ -20,13 +20,20 @@ module Spectifly
20
20
  entities[entity.name] = entity
21
21
  end
22
22
  if presenter_path
23
- presenters_glob = File.join(presenter_path, '*.entity')
24
- Dir[presenters_glob].each do |path|
25
- path = File.expand_path(path)
26
- presenter = Spectifly::Entity.parse(path)
27
- base_entity = entities[Spectifly::Support.tokenize(presenter.root)]
28
- entity = base_entity.present_as(presenter)
29
- entities[entity.name] = entity
23
+ presenters_glob = File.join(presenter_path, '*')
24
+ Dir[presenters_glob].each do |presenter_list_path|
25
+ if File.directory? presenter_list_path
26
+ presenter_name = presenter_list_path.sub(/^#{presenter_path}\//, '')
27
+ entities[presenter_name] = {}
28
+ entities_glob = File.join(presenter_list_path, '*.entity')
29
+ Dir[entities_glob].each do |path|
30
+ path = File.expand_path(path)
31
+ presenter = Spectifly::Entity.parse(path)
32
+ base_entity = entities[Spectifly::Support.tokenize(presenter.root)]
33
+ entity = base_entity.present_as(presenter)
34
+ entities[presenter_name][entity.name] = entity
35
+ end
36
+ end
30
37
  end
31
38
  end
32
39
  entities
@@ -103,4 +110,4 @@ module Spectifly
103
110
  merged_entity
104
111
  end
105
112
  end
106
- end
113
+ end
@@ -1,3 +1,3 @@
1
1
  module Spectifly
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,11 +1,25 @@
1
+ require 'spectifly/xsd'
2
+
1
3
  namespace :spectifly do
2
4
  namespace :xsd do
5
+ def write_entity(entity, path)
6
+ File.open(File.join(path, "#{entity.name}.xsd"), 'w') do |f|
7
+ f.write Spectifly::Xsd::Builder.new(entity).build
8
+ end
9
+ end
10
+
3
11
  Spectifly::Task.new('generate_from_entities', [:destination_path]) do |spectifly, args|
4
12
  options = File.exist?(spectifly.presenter_path) ? { :presenter_path => spectifly.presenter_path } : {}
5
13
 
6
14
  Spectifly::Entity.from_directory(spectifly.entity_path, options).each do |name, entity|
7
- File.open(File.join(args[:destination_path], "#{name}.xsd"), 'w') do |f|
8
- f.write Spectifly::Xsd::Builder.new(entity).build
15
+ if entity.is_a? Spectifly::Entity
16
+ write_entity(entity, args[:destination_path])
17
+ else
18
+ presenter_path = File.join(args[:destination_path], name)
19
+ FileUtils.mkdir_p presenter_path unless File.exist? presenter_path
20
+ entity.each do |presenter_entity_name, presenter_entity|
21
+ write_entity(presenter_entity, presenter_path)
22
+ end
9
23
  end
10
24
  end
11
25
  end
@@ -16,7 +30,16 @@ namespace :spectifly do
16
30
  end
17
31
  end
18
32
 
33
+ Spectifly::Task.new('ensure_presenter_validity', [:destination_path]) do |spectifly, args|
34
+ # just copy all the xsds over into each presenter directory, for easy zipping and whatnot
35
+ schema = Dir.glob(File.join(args[:destination_path], '*.xsd'))
36
+ directories = (Dir.glob(File.join(args[:destination_path], "*")) - schema)
37
+ directories.each do |path|
38
+ FileUtils.cp schema, path
39
+ end
40
+ end
41
+
19
42
  desc 'Generate all XSDs for the configured entity directory, including extended type definitions'
20
- task :generate_all, [:destination_path] => [:generate_from_entities, :generate_extended_types]
43
+ task :generate_all, [:destination_path] => [:generate_from_entities, :generate_extended_types, :ensure_presenter_validity]
21
44
  end
22
45
  end
@@ -17,9 +17,15 @@ describe Spectifly::Entity do
17
17
  entities = Spectifly::Entity.from_directory(
18
18
  fixture_path, :presenter_path => base_presenter_path
19
19
  )
20
+
20
21
  entities.keys.should =~ ['individual', 'group', 'positionless_individual', 'masterless_group']
21
- entities.values.map(&:class).uniq.should == [Spectifly::Entity]
22
- entities.values.map(&:name).should =~ ['individual', 'group', 'positionless_individual', 'masterless_group']
22
+ entities['positionless_individual'].keys.should == ['individual']
23
+ entities['positionless_individual'].values.map(&:name).should == ['individual']
24
+ entities['masterless_group'].keys.should == ['group']
25
+ entities['masterless_group'].values.map(&:name).should == ['group']
26
+ ['positionless_individual', 'masterless_group'].each do |presenter|
27
+ entities[presenter].values.map(&:class).uniq.should == [Spectifly::Entity]
28
+ end
23
29
  end
24
30
  end
25
31
 
@@ -59,17 +65,17 @@ describe Spectifly::Entity do
59
65
  describe '#name' do
60
66
  before :each do
61
67
  @presenter_entity = Spectifly::Entity.parse(
62
- fixture_path('presenters/positionless_individual')
68
+ fixture_path('presenters/positionless_individual/individual.entity')
63
69
  )
64
70
  end
65
71
 
66
72
  it 'returns name from entity file' do
67
73
  @entity.name.should == 'individual'
68
- @presenter_entity.name.should == 'positionless_individual'
74
+ @presenter_entity.name.should == 'individual'
69
75
  end
70
76
 
71
77
  it 'returns presenter name when presented' do
72
- @entity.present_as(@presenter_entity).name.should == 'positionless_individual'
78
+ @entity.present_as(@presenter_entity).name.should == 'individual'
73
79
  end
74
80
  end
75
81
 
@@ -80,7 +86,7 @@ describe Spectifly::Entity do
80
86
 
81
87
  it 'returns presenter if presented' do
82
88
  @presenter_entity = Spectifly::Entity.parse(
83
- fixture_path('presenters/positionless_individual')
89
+ fixture_path('presenters/positionless_individual/individual.entity')
84
90
  )
85
91
  @entity.present_as(@presenter_entity).presented_as.should == @presenter_entity
86
92
  end
@@ -129,7 +135,7 @@ describe Spectifly::Entity do
129
135
 
130
136
  describe '#present_as' do
131
137
  before :each do
132
- @presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual'))
138
+ @presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual/individual'))
133
139
  end
134
140
 
135
141
  it 'raises exception if presenter entity has different root' do
@@ -21,7 +21,7 @@ describe Spectifly::Json::Builder do
21
21
  describe '#present_as' do
22
22
  it 'filters entity through presenter, and returns self' do
23
23
  entity = Spectifly::Entity.parse(fixture_path('individual'))
24
- presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual'))
24
+ presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual/individual'))
25
25
  json_path = expectation_path('presented/positionless_individual', 'json')
26
26
  builder = described_class.new(entity)
27
27
  builder.present_as(presenter_entity).should == builder
@@ -31,7 +31,7 @@ describe Spectifly::Json::Builder do
31
31
 
32
32
  it 'works with overriding relationships' do
33
33
  entity = Spectifly::Entity.parse(fixture_path('group'))
34
- presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group'))
34
+ presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group/group'))
35
35
  json_path = expectation_path('presented/masterless_group', 'json')
36
36
  builder = described_class.new(entity)
37
37
  builder.present_as(presenter_entity).should == builder
@@ -39,4 +39,4 @@ describe Spectifly::Json::Builder do
39
39
  JSON.pretty_generate(hash).should == File.read(json_path)
40
40
  end
41
41
  end
42
- end
42
+ end
@@ -30,7 +30,7 @@ describe Spectifly::Xsd::Builder do
30
30
  describe '#present_as' do
31
31
  it 'filters entity through presenter, and returns self' do
32
32
  entity = Spectifly::Entity.parse(fixture_path('individual'))
33
- presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual'))
33
+ presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/positionless_individual/individual'))
34
34
  xsd_path = expectation_path('presented/positionless_individual', 'xsd')
35
35
  builder = Spectifly::Xsd::Builder.new(entity)
36
36
  builder.present_as(presenter_entity).should == builder
@@ -40,7 +40,7 @@ describe Spectifly::Xsd::Builder do
40
40
 
41
41
  it 'works with presented relationship-having entities' do
42
42
  entity = Spectifly::Entity.parse(fixture_path('group'))
43
- presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group'))
43
+ presenter_entity = Spectifly::Entity.parse(fixture_path('presenters/masterless_group/group'))
44
44
  xsd_path = expectation_path('presented/masterless_group', 'xsd')
45
45
  builder = Spectifly::Xsd::Builder.new(entity)
46
46
  builder.present_as(presenter_entity).should == builder
@@ -48,4 +48,4 @@ describe Spectifly::Xsd::Builder do
48
48
  xsd.should == File.read(xsd_path)
49
49
  end
50
50
  end
51
- end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spectifly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-30 00:00:00.000000000 Z
12
+ date: 2013-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
@@ -178,8 +178,8 @@ files:
178
178
  - spec/fixtures/individual.entity
179
179
  - spec/fixtures/invalid/multiple_root.entity
180
180
  - spec/fixtures/invalid/no_fields.entity
181
- - spec/fixtures/presenters/masterless_group.entity
182
- - spec/fixtures/presenters/positionless_individual.entity
181
+ - spec/fixtures/presenters/masterless_group/group.entity
182
+ - spec/fixtures/presenters/positionless_individual/individual.entity
183
183
  - spec/spec_helper.rb
184
184
  - spec/spectifly/base/builder_spec.rb
185
185
  - spec/spectifly/base/entity_node_spec.rb
@@ -207,12 +207,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
207
  - - ! '>='
208
208
  - !ruby/object:Gem::Version
209
209
  version: '0'
210
+ segments:
211
+ - 0
212
+ hash: -3903166964616575918
210
213
  required_rubygems_version: !ruby/object:Gem::Requirement
211
214
  none: false
212
215
  requirements:
213
216
  - - ! '>='
214
217
  - !ruby/object:Gem::Version
215
218
  version: '0'
219
+ segments:
220
+ - 0
221
+ hash: -3903166964616575918
216
222
  requirements: []
217
223
  rubyforge_project:
218
224
  rubygems_version: 1.8.23
@@ -233,8 +239,8 @@ test_files:
233
239
  - spec/fixtures/individual.entity
234
240
  - spec/fixtures/invalid/multiple_root.entity
235
241
  - spec/fixtures/invalid/no_fields.entity
236
- - spec/fixtures/presenters/masterless_group.entity
237
- - spec/fixtures/presenters/positionless_individual.entity
242
+ - spec/fixtures/presenters/masterless_group/group.entity
243
+ - spec/fixtures/presenters/positionless_individual/individual.entity
238
244
  - spec/spec_helper.rb
239
245
  - spec/spectifly/base/builder_spec.rb
240
246
  - spec/spectifly/base/entity_node_spec.rb
@@ -248,4 +254,3 @@ test_files:
248
254
  - spec/spectifly/xsd/field_spec.rb
249
255
  - spec/spectifly/xsd/types_spec.rb
250
256
  - spec/support/path_helper.rb
251
- has_rdoc: