rea 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +5 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +48 -0
- data/LICENCE.md +22 -0
- data/Manifest.txt +15 -0
- data/README.md +7 -0
- data/Rakefile +23 -0
- data/bin/rea +8 -0
- data/lib/rea-dblp/rea/dblp.rb +59 -0
- data/lib/rea-dblp/rea/dblp/entry_parser.rb +48 -0
- data/lib/rea-dblp/rea/dblp/grab.rb +14 -0
- data/lib/rea-dblp/rea/dblp/parser.rb +36 -0
- data/lib/rea-dblp/rea/dblp/query_result_parser.rb +38 -0
- data/lib/rea-dblp/rea/dblp/search.rb +18 -0
- data/lib/rea.rb +28 -0
- data/lib/rea/command.rb +62 -0
- data/lib/rea/command/search.rb +52 -0
- data/lib/rea/command/utils.rb +31 -0
- data/lib/rea/errors.rb +62 -0
- data/lib/rea/loader.rb +8 -0
- data/lib/rea/version.rb +14 -0
- data/lib/rea/work_key.rb +33 -0
- data/rea.gemspec +192 -0
- data/rea.noespec +33 -0
- data/spec/rea-dblp/fixtures/entries/Damas2005.xml +17 -0
- data/spec/rea-dblp/fixtures/entries/Damas2009.xml +16 -0
- data/spec/rea-dblp/fixtures/entries/Erroneous.xml +1 -0
- data/spec/rea-dblp/fixtures/entries/QueryEntry.xml +15 -0
- data/spec/rea-dblp/fixtures/entries/Unrecognized.xml +3 -0
- data/spec/rea-dblp/fixtures/query_results/Erroneous.xml +1 -0
- data/spec/rea-dblp/fixtures/query_results/QueryResult.xml +25 -0
- data/spec/rea-dblp/fixtures/query_results/Unrecognized.xml +3 -0
- data/spec/rea-dblp/test_entry_parser.rb +72 -0
- data/spec/rea-dblp/test_grab.rb +18 -0
- data/spec/rea-dblp/test_query_result_parser.rb +38 -0
- data/spec/rea-dblp/test_search.rb +18 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/test_rea.rb +12 -0
- data/spec/work_key/test_parse.rb +28 -0
- data/spec/work_key/test_to_ruby_literal.rb +20 -0
- data/spec/work_key/test_to_s.rb +12 -0
- data/tasks/debug_mail.rake +75 -0
- data/tasks/debug_mail.txt +13 -0
- data/tasks/gem.rake +68 -0
- data/tasks/spec_test.rake +71 -0
- data/tasks/unit_test.rake +76 -0
- data/tasks/yard.rake +51 -0
- metadata +215 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<dblp>
|
3
|
+
<inproceedings key="conf/icse/DamasLRL09" mdate="2009-06-16">
|
4
|
+
<author>Christophe Damas</author>
|
5
|
+
<author>Bernard Lambeau</author>
|
6
|
+
<author>Francois Roucoux</author>
|
7
|
+
<author>Axel van Lamsweerde</author>
|
8
|
+
<title>Analyzing critical process models through behavior model synthesis.</title>
|
9
|
+
<pages>441-451</pages>
|
10
|
+
<year>2009</year>
|
11
|
+
<booktitle>ICSE</booktitle>
|
12
|
+
<ee>http://dx.doi.org/10.1109/ICSE.2009.5070543</ee>
|
13
|
+
<crossref>conf/icse/2009</crossref>
|
14
|
+
<url>db/conf/icse/icse2009.html#DamasLRL09</url>
|
15
|
+
</inproceedings>
|
16
|
+
</dblp>
|
@@ -0,0 +1 @@
|
|
1
|
+
not xml
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<dblp>
|
2
|
+
<queryentry key="conf/icse/DamasLRL09">
|
3
|
+
<authors>
|
4
|
+
<author>Christophe Damas</author>
|
5
|
+
<author>Bernard Lambeau</author>
|
6
|
+
<author>Francois Roucoux</author>
|
7
|
+
<author>Axel van Lamsweerde</author>
|
8
|
+
</authors>
|
9
|
+
<title ee="http://dx.doi.org/10.1109/ICSE.2009.5070543">Analyzing critical process models through behavior model synthesis.</title>
|
10
|
+
<venue url="db/conf/icse/icse2009.html#DamasLRL09">ICSE 2009:441-451</venue>
|
11
|
+
<year>2009</year>
|
12
|
+
<type>inproceedings</type>
|
13
|
+
</queryentry>
|
14
|
+
</dblp>
|
15
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
not xml
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<result>
|
3
|
+
<query id="141893">Behavior Model Synthesis</query>
|
4
|
+
<status code="12">OK</status>
|
5
|
+
<time unit="msecs">11.72</time>
|
6
|
+
<completions total="1" computed="1" sent="1">
|
7
|
+
<c sc="6" dc="3" oc="3" id="10822972">synthesis</c>
|
8
|
+
</completions>
|
9
|
+
<suggestions computed="0" sent="0">
|
10
|
+
</suggestions>
|
11
|
+
<hits total="3" computed="3" sent="3" first="0">
|
12
|
+
<hit score="6" id="1505758">
|
13
|
+
<title><![CDATA[<dblp:authors><dblp:author>Christophe Damas</dblp:author><dblp:author>Bernard Lambeau</dblp:author><dblp:author>Francois Roucoux</dblp:author><dblp:author>Axel van Lamsweerde</dblp:author></dblp:authors><dblp:title ee="http://dx.doi.org/10.1109/ICSE.2009.5070543">Analyzing critical process models through behavior model synthesis.</dblp:title><dblp:venue url="db/conf/icse/icse2009.html#DamasLRL09">ICSE</dblp:venue><dblp:year>2009</dblp:year><dblp:type>inproceedings</dblp:type>]]></title>
|
14
|
+
<url>http://www.dblp.org/rec/bibtex/conf/icse/DamasLRL09</url>
|
15
|
+
</hit>
|
16
|
+
<hit score="6" id="1695565">
|
17
|
+
<title><![CDATA[<dblp:authors><dblp:author>Hyunok Oh</dblp:author></dblp:authors><dblp:title ee="http://doi.ieeecomputersociety.org/10.1109/ISQED.2008.138">Constant Rate Dataflow Model with Intermediate Ports for Efficient Code Synthesis with Top-Down Design and Dynamic Behavior. </dblp:title><dblp:venue url="db/conf/isqed/isqed2008.html#Oh08">ISQED 2008:190-193</dblp:venue><dblp:year>2008</dblp:year><dblp:type>inproceedings</dblp:type>]]></title>
|
18
|
+
<url>http://www.dblp.org/rec/bibtex/conf/isqed/Oh08</url>
|
19
|
+
</hit>
|
20
|
+
<hit score="6" id="1883106">
|
21
|
+
<title><![CDATA[<dblp:authors><dblp:author>Pengcheng Zhang</dblp:author><dblp:author>Yu Zhou</dblp:author><dblp:author>Bixin Li</dblp:author></dblp:authors><dblp:title ee="http://doi.ieeecomputersociety.org/10.1109/SNPD.2007.98">A service-oriented methodology supporting automatic synthesis and verification of component behavior model. </dblp:title><dblp:venue url="db/conf/snpd/snpd2007-1.html#ZhangZL07">SNPD 2007:511-516</dblp:venue><dblp:year>2007</dblp:year><dblp:type>inproceedings</dblp:type>]]></title>
|
22
|
+
<url>http://www.dblp.org/rec/bibtex/conf/snpd/ZhangZL07</url>
|
23
|
+
</hit>
|
24
|
+
</hits>
|
25
|
+
</result>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
module DBLP
|
4
|
+
describe EntryParser do
|
5
|
+
|
6
|
+
def parse(x)
|
7
|
+
EntryParser.parse(Path.dir/"fixtures/entries"/x)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'fails gracefully on unrecognized' do
|
11
|
+
lambda{
|
12
|
+
parse("Unrecognized.xml")
|
13
|
+
}.should raise_error(ParseFormatError, /Unrecognized.xml/)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'fails gracefully on erroneous' do
|
17
|
+
lambda{
|
18
|
+
parse("Erroneous.xml")
|
19
|
+
}.should raise_error(ParseError, /Erroneous.xml/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "works on proceedings" do
|
23
|
+
got = parse "Damas2009.xml"
|
24
|
+
expected = {
|
25
|
+
:kind => "inproceedings",
|
26
|
+
:key => WorkKey("dblp://conf/icse/DamasLRL09"),
|
27
|
+
:title => "Analyzing critical process models through behavior model synthesis.",
|
28
|
+
:source => "ICSE",
|
29
|
+
:year => "2009",
|
30
|
+
:authors => ["Christophe Damas",
|
31
|
+
"Bernard Lambeau",
|
32
|
+
"Francois Roucoux",
|
33
|
+
"Axel van Lamsweerde"]
|
34
|
+
}
|
35
|
+
got.should eq([expected])
|
36
|
+
end
|
37
|
+
|
38
|
+
it "works on queryentry" do
|
39
|
+
got = parse "QueryEntry.xml"
|
40
|
+
expected = {
|
41
|
+
:kind => "inproceedings",
|
42
|
+
:key => WorkKey("dblp://conf/icse/DamasLRL09"),
|
43
|
+
:title => "Analyzing critical process models through behavior model synthesis.",
|
44
|
+
:source => "ICSE 2009:441-451",
|
45
|
+
:year => "2009",
|
46
|
+
:authors => ["Christophe Damas",
|
47
|
+
"Bernard Lambeau",
|
48
|
+
"Francois Roucoux",
|
49
|
+
"Axel van Lamsweerde"]
|
50
|
+
}
|
51
|
+
got.should eq([expected])
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'works on article' do
|
55
|
+
got = parse "Damas2005.xml"
|
56
|
+
expected = {
|
57
|
+
:kind => "article",
|
58
|
+
:key => WorkKey("dblp://journals/tse/DamasLDL05"),
|
59
|
+
:title => "Generating Annotated Behavior Models from End-User Scenarios.",
|
60
|
+
:source => "IEEE Trans. Software Eng.",
|
61
|
+
:year => "2005",
|
62
|
+
:authors => ["Christophe Damas",
|
63
|
+
"Bernard Lambeau",
|
64
|
+
"Pierre Dupont",
|
65
|
+
"Axel van Lamsweerde"]
|
66
|
+
}
|
67
|
+
got.should eq([expected])
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end # module DBLP
|
72
|
+
end # module Rea
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
describe DBLP, "grab" do
|
4
|
+
|
5
|
+
def grab(x)
|
6
|
+
DBLP.grab(x)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'works on an existing entry' do
|
10
|
+
grab("journals/tse/DamasLDL05").should be_a(Hash)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'raises a NotFoundError on unexisting entry' do
|
14
|
+
lambda{ grab("nosuchone") }.should raise_error(NotFoundError, /nosuchone/)
|
15
|
+
end
|
16
|
+
|
17
|
+
end # describe DBLP#grab
|
18
|
+
end # module Rea
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
module DBLP
|
4
|
+
describe QueryResultParser do
|
5
|
+
|
6
|
+
def parse(x)
|
7
|
+
QueryResultParser.parse(Path.dir/"fixtures/query_results"/x)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'fails gracefully on unrecognized' do
|
11
|
+
lambda{
|
12
|
+
parse("Unrecognized.xml")
|
13
|
+
}.should raise_error(ParseFormatError, /Unrecognized.xml/)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'fails gracefully on erroneous' do
|
17
|
+
lambda{
|
18
|
+
parse("Erroneous.xml")
|
19
|
+
}.should raise_error(ParseError, /Erroneous.xml/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'parses query results correctly' do
|
23
|
+
parse("QueryResult.xml").first.should eq({
|
24
|
+
:kind => "inproceedings",
|
25
|
+
:key => WorkKey("dblp://conf/icse/DamasLRL09"),
|
26
|
+
:title => "Analyzing critical process models through behavior model synthesis.",
|
27
|
+
:source => "ICSE",
|
28
|
+
:year => "2009",
|
29
|
+
:authors => ["Christophe Damas",
|
30
|
+
"Bernard Lambeau",
|
31
|
+
"Francois Roucoux",
|
32
|
+
"Axel van Lamsweerde"]
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end # module DBLP
|
38
|
+
end # module Rea
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
describe DBLP, "search" do
|
4
|
+
|
5
|
+
def search(x)
|
6
|
+
DBLP.search(x)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'works with a title' do
|
10
|
+
search(:title => "Generating Annotated Behavior Models").should be_a(Alf::Relation)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'raises an NotImplementedError if no title' do
|
14
|
+
lambda{ search(:author => "Lambeau") }.should raise_error(NotImplementedError, /Lambeau/)
|
15
|
+
end
|
16
|
+
|
17
|
+
end # describe DBLP#grab
|
18
|
+
end # module Rea
|
data/spec/spec_helper.rb
ADDED
data/spec/test_rea.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
describe WorkKey, ".parse" do
|
4
|
+
|
5
|
+
it 'works on a typical dblp key' do
|
6
|
+
wk = WorkKey.parse("dblp://conf/icse/DamasLRL09")
|
7
|
+
wk.should be_a(WorkKey)
|
8
|
+
wk.provider.should eq("dblp")
|
9
|
+
wk.identifier.should eq("conf/icse/DamasLRL09")
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'is aliased as Rea::WorkKey()' do
|
13
|
+
Rea::WorkKey("dblp://conf/icse/DamasLRL09").should be_a(WorkKey)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'is idempotent' do
|
17
|
+
wk = Rea::WorkKey("dblp://conf/icse/DamasLRL09")
|
18
|
+
Rea::WorkKey(wk).should eq(wk)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'raises an ArgumentError on an invalid key' do
|
22
|
+
proc{
|
23
|
+
WorkKey.parse("invalidkey")
|
24
|
+
}.should raise_error(ArgumentError, "Invalid work key invalidkey")
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end # module Rea
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
module Rea
|
3
|
+
describe WorkKey, "to_ruby_literal" do
|
4
|
+
|
5
|
+
let(:wk){ Rea::WorkKey("dblp://conf/icse/DamasLRL09") }
|
6
|
+
|
7
|
+
it 'returns an evaluable expression' do
|
8
|
+
eval(wk.to_ruby_literal).should be_a(WorkKey)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should be equal to the original' do
|
12
|
+
eval(wk.to_ruby_literal).should eq(wk)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should be understood by Alf' do
|
16
|
+
Alf::Tools.to_ruby_literal(wk).should eq(wk.to_ruby_literal)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end # module Rea
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Installs a rake task for debuging the announcement mail.
|
2
|
+
#
|
3
|
+
# This file installs the 'rake debug_mail' that flushes an announcement mail
|
4
|
+
# for your library on the standard output. It is automatically generated
|
5
|
+
# by Noe from your .noespec file, and should therefore be configured there,
|
6
|
+
# under the variables/rake_tasks/debug_mail entry, as illustrated below:
|
7
|
+
#
|
8
|
+
# variables:
|
9
|
+
# rake_tasks:
|
10
|
+
# debug_mail:
|
11
|
+
# rx_changelog_sections: /^#/
|
12
|
+
# nb_changelog_sections: 1
|
13
|
+
# ...
|
14
|
+
#
|
15
|
+
# If you have specific needs requiring manual intervention on this file,
|
16
|
+
# don't forget to set safe-override to false in your noe specification:
|
17
|
+
#
|
18
|
+
# template-info:
|
19
|
+
# manifest:
|
20
|
+
# tasks/debug_mail.rake:
|
21
|
+
# safe-override: false
|
22
|
+
#
|
23
|
+
# The mail template used can be found in debug_mail.txt. That file may be
|
24
|
+
# changed to tune the mail you want to send. If you do so, don't forget to
|
25
|
+
# add a manifest entry in your .noespec file to avoid overriding you
|
26
|
+
# changes. The mail template uses wlang, with parentheses for block
|
27
|
+
# delimiters.
|
28
|
+
#
|
29
|
+
# template-info:
|
30
|
+
# manifest:
|
31
|
+
# tasks/debug_mail.txt:
|
32
|
+
# safe-override: false
|
33
|
+
#
|
34
|
+
desc "Debug the release announcement mail"
|
35
|
+
task :debug_mail do
|
36
|
+
begin
|
37
|
+
require 'wlang'
|
38
|
+
rescue LoadError
|
39
|
+
abort "wlang is not available. Try 'gem install wlang'"
|
40
|
+
end
|
41
|
+
require 'yaml'
|
42
|
+
|
43
|
+
# Check that a .noespec file exists
|
44
|
+
noespec_file = File.expand_path('../../rea.noespec', __FILE__)
|
45
|
+
unless File.exists?(noespec_file)
|
46
|
+
raise "Unable to find .noespec project file, sorry."
|
47
|
+
end
|
48
|
+
|
49
|
+
# Load it as well as variables and options
|
50
|
+
noespec = YAML::load(File.read(noespec_file))
|
51
|
+
vars = noespec['variables'] || {}
|
52
|
+
|
53
|
+
# Changes are taken from CHANGELOG
|
54
|
+
logs = Dir[File.expand_path("../../CHANGELOG.*", __FILE__)]
|
55
|
+
unless logs.size == 1
|
56
|
+
abort "Unable to find a changelog file"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Load interesting changesets
|
60
|
+
changes, end_found = [], 0
|
61
|
+
File.readlines(logs.first).select{|line|
|
62
|
+
if line =~ /^# /
|
63
|
+
break if end_found >= 1
|
64
|
+
end_found += 1
|
65
|
+
end
|
66
|
+
changes << line
|
67
|
+
}
|
68
|
+
vars['changes'] = changes.join
|
69
|
+
|
70
|
+
# WLang template
|
71
|
+
template = File.expand_path('../debug_mail.txt', __FILE__)
|
72
|
+
|
73
|
+
# Let's go!
|
74
|
+
$stdout << WLang::file_instantiate(template, vars, "wlang/active-text")
|
75
|
+
end
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# Installs rake tasks for gemming and packaging
|
2
|
+
#
|
3
|
+
# This file installs the 'rake package', 'rake gem' tasks and associates
|
4
|
+
# (clobber_package, repackage, ...). It is automatically generated by Noe
|
5
|
+
# from your .noespec file, and should therefore be configured there, under
|
6
|
+
# the variables/rake_tasks/gem entry, as illustrated below:
|
7
|
+
#
|
8
|
+
# variables:
|
9
|
+
# rake_tasks:
|
10
|
+
# gem:
|
11
|
+
# package_dir: pkg
|
12
|
+
# need_tar: false
|
13
|
+
# need_tar_gz: false
|
14
|
+
# need_tar_bz2: false
|
15
|
+
# need_zip: false
|
16
|
+
# ...
|
17
|
+
#
|
18
|
+
# If you have specific needs requiring manual intervention on this file,
|
19
|
+
# don't forget to set safe-override to false in your noe specification:
|
20
|
+
#
|
21
|
+
# template-info:
|
22
|
+
# manifest:
|
23
|
+
# tasks/gem.rake:
|
24
|
+
# safe-override: false
|
25
|
+
#
|
26
|
+
begin
|
27
|
+
require 'rubygems/package_task'
|
28
|
+
Gem::PackageTask.new($gemspec) do |t|
|
29
|
+
|
30
|
+
# Name of the package
|
31
|
+
t.name = $gemspec.name
|
32
|
+
|
33
|
+
# Version of the package
|
34
|
+
t.version = $gemspec.version
|
35
|
+
|
36
|
+
# Directory used to store the package files
|
37
|
+
t.package_dir = "pkg"
|
38
|
+
|
39
|
+
# True if a gzipped tar file (tgz) should be produced
|
40
|
+
t.need_tar = false
|
41
|
+
|
42
|
+
# True if a gzipped tar file (tar.gz) should be produced
|
43
|
+
t.need_tar_gz = false
|
44
|
+
|
45
|
+
# True if a bzip2'd tar file (tar.bz2) should be produced
|
46
|
+
t.need_tar_bz2 = false
|
47
|
+
|
48
|
+
# True if a zip file should be produced (default is false)
|
49
|
+
t.need_zip = false
|
50
|
+
|
51
|
+
# List of files to be included in the package.
|
52
|
+
t.package_files = $gemspec.files
|
53
|
+
|
54
|
+
# Tar command for gzipped or bzip2ed archives.
|
55
|
+
t.tar_command = "tar"
|
56
|
+
|
57
|
+
# Zip command for zipped archives.
|
58
|
+
t.zip_command = "zip"
|
59
|
+
|
60
|
+
end
|
61
|
+
rescue LoadError
|
62
|
+
task :gem do
|
63
|
+
abort 'rubygems/package_task is not available. You should verify your rubygems installation'
|
64
|
+
end
|
65
|
+
task :package do
|
66
|
+
abort 'rubygems/package_task is not available. You should verify your rubygems installation'
|
67
|
+
end
|
68
|
+
end
|