rea 0.0.1
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/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
|