bluff 0.0.4 → 0.1.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.
@@ -1,3 +1,7 @@
1
+ ## Jan 16 2012 - v0.1.0
2
+
3
+ * Migrated over to new persistence/adapter terminology
4
+
1
5
  ## Jan 12 2012 - v0.0.4
2
6
 
3
7
  * Bluff calls are stricter now to give us more control in the bluff definitions. A bluff call accepts a single hash argument and default block values can no longer be defined in the block signatures.
data/README.md CHANGED
@@ -86,12 +86,14 @@ Feel free to use them or huck em to the curb and just work directly with the att
86
86
 
87
87
  ```
88
88
  User.bluff # returns an unsaved instance -- could also use Bluff.user
89
- User.bluff! # returns a saved instance -- could also use Bluff.user!
89
+ User.bluff! # the "bang bluff" -- returns a persisted/saved instance, could also use Bluff.user!
90
90
  User.bluff({:name => 'Ryan'}) # supply overrides/defaults in the attributes hash
91
91
  ```
92
92
 
93
93
  ### METHOD BLUFFS (MOCKS / STUBS)
94
94
 
95
+ ** NOT IMPLEMENTED YET **
96
+
95
97
  All objects and classes are given a `bluff()` method, which is
96
98
  used for bluffing both models and methods. If given a symbol, the
97
99
  `bluff()` method can be used to define method stubs as follows:
@@ -3,8 +3,8 @@ require 'active_support/core_ext/array/wrap'
3
3
  require 'active_support/core_ext/array/conversions'
4
4
  require 'active_support/core_ext/hash/indifferent_access'
5
5
 
6
- require 'bluff/support/backend'
7
- require 'bluff/support/backend/active_record'
6
+ require 'bluff/support/persistence/base'
7
+ require 'bluff/support/persistence/active_record'
8
8
 
9
9
  module Bluff
10
10
  module Builder
@@ -97,7 +97,7 @@ module Bluff
97
97
  def define_bluff_bang(field)
98
98
  define_singleton_method "#{field}!" do |*arguments|
99
99
  send(field, *arguments).tap do |record|
100
- Bluff::Support::Backend.save!(record, field)
100
+ Bluff::Support.persist(record, {:as => field})
101
101
  end
102
102
  end
103
103
  end
@@ -3,14 +3,14 @@ module ActiveRecord
3
3
  end
4
4
  end
5
5
 
6
- module Bluff::Support::ActiveRecord
7
- class Backend
6
+ module Bluff::Support::Persistence
7
+ class ActiveRecordAdapter
8
8
  class << self
9
- def accepts?(record)
9
+ def persists?(record)
10
10
  record.is_a?(ActiveRecord::Base)
11
11
  end
12
12
 
13
- def save!(record)
13
+ def persist(record)
14
14
  ActiveRecord::Base.transaction do
15
15
  record.class.reflect_on_all_associations(:belongs_to).each do |reflection|
16
16
  association = record.send(reflection.name)
@@ -22,6 +22,6 @@ module Bluff::Support::ActiveRecord
22
22
  end
23
23
  end
24
24
 
25
- Bluff::Support::Backend.register(self)
25
+ Bluff::Support::Persistence::Base.register(self)
26
26
  end
27
27
  end
@@ -0,0 +1,31 @@
1
+ module Bluff
2
+ module Support
3
+ module Persistence
4
+ class Base
5
+ @@adapters = []
6
+
7
+ class << self
8
+ def register(adapter)
9
+ @@adapters << adapter
10
+ end
11
+
12
+ def persist(record, options = {})
13
+ adapters = @@adapters.select {|adapter| adapter.persists?(record)}
14
+
15
+ if adapters.empty?
16
+ raise "#{options[:as] || record.class} is not persistable (#{record})"
17
+ else
18
+ # should first try to persist new associations
19
+ adapters.first.persist(record)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ # just looks a little cleaner in use
27
+ def self.persist(record, options = {})
28
+ Persistence::Base.persist(record, options)
29
+ end
30
+ end
31
+ end
@@ -11,6 +11,6 @@
11
11
 
12
12
  module Bluff
13
13
  module Support
14
- # autoload
14
+ # autoload bluffs for rspec
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module Bluff
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,36 @@
1
+ # Notes
2
+
3
+ These notes are intended simply for my own use.
4
+
5
+ ## Bang bluffs
6
+
7
+ If a bang bluff is called for a bluff that isn't persistable an error should be thrown.
8
+
9
+ If the bluff is persistable, all persistable associations within the bluffed object should
10
+ be persisted within a transaction (persisting from the inside out).
11
+
12
+
13
+ ## Block argument reflection
14
+
15
+ Can use code from merb to reflect on expected block arguments and default values
16
+
17
+ ```
18
+ require 'rubygems'
19
+ require 'merb'
20
+
21
+ include GetArgs
22
+
23
+ def foo(bar, zed=42)
24
+ end
25
+
26
+ method(:foo).get_args # => [[[:bar], [:zed, 42]], [:zed]]
27
+ ```
28
+
29
+ Sourcify is another option but doesn't seem to support blocks with default arguments
30
+
31
+ Also have Proc#parameters but it doesn't look like it tells you what the default argument value is reported.
32
+
33
+
34
+ If we can find a way to do this we can loosen up the single-argument bluff restriction. Only bluffs without
35
+ predefined arguments and bluffs with a hash as the first argument will be given special treatment.
36
+
@@ -86,7 +86,7 @@ describe Bluff do
86
86
  end
87
87
 
88
88
  Bluff.for(:transient_class) { TransientClass.new }
89
- lambda{ Bluff.transient_class! }.should raise_error(RuntimeError, /cannot be bang bluffed/)
89
+ lambda{ Bluff.transient_class! }.should raise_error(RuntimeError, /transient_class is not persistable/)
90
90
  end
91
91
  end
92
92
 
@@ -12,18 +12,18 @@ class BluffableClass
12
12
  end
13
13
  end
14
14
 
15
- module Bluff::Support::BluffableClass
16
- class Backend
15
+ module Bluff::Support::Persistence
16
+ class BluffableClassAdapter
17
17
  class << self
18
- def accepts?(record)
18
+ def persists?(record)
19
19
  record.is_a?(BluffableClass)
20
20
  end
21
21
 
22
- def save!(record)
22
+ def persist(record)
23
23
  record.save
24
24
  end
25
25
  end
26
-
27
- Bluff::Support::Backend.register(self)
26
+
27
+ Bluff::Support::Persistence::Base.register(self)
28
28
  end
29
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bluff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-12 00:00:00.000000000Z
12
+ date: 2012-01-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &2166846800 !ruby/object:Gem::Requirement
16
+ requirement: &2156611420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2166846800
24
+ version_requirements: *2156611420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2166845760 !ruby/object:Gem::Requirement
27
+ requirement: &2156610620 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.8'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2166845760
35
+ version_requirements: *2156610620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: faker
38
- requirement: &2166844480 !ruby/object:Gem::Requirement
38
+ requirement: &2156609620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '1.0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2166844480
46
+ version_requirements: *2156609620
47
47
  description: ''
48
48
  email:
49
49
  - ryan.mohr@gmail.com
@@ -61,10 +61,11 @@ files:
61
61
  - lib/bluff/bluffs/data_bluffs.rb
62
62
  - lib/bluff/builder.rb
63
63
  - lib/bluff/configuration.rb
64
- - lib/bluff/support/backend.rb
65
- - lib/bluff/support/backend/active_record.rb
64
+ - lib/bluff/support/persistence/active_record.rb
65
+ - lib/bluff/support/persistence/base.rb
66
66
  - lib/bluff/support/support.rb
67
67
  - lib/bluff/version.rb
68
+ - notes.md
68
69
  - spec/models/api_spec.rb
69
70
  - spec/models/data_bluffs_spec.rb
70
71
  - spec/models/extensions_spec.rb
@@ -1,21 +0,0 @@
1
- module Bluff::Support
2
- class Backend
3
- @@handlers = []
4
-
5
- class << self
6
- def register(handler)
7
- @@handlers << handler
8
- end
9
-
10
- def save!(record, name)
11
- handlers = @@handlers.select {|handler| handler.accepts?(record)}
12
-
13
- if handlers.empty?
14
- raise "#{name} cannot be bang bluffed (#{record})"
15
- else
16
- handlers.first.save!(record)
17
- end
18
- end
19
- end
20
- end
21
- end