sham 0.0.1 → 0.0.2

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.markdown CHANGED
@@ -0,0 +1,100 @@
1
+ # Sham
2
+
3
+ Lightweight flexible factories for Ruby on Rails testing.
4
+
5
+ ## Installation
6
+
7
+ gem install sham
8
+
9
+ ## Getting Started
10
+
11
+ Create a sham file for each of your models:
12
+
13
+ # in sham/user_sham.rb
14
+ class Sham::UserSham < Sham::Core
15
+ def self.options
16
+ { :name => "Sample User" }
17
+ end
18
+ end
19
+
20
+ Note: Sham is automatically enabled in test and cucumber environments. You can manually enable it or disable
21
+ it by using the enable! and disable! commands in your environment.rb or test.rb files:
22
+
23
+ Sham::Config.enable!
24
+ Sham::Config.disable!
25
+
26
+ You can now "sham" your models and pass additional attributes at creation:
27
+
28
+ User.sham!
29
+ User.sham! :name => "New Name"
30
+ User.sham! :age => 23
31
+
32
+ You can use sham to build models without saving them as well:
33
+
34
+ user = User.sham! :build, :name => "I have not been saved"
35
+ user.save
36
+
37
+ ## RSpec Example
38
+
39
+ Here is an example of testing validations on an ActiveRecord::Base class using Sham and RSpec.
40
+
41
+ # in app/models/item.rb
42
+ class Item < ActiveRecord::Base
43
+ validates_numericality_of :quantity, :greater_than => 0
44
+ end
45
+
46
+ # in sham/item_sham.rb
47
+ class Sham::ItemSham < Sham::Core
48
+ def self.options
49
+ { :quantity => 1 }
50
+ end
51
+ end
52
+
53
+ # in spec/models/item_spec.rb
54
+ describe Item do
55
+ it "should not allow items with a negative price" do
56
+ item = Item.sham :build, :quantity => -1
57
+ item.valid?.should be_false
58
+ end
59
+
60
+ it "should allow items with a positive quantity" do
61
+ item = Item.sham :build, :quantity => 10
62
+ item.valid?.should be_true
63
+ end
64
+ end
65
+
66
+ ## Shamming Alternatives
67
+
68
+ You can add other alternative variations to the default "sham!" functionality:
69
+
70
+ # in sham/item_sham.rb
71
+ class Sham::ItemSham < Sham::Core
72
+ def self.options
73
+ { :weight => 1.0 }
74
+ end
75
+
76
+ def self.large_options
77
+ { :weight => 100.0 }
78
+ end
79
+ end
80
+
81
+ These can be invoked using:
82
+
83
+ Item.sham_alternate! :large, :quantity => 100
84
+ Item.sham_alternate! :large, :build, :quantity => 0
85
+
86
+ ## Nested Shamming
87
+
88
+ You can nest shammed models inside others:
89
+
90
+ # in sham/line_item_sham.rb
91
+ class Sham::LineItemSham < Sham::Core
92
+ def self.options
93
+ { :item => Sham::Base.new(Item) }
94
+ end
95
+ end
96
+
97
+ The nested shams will automatically be invoked and can be overridden during a sham:
98
+
99
+ LineItem.sham!
100
+ LineItem.sham! :item => Item.sham!(:weight => 100)
data/lib/sham/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sham
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/sham.rb CHANGED
@@ -12,6 +12,10 @@ module Sham
12
12
  @@enabled = true
13
13
  end
14
14
 
15
+ def self.disable!
16
+ @@enabled = false
17
+ end
18
+
15
19
  def self.enabled?
16
20
  !!@@enabled
17
21
  end
@@ -72,7 +76,7 @@ module Sham
72
76
 
73
77
  def self.sham_alternate! type, *args
74
78
  options = (args.extract_options! || {})
75
- Sham.add_options! self.name, options, "self.#{type}_options"
79
+ Sham.add_options! self.name, options, "#{type}_options"
76
80
  klass = (options.delete(:type) || self.name).constantize
77
81
  return klass.create(options) unless args[0] == :build
78
82
  return klass.new(options)
@@ -82,7 +86,7 @@ module Sham
82
86
  end
83
87
  end
84
88
 
85
- Sham::Config.enable!
89
+ Sham::Config.enable! if ["test", "cucumber"].member?(ENV['RAILS_ENV'])
86
90
 
87
91
  if Sham::Config.enabled?
88
92
  Dir["#{RAILS_ROOT}/sham/*_sham.rb"].each{ |f| require f }
data/sham.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Pan Thomakos"]
10
10
  s.email = ["pan.thomakos@gmail.com"]
11
- s.homepage = "http://rubygems.org/gems/sham"
11
+ s.homepage = "http://github.com/panthomakos/sham"
12
12
  s.summary = "sham-#{Sham::VERSION}"
13
13
  s.description = %q{Flexible factories for Ruby on Rails testing.}
14
14
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sham
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pan Thomakos
@@ -39,7 +39,7 @@ files:
39
39
  - lib/sham/version.rb
40
40
  - sham.gemspec
41
41
  has_rdoc: true
42
- homepage: http://rubygems.org/gems/sham
42
+ homepage: http://github.com/panthomakos/sham
43
43
  licenses: []
44
44
 
45
45
  post_install_message:
@@ -71,6 +71,6 @@ rubyforge_project: sham
71
71
  rubygems_version: 1.3.7
72
72
  signing_key:
73
73
  specification_version: 3
74
- summary: sham-0.0.1
74
+ summary: sham-0.0.2
75
75
  test_files: []
76
76