basic_assumption 0.2.3 → 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/lib/basic_assumption.rb +6 -9
- data/lib/basic_assumption/configuration.rb +4 -0
- data/lib/basic_assumption/default_assumption.rb +38 -0
- data/lib/basic_assumption/default_assumption/base.rb +10 -0
- data/lib/basic_assumption/default_assumption/class_resolver.rb +23 -0
- data/lib/basic_assumption/default_assumption/rails.rb +2 -0
- data/lib/basic_assumption/default_assumption/simple_rails.rb +13 -0
- data/lib/basic_assumption/rails.rb +23 -0
- data/lib/basic_assumption/version.rb +3 -0
- data/rails/init.rb +5 -9
- data/spec/lib/basic_assumption/configuration_spec.rb +17 -5
- data/spec/lib/basic_assumption/default_assumption/base_spec.rb +9 -0
- data/spec/lib/basic_assumption/default_assumption/class_resolver_spec.rb +49 -0
- data/spec/lib/basic_assumption/default_assumption/simple_rails_spec.rb +28 -0
- data/spec/lib/basic_assumption/default_assumption_spec.rb +40 -0
- data/spec/lib/basic_assumption_spec.rb +2 -2
- metadata +15 -5
- data/VERSION +0 -1
data/lib/basic_assumption.rb
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
require 'basic_assumption/configuration'
|
2
|
+
require 'basic_assumption/default_assumption'
|
2
3
|
|
3
4
|
module BasicAssumption
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
def default_assumption(&block)
|
9
|
-
define_method(:default_assumption) do
|
10
|
-
block
|
11
|
-
end
|
5
|
+
def default_assumption(symbol=nil, &block)
|
6
|
+
default = block_given? ? block : symbol
|
7
|
+
BasicAssumption::DefaultAssumption.register(self, default)
|
12
8
|
end
|
13
9
|
|
14
10
|
def assume(name, &block)
|
@@ -17,7 +13,8 @@ module BasicAssumption
|
|
17
13
|
@basic_assumptions[name] ||= if block_given?
|
18
14
|
instance_eval(&block)
|
19
15
|
else
|
20
|
-
|
16
|
+
block = BasicAssumption::DefaultAssumption.resolve(self.class)
|
17
|
+
instance_exec(name, &block)
|
21
18
|
end
|
22
19
|
end
|
23
20
|
after_assumption(name)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'basic_assumption/default_assumption/base'
|
2
|
+
require 'basic_assumption/default_assumption/class_resolver'
|
3
|
+
|
4
|
+
module BasicAssumption
|
5
|
+
module DefaultAssumption
|
6
|
+
def self.register(klass, default)
|
7
|
+
registry[klass.object_id] = strategy(default)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.resolve(klass)
|
11
|
+
while !registry.has_key?(klass.object_id)
|
12
|
+
klass = klass.superclass
|
13
|
+
break if klass.nil?
|
14
|
+
end
|
15
|
+
registry[klass.object_id]
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
attr_accessor :default
|
20
|
+
|
21
|
+
protected
|
22
|
+
def registry
|
23
|
+
@registry ||= Hash.new { |h, k| strategy(default) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def strategy(given=nil)
|
27
|
+
case given
|
28
|
+
when Proc
|
29
|
+
given
|
30
|
+
when Symbol
|
31
|
+
ClassResolver.instance(given).block
|
32
|
+
else
|
33
|
+
Base.new.block
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module BasicAssumption
|
2
|
+
module DefaultAssumption
|
3
|
+
class ClassResolver
|
4
|
+
def self.instance(name, *args)
|
5
|
+
new(name).instance(*args)
|
6
|
+
end
|
7
|
+
def initialize(name)
|
8
|
+
@name = name
|
9
|
+
end
|
10
|
+
def instance(*args)
|
11
|
+
constantize(camelize(@name)).new(*args)
|
12
|
+
end
|
13
|
+
def camelize(name)
|
14
|
+
name.to_s.gsub(/(?:^|_)(.)/) { "#{$1.upcase}" }
|
15
|
+
end
|
16
|
+
def constantize(name)
|
17
|
+
namespace = BasicAssumption::DefaultAssumption
|
18
|
+
namespace.const_missing(name) unless namespace.const_defined? name
|
19
|
+
namespace.const_get(name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module BasicAssumption
|
2
|
+
module DefaultAssumption
|
3
|
+
class SimpleRails < BasicAssumption::DefaultAssumption::Base
|
4
|
+
def block
|
5
|
+
Proc.new do |name|
|
6
|
+
model_class = name.to_s.classify.constantize
|
7
|
+
model_class.find(params["#{name}_id"] || params['id'])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
2
|
+
require 'basic_assumption/default_assumption/rails'
|
3
|
+
|
4
|
+
module BasicAssumption
|
5
|
+
class Railtie < Rails::Railtie
|
6
|
+
|
7
|
+
initializer "basic_assumption.set_up_action_controller_base" do |app|
|
8
|
+
ActionController::Base.class_eval do
|
9
|
+
extend BasicAssumption
|
10
|
+
|
11
|
+
def self.after_assumption(name)
|
12
|
+
hide_action name
|
13
|
+
helper_method name
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
BasicAssumption::Configuration.configure do |config|
|
18
|
+
config.default_assumption = :simple_rails
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/rails/init.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
rescue LoadError
|
4
|
-
require 'basic_assumption'
|
5
|
-
end
|
1
|
+
require 'basic_assumption'
|
2
|
+
require 'basic_assumption/default_assumption/rails'
|
6
3
|
|
7
4
|
ActionController::Base.class_eval do
|
8
5
|
extend BasicAssumption
|
@@ -11,9 +8,8 @@ ActionController::Base.class_eval do
|
|
11
8
|
hide_action name
|
12
9
|
helper_method name
|
13
10
|
end
|
11
|
+
end
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
model_class.find(params["#{name}_id"] || params['id'])
|
18
|
-
end
|
13
|
+
BasicAssumption::Configuration.configure do |config|
|
14
|
+
config.default_assumption = :simple_rails
|
19
15
|
end
|
@@ -8,14 +8,26 @@ describe BasicAssumption::Configuration do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context "an instance" do
|
11
|
-
class
|
11
|
+
class Assumer
|
12
12
|
extend BasicAssumption
|
13
13
|
end
|
14
|
-
let(:
|
15
|
-
let(:
|
14
|
+
let(:config) { BasicAssumption::Configuration.new }
|
15
|
+
let(:assuming_class) { Class.new Assumer }
|
16
16
|
it "allows decent_exposure emulation mode" do
|
17
|
-
|
18
|
-
|
17
|
+
config.emulate_exposure!
|
18
|
+
assuming_class.should respond_to(:expose)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "can set the default assumption" do
|
22
|
+
config.default_assumption = Proc.new { :qux }
|
23
|
+
assuming_class.class_eval do
|
24
|
+
assume :baz
|
25
|
+
end
|
26
|
+
assuming_class.new.baz.should eql(:qux)
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:all) do
|
30
|
+
config.default_assumption = nil
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'basic_assumption/default_assumption/class_resolver'
|
3
|
+
|
4
|
+
class ::ExampleClass
|
5
|
+
attr_reader :foo, :bar
|
6
|
+
def initialize(foo=nil, bar=nil)
|
7
|
+
@foo = foo; @bar = bar
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe BasicAssumption::DefaultAssumption::ClassResolver do
|
12
|
+
let(:resolver) { BasicAssumption::DefaultAssumption::ClassResolver.new(nil) }
|
13
|
+
context '#camelize, given a symbol or string' do
|
14
|
+
it 'returns an upper camel-cased string' do
|
15
|
+
resolver.camelize('camel').should eql('Camel')
|
16
|
+
end
|
17
|
+
it 'treats underscores as word boundaries and removes them' do
|
18
|
+
resolver.camelize('camel_case_word').should eql('CamelCaseWord')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
context '#constantize' do
|
22
|
+
it 'retrieves a constant from the BasicAssumption::DefaultAssumption namespace' do
|
23
|
+
resolver.constantize('ClassResolver').should eql(BasicAssumption::DefaultAssumption::ClassResolver)
|
24
|
+
end
|
25
|
+
it 'raises an error if no such constant is found' do
|
26
|
+
expect { resolver.constantize('CamelCase') }.to raise_error(NameError)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
context '#instance' do
|
30
|
+
before(:each) do
|
31
|
+
@resolver = BasicAssumption::DefaultAssumption::ClassResolver.new(:example_class)
|
32
|
+
@resolver.stub!(:constantize).and_return(ExampleClass)
|
33
|
+
end
|
34
|
+
it 'returns an instance of the resolved class' do
|
35
|
+
@resolver.instance.should be_a_kind_of(ExampleClass)
|
36
|
+
end
|
37
|
+
it 'accepts and passes on any arguments to the instantiation of the object' do
|
38
|
+
example_object = @resolver.instance('foo', 'bar')
|
39
|
+
example_object.foo.should eql('foo')
|
40
|
+
example_object.bar.should eql('bar')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context '::instance' do
|
44
|
+
it 'returns an instance of the resolved class' do
|
45
|
+
mod = BasicAssumption::DefaultAssumption
|
46
|
+
mod::ClassResolver.instance(:base).should be_an_instance_of(mod::Base)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_support'
|
3
|
+
require 'basic_assumption/default_assumption/simple_rails'
|
4
|
+
|
5
|
+
describe BasicAssumption::DefaultAssumption::SimpleRails do
|
6
|
+
class Model; end
|
7
|
+
|
8
|
+
context "#block" do
|
9
|
+
let(:default) { BasicAssumption::DefaultAssumption::SimpleRails.new }
|
10
|
+
let(:params) { stub(:[] => 42) }
|
11
|
+
|
12
|
+
before(:each) do
|
13
|
+
Model.stub!(:find)
|
14
|
+
default.stub!(:params).and_return(params)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "looks for a params[model_id] and params[id] in its calling context" do
|
18
|
+
params.should_receive(:[]).with('model_id').and_return(nil)
|
19
|
+
params.should_receive(:[]).with('id')
|
20
|
+
default.block.call(:model)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "attempts to find a model instance based off the given name" do
|
24
|
+
Model.should_receive(:find).with(42).and_return(:model)
|
25
|
+
default.block.call(:model).should eql(:model)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'lib/basic_assumption/default_assumption/simple_rails'
|
3
|
+
|
4
|
+
describe BasicAssumption::DefaultAssumption do
|
5
|
+
let(:mod) { BasicAssumption::DefaultAssumption }
|
6
|
+
describe "::register and ::resolve" do
|
7
|
+
it "maps an object to a proc according to an internal strategy" do
|
8
|
+
mod.should_receive(:strategy).with(:behavior).and_return(:block)
|
9
|
+
mod.register(Class, :behavior)
|
10
|
+
mod.resolve(Class).should eql(:block)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
describe "::strategy" do
|
14
|
+
it "returns the proc when given one" do
|
15
|
+
a_proc = Proc.new { :block }
|
16
|
+
mod.send(:strategy, a_proc).call.should eql(:block)
|
17
|
+
end
|
18
|
+
it "returns the block of a class in the BasicAssumption::DefaultAssumption namespace when given a symbol" do
|
19
|
+
mod::SimpleRails.should_receive(:new).and_return(stub(:block => :block))
|
20
|
+
mod.send(:strategy, :simple_rails).should eql(:block)
|
21
|
+
end
|
22
|
+
it "returns the block of a Base instance otherwise" do
|
23
|
+
mod.send(:strategy, nil).call.should be_nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
describe "::registry" do
|
27
|
+
before(:each) do
|
28
|
+
mod.send(:registry).clear
|
29
|
+
end
|
30
|
+
it "returns a default when given a key it doesn't have" do
|
31
|
+
mod.default = :custom_default
|
32
|
+
mod.stub!(:strategy).with(:custom_default).and_return(:some_block)
|
33
|
+
mod.send(:registry).should_not have_key(:key)
|
34
|
+
mod.send(:registry)[:key].should eql(:some_block)
|
35
|
+
end
|
36
|
+
after(:each) do
|
37
|
+
mod.default = nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -120,7 +120,7 @@ describe BasicAssumption do
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
context "classes
|
123
|
+
context "classes in the inheritance chain of ActionController::Base" do
|
124
124
|
let(:application_controller) { Class.new(controller_class) }
|
125
125
|
let(:derived_class) { Class.new(application_controller) }
|
126
126
|
let(:derived_instance) { derived_class.new }
|
@@ -131,7 +131,7 @@ describe BasicAssumption do
|
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
it "
|
134
|
+
it "inherits the default assumption" do
|
135
135
|
derived_class.class_eval do
|
136
136
|
assume(:twice)
|
137
137
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 2
|
8
7
|
- 3
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matt Yoho
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-05-12 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -69,9 +69,15 @@ extra_rdoc_files:
|
|
69
69
|
- README.md
|
70
70
|
files:
|
71
71
|
- README.md
|
72
|
-
- VERSION
|
73
72
|
- lib/basic_assumption.rb
|
74
73
|
- lib/basic_assumption/configuration.rb
|
74
|
+
- lib/basic_assumption/default_assumption.rb
|
75
|
+
- lib/basic_assumption/default_assumption/base.rb
|
76
|
+
- lib/basic_assumption/default_assumption/class_resolver.rb
|
77
|
+
- lib/basic_assumption/default_assumption/rails.rb
|
78
|
+
- lib/basic_assumption/default_assumption/simple_rails.rb
|
79
|
+
- lib/basic_assumption/rails.rb
|
80
|
+
- lib/basic_assumption/version.rb
|
75
81
|
- rails/init.rb
|
76
82
|
has_rdoc: true
|
77
83
|
homepage: http://github.com/mattyoho/basic_assumption
|
@@ -102,8 +108,12 @@ rubyforge_project:
|
|
102
108
|
rubygems_version: 1.3.6
|
103
109
|
signing_key:
|
104
110
|
specification_version: 3
|
105
|
-
summary: Allows a simple declarative idiom for resources in controllers and views
|
111
|
+
summary: Allows a simple declarative idiom for resources in controllers and views. Custom default behavior can be defined in a pluggable manner.
|
106
112
|
test_files:
|
107
113
|
- spec/spec_helper.rb
|
108
114
|
- spec/lib/basic_assumption_spec.rb
|
109
115
|
- spec/lib/basic_assumption/configuration_spec.rb
|
116
|
+
- spec/lib/basic_assumption/default_assumption_spec.rb
|
117
|
+
- spec/lib/basic_assumption/default_assumption/base_spec.rb
|
118
|
+
- spec/lib/basic_assumption/default_assumption/class_resolver_spec.rb
|
119
|
+
- spec/lib/basic_assumption/default_assumption/simple_rails_spec.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.2.3
|