kosmas58-cucumber 0.1.99.23 → 0.1.100.5
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 +8 -23
- data/Manifest.txt +14 -2
- data/examples/i18n/en-lol/Rakefile +6 -0
- data/examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb +16 -0
- data/examples/i18n/en-lol/features/stuffing.feature +8 -0
- data/examples/i18n/en-lol/features/support/env.rb +8 -0
- data/examples/i18n/en-lol/lib/basket.rb +12 -0
- data/examples/i18n/en-lol/lib/belly.rb +11 -0
- data/examples/i18n/et/features/jagamine.feature +9 -0
- data/examples/jbehave/README.textile +4 -1
- data/examples/jbehave/features/trading.feature +4 -0
- data/examples/jbehave/pom.xml +5 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +6 -1
- data/examples/selenium/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium/features/support/env.rb +19 -0
- data/examples/selenium_webrat/Rakefile +6 -0
- data/examples/selenium_webrat/features/search.feature +9 -0
- data/examples/selenium_webrat/features/step_definitons/search_steps.rb +13 -0
- data/examples/selenium_webrat/features/support/env.rb +41 -0
- data/examples/self_test/Rakefile +1 -1
- data/examples/self_test/features/background/failing_background.feature +1 -0
- data/examples/self_test/features/step_definitions/sample_steps.rb +1 -1
- data/examples/self_test/features/support/tag_count_formatter.rb +1 -1
- data/examples/tickets/Rakefile +13 -8
- data/examples/tickets/cucumber.yml +2 -1
- data/examples/tickets/features/236.feature +13 -0
- data/examples/tickets/features/241.feature +13 -0
- data/examples/tickets/features/step_definitons/tickets_steps.rb +17 -4
- data/examples/tickets/features/tickets.feature +1 -1
- data/features/background.feature +9 -11
- data/features/cucumber_cli.feature +24 -1
- data/features/cucumber_cli_outlines.feature +10 -19
- data/features/report_called_undefined_steps.feature +2 -0
- data/gem_tasks/rspec.rake +3 -2
- data/lib/cucumber.rb +7 -15
- data/lib/cucumber/ast.rb +3 -3
- data/lib/cucumber/ast/background.rb +28 -66
- data/lib/cucumber/ast/examples.rb +15 -3
- data/lib/cucumber/ast/feature.rb +20 -24
- data/lib/cucumber/ast/feature_element.rb +46 -0
- data/lib/cucumber/ast/features.rb +2 -21
- data/lib/cucumber/ast/outline_table.rb +46 -14
- data/lib/cucumber/ast/py_string.rb +9 -3
- data/lib/cucumber/ast/scenario.rb +34 -73
- data/lib/cucumber/ast/scenario_outline.rb +40 -42
- data/lib/cucumber/ast/step.rb +51 -90
- data/lib/cucumber/ast/step_collection.rb +66 -0
- data/lib/cucumber/ast/step_invocation.rb +110 -0
- data/lib/cucumber/ast/table.rb +41 -21
- data/lib/cucumber/ast/tags.rb +4 -11
- data/lib/cucumber/ast/visitor.rb +35 -19
- data/lib/cucumber/broadcaster.rb +1 -3
- data/lib/cucumber/cli/configuration.rb +25 -17
- data/lib/cucumber/cli/language_help_formatter.rb +4 -4
- data/lib/cucumber/cli/main.rb +6 -4
- data/lib/cucumber/core_ext/proc.rb +2 -2
- data/lib/cucumber/formatter/ansicolor.rb +0 -1
- data/lib/cucumber/formatter/console.rb +24 -34
- data/lib/cucumber/formatter/html.rb +18 -11
- data/lib/cucumber/formatter/pretty.rb +48 -36
- data/lib/cucumber/formatter/profile.rb +6 -6
- data/lib/cucumber/formatter/progress.rb +14 -22
- data/lib/cucumber/formatter/rerun.rb +6 -6
- data/lib/cucumber/jbehave.rb +21 -26
- data/lib/cucumber/languages.yml +17 -2
- data/lib/cucumber/parser/feature.rb +26 -29
- data/lib/cucumber/parser/feature.tt +17 -12
- data/lib/cucumber/parser/treetop_ext.rb +13 -13
- data/lib/cucumber/platform.rb +0 -1
- data/lib/cucumber/rails/world.rb +2 -2
- data/lib/cucumber/rake/task.rb +1 -2
- data/lib/cucumber/step_definition.rb +21 -12
- data/lib/cucumber/step_match.rb +49 -0
- data/lib/cucumber/step_mother.rb +100 -80
- data/lib/cucumber/version.rb +2 -2
- data/lib/cucumber/world.rb +53 -0
- data/rails_generators/cucumber/templates/paths.rb +1 -1
- data/rails_generators/cucumber/templates/webrat_steps.rb +17 -17
- data/rails_generators/feature/feature_generator.rb +5 -1
- data/rails_generators/feature/templates/steps.erb +0 -4
- data/spec/cucumber/ast/background_spec.rb +32 -41
- data/spec/cucumber/ast/feature_factory.rb +10 -1
- data/spec/cucumber/ast/feature_spec.rb +7 -30
- data/spec/cucumber/ast/py_string_spec.rb +7 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +3 -0
- data/spec/cucumber/ast/scenario_spec.rb +8 -25
- data/spec/cucumber/ast/step_collection_spec.rb +8 -0
- data/spec/cucumber/ast/step_spec.rb +49 -28
- data/spec/cucumber/ast/table_spec.rb +13 -3
- data/spec/cucumber/ast/tags_spec.rb +2 -18
- data/spec/cucumber/broadcaster_spec.rb +6 -5
- data/spec/cucumber/cli/configuration_spec.rb +7 -0
- data/spec/cucumber/cli/main_spec.rb +1 -1
- data/spec/cucumber/parser/feature_parser_spec.rb +6 -5
- data/spec/cucumber/step_definition_spec.rb +16 -5
- data/spec/cucumber/step_mother_spec.rb +6 -6
- data/spec/cucumber/world/pending_spec.rb +1 -1
- metadata +24 -5
- data/lib/cucumber/ast/filter.rb +0 -22
- data/lib/cucumber/ast/steps.rb +0 -13
data/History.txt
CHANGED
@@ -56,29 +56,12 @@ which is a richer DSL than JBehave's language. -Over 20 spoken languages, Tables
|
|
56
56
|
Scenario Outlines, the rich command line, the nice output format and everything
|
57
57
|
pure Ruby users have been enjoying for a while.
|
58
58
|
|
59
|
-
== TODO Before 0.2 release
|
60
|
-
* Make sure all features and specs pass on Windows, JRuby and Ruby 1.9
|
61
|
-
* Tighten up and simplify the grammar. More edge case features/specs.
|
62
|
-
* Reintroduce StepInvocation. Reduce some of the redundant calls to StepDefinition/StepMother. Align with JBehave.
|
63
|
-
* Make some class diagrams.
|
64
|
-
* Implement at least a basic HTML formatter
|
65
|
-
* Run a single cucumber feature from rake "rake features FEATURE=/path/to/feature:line"
|
66
|
-
* Wiki page about running subsets
|
67
|
-
** file:line
|
68
|
-
*** scenario (or step within)
|
69
|
-
*** scenario outline
|
70
|
-
*** scenario outline examples
|
71
|
-
*** line in an example table
|
72
|
-
*** background (same as whole file)
|
73
|
-
*** fix bugs in any of those cases (there are some)
|
74
|
-
** --tags
|
75
|
-
*** Link to page about tags
|
76
|
-
* Tags with arguments
|
77
|
-
* cucumber.jar + examples
|
78
|
-
** Remove need for -S cucumber
|
79
|
-
** Full jar and simple jar
|
80
|
-
|
81
59
|
== Bugfixes
|
60
|
+
* New StepInvocation breaks console formatter for pending steps. (#241 Jacob Radford)
|
61
|
+
* Within Scenario Outlines when replacing with a nil in a step name use empty string instead. (#237 Joseph Wilk)
|
62
|
+
* Fixed bug with Scenario Outlines incorrectly replacing values in step tables with nil. (#237 Joseph Wilk)
|
63
|
+
* Within Scenario Outlines when replacing with a nil in multiline strings use empty string instead. (#238 Joseph Wilk)
|
64
|
+
* Re-structure the ast: Feature -> Background -> (Scenario|ScenarioOutline)*. Fixes bug with background being called outside transactions. (#181 Joseph Wilk)
|
82
65
|
* --strict always exits with status 1 (#230 Tim Cuthbertson)
|
83
66
|
* Fix error with nil values in tables raising an exception (#227 Joseph Wilk)
|
84
67
|
* Add support for using << in formatters to ensure the html formatter works (#210 Joseph Wilk)
|
@@ -96,6 +79,8 @@ pure Ruby users have been enjoying for a while.
|
|
96
79
|
* Pending steps in > steps called from steps (#65 Aslak Hellesøy)
|
97
80
|
|
98
81
|
=== New features
|
82
|
+
* Australian translation (Josh Graham)
|
83
|
+
* Added World#announce(announcment) which lets you output text to the formatted output (#222 Rob Kaufmann)
|
99
84
|
* Added Table#transpose to to allow use of vertically aligned table keys (Torbjørn Vatn, Aslak Hellesøy)
|
100
85
|
* Added Table#map_headers to to allow use of more readable headers (Rob Holland)
|
101
86
|
* New -S/--step-definitions option. Useful (among other things) for tools that implement automcompletion. (#208 Aslak Hellesøy).
|
@@ -136,7 +121,7 @@ pure Ruby users have been enjoying for a while.
|
|
136
121
|
* Pure Ruby features are no longer supported.
|
137
122
|
* Remove --color option in autotest. Can be added manually in cucumber.yml (#215 Jean-Michel Garnier)
|
138
123
|
|
139
|
-
== (0.16.4 aslakhellesoy-
|
124
|
+
== (0.16.4 aslakhellesoy-cucumber gem on GitHub)
|
140
125
|
|
141
126
|
Bugfix release.
|
142
127
|
|
data/Manifest.txt
CHANGED
@@ -30,6 +30,12 @@ examples/i18n/de/features/addition.feature
|
|
30
30
|
examples/i18n/de/features/division.feature
|
31
31
|
examples/i18n/de/features/step_definitons/calculator_steps.rb
|
32
32
|
examples/i18n/de/lib/calculator.rb
|
33
|
+
examples/i18n/en-lol/Rakefile
|
34
|
+
examples/i18n/en-lol/features/step_definitions/cucumbrz_steps.rb
|
35
|
+
examples/i18n/en-lol/features/stuffing.feature
|
36
|
+
examples/i18n/en-lol/features/support/env.rb
|
37
|
+
examples/i18n/en-lol/lib/basket.rb
|
38
|
+
examples/i18n/en-lol/lib/belly.rb
|
33
39
|
examples/i18n/en/Rakefile
|
34
40
|
examples/i18n/en/features/addition.feature
|
35
41
|
examples/i18n/en/features/division.feature
|
@@ -169,6 +175,8 @@ examples/tickets/features/177/1.feature
|
|
169
175
|
examples/tickets/features/177/2.feature
|
170
176
|
examples/tickets/features/177/3.feature
|
171
177
|
examples/tickets/features/180.feature
|
178
|
+
examples/tickets/features/236.feature
|
179
|
+
examples/tickets/features/241.feature
|
172
180
|
examples/tickets/features/lib/eatting_machine.rb
|
173
181
|
examples/tickets/features/lib/pantry.rb
|
174
182
|
examples/tickets/features/scenario_outline.feature
|
@@ -210,14 +218,15 @@ lib/cucumber/ast/background.rb
|
|
210
218
|
lib/cucumber/ast/comment.rb
|
211
219
|
lib/cucumber/ast/examples.rb
|
212
220
|
lib/cucumber/ast/feature.rb
|
221
|
+
lib/cucumber/ast/feature_element.rb
|
213
222
|
lib/cucumber/ast/features.rb
|
214
|
-
lib/cucumber/ast/filter.rb
|
215
223
|
lib/cucumber/ast/outline_table.rb
|
216
224
|
lib/cucumber/ast/py_string.rb
|
217
225
|
lib/cucumber/ast/scenario.rb
|
218
226
|
lib/cucumber/ast/scenario_outline.rb
|
219
227
|
lib/cucumber/ast/step.rb
|
220
|
-
lib/cucumber/ast/
|
228
|
+
lib/cucumber/ast/step_collection.rb
|
229
|
+
lib/cucumber/ast/step_invocation.rb
|
221
230
|
lib/cucumber/ast/table.rb
|
222
231
|
lib/cucumber/ast/tags.rb
|
223
232
|
lib/cucumber/ast/visitor.rb
|
@@ -257,8 +266,10 @@ lib/cucumber/rails/rspec.rb
|
|
257
266
|
lib/cucumber/rails/world.rb
|
258
267
|
lib/cucumber/rake/task.rb
|
259
268
|
lib/cucumber/step_definition.rb
|
269
|
+
lib/cucumber/step_match.rb
|
260
270
|
lib/cucumber/step_mother.rb
|
261
271
|
lib/cucumber/version.rb
|
272
|
+
lib/cucumber/world.rb
|
262
273
|
rails_generators/cucumber/USAGE
|
263
274
|
rails_generators/cucumber/cucumber_generator.rb
|
264
275
|
rails_generators/cucumber/templates/cucumber
|
@@ -280,6 +291,7 @@ spec/cucumber/ast/feature_spec.rb
|
|
280
291
|
spec/cucumber/ast/py_string_spec.rb
|
281
292
|
spec/cucumber/ast/scenario_outline_spec.rb
|
282
293
|
spec/cucumber/ast/scenario_spec.rb
|
294
|
+
spec/cucumber/ast/step_collection_spec.rb
|
283
295
|
spec/cucumber/ast/step_spec.rb
|
284
296
|
spec/cucumber/ast/table_spec.rb
|
285
297
|
spec/cucumber/ast/tags_spec.rb
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ICANHAZ /^IN TEH BEGINNIN (\d+) CUCUMBRZ$/ do |n|
|
2
|
+
@basket = Basket.new(n.to_i)
|
3
|
+
end
|
4
|
+
|
5
|
+
WEN /^I EAT (\d+) CUCUMBRZ$/ do |n|
|
6
|
+
@belly = Belly.new
|
7
|
+
@belly.eat(@basket.take(n.to_i))
|
8
|
+
end
|
9
|
+
|
10
|
+
DEN /^I HAS (\d+) CUCUMBERZ IN MAH BELLY$/ do |n|
|
11
|
+
@belly.cukes.should == n.to_i
|
12
|
+
end
|
13
|
+
|
14
|
+
AN /^IN TEH END (\d+) CUCUMBRZ KTHXBAI$/ do |n|
|
15
|
+
@basket.cukes.should == n.to_i
|
16
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Omadus: Jagamine
|
2
|
+
Rumalate vigade vältimiseks
|
3
|
+
Peavad kassapidajad saama arvutada murdudes
|
4
|
+
|
5
|
+
Stsenaarium: Tavalised numrbid
|
6
|
+
Eeldades et olen sisestanud kalkulaatorisse numbri 3
|
7
|
+
Ja olen sisestanud kalkulaatorisse numbri 2
|
8
|
+
Kui ma vajutan jaga
|
9
|
+
Siis vastuseks peab ekraanil kuvatama 1.5
|
@@ -8,7 +8,10 @@ First, compile the java code (and JBehave steps)
|
|
8
8
|
|
9
9
|
<code>mvn compile jar:jar</code>
|
10
10
|
|
11
|
-
Second,
|
11
|
+
Second, set your CLASSPATH
|
12
|
+
<code>export CLASSPATH=~/.m2/repository/cucumber/cucumber-support/0.2/cucumber-support-0.2.jar:~/.m2/repository/org/jbehave/jbehave-core/2.1.1/jbehave-core-2.1.1.jar:~/.m2/repository/org/hamcrest/hamcrest-all/1.1/hamcrest-all-1.1.jar:~/.m2/repository/junit/junit/4.4/junit-4.4.jar</code>
|
13
|
+
|
14
|
+
Third, run Cucumber:
|
12
15
|
|
13
16
|
<code>jruby -S cucumber features</code>
|
14
17
|
|
@@ -17,6 +17,10 @@ Feature: Trading
|
|
17
17
|
Then the alert status should be OFF
|
18
18
|
|
19
19
|
Scenario: Trader sells all stocks
|
20
|
+
# Given the following table
|
21
|
+
# | a | b |
|
22
|
+
# | 1 | 2 |
|
23
|
+
# | 3 | 4 |
|
20
24
|
Given a trader of name Mauro
|
21
25
|
Given a stock of prices 0.5,1.0 and a threshold of 1.5
|
22
26
|
When the stock is traded at 2.0
|
data/examples/jbehave/pom.xml
CHANGED
@@ -18,6 +18,11 @@
|
|
18
18
|
</repositories>
|
19
19
|
|
20
20
|
<dependencies>
|
21
|
+
<dependency>
|
22
|
+
<groupId>cucumber</groupId>
|
23
|
+
<artifactId>cucumber-support</artifactId>
|
24
|
+
<version>0.2</version>
|
25
|
+
</dependency>
|
21
26
|
<dependency>
|
22
27
|
<groupId>org.jbehave</groupId>
|
23
28
|
<artifactId>jbehave-core</artifactId>
|
data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java
CHANGED
@@ -18,6 +18,7 @@ import org.jbehave.scenario.steps.ParameterConverters;
|
|
18
18
|
import org.jbehave.scenario.steps.SilentStepMonitor;
|
19
19
|
import org.jbehave.scenario.steps.Steps;
|
20
20
|
import org.jbehave.scenario.steps.StepsConfiguration;
|
21
|
+
import cucumber.ast.Table;
|
21
22
|
|
22
23
|
public class TraderSteps extends Steps {
|
23
24
|
|
@@ -46,6 +47,11 @@ public class TraderSteps extends Steps {
|
|
46
47
|
stock = new Stock(prices, threshold);
|
47
48
|
}
|
48
49
|
|
50
|
+
@Given("the following table")
|
51
|
+
public void theFollowingTable(Table table) {
|
52
|
+
System.out.println("My table:" + table);
|
53
|
+
}
|
54
|
+
|
49
55
|
@When("the stock is traded at %price")
|
50
56
|
public void theStockIsTradedAt(double price) {
|
51
57
|
stock.tradeAt(price);
|
@@ -61,5 +67,4 @@ public class TraderSteps extends Steps {
|
|
61
67
|
trader.sellAllStocks();
|
62
68
|
ensureThat(trader.getStocks().size(), equalTo(0));
|
63
69
|
}
|
64
|
-
|
65
70
|
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Given 'I am on the Google search page' do
|
2
|
+
@browser.open('http://www.google.com/')
|
3
|
+
end
|
4
|
+
|
5
|
+
When /I search for "(.*)"/ do |query|
|
6
|
+
@browser.type('q', query)
|
7
|
+
@browser.click 'btnG'
|
8
|
+
@browser.wait_for_page_to_load
|
9
|
+
end
|
10
|
+
|
11
|
+
Then /I should see a link to (.*)/ do |expected_url|
|
12
|
+
@browser.is_element_present("css=a[href='#{expected_url}']").should be_true
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec/expectations'
|
2
|
+
require 'selenium'
|
3
|
+
|
4
|
+
# "before all"
|
5
|
+
browser = Selenium::SeleniumDriver.new("localhost", 4444, "*chrome", "http://localhost", 15000)
|
6
|
+
|
7
|
+
Before do
|
8
|
+
@browser = browser
|
9
|
+
@browser.start
|
10
|
+
end
|
11
|
+
|
12
|
+
After do
|
13
|
+
@browser.stop
|
14
|
+
end
|
15
|
+
|
16
|
+
# "after all"
|
17
|
+
at_exit do
|
18
|
+
browser.close rescue nil
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Given 'I am on the Google search page' do
|
2
|
+
visit('http://www.google.com/')
|
3
|
+
end
|
4
|
+
|
5
|
+
When /I search for "(.*)"/ do |query|
|
6
|
+
fill_in('q', :with => query)
|
7
|
+
click_button('btnG')
|
8
|
+
selenium.wait_for_page_to_load
|
9
|
+
end
|
10
|
+
|
11
|
+
Then /I should see a link to (.*)/ do |expected_url|
|
12
|
+
click_link(expected_url)
|
13
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec/expectations'
|
2
|
+
|
3
|
+
# START HACK
|
4
|
+
# Webrat's Selenium wrongly assumes Rails in available. # We'll just fool it...
|
5
|
+
module ActionController
|
6
|
+
class IntegrationTest
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def silence_stream(*args)
|
11
|
+
yield if block_given?
|
12
|
+
end
|
13
|
+
# END HACK
|
14
|
+
|
15
|
+
# RSpec
|
16
|
+
require 'spec/expectations'
|
17
|
+
|
18
|
+
# Webrat
|
19
|
+
require 'webrat'
|
20
|
+
Webrat.configure do |config|
|
21
|
+
config.mode = :selenium
|
22
|
+
end
|
23
|
+
|
24
|
+
World do
|
25
|
+
session = Webrat::SeleniumSession.new
|
26
|
+
session.extend(Webrat::Methods)
|
27
|
+
session.extend(Webrat::Selenium::Methods)
|
28
|
+
session.extend(Webrat::Selenium::Matchers)
|
29
|
+
session
|
30
|
+
end
|
31
|
+
|
32
|
+
# START HACK
|
33
|
+
# Disable Rails-specific code
|
34
|
+
module Webrat
|
35
|
+
def self.start_app_server
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.stop_app_server
|
39
|
+
end
|
40
|
+
end
|
41
|
+
# END HACK
|
data/examples/self_test/Rakefile
CHANGED
@@ -19,7 +19,7 @@ module Tag
|
|
19
19
|
def print_summary
|
20
20
|
matrix = @counts.to_a.sort{|paira, pairb| paira[0] <=> pairb[0]}.transpose
|
21
21
|
table = Cucumber::Ast::Table.new(matrix)
|
22
|
-
Cucumber::Formatter::Pretty.new(@step_mother, @io, {}).visit_multiline_arg(table
|
22
|
+
Cucumber::Formatter::Pretty.new(@step_mother, @io, {}).visit_multiline_arg(table)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/examples/tickets/Rakefile
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
2
|
require 'cucumber/rake/task'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Cucumber::Rake::Task.new do |t|
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
Cucumber::Rake::Task.new(:pretty) do |t|
|
5
|
+
t.cucumber_opts = "--format pretty"
|
6
|
+
end
|
7
|
+
|
8
|
+
Cucumber::Rake::Task.new(:html) do |t|
|
9
|
+
t.cucumber_opts = "--format html --out features.html"
|
10
|
+
end
|
11
|
+
|
12
|
+
Cucumber::Rake::Task.new(:progress) do |t|
|
13
|
+
t.cucumber_opts = "--format progress -i -n"
|
14
|
+
end
|
15
|
+
|
16
|
+
task :default => [:pretty, :html, :progress]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: Unsubstituted argument placeholder
|
2
|
+
|
3
|
+
Scenario Outline: See Annual Leave Details (as Management & Human Resource)
|
4
|
+
Given the following users exist in the system
|
5
|
+
| name | email | role_assignments | group_memberships |
|
6
|
+
| Jane | jane@fmail.com | <role> | Sales (manager) |
|
7
|
+
| Max | max@fmail.com | | Sales (member) |
|
8
|
+
| Carol | carol@fmail.com | | Sales (member) |
|
9
|
+
| Cat | cat@fmail.com | | |
|
10
|
+
|
11
|
+
Examples:
|
12
|
+
| role |
|
13
|
+
| HUMAN RESOURCE |
|