ninja-model 0.4.2 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +19 -0
- data/Rakefile +0 -7
- data/autotest/discover.rb +1 -0
- data/lib/ninja_model.rb +22 -26
- data/lib/ninja_model/adapters.rb +33 -43
- data/lib/ninja_model/adapters/abstract_adapter.rb +2 -10
- data/lib/ninja_model/adapters/adapter_manager.rb +17 -10
- data/lib/ninja_model/adapters/adapter_pool.rb +15 -17
- data/lib/ninja_model/adapters/adapter_specification.rb +3 -3
- data/lib/ninja_model/associations.rb +25 -106
- data/lib/ninja_model/associations/association_proxy.rb +119 -1
- data/lib/ninja_model/associations/belongs_to_association.rb +5 -1
- data/lib/ninja_model/attribute.rb +130 -0
- data/lib/ninja_model/{attributes.rb → attribute_methods.rb} +21 -42
- data/lib/ninja_model/base.rb +23 -20
- data/lib/ninja_model/callbacks.rb +2 -11
- data/lib/ninja_model/identity.rb +6 -11
- data/lib/ninja_model/persistence.rb +15 -30
- data/lib/ninja_model/predicate.rb +4 -4
- data/lib/ninja_model/rails_ext/active_record.rb +187 -0
- data/lib/ninja_model/railtie.rb +14 -8
- data/lib/ninja_model/reflection.rb +7 -14
- data/lib/ninja_model/relation.rb +5 -3
- data/lib/ninja_model/relation/finder_methods.rb +4 -8
- data/lib/ninja_model/relation/spawn_methods.rb +1 -1
- data/lib/ninja_model/validation.rb +6 -23
- data/lib/ninja_model/version.rb +1 -1
- data/ninja-model.gemspec +28 -0
- data/spec/ninja_model/adapters/abstract_adapter_spec.rb +45 -0
- data/spec/ninja_model/adapters/adapter_manager_spec.rb +69 -0
- data/spec/ninja_model/adapters/adapter_pool_spec.rb +210 -48
- data/spec/ninja_model/adapters_spec.rb +77 -0
- data/spec/ninja_model/attribute_methods_spec.rb +95 -0
- data/spec/ninja_model/attribute_spec.rb +129 -0
- data/spec/ninja_model/base_spec.rb +4 -52
- data/spec/ninja_model/identity_spec.rb +16 -32
- data/spec/ninja_model/persistence_spec.rb +130 -4
- data/spec/ninja_model/predicate_spec.rb +40 -6
- data/spec/ninja_model/query_methods_spec.rb +76 -74
- data/spec/ninja_model/reflection_spec.rb +63 -0
- data/spec/ninja_model/relation_spec.rb +213 -20
- data/spec/ninja_model/symbol_spec.rb +19 -0
- data/spec/ninja_model/validation_spec.rb +18 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/support/matchers/convert.rb +30 -0
- metadata +85 -63
- data/lib/ninja_model/associations/active_record_proxy.rb +0 -53
- data/lib/ninja_model/associations/ninja_model_proxy.rb +0 -46
- data/lib/ninja_model/configuration.rb +0 -20
- data/lib/ninja_model/errors.rb +0 -5
- data/lib/ninja_model/log_subscriber.rb +0 -18
- data/lib/ninja_model/scoping.rb +0 -50
- data/spec/ninja_model/attributes_spec.rb +0 -85
- data/spec/ninja_model/scoping_spec.rb +0 -40
@@ -1,18 +0,0 @@
|
|
1
|
-
module NinjaModel
|
2
|
-
class LogSubscriber < ActiveSupport::LogSubscriber
|
3
|
-
def xml(event)
|
4
|
-
return unless logger.debug?
|
5
|
-
|
6
|
-
name = '%s (%.1fms)' % [event.payload[:name], event.duration]
|
7
|
-
xml = event.payload[:xml]
|
8
|
-
|
9
|
-
debug " #{name} #{xml}"
|
10
|
-
end
|
11
|
-
|
12
|
-
def logger
|
13
|
-
NinjaModel::Base.logger
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
ActiveRecord::LogSubscriber.attach_to :ninja_model
|
data/lib/ninja_model/scoping.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'active_support'
|
2
|
-
require 'active_support/core_ext/array'
|
3
|
-
require 'active_support/core_ext/kernel/singleton_class'
|
4
|
-
|
5
|
-
module NinjaModel
|
6
|
-
module Scoping
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
def scoped(options = nil)
|
11
|
-
if options
|
12
|
-
scoped.apply_finder_options(options)
|
13
|
-
else
|
14
|
-
current_scoped_methods ? relation.merge(current_scoped_methods) : relation.clone
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def scopes
|
19
|
-
read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {})
|
20
|
-
end
|
21
|
-
|
22
|
-
def scope(name, scope_options = {}, &block)
|
23
|
-
name = name.to_sym
|
24
|
-
valid_scope_name?(name)
|
25
|
-
extension = Module.new(&block) if block_given?
|
26
|
-
|
27
|
-
scopes[name] = lambda do |*args|
|
28
|
-
options = scope_options.is_a?(Proc) ? scope_options.call(*args) : scope_options
|
29
|
-
relation = if options.is_a?(Hash)
|
30
|
-
scoped.apply_finder_options(options)
|
31
|
-
elsif options
|
32
|
-
scoped.merge(options)
|
33
|
-
else
|
34
|
-
scoped
|
35
|
-
end
|
36
|
-
|
37
|
-
extension ? relation.extending(extension) : relation
|
38
|
-
end
|
39
|
-
|
40
|
-
singleton_class.send(:redefine_method, name, &scopes[name])
|
41
|
-
end
|
42
|
-
|
43
|
-
def valid_scope_name?(name)
|
44
|
-
if !scopes[name] && respond_to?(name, true)
|
45
|
-
logger.warn "Creating scope :#{name}. Overwriting existing method #{self.name}.#{name}."
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'ninja_model/attributes'
|
3
|
-
|
4
|
-
describe NinjaModel::Attributes do
|
5
|
-
before(:each) do
|
6
|
-
@klass = Class.new do
|
7
|
-
def initialize
|
8
|
-
@attributes = {}.with_indifferent_access
|
9
|
-
end
|
10
|
-
end
|
11
|
-
@klass.send :include, NinjaModel::Attributes
|
12
|
-
@klass.send :attr_reader, :attributes
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'adding an attribute' do
|
16
|
-
before(:each) do
|
17
|
-
@klass.attribute :var, :string
|
18
|
-
@obj = @klass.new
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should add a new attribute' do
|
22
|
-
@klass.model_attributes[:var].type.should eql(:string)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should add a read method' do
|
26
|
-
lambda { @obj.send :var }.should_not raise_error(NoMethodError)
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should add a write method' do
|
30
|
-
lambda { @obj.send :var= }.should_not raise_error(NoMethodError)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe 'with an instance' do
|
35
|
-
describe 'writing an attribute value' do
|
36
|
-
before(:each) do
|
37
|
-
@klass.attribute :valid, :string
|
38
|
-
@obj = @klass.new
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should raise an error when writing an invalid attribute' do
|
42
|
-
lambda { @obj.write_attribute(:invalid, 'test') }.should raise_error(NoMethodError)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should properly update a valid attribute' do
|
46
|
-
@obj.write_attribute(:valid, 'test')
|
47
|
-
@obj.attributes['valid'].should eql('test')
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe 'assigning from a hash' do
|
52
|
-
before(:each) do
|
53
|
-
@klass.attribute :valid, :string
|
54
|
-
@obj = @klass.new
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'should update instance attributes' do
|
58
|
-
attrs = {:valid => 'valid value'}
|
59
|
-
@obj.send :attributes=, attrs
|
60
|
-
@obj.valid.should eql('valid value')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe 'checking existence of an attribute' do
|
65
|
-
before(:each) do
|
66
|
-
@klass.attribute :valid, :string
|
67
|
-
@obj = @klass.new
|
68
|
-
end
|
69
|
-
it { (@obj.send :attribute_method?, :valid).should be_true }
|
70
|
-
it { (@obj.send :attribute_method?, 'valid').should be_true }
|
71
|
-
it { (@obj.send :attribute_method?, :invalid).should be_false }
|
72
|
-
end
|
73
|
-
|
74
|
-
describe 'assigining default attributes from model' do
|
75
|
-
before(:each) do
|
76
|
-
@klass.attribute :valid, :string, {:default => 'foobar'}
|
77
|
-
@klass.send :class_inheritable_accessor, :primary_key
|
78
|
-
@obj = @klass.new
|
79
|
-
@attrs = @obj.attributes_from_model_attributes
|
80
|
-
end
|
81
|
-
it { @attrs.should have_key('valid') }
|
82
|
-
it { @attrs[:valid].should eql('foobar') }
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe NinjaModel::Scoping do
|
4
|
-
before(:each) do
|
5
|
-
@klass = Class.new
|
6
|
-
@klass.send :include, NinjaModel::Scoping
|
7
|
-
@relation = mock('Relation') do
|
8
|
-
stubs(:apply_finder_options).returns(self)
|
9
|
-
end
|
10
|
-
@klass.stubs(:relation).returns(@relation)
|
11
|
-
@klass.stubs(:current_scoped_methods).returns(nil)
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'scoped' do
|
15
|
-
it 'should return a relation when no options are sent' do
|
16
|
-
@klass.scoped.should be_instance_of(@relation.class)
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should accept scoping options' do
|
20
|
-
@klass.scoped(:conditions => {:key => 'value'}).should be_instance_of(@relation.class)
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe 'scopes' do
|
26
|
-
it 'should return an empty hash when no scopes have been set' do
|
27
|
-
@klass.scopes.should eql({})
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should return existing scopes' do
|
31
|
-
scopes = mock('scopes')
|
32
|
-
@klass.stubs(:read_inheritable_attribute).returns(scopes)
|
33
|
-
@klass.scopes.should eql(scopes)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe 'defining a scope' do
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|