fabulator-exhibit 0.0.1 → 0.0.2
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.
- data/History.txt +14 -0
- data/README.rdoc +2 -2
- data/Rakefile +57 -0
- data/VERSION +1 -1
- data/features/simple-database.feature +5 -1
- data/features/step_definitions/expression_steps.rb +3 -0
- data/lib/fabulator/exhibit/actions/item.rb +12 -7
- data/lib/fabulator/exhibit/actions.rb +8 -6
- data/lib/fabulator-exhibit.rb +1 -0
- metadata +24 -5
data/History.txt
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
=== 0.0.1 2010-03-01
|
2
|
+
|
3
|
+
* 1 major enhancement:
|
4
|
+
* Initial release
|
5
|
+
|
6
|
+
=== 0.0.2
|
7
|
+
|
8
|
+
* 1 major enhancement:
|
9
|
+
* <ex:item/> now takes @ex:mode with values 'add' or 'remove' in order
|
10
|
+
to add or remove items from a database. The default is 'add'. Only
|
11
|
+
an @ex:id is required if 'remove'ing.
|
12
|
+
|
13
|
+
* 1 minor enhancement:
|
14
|
+
* Document dependence on uuid gem in gem spec
|
data/README.rdoc
CHANGED
@@ -35,7 +35,7 @@ This Fabulator extension provides to an Exhibit-style database, but does
|
|
35
35
|
not provide actual storage. The embedding framework will need to define
|
36
36
|
several functions:
|
37
37
|
|
38
|
-
=== Fabulator::Exhibit::
|
38
|
+
=== Fabulator::Exhibit::Actions::Lib.fetch_database(name)
|
39
39
|
|
40
40
|
This function should return the Exhibit database. It needs to look like
|
41
41
|
the following data structure:
|
@@ -46,7 +46,7 @@ the following data structure:
|
|
46
46
|
:items => { }
|
47
47
|
}
|
48
48
|
|
49
|
-
=== Fabulator::Exhibit::
|
49
|
+
=== Fabulator::Exhibit::Actions::Lib.store_database(name, data)
|
50
50
|
|
51
51
|
This function should store the data for later retrieval. The data is provided
|
52
52
|
in the same format it is returned by the fetch_database function.
|
data/Rakefile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gem|
|
4
|
+
gem.name = "fabulator-exhibit"
|
5
|
+
gem.summary = %Q{Fabulator Extension providing Exhibit-style NoSQL databases.}
|
6
|
+
gem.description = %Q{Provides language extensions to manage Exhibit-style NoSQL databases.}
|
7
|
+
gem.email = "jgsmith@tamu.edu"
|
8
|
+
gem.homepage = "http://github.com/jgsmith/ruby-fabulator-exhibit"
|
9
|
+
gem.authors = ["James Smith"]
|
10
|
+
gem.add_dependency('fabulator', '>= 0.0.1')
|
11
|
+
gem.add_dependency('uuid', '>= 2.1.0')
|
12
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
13
|
+
end
|
14
|
+
rescue LoadError
|
15
|
+
puts "Jeweler (or a dependency) not available. This is only required if you plan to package fabulator-exhibit as a gem."
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'rake'
|
19
|
+
require 'rake/rdoctask'
|
20
|
+
require 'rake/testtask'
|
21
|
+
|
22
|
+
require 'cucumber'
|
23
|
+
require 'cucumber/rake/task'
|
24
|
+
|
25
|
+
task :features => 'spec:integration'
|
26
|
+
|
27
|
+
namespace :spec do
|
28
|
+
|
29
|
+
desc "Run the Cucumber features"
|
30
|
+
Cucumber::Rake::Task.new(:integration) do |t|
|
31
|
+
t.fork = true
|
32
|
+
t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'pretty')]
|
33
|
+
# t.feature_pattern = "#{extension_root}/features/**/*.feature"
|
34
|
+
t.profile = "default"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
desc 'Generate documentation for the fabulator exhibit extension.'
|
40
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = 'FabulatorExhibitExtension'
|
43
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
44
|
+
rdoc.rdoc_files.include('README')
|
45
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
|
+
end
|
47
|
+
|
48
|
+
# For extensions that are in transition
|
49
|
+
desc 'Test the fabulator exhibit extension.'
|
50
|
+
Rake::TestTask.new(:test) do |t|
|
51
|
+
t.libs << 'lib'
|
52
|
+
t.pattern = 'test/**/*_test.rb'
|
53
|
+
t.verbose = true
|
54
|
+
end
|
55
|
+
|
56
|
+
# Load any custom rakefiles for extension
|
57
|
+
Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
@@ -1,7 +1,9 @@
|
|
1
1
|
Feature: Simple database items
|
2
2
|
|
3
3
|
Scenario: simple database with one item
|
4
|
-
Given
|
4
|
+
Given a context
|
5
|
+
And the prefix f as "http://dh.tamu.edu/ns/fabulator/1.0#"
|
6
|
+
And the statemachine
|
5
7
|
"""
|
6
8
|
<f:application xmlns:f="http://dh.tamu.edu/ns/fabulator/1.0#"
|
7
9
|
xmlns:ex="http://dh.tamu.edu/ns/fabulator/exhibit/1.0#"
|
@@ -15,6 +17,7 @@ Feature: Simple database items
|
|
15
17
|
<ex:database>
|
16
18
|
<f:value f:path="/f" f:select="ex:item('foo')" />
|
17
19
|
</ex:database>
|
20
|
+
<f:value f:path="/g" f:select="ex:items()" />
|
18
21
|
</f:application>
|
19
22
|
"""
|
20
23
|
And using the 'test' database
|
@@ -23,3 +26,4 @@ Feature: Simple database items
|
|
23
26
|
And the item 'foo' should have the label 'fooLabel'
|
24
27
|
And the item 'foo' should have the property 'bar' as 'baz'
|
25
28
|
And the expression (/f/bar) should equal ['baz']
|
29
|
+
And the expression (/g/foo/bar) should equal ['baz']
|
@@ -96,6 +96,9 @@ Then /the (expression \(.*\)) should equal (\[.*\])/ do |x, y|
|
|
96
96
|
b = y.run(@context)
|
97
97
|
#puts YAML::dump(a)
|
98
98
|
#puts YAML::dump(b)
|
99
|
+
#puts @parser.parse('f:dump(/)', @context).run(@context).first.to_s
|
100
|
+
|
101
|
+
|
99
102
|
a.first.value.should == b.first.value
|
100
103
|
end
|
101
104
|
|
@@ -9,6 +9,7 @@ module Fabulator
|
|
9
9
|
attribute :id, :eval => true, :static => false
|
10
10
|
attribute :type, :static => false, :inherited => true
|
11
11
|
attribute :label, :eval => true, :static => false
|
12
|
+
attribute :mode, :static => true, :default => 'add'
|
12
13
|
|
13
14
|
has_select
|
14
15
|
has_actions
|
@@ -18,19 +19,23 @@ module Fabulator
|
|
18
19
|
items = @select.run(ctx)
|
19
20
|
|
20
21
|
db = @database.run(ctx).first.to_s
|
21
|
-
|
22
|
+
|
22
23
|
items.each do |item|
|
23
24
|
info = Fabulator::Exhibit::Actions::Lib.accumulate_item_info do
|
24
25
|
@actions.run(ctx.with_root(item))
|
25
26
|
end
|
26
27
|
info['id'] = (@id.run(ctx.with_root(item)).first.to_s rescue nil)
|
27
|
-
if
|
28
|
-
|
29
|
-
|
28
|
+
if @mode == 'add'
|
29
|
+
if info['id'].nil?
|
30
|
+
@@uuid ||= UUID.new
|
31
|
+
info['id'] = @@uuid.generate(:compact)
|
32
|
+
end
|
33
|
+
info['type'] = @type.run(ctx.with_root(item)).first.to_s
|
34
|
+
info['label'] = @label.run(ctx.with_root(item)).first.to_s
|
35
|
+
Fabulator::Exhibit::Actions::Lib.add_info(db, :items, info)
|
36
|
+
elsif @mode == 'remove' && !info['id'].nil?
|
37
|
+
Fabulator::Exhibit::Actions::Lib.remove_info(db, :items, info['id'])
|
30
38
|
end
|
31
|
-
info['type'] = @type.run(ctx.with_root(item)).first.to_s
|
32
|
-
info['label'] = @label.run(ctx.with_root(item)).first.to_s
|
33
|
-
Fabulator::Exhibit::Actions::Lib.add_info(db, :items, info)
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
@@ -90,7 +90,7 @@ require 'fabulator/exhibit/actions/value'
|
|
90
90
|
args.collect{ |a|
|
91
91
|
id = a.to_s
|
92
92
|
i = db[:items][id]
|
93
|
-
r = ctx.root.anon_node(
|
93
|
+
r = ctx.root.anon_node(nil)
|
94
94
|
r.name = id
|
95
95
|
i.each_pair do |k,v|
|
96
96
|
next if k == "id"
|
@@ -103,11 +103,13 @@ require 'fabulator/exhibit/actions/value'
|
|
103
103
|
}
|
104
104
|
end
|
105
105
|
|
106
|
+
## need to make this an iterator
|
106
107
|
function 'items' do |ctx, args|
|
107
|
-
|
108
|
-
db
|
109
|
-
|
110
|
-
|
108
|
+
nom = ctx.attribute(EXHIBIT_NS, 'database', { :inherited => true, :static => true })
|
109
|
+
db = Fabulator::Exhibit::Actions::Lib.get_database(nom)
|
110
|
+
ret = ctx.root.anon_node(nil)
|
111
|
+
db[:items].each_pair{ |id, item|
|
112
|
+
i = ret.create_child(id, nil)
|
111
113
|
item.each_pair do |k,v|
|
112
114
|
next if k == "id"
|
113
115
|
v = [ v ] unless v.is_a?(Array)
|
@@ -115,8 +117,8 @@ require 'fabulator/exhibit/actions/value'
|
|
115
117
|
i.create_child(k,vv)
|
116
118
|
end
|
117
119
|
end
|
118
|
-
i
|
119
120
|
}
|
121
|
+
[ ret ]
|
120
122
|
end
|
121
123
|
end
|
122
124
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fabulator-exhibit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Smith
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-10 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -34,6 +34,22 @@ dependencies:
|
|
34
34
|
version: 0.0.1
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: uuid
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 11
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 1
|
49
|
+
- 0
|
50
|
+
version: 2.1.0
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
37
53
|
description: Provides language extensions to manage Exhibit-style NoSQL databases.
|
38
54
|
email: jgsmith@tamu.edu
|
39
55
|
executables: []
|
@@ -43,13 +59,16 @@ extensions: []
|
|
43
59
|
extra_rdoc_files:
|
44
60
|
- README.rdoc
|
45
61
|
files:
|
62
|
+
- History.txt
|
46
63
|
- README.rdoc
|
64
|
+
- Rakefile
|
47
65
|
- VERSION
|
48
66
|
- features/simple-database.feature
|
49
67
|
- features/step_definitions/exhibit_steps.rb
|
50
68
|
- features/step_definitions/expression_steps.rb
|
51
69
|
- features/step_definitions/xml_steps.rb
|
52
70
|
- features/support/env.rb
|
71
|
+
- lib/fabulator-exhibit.rb
|
53
72
|
- lib/fabulator/exhibit.rb
|
54
73
|
- lib/fabulator/exhibit/actions.rb
|
55
74
|
- lib/fabulator/exhibit/actions/item.rb
|
@@ -60,7 +79,7 @@ files:
|
|
60
79
|
- test/test_helper.rb
|
61
80
|
- test/test_fabulator-xml.rb
|
62
81
|
has_rdoc: true
|
63
|
-
homepage: http://github.com/jgsmith/fabulator-exhibit
|
82
|
+
homepage: http://github.com/jgsmith/ruby-fabulator-exhibit
|
64
83
|
licenses: []
|
65
84
|
|
66
85
|
post_install_message:
|