mattscilipoti-model_steps 0.2.2 → 0.3.0

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/README.rdoc CHANGED
@@ -1,7 +1,93 @@
1
1
  = mattscilipoti-model_steps
2
2
 
3
- Description goes here.
4
3
 
4
+
5
+ Attempt to answer 4 needs:
6
+ 1. Support creation of models with attributes
7
+ 2. Uniquely identify models in cucumber steps
8
+ 3. Reference associated models
9
+ 4. Support factory derivations i.e. user_admin, user_manager
10
+
11
+ Attempt:
12
+
13
+
14
+ Assume:
15
+ User belongs_to Organization
16
+ User has_many Courses
17
+ Course belongs_to Topic
18
+ User has_friendly_id :login
19
+
20
+ Note: it is dependent on friendly_id: http://github.com/norman/friendly_id
21
+
22
+ General: a step that ends in colon (:) expects a cucumber table.
23
+
24
+
25
+ 1. Support creation of models with attributes
26
+ Given these Users exist:
27
+ |login |first_name |last_name |
28
+ |tester |joe |tester |
29
+ |anon |John |Doe |
30
+ * only one row is required. Works the same for one, or more, rows.
31
+
32
+ This will call:
33
+ Factory(:user, :login => 'tester', :first_name => 'joe', :last_name => 'tester')
34
+ Factory(:user, :login => 'anon', :first_name => 'John', :last_name => 'Doe')
35
+
36
+ Comparison:
37
+ pickle:
38
+ Single:
39
+ Given a user exists with login: "tester", first_name: "joe", last_name: "tester"
40
+
41
+ Multiple:
42
+ Given the following Users exist
43
+ |login |first_name |last_name |
44
+ |tester |joe |tester |
45
+ |anon |John |Doe |
46
+
47
+ factory_girl:
48
+ Given
49
+
50
+
51
+ 1. Uniquely identify models in cucumber steps
52
+ Model:friendly_id
53
+ User:Matt
54
+
55
+ Possible options:
56
+ User:"Matt"
57
+ User|matt
58
+
59
+ 2. Reference associated models
60
+ A. utilize associations in tables
61
+ Given these people exist:
62
+ |name |organization |
63
+ |Matt |Dept. A|
64
+
65
+ This will identify that 'role' is an association and perform the equivalent of:
66
+ Role.find_by_name('Admin') || Factory(:role, :name => 'Admin') #using Factory(:role, Topic.friendly_column_name => 'Admin')
67
+
68
+ B. ModelA has many ModelBs
69
+ Given User:Matt has these Courses:
70
+ |name |topic |
71
+ |B101 |Biology |
72
+ |CS101 |CompSci |
73
+
74
+ Executes:
75
+ Factory(:user, :course => :name => 'B101', :topic => Topic.find('Biology') || Factory(:topic, Topic.friendly_column_name => 'biology'))
76
+ Factory(:user, :course => :name => 'CS101', :topic => Topic.find('CompSci'))
77
+
78
+ 3. Support factory derivations i.e. user_admin, user_manager
79
+ Given this User(Admin) exists:
80
+ |first_name |
81
+ |Jane |
82
+
83
+ Executes:
84
+ Factory(:user_admin, :name => 'Jane')
85
+
86
+ Given a User(with associations) exists
87
+
88
+ Executes:
89
+ Factory(:user_with_associations)
90
+
5
91
  == Note on Patches/Pull Requests
6
92
 
7
93
  * Fork the project.
data/Rakefile CHANGED
@@ -9,7 +9,8 @@ begin
9
9
  gem.description = %Q{Step Definitions for cucumber which support ActiveRecord Models}
10
10
  gem.email = "matt@scilipoti.name"
11
11
  gem.homepage = "http://github.com/mattscilipoti/mattscilipoti-model_steps"
12
- gem.authors = ["Matt Scilipoti"]
12
+ gem.authors = ["Matt Scilipoti", "Chris Cahoon"]
13
+ gem.add_runtime_dependency "friendly_id", '> 3.0'
13
14
  gem.add_development_dependency "micronaut"
14
15
  gem.add_development_dependency "cucumber"
15
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
@@ -1,6 +1,6 @@
1
1
  Cucumber::Ast::Table.class_eval do
2
2
  def is_date_column?(column_name)
3
- column_name.columnify =~ /( at|_at|time|date)$/i
3
+ column_name =~ /( at|_at|time|date)$/i
4
4
  end
5
5
 
6
6
  def chronic_parsable_columns
@@ -100,7 +100,7 @@ end
100
100
  # Create a new ModelA with default_identifier_column = default_identifier
101
101
  Given /^(.+):(.+) exists$/ do |requested_model, default_identifier|
102
102
  model = requested_model_to_model(requested_model)
103
- column_name = model.default_identifier_column
103
+ column_name = model.friendly_id_config.column
104
104
  Factory.create(model_to_factory_symbol(requested_model), column_name => default_identifier)
105
105
  end
106
106
 
@@ -129,7 +129,7 @@ Given /^(\D+):(.+) has (\D+):(.+)$/ do |requested_model, default_identifier, ass
129
129
  model_under_test = requested_model_with_identifier_to_model_instance(requested_model, default_identifier)
130
130
  associated_model = requested_model_to_model(association_model_name)
131
131
  factory_name = model_to_factory_symbol(associated_model)
132
- associated_model_under_test = associated_model.find_by_default_identifier(default_identifier) || Factory(factory_name, associated_model.default_identifier_column => default_identifier)
132
+ associated_model_under_test = associated_model.find(default_identifier) || Factory(factory_name, associated_model.friendly_id_config.column => default_identifier)
133
133
 
134
134
  possible_associations = [association_model_name.underscore, association_model_name.pluralize.underscore]
135
135
  association_name = possible_associations.detect {|association_name| model_under_test.respond_to?(association_name)}
@@ -232,7 +232,7 @@ end
232
232
  Given /^(\D+):(.+) does not exist$/ do |requested_model, default_identifier|
233
233
  begin
234
234
  model = requested_model_to_model(requested_model)
235
- instance = model.find_by_default_identifier(default_identifier)
235
+ instance = model.find(default_identifier)
236
236
  if instance
237
237
  instance.destroy if instance
238
238
  instance.reload.should be_nil
@@ -307,7 +307,7 @@ When /^we setup the following:$/ do |table|
307
307
 
308
308
  factory_name = model_to_factory_symbol(header)
309
309
  model_klass = header.classify.constantize
310
- new_model = model_klass.find_by_default_identifier(value)
310
+ new_model = model_klass.find(value)
311
311
 
312
312
  new_model_params = {}
313
313
  if previous_model
@@ -325,7 +325,7 @@ When /^we setup the following:$/ do |table|
325
325
  if new_model
326
326
  new_model.update_attributes! new_model_params
327
327
  else
328
- new_model_params.merge!({ model_klass.default_identifier_column => value })
328
+ new_model_params.merge!({ model_klass.friendly_id_config.column => value })
329
329
  new_model = Factory.create(factory_name, new_model_params)
330
330
  end
331
331
 
@@ -458,7 +458,7 @@ def assert_models(expected_models, table, should_not = false)
458
458
  requested_params.each do |attribute_name, expected_value|
459
459
  actual = model_under_test.send(attribute_name)
460
460
  if actual.is_a?(ActiveRecord::Base)
461
- actual = actual.send(actual.class.default_identifier_column)
461
+ actual = actual.send(actual.class.friendly_id_config.column)
462
462
  end
463
463
  if should_not
464
464
  err_msg = "Expected ##{attribute_name} for '#{model_klass.name}:#{default_identifier}'\n\t to NOT have: '#{expected_value}'\n\tbut was: '#{actual}'\n * Expectations: #{requested_params.inspect} \n * #{model_klass.name}:#{default_identifier}: #{model_under_test.inspect}.\n\n"
@@ -475,11 +475,11 @@ end
475
475
 
476
476
  def requested_model_with_identifier_to_model_instance(requested_model, default_identifier)
477
477
  model = requested_model_to_model(requested_model)
478
- model_under_test = model.find_by_default_identifier!(default_identifier)
478
+ model_under_test = model.find(default_identifier)
479
479
  return model_under_test
480
480
  rescue ActiveRecord::RecordNotFound
481
481
  factory_name = model_to_factory_symbol(requested_model)
482
- Factory.create(factory_name, model.default_identifier_column => default_identifier)
482
+ Factory.create(factory_name, model.friendly_id_config.column => default_identifier)
483
483
  end
484
484
 
485
485
  def assign_requested_model_associations(model_under_test, association_quantity, requested_association_name, array_of_requested_params = [])
@@ -497,7 +497,7 @@ def assign_requested_model_associations(model_under_test, association_quantity,
497
497
  existing_objects = array_of_requested_params.collect do |conditions|
498
498
  if conditions.keys.first == 'default_identifier'
499
499
  #for CameraEvent find by (ImportFile).name
500
- association_model.find_by_default_identifier(conditions.values.first)
500
+ association_model.find(conditions.values.first)
501
501
  else
502
502
  association_model.find(:first, :conditions => conditions)
503
503
  end
@@ -682,7 +682,7 @@ end
682
682
 
683
683
 
684
684
  def perform_activity(model, default_identifier, requested_activity)
685
- model_under_test = model.find_by_default_identifier(default_identifier)
685
+ model_under_test = model.find(default_identifier)
686
686
  activity = model_under_test.send("do#{requested_activity.singularize}".underscore)
687
687
  end
688
688
 
@@ -727,7 +727,7 @@ def requested_params_to_model_params(requested_params, model)
727
727
  default_identifier = value
728
728
  end
729
729
 
730
- associated_model = associated_model_class_name.constantize.find_by_default_identifier(default_identifier)
730
+ associated_model = associated_model_class_name.constantize.find(default_identifier)
731
731
 
732
732
  # TODO handle multiple associations
733
733
  if /s$/ =~ association_name
@@ -0,0 +1,64 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mattscilipoti-model_steps}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Matt Scilipoti", "Chris Cahoon"]
12
+ s.date = %q{2010-07-29}
13
+ s.description = %q{Step Definitions for cucumber which support ActiveRecord Models}
14
+ s.email = %q{matt@scilipoti.name}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "examples/example_helper.rb",
27
+ "examples/mattscilipoti-model_steps_example.rb",
28
+ "features/mattscilipoti-model_steps.feature",
29
+ "features/step_definitions/mattscilipoti-model_steps_steps.rb",
30
+ "features/support/env.rb",
31
+ "lib/mattscilipoti-model_steps.rb",
32
+ "lib/model_steps/step_definitions.rb",
33
+ "mattscilipoti-model_steps.gemspec"
34
+ ]
35
+ s.homepage = %q{http://github.com/mattscilipoti/mattscilipoti-model_steps}
36
+ s.rdoc_options = ["--charset=UTF-8"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.3.7}
39
+ s.summary = %q{Model Steps for cucumber}
40
+ s.test_files = [
41
+ "examples/example_helper.rb",
42
+ "examples/mattscilipoti-model_steps_example.rb"
43
+ ]
44
+
45
+ if s.respond_to? :specification_version then
46
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<friendly_id>, ["> 3.0"])
51
+ s.add_development_dependency(%q<micronaut>, [">= 0"])
52
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
53
+ else
54
+ s.add_dependency(%q<friendly_id>, ["> 3.0"])
55
+ s.add_dependency(%q<micronaut>, [">= 0"])
56
+ s.add_dependency(%q<cucumber>, [">= 0"])
57
+ end
58
+ else
59
+ s.add_dependency(%q<friendly_id>, ["> 3.0"])
60
+ s.add_dependency(%q<micronaut>, [">= 0"])
61
+ s.add_dependency(%q<cucumber>, [">= 0"])
62
+ end
63
+ end
64
+
metadata CHANGED
@@ -5,23 +5,39 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Scilipoti
14
+ - Chris Cahoon
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-05-14 00:00:00 -04:00
19
+ date: 2010-07-29 00:00:00 -04:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
- name: micronaut
23
+ name: friendly_id
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">"
29
+ - !ruby/object:Gem::Version
30
+ hash: 7
31
+ segments:
32
+ - 3
33
+ - 0
34
+ version: "3.0"
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: micronaut
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
25
41
  none: false
26
42
  requirements:
27
43
  - - ">="
@@ -31,11 +47,11 @@ dependencies:
31
47
  - 0
32
48
  version: "0"
33
49
  type: :development
34
- version_requirements: *id001
50
+ version_requirements: *id002
35
51
  - !ruby/object:Gem::Dependency
36
52
  name: cucumber
37
53
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
39
55
  none: false
40
56
  requirements:
41
57
  - - ">="
@@ -45,7 +61,7 @@ dependencies:
45
61
  - 0
46
62
  version: "0"
47
63
  type: :development
48
- version_requirements: *id002
64
+ version_requirements: *id003
49
65
  description: Step Definitions for cucumber which support ActiveRecord Models
50
66
  email: matt@scilipoti.name
51
67
  executables: []
@@ -69,6 +85,7 @@ files:
69
85
  - features/support/env.rb
70
86
  - lib/mattscilipoti-model_steps.rb
71
87
  - lib/model_steps/step_definitions.rb
88
+ - mattscilipoti-model_steps.gemspec
72
89
  has_rdoc: true
73
90
  homepage: http://github.com/mattscilipoti/mattscilipoti-model_steps
74
91
  licenses: []