gisele 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 ADDED
@@ -0,0 +1,5 @@
1
+ # 0.0.1 / FIX ME
2
+
3
+ * Enhancements
4
+
5
+ * Birthday!
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :runtime do
4
+ gem "citrus", "~> 2.4"
5
+ gem "epath", "~> 0.0.1"
6
+ gem "quickl", "~> 0.4.3"
7
+ gem "awesome_print", "~> 1.0"
8
+ end
9
+
10
+ group :development do
11
+ gem "rake", "~> 0.9.2"
12
+ gem "bundler", "~> 1.0"
13
+ gem "rspec", "~> 2.8.0"
14
+ gem "wlang", "~> 0.10.2"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ awesome_print (1.0.2)
5
+ citrus (2.4.1)
6
+ diff-lcs (1.1.3)
7
+ epath (0.0.1)
8
+ quickl (0.4.3)
9
+ rake (0.9.2.2)
10
+ rspec (2.8.0)
11
+ rspec-core (~> 2.8.0)
12
+ rspec-expectations (~> 2.8.0)
13
+ rspec-mocks (~> 2.8.0)
14
+ rspec-core (2.8.0)
15
+ rspec-expectations (2.8.0)
16
+ diff-lcs (~> 1.1.2)
17
+ rspec-mocks (2.8.0)
18
+ wlang (0.10.2)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ awesome_print (~> 1.0)
25
+ bundler (~> 1.0)
26
+ citrus (~> 2.4)
27
+ epath (~> 0.0.1)
28
+ quickl (~> 0.4.3)
29
+ rake (~> 0.9.2)
30
+ rspec (~> 2.8.0)
31
+ wlang (~> 0.10.2)
data/LICENCE.md ADDED
@@ -0,0 +1,22 @@
1
+ # The MIT Licence
2
+
3
+ Copyright (c) 2012 - The University of Louvain
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,16 @@
1
+ gisele.gemspec
2
+ gisele.noespec
3
+ .gemtest
4
+ CHANGELOG.md
5
+ Gemfile
6
+ Gemfile.lock
7
+ bin/**/*
8
+ examples/**/*
9
+ lib/**/*
10
+ LICENCE.md
11
+ Manifest.txt
12
+ Rakefile
13
+ README.md
14
+ spec/**/*
15
+ tasks/**/*
16
+ test/**/*
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # Gisele
2
+
3
+ Gisele is a Process Analyzer Toolset
4
+
5
+ ## Description
6
+
7
+ This is the process modeling and analysis toolset developed during the Gisele and
8
+ PIPAS research projects held at the University of Louvain in 2008-2012.
9
+
10
+ ## Installation
11
+
12
+ This project requires an installation of ruby >= 1.9.2. Then,
13
+
14
+ gem install gisele
15
+ gisele --help
16
+
17
+ For contributors (UCLouvain students, in particular), please consider the following
18
+ scenario:
19
+
20
+ gem install bundler --pre
21
+ git clone https://blambeau@github.com/blambeau/gisele.git # or your own fork
22
+ cd gisele
23
+ bundle install
24
+ rake test # please report any test failure on github
25
+ bundle exec ./bin/gisele --help
26
+
27
+ ## Contributing
28
+
29
+ Gisele is distributed under a MIT license. The common github workflow (fork/pull request)
30
+ applies. Please take contact with Bernard Lambeau with any question.
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ begin
2
+ gem "bundler", "~> 1.0"
3
+ require "bundler/setup"
4
+ rescue LoadError => ex
5
+ puts ex.message
6
+ abort "Bundler failed to load, (did you run 'gem install bundler' ?)"
7
+ end
8
+
9
+ # Dynamically load the gem spec
10
+ $gemspec_file = File.expand_path('../gisele.gemspec', __FILE__)
11
+ $gemspec = Kernel.eval(File.read($gemspec_file))
12
+
13
+ # We run tests by default
14
+ task :default => :test
15
+
16
+ #
17
+ # Install all tasks found in tasks folder
18
+ #
19
+ # See .rake files there for complete documentation.
20
+ #
21
+ Dir["tasks/*.rake"].each do |taskfile|
22
+ load taskfile
23
+ end
data/bin/gisele ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ require 'gisele/command'
4
+ rescue LoadError
5
+ $:.unshift File.expand_path('../../lib', __FILE__)
6
+ require 'gisele/command'
7
+ end
8
+ Gisele::Command::run(ARGV)
@@ -0,0 +1,73 @@
1
+ #
2
+ # This is a Gisele process for the Meeting Scheduler example, similar to what can be found
3
+ # in [Lam11]. The main difference between this model and the one defined there is the use
4
+ # of tracking variables. Tracking variables are introduced and explained in [Dam11].
5
+ #
6
+ # The Meeting Scheduler examplar [Fea97]
7
+ #
8
+ # A meeting initiator issues a meeting request, specifying the expected participants and
9
+ # the date range within which the meeting should take place. The scheduler then sends an
10
+ # electronic invitation to each participant, requesting them to provide their date
11
+ # constraints.
12
+ #
13
+ # A date conflict occurs when no date can be found that fits all participant constraints.
14
+ # In such case, the initiator may extend the date range or request some participants to
15
+ # weaken their constraints; a new scheduling cycle is then required. Otherwise, the
16
+ # meeting is planned at a date meeting all constraints.
17
+ #
18
+ # A soft goal requires meetings to be scheduled as quickly as possible once initiated;
19
+ # another one requires interactions with participants to be minimized. In the simplified
20
+ # version considered here, only two scheduling cycles are allowed; the meeting is planned
21
+ # after that. In such case, we will assume that the best date is chosen so as to maximize
22
+ # the number of participants attending. We also ignore features like meeting cancellations,
23
+ # meeting locations, etc.
24
+ #
25
+ # References
26
+ #
27
+ # * [Dam11] Christophe Damas, Analyzing Multi-View Models of Software Systems, PhD thesis,
28
+ # University of Louvain, November 2011
29
+ # * [Fea97] M.S. Feather, S. Fickas, A. Finkelstein and A. van Lamsweerde, Requirements and
30
+ # Specification Exemplars, Automated Software Engineering, 1997
31
+ # * [Lam11] Bernard Lambeau, Synthesizing Multi-View Models of Software Systems, PhD thesis,
32
+ # University of Louvain, November 2011
33
+ #
34
+ task MeetingScheduling
35
+
36
+ # This fluent encodes the occurence of a second cycle, becoming true when constraints
37
+ # have been weakened or the date range extended.
38
+ fluent secondCycle
39
+ {WeakenConstraints:end, ExtendDateRange:end},
40
+ {InitiateMeeting:end}
41
+ initially false
42
+
43
+ # A date conflict may only occur when constraints are acquired or weakened. Being a tracking
44
+ # variable and not fluent, we do not know the exact value of this variable when these tasks
45
+ # occur.
46
+ trackvar dateConflict
47
+ {AcquireConstraints:end, WeakenConstraints:end}
48
+ initially false
49
+
50
+ # The arbitrator decides to resolve a conflict during the Arbitrate task. The following
51
+ # definition does not capture the precise value of the variable but only that the value
52
+ # can only change during Arbitrate.
53
+ trackvar resolveByWeakening
54
+ {Arbitrate:end}
55
+ initially false
56
+
57
+ # This is the task refinement
58
+ refinement
59
+ InitiateMeeting
60
+ AcquireConstraints
61
+ while dateConflict and not(secondCycle)
62
+ Arbitrate
63
+ if resolveByWeakening
64
+ WeakenConstraints
65
+ else
66
+ ExtendDateRange
67
+ AcquireConstraints
68
+ end
69
+ end
70
+ ScheduleMeeting
71
+ end
72
+
73
+ end
data/gisele.gemspec ADDED
@@ -0,0 +1,191 @@
1
+ # We require your library, mainly to have access to the VERSION number.
2
+ # Feel free to set $version manually.
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
4
+ require "gisele/version"
5
+ $version = Gisele::Version.to_s
6
+
7
+ #
8
+ # This is your Gem specification. Default values are provided so that your library
9
+ # should be correctly packaged given what you have described in the .noespec file.
10
+ #
11
+ Gem::Specification.new do |s|
12
+
13
+ ################################################################### ABOUT YOUR GEM
14
+
15
+ # Gem name (required)
16
+ s.name = "gisele"
17
+
18
+ # Gem version (required)
19
+ s.version = $version
20
+
21
+ # A short summary of this gem
22
+ #
23
+ # This is displayed in `gem list -d`.
24
+ s.summary = "Gisele is a Process Analyzer Toolset"
25
+
26
+ # A long description of this gem (required)
27
+ #
28
+ # The description should be more detailed than the summary. For example,
29
+ # you might wish to copy the entire README into the description.
30
+ s.description = "This is a fresh-new implementation of the process analysis techniques\ndeveloped in the Gisele and PIPAS research projects at UCLouvain"
31
+
32
+ # The URL of this gem home page (optional)
33
+ s.homepage = "https://github.com/blambeau/gisele"
34
+
35
+ # Gem publication date (required but auto)
36
+ #
37
+ # Today is automatically used by default, uncomment only if
38
+ # you know what you do!
39
+ #
40
+ # s.date = Time.now.strftime('%Y-%m-%d')
41
+
42
+ # The license(s) for the library. Each license must be a short name, no
43
+ # more than 64 characters.
44
+ #
45
+ # s.licences = %w{}
46
+
47
+ # The rubyforge project this gem lives under (optional)
48
+ #
49
+ # s.rubyforge_project = nil
50
+
51
+ ################################################################### ABOUT THE AUTHORS
52
+
53
+ # The list of author names who wrote this gem.
54
+ #
55
+ # If you are providing multiple authors and multiple emails they should be
56
+ # in the same order.
57
+ #
58
+ s.authors = ["Bernard Lambeau"]
59
+
60
+ # Contact emails for this gem
61
+ #
62
+ # If you are providing multiple authors and multiple emails they should be
63
+ # in the same order.
64
+ #
65
+ # NOTE: Somewhat strangly this attribute is always singular!
66
+ # Don't replace by s.emails = ...
67
+ s.email = ["blambeau@gmail.com"]
68
+
69
+ ################################################################### PATHS, FILES, BINARIES
70
+
71
+ # Paths in the gem to add to $LOAD_PATH when this gem is
72
+ # activated (required).
73
+ #
74
+ # The default 'lib' is typically sufficient.
75
+ s.require_paths = ["lib"]
76
+
77
+ # Files included in this gem.
78
+ #
79
+ # By default, we take all files included in the Manifest.txt file on root
80
+ # of the project. Entries of the manifest are interpreted as Dir[...]
81
+ # patterns so that lazy people may use wilcards like lib/**/*
82
+ #
83
+ here = File.expand_path(File.dirname(__FILE__))
84
+ s.files = File.readlines(File.join(here, 'Manifest.txt')).
85
+ inject([]){|files, pattern| files + Dir[File.join(here, pattern.strip)]}.
86
+ collect{|x| x[(1+here.size)..-1]}
87
+
88
+ # Test files included in this gem.
89
+ #
90
+ s.test_files = Dir["test/**/*"] + Dir["spec/**/*"]
91
+
92
+ # The path in the gem for executable scripts (optional)
93
+ #
94
+ s.bindir = "bin"
95
+
96
+ # Executables included in the gem.
97
+ #
98
+ s.executables = (Dir["bin/*"]).collect{|f| File.basename(f)}
99
+
100
+ ################################################################### REQUIREMENTS & INSTALL
101
+ # Remember the gem version requirements operators and schemes:
102
+ # = Equals version
103
+ # != Not equal to version
104
+ # > Greater than version
105
+ # < Less than version
106
+ # >= Greater than or equal to
107
+ # <= Less than or equal to
108
+ # ~> Approximately greater than
109
+ #
110
+ # Don't forget to have a look at http://lmgtfy.com/?q=Ruby+Versioning+Policies
111
+ # for setting your gem version.
112
+ #
113
+ # For your requirements to other gems, remember that
114
+ # ">= 2.2.0" (optimistic: specify minimal version)
115
+ # ">= 2.2.0", "< 3.0" (pessimistic: not greater than the next major)
116
+ # "~> 2.2" (shortcut for ">= 2.2.0", "< 3.0")
117
+ # "~> 2.2.0" (shortcut for ">= 2.2.0", "< 2.3.0")
118
+ #
119
+
120
+ #
121
+ # One call to add_dependency('gem_name', 'gem version requirement') for each
122
+ # runtime dependency. These gems will be installed with your gem.
123
+ # One call to add_development_dependency('gem_name', 'gem version requirement')
124
+ # for each development dependency. These gems are required for developers
125
+ #
126
+ s.add_development_dependency("rake", "~> 0.9.2")
127
+ s.add_development_dependency("bundler", "~> 1.0")
128
+ s.add_development_dependency("rspec", "~> 2.8.0")
129
+ s.add_development_dependency("wlang", "~> 0.10.2")
130
+ s.add_dependency("citrus", "~> 2.4")
131
+ s.add_dependency("epath", "~> 0.0.1")
132
+ s.add_dependency("quickl", "~> 0.4.3")
133
+ s.add_dependency("awesome_print", "~> 1.0")
134
+
135
+ # The version of ruby required by this gem
136
+ #
137
+ # Uncomment and set this if your gem requires specific ruby versions.
138
+ #
139
+ # s.required_ruby_version = ">= 0"
140
+
141
+ # The RubyGems version required by this gem
142
+ #
143
+ # s.required_rubygems_version = ">= 0"
144
+
145
+ # The platform this gem runs on. See Gem::Platform for details.
146
+ #
147
+ # s.platform = nil
148
+
149
+ # Extensions to build when installing the gem.
150
+ #
151
+ # Valid types of extensions are extconf.rb files, configure scripts
152
+ # and rakefiles or mkrf_conf files.
153
+ #
154
+ s.extensions = []
155
+
156
+ # External (to RubyGems) requirements that must be met for this gem to work.
157
+ # It’s simply information for the user.
158
+ #
159
+ s.requirements = nil
160
+
161
+ # A message that gets displayed after the gem is installed
162
+ #
163
+ # Uncomment and set this if you want to say something to the user
164
+ # after gem installation
165
+ #
166
+ s.post_install_message = nil
167
+
168
+ ################################################################### SECURITY
169
+
170
+ # The key used to sign this gem. See Gem::Security for details.
171
+ #
172
+ # s.signing_key = nil
173
+
174
+ # The certificate chain used to sign this gem. See Gem::Security for
175
+ # details.
176
+ #
177
+ # s.cert_chain = []
178
+
179
+ ################################################################### RDOC
180
+
181
+ # An ARGV style array of options to RDoc
182
+ #
183
+ # See 'rdoc --help' about this
184
+ #
185
+ s.rdoc_options = []
186
+
187
+ # Extra files to add to RDoc such as README
188
+ #
189
+ s.extra_rdoc_files = Dir["README.md"] + Dir["CHANGELOG.md"] + Dir["LICENCE.md"]
190
+
191
+ end
data/gisele.noespec ADDED
@@ -0,0 +1,36 @@
1
+ template-info:
2
+ name: "ruby"
3
+ version: 1.7.0
4
+ links:
5
+ source: https://github.com/blambeau/noe
6
+ manifest:
7
+ spec/test___lower__.rb:
8
+ ignore: true
9
+ variables:
10
+ lower:
11
+ gisele
12
+ upper:
13
+ Gisele
14
+ version:
15
+ 0.0.1
16
+ summary: |-
17
+ Gisele is a Process Analyzer Toolset
18
+ description: |-
19
+ This is a fresh-new implementation of the process analysis techniques
20
+ developed in the Gisele and PIPAS research projects at UCLouvain
21
+
22
+ # Authors of the project (- {name: Bob, email: bob@gmail.com}, ...)
23
+ authors:
24
+ - {name: Bernard Lambeau, email: blambeau@gmail.com}
25
+ links:
26
+ - https://github.com/blambeau/gisele
27
+ dependencies:
28
+ - {name: citrus, version: "~> 2.4", groups: [runtime]}
29
+ - {name: epath, version: "~> 0.0.1", groups: [runtime]}
30
+ - {name: quickl, version: "~> 0.4.3", groups: [runtime]}
31
+ - {name: awesome_print, version: "~> 1.0", groups: [runtime]}
32
+ #
33
+ - {name: rake, version: "~> 0.9.2", groups: [development]}
34
+ - {name: bundler, version: "~> 1.0", groups: [development]}
35
+ - {name: rspec, version: "~> 2.8.0", groups: [development]}
36
+ - {name: wlang, version: "~> 0.10.2", groups: [development]}
@@ -0,0 +1,63 @@
1
+ require 'gisele'
2
+ module Gisele
3
+ #
4
+ # Gisele - A Process Analyzer Toolset
5
+ #
6
+ # SYNOPSIS
7
+ # gisele [--version] [--help]
8
+ # gisele [--ast] PROCESS_FILE
9
+ #
10
+ # OPTIONS
11
+ # #{summarized_options}
12
+ #
13
+ # DESCRIPTION
14
+ # The Gisele process analyzer toolset provides tools and technique to model and analyze
15
+ # complex process models such as care processes.
16
+ #
17
+ # When --ast is used, the command parses a process file and prints its Abstract Syntax
18
+ # Tree (AST) on standard output. By default, this option prints the AST for manual
19
+ # debugging, that is with colors and extra information. Use --ast=ruby to get a ruby
20
+ # array for automatic processing.
21
+ #
22
+ class Gisele::Command < Quickl::Command(__FILE__, __LINE__)
23
+
24
+ # Install options
25
+ options do |opt|
26
+ @ast = nil
27
+ opt.on('--ast=[MODE]', 'Prints the process abstract syntax tree (debug,ruby)') do |value|
28
+ @ast = (value || "debug").to_sym
29
+ end
30
+ opt.on_tail('--help', "Show this help message") do
31
+ raise Quickl::Help
32
+ end
33
+ opt.on_tail('--version', 'Show version and exit') do
34
+ raise Quickl::Exit, "gisele #{Gisele::VERSION} (c) The University of Louvain"
35
+ end
36
+ end
37
+
38
+ def execute(args)
39
+ raise Quickl::Help unless args.size == 1
40
+
41
+ unless (file = Path(args.first)).exist?
42
+ raise Quickl::IOAccessError, "File does not exists: #{file}"
43
+ end
44
+
45
+ parsed = Gisele::Language::Parser.parse(file)
46
+ print_ast(parsed, @ast) if @ast
47
+ end
48
+
49
+ private
50
+
51
+ def print_ast(ast, option)
52
+ require 'awesome_print'
53
+ options = case option
54
+ when :ruby
55
+ {index: false, plain: true}
56
+ else
57
+ {}
58
+ end
59
+ ap ast, options
60
+ end
61
+
62
+ end # class Command
63
+ end # module Gisele