veneer 0.1.3 → 0.2.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.
Files changed (55) hide show
  1. data/..gemspec +21 -0
  2. data/.gitignore +2 -5
  3. data/Gemfile +4 -0
  4. data/README.md +171 -0
  5. data/Rakefile +3 -36
  6. data/lib/..rb +3 -0
  7. data/lib/veneer/adapters/active_record.rb +1 -1
  8. data/lib/veneer/adapters/activerecord/class_wrapper.rb +11 -79
  9. data/lib/veneer/adapters/activerecord/instance_wrapper.rb +3 -11
  10. data/lib/veneer/adapters/activerecord/pre_3.0_class_wrapper.rb +24 -0
  11. data/lib/veneer/adapters/activerecord/pre_3.0_instance_wrapper.rb +15 -0
  12. data/lib/veneer/adapters/activerecord.rb +9 -2
  13. data/lib/veneer/adapters/data_mapper.rb +1 -1
  14. data/lib/veneer/adapters/datamapper/class_wrapper.rb +29 -50
  15. data/lib/veneer/adapters/datamapper/instance_wrapper.rb +3 -14
  16. data/lib/veneer/adapters/mongomapper/class_wrapper.rb +2 -56
  17. data/lib/veneer/adapters/mongomapper.rb +2 -2
  18. data/lib/veneer/base/class_wrapper.rb +46 -11
  19. data/lib/veneer/base/instance_wrapper.rb +12 -14
  20. data/lib/veneer/core_ext/kernel.rb +0 -1
  21. data/lib/veneer/errors.rb +0 -1
  22. data/lib/veneer/lint.rb +183 -0
  23. data/lib/veneer/version.rb +3 -0
  24. data/lib/veneer.rb +1 -4
  25. data/test/test_helper.rb +4 -3
  26. data/test/veneer/adapters/{active_record/active_record_setup.rb → test_active_record.rb} +23 -1
  27. data/test/veneer/adapters/test_datamapper.rb +56 -0
  28. data/test/veneer/adapters/test_mongomapper.rb +49 -0
  29. data/test/veneer/proxy_test.rb +20 -45
  30. data/veneer.gemspec +15 -108
  31. metadata +40 -60
  32. data/README.textile +0 -142
  33. data/VERSION +0 -1
  34. data/datamapper_setup.rb +0 -2
  35. data/lib/veneer/base/conditional.rb +0 -77
  36. data/test/macros/class_wrapper/create_macro.rb +0 -54
  37. data/test/macros/class_wrapper/delete_macro.rb +0 -31
  38. data/test/macros/class_wrapper/find_macro.rb +0 -119
  39. data/test/macros/class_wrapper/hooks.rb +0 -41
  40. data/test/macros/class_wrapper/validations.rb +0 -91
  41. data/test/macros/instance_wrapper/destroy_macro.rb +0 -36
  42. data/test/macros/instance_wrapper/new_record_macro.rb +0 -39
  43. data/test/macros/instance_wrapper/save_macro.rb +0 -55
  44. data/test/macros/veneer_constants_interface.rb +0 -26
  45. data/test/support/before_save_mixin.rb +0 -14
  46. data/test/support/valiations_method_method.rb +0 -0
  47. data/test/veneer/adapters/active_record/class_wrapper_test.rb +0 -23
  48. data/test/veneer/adapters/active_record/instance_wrapper_test.rb +0 -21
  49. data/test/veneer/adapters/datamapper/class_wrapper_test.rb +0 -24
  50. data/test/veneer/adapters/datamapper/datamapper_setup.rb +0 -34
  51. data/test/veneer/adapters/datamapper/instance_wrapper_test.rb +0 -21
  52. data/test/veneer/adapters/mongomapper/class_wrapper_test.rb +0 -24
  53. data/test/veneer/adapters/mongomapper/instance_wrapper_test.rb +0 -21
  54. data/test/veneer/adapters/mongomapper/mongomapper_setup.rb +0 -25
  55. data/test/veneer/base/conditonal_test.rb +0 -118
@@ -1,52 +1,87 @@
1
1
  module Veneer
2
2
  module Base
3
+ # Required methods
4
+ # new
5
+ # find_many
6
+ # destroy_all
7
+ #
8
+ # Optional Methods
9
+ # find_first
10
+ # create!
11
+ # create
12
+ #
3
13
  class ClassWrapper < BasicObject
4
14
  attr_reader :klass, :opts
5
15
  def initialize(klass, opts)
6
16
  @klass, @opts = klass, opts
7
17
  end
8
18
 
19
+ # Create an instance of the object.
20
+ # That is, instantiate and persist it in one step.
21
+ # Raise an error if the object is not persisted
9
22
  # @api public
23
+ # @see create
10
24
  def create!(opts = {})
11
25
  instance = new(opts)
12
26
  instance.save!
13
27
  instance
14
28
  end
15
29
 
30
+ # Create an instance of the object.
31
+ # That is, instantiate and persist it in one step.
16
32
  # @api public
33
+ # @see create!
17
34
  def create(opts = {})
18
35
  instance = new(opts)
19
36
  instance.save
20
37
  instance
21
38
  end
22
39
 
40
+ # Instantiate an item
41
+ # The interface required is that a hash of attributes is passed
42
+ # The object should take each key, and set the value provided
23
43
  # @api implementor
24
44
  def new(opts = {})
25
- ::Kernel.raise Errors::NotImplemented
45
+ klass.new(opts)
26
46
  end
27
47
 
48
+ # Provides query access to the first item who meets the conditions in the passed in options hash
49
+ #
28
50
  # @api public
51
+ # @see Veneer::Base::ClassWrapper.all
29
52
  def first(opts={})
30
- conditional = ::Veneer::Conditional.from_hash(opts)
31
- ::Kernel.Veneer(find_first(conditional))
53
+ ::Kernel.Veneer(find_first(Hashie::Mash.new(opts)))
32
54
  end
33
55
 
56
+ # Provides an interface to query the objects
57
+ #
58
+ # Options that must be supported are
59
+ #
60
+ # * :limit
61
+ # * :offset
62
+ # * :conditions
63
+ # * :order
64
+ #
34
65
  # @api public
35
66
  def all(opts={})
36
- conditional = ::Veneer::Conditional.from_hash(opts)
37
- find_many(conditional).map{|element| ::Kernel.Veneer(element)}
67
+ find_many(Hashie::Mash.new(opts)).map{|element| ::Kernel.Veneer(element)}
38
68
  end
39
69
 
40
- # Should return an array or array like structure with elements matching the provided conditional
70
+ # Should return an array or array like structure with elements matching the provided conditions hash
41
71
  # @api implementor
42
- def find_many(conditional)
72
+ # @see Veneer::Base::ClassWrapper.all
73
+ def find_many(opts)
43
74
  ::Kernel.raise Errors::NotImplemented
44
75
  end
45
76
 
46
- # A single object matching the conditional
47
- # @api_implementor
48
- def find_first(conditional)
49
- ::Kernel.raise Errors::NotImplemented
77
+ def find_first(opts)
78
+ opts[:limit] = 1
79
+ find_many(opts).first
80
+ end
81
+
82
+ private
83
+ def method_missing(meth, *args, &blk)
84
+ @klass.__send__(meth, *args, &blk)
50
85
  end
51
86
  end
52
87
  end
@@ -1,5 +1,13 @@
1
1
  module Veneer
2
2
  module Base
3
+ # required methods
4
+ #
5
+ # save
6
+ # save! # failure should raise ::Veneer::Errors::NotSaved
7
+ # update
8
+ # destroy
9
+ # new_record?
10
+
3
11
  class InstanceWrapper
4
12
  attr_accessor :instance, :options
5
13
  def initialize(instance, opts = {})
@@ -10,20 +18,6 @@ module Veneer
10
18
  @instance.class
11
19
  end
12
20
 
13
- def handle_before_save_error(e)
14
- if instance.respond_to?(:errors) && instance.errors.respond_to?(:add)
15
- case e.message
16
- when Array
17
- instance.errors.add(e.message[0], e.message[1])
18
- when String
19
- instance.errors.add("", e.message)
20
- end
21
- else
22
- ::STDOUT.puts e.message
23
- end
24
- false
25
- end
26
-
27
21
  # Checks equality of the instances
28
22
  # @api public
29
23
  def ==(other)
@@ -47,6 +41,10 @@ module Veneer
47
41
  save
48
42
  end
49
43
 
44
+ def update!(attributes = {})
45
+ raise Veneer::Errors::NotSaved unless update(attributes)
46
+ end
47
+
50
48
  # send all methods to the instance
51
49
  def method_missing(*args, &blk)
52
50
  instance.send(*args, &blk)
@@ -11,7 +11,6 @@ module Kernel
11
11
  obj.class::VeneerInterface::InstanceWrapper.new(obj, opts)
12
12
  end
13
13
  rescue NameError => e
14
- puts e.message
15
14
  raise Veneer::Errors::NotCompatible
16
15
  end # Veneer()
17
16
  end
data/lib/veneer/errors.rb CHANGED
@@ -3,7 +3,6 @@ module Veneer
3
3
  class VeneerError < StandardError; end
4
4
  class NotCompatible < VeneerError; end
5
5
  class NotSaved < VeneerError; end
6
- class ConditionalOperatorNotSupported < VeneerError; end
7
6
  class NotImplemented < VeneerError; end
8
7
  class BeforeSaveError < VeneerError; end
9
8
  end
@@ -0,0 +1,183 @@
1
+ module Veneer
2
+ module Lint
3
+ def self.included(base)
4
+ base.class_eval do
5
+ include ::Veneer::Lint::ClassWrapperLint
6
+ include ::Veneer::Lint::InstanceWrapperLint
7
+ end
8
+ end
9
+
10
+ def _veneer_teardown
11
+ Veneer(@klass).destroy_all
12
+ end
13
+
14
+ module ClassWrapperLint
15
+ def test_should_have_the_correct_inner_constants_for_veneer
16
+ assert_nothing_raised do
17
+ @klass::VeneerInterface
18
+ @klass::VeneerInterface::ClassWrapper
19
+ @klass::VeneerInterface::InstanceWrapper
20
+ end
21
+ assert @klass::VeneerInterface::ClassWrapper.ancestors.include?(::Veneer::Base::ClassWrapper)
22
+ assert @klass::VeneerInterface::InstanceWrapper.ancestors.include?(::Veneer::Base::InstanceWrapper)
23
+ end
24
+
25
+ def test_should_setup_the_veneer_lint_class_wrapper_with_a_klass
26
+ assert_not_nil @klass, "@klass should provide a class to test Veneer with"
27
+ assert_kind_of Class, @klass
28
+ ensure
29
+ _veneer_teardown
30
+ end
31
+
32
+ def test_should_provide_valid_attributes
33
+ assert_not_nil @valid_attributes
34
+ assert_kind_of Hash, @valid_attributes
35
+ ensure
36
+ _veneer_teardown
37
+ end
38
+
39
+ def test_should_provide_invalid_attributes
40
+ assert_not_nil @invalid_attributes
41
+ assert_kind_of Hash, @invalid_attributes
42
+ ensure
43
+ _veneer_teardown
44
+ end
45
+
46
+ def test_should_create_an_object_from_a_hash
47
+ r = Veneer(@klass).create(@valid_attributes)
48
+ assert_instance_of @klass::VeneerInterface::InstanceWrapper, r
49
+ ensure
50
+ _veneer_teardown
51
+ end
52
+
53
+ def test_should_create_the_object_from_the_hash_with_create!
54
+ r = Veneer(@klass).create!(@valid_attributes)
55
+ assert_instance_of @klass::VeneerInterface::InstanceWrapper, r
56
+ ensure
57
+ _veneer_teardown
58
+ end
59
+
60
+ def test_should_instantiate_a_new_instance_of_the_object
61
+ r = Veneer(@klass).new(@valid_attributes)
62
+ assert_instance_of @klass::VeneerInterface::InstanceWrapper, r
63
+ ensure
64
+ _veneer_teardown
65
+ end
66
+
67
+ def test_implementst_create_with_invalid_attributes
68
+ assert_raise Veneer::Errors::NotSaved do
69
+ Veneer(@klass).create!(@invalid_attributes)
70
+ end
71
+ ensure
72
+ _veneer_teardown
73
+ end
74
+
75
+ def test_should_not_raise_when_create_can_save
76
+ assert_nothing_raised do
77
+ Veneer(@klass).create(@invalid_attributes)
78
+ end
79
+ ensure
80
+ _veneer_teardown
81
+ end
82
+
83
+ def test_should_destory_all
84
+ Veneer(@klass).create(@valid_attributes)
85
+ assert Veneer(@klass).all.size > 0
86
+ Veneer(@klass).destroy_all
87
+ assert_equal 0, Veneer(@klass).all.size
88
+ end
89
+
90
+ def test_should_find_all
91
+ create_valid_items(4)
92
+ result = Veneer(@klass).all
93
+ assert_kind_of Array, result
94
+ assert_equal 4, result.size
95
+ ensure
96
+ _veneer_teardown
97
+ end
98
+
99
+ def test_should_find_first
100
+ create_valid_items(3)
101
+ result = Veneer(@klass).all
102
+ assert_not_nil result
103
+ ensure
104
+ _veneer_teardown
105
+ end
106
+
107
+ def test_should_implement_limit
108
+ create_valid_items(4)
109
+ result = Veneer(@klass).all(:limit => 2)
110
+ assert_equal 2, result.size
111
+ ensure
112
+ _veneer_teardown
113
+ end
114
+
115
+ def test_should_implement_order
116
+ create_valid_items(4)
117
+ key = @valid_attributes.keys.first
118
+ ordered_result = Veneer(@klass).all(:order => key)
119
+ result = Veneer(@klass).all
120
+ result = result.sort_by{ |i| i.send(key) }
121
+ assert_equal ordered_result, result
122
+ ensure
123
+ _veneer_teardown
124
+ end
125
+
126
+ def test_should_implement_order_with_desc
127
+ create_valid_items(4)
128
+ key = @valid_attributes.keys.first
129
+ ordered_result = Veneer(@klass).all(:order => "#{key} desc")
130
+ result = Veneer(@klass).all
131
+ result = result.sort_by{ |i| i.send(key) }.reverse
132
+ assert_equal ordered_result, result
133
+ ensure
134
+ _veneer_teardown
135
+ end
136
+
137
+ def test_should_implement_offset
138
+ create_valid_items(4)
139
+ result = Veneer(@klass).all
140
+ offset_result = Veneer(@klass).all(:offset => 2, :limit => 2)
141
+ assert_equal result[2..4], offset_result
142
+ ensure
143
+ _veneer_teardown
144
+ end
145
+
146
+ def test_conditions
147
+ create_valid_items(3)
148
+ Veneer(@klass).create(@valid_attributes)
149
+ result = Veneer(@klass).all(:conditions => @valid_attributes)
150
+ assert_equal 1, result.size
151
+ ensure
152
+ _veneer_teardown
153
+ end
154
+ end
155
+
156
+ module InstanceWrapperLint
157
+ def test_should_implement_destroy
158
+ item = Veneer(@klass).create(@valid_attributes)
159
+ assert Veneer(@klass).all.size > 0
160
+ assert item.kind_of?(Veneer::Base::InstanceWrapper)
161
+ item.destroy
162
+ assert Veneer(@klass).all.size == 0
163
+ ensure
164
+ _veneer_teardown
165
+ end
166
+
167
+ def test_should_implement_new_record?
168
+ item = Veneer(@klass).new(@valid_attributes)
169
+ assert item.new_record?
170
+ assert item.save
171
+ assert !item.new_record?
172
+ ensure
173
+ _veneer_teardown
174
+ end
175
+
176
+ def test_should_implement_save!
177
+ assert_raises Veneer::Errors::NotSaved do
178
+ Veneer(@klass).create!(@invalid_attributes)
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,3 @@
1
+ module Veneer
2
+ VERSION = "0.2.0"
3
+ end
data/lib/veneer.rb CHANGED
@@ -1,8 +1,4 @@
1
1
  require 'hashie'
2
- require 'dirge'
3
-
4
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "lib"))
5
-
6
2
  require 'veneer/core_ext/kernel'
7
3
 
8
4
  unless defined?(BasicObject)
@@ -28,6 +24,7 @@ module Veneer
28
24
  autoload :Errors, 'veneer/errors'
29
25
  autoload :Proxy, 'veneer/proxy'
30
26
  autoload :Conditional, 'veneer/base/conditional'
27
+ autoload :Lint, 'veneer/lint'
31
28
 
32
29
  module Base
33
30
  autoload :ClassWrapper, 'veneer/base/class_wrapper'
data/test/test_helper.rb CHANGED
@@ -1,12 +1,13 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
  require 'shoulda'
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+
7
+ require 'veneer/lint'
4
8
 
5
9
  Dir[File.join(File.dirname(__FILE__), "support", "**/*.rb")].each{|f| require f}
6
- Dir[File.join(File.dirname(__FILE__), "macros", "**/*.rb")].each{|f| require f}
7
10
 
8
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
- $LOAD_PATH.unshift(File.dirname(__FILE__))
10
11
  require 'veneer'
11
12
 
12
13
  $validations = []
@@ -1,3 +1,5 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+
1
3
  require 'activerecord'
2
4
  require 'veneer/adapters/activerecord'
3
5
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
@@ -7,6 +9,8 @@ class CreateActiveRecordFoo < ActiveRecord::Migration
7
9
  def self.up
8
10
  create_table :active_record_foos, :force => true do |t|
9
11
  t.string :name
12
+ t.string :title
13
+ t.string :description
10
14
  t.integer :order_field1
11
15
  end
12
16
  end
@@ -19,7 +23,6 @@ end
19
23
  CreateActiveRecordFoo.up
20
24
 
21
25
  class ActiveRecordFoo < ActiveRecord::Base
22
- attr_accessor :password, :password_confirmation
23
26
  def self.veneer_spec_reset!
24
27
  delete_all
25
28
  end
@@ -32,3 +35,22 @@ class ActiveRecordFoo < ActiveRecord::Base
32
35
  errors.add(:name, "Name cannot be v_with_m_test") if name == "v_with_m_test"
33
36
  end
34
37
  end
38
+
39
+ class ActiveRecordVeneerTest < ::Test::Unit::TestCase
40
+ include Veneer::Lint
41
+
42
+ def setup
43
+ @klass = ::ActiveRecordFoo
44
+ @valid_attributes = {:name => "foo", :title => "title", :description => "description"}
45
+ @invalid_attributes = @valid_attributes.dup.merge(:name => "invalid")
46
+ end
47
+
48
+ def create_valid_items(num)
49
+ attr = @valid_attributes
50
+
51
+ (1..num).each do |i|
52
+ ActiveRecordFoo.create(:name => "#{attr[:name]}#{i}", :title => "#{attr[:title]}#{i}", :description => "#{attr[:description]}#{i}")
53
+ end
54
+ end
55
+ end
56
+
@@ -0,0 +1,56 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+ require 'dm-core'
3
+ require 'dm-validations'
4
+ require 'dm-migrations'
5
+ require 'veneer/adapters/datamapper'
6
+
7
+ DataMapper.setup(:default, 'sqlite3::memory:')
8
+
9
+ class DMFoo
10
+ include DataMapper::Resource
11
+
12
+ property :id, Serial
13
+ property :name, String
14
+ property :title, String
15
+ property :description, String
16
+ property :order_field1, Integer
17
+
18
+ validates_with_method :name, :method => :check_name
19
+
20
+ def check_name
21
+ if name == "invalid"
22
+ [false, "Invalid name"]
23
+ else
24
+ true
25
+ end
26
+ end
27
+
28
+ def v_with_m_test
29
+ if name == "v_with_m_test"
30
+ [false, "name cannot be v_with_m_test"]
31
+ else
32
+ true
33
+ end
34
+ end
35
+ end
36
+
37
+ DataMapper.auto_migrate!
38
+
39
+ class DataMapperVeneerTest < ::Test::Unit::TestCase
40
+ include Veneer::Lint
41
+
42
+ def setup
43
+ @klass = ::DMFoo
44
+ @valid_attributes = {:name => "foo", :title => "title", :description => "description"}
45
+ @invalid_attributes = @valid_attributes.dup.merge(:name => "invalid")
46
+ end
47
+
48
+ def create_valid_items(num)
49
+ attr = @valid_attributes
50
+
51
+ (1..num).each do |i|
52
+ DMFoo.create(:name => "#{attr[:name]}#{i}", :title => "#{attr[:title]}#{i}", :description => "#{attr[:description]}#{i}")
53
+ end
54
+ end
55
+ end
56
+
@@ -0,0 +1,49 @@
1
+ require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
2
+ require 'mongo_mapper'
3
+
4
+ require 'veneer/adapters/mongomapper'
5
+
6
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
7
+ MongoMapper.database = 'veneer_test'
8
+
9
+ class MongoFoo
10
+ include MongoMapper::Document
11
+ attr_accessor :password, :password_confirmation
12
+
13
+ key :name, String
14
+ key :title, String
15
+ key :description, String
16
+ key :order_field1, Integer
17
+
18
+ validate_on_create :check_name
19
+
20
+ def check_name
21
+ errors.add(:name, "may not be invalid") if name == "invalid"
22
+ end
23
+
24
+ def v_with_m_test
25
+ errors.add(:name, "may not be v_with_m_test") if name == "v_with_m_test"
26
+ end
27
+ end
28
+
29
+ class MongoMapperVeneerTest < ::Test::Unit::TestCase
30
+ include Veneer::Lint
31
+
32
+ def setup
33
+ @klass = ::MongoFoo
34
+ @valid_attributes = {:name => "foo", :title => "title", :description => "description"}
35
+ @invalid_attributes = @valid_attributes.dup.merge(:name => "invalid")
36
+ end
37
+
38
+ def create_valid_items(num)
39
+ attr = @valid_attributes
40
+
41
+ (1..num).each do |i|
42
+ MongoFoo.create(:name => "#{attr[:name]}#{i}", :title => "#{attr[:title]}#{i}", :description => "#{attr[:description]}#{i}")
43
+ end
44
+ end
45
+ end
46
+
47
+
48
+
49
+
@@ -51,63 +51,38 @@ class VeneerProxyTest < Test::Unit::TestCase
51
51
  klass.collection.clear
52
52
  end
53
53
 
54
- def find_first(conditional)
55
- find_many(conditional).first
56
- end
57
-
58
- def find_many(conditional)
59
- result = ::Foo.collection
60
-
61
- unless conditional.order.empty?
62
- order = conditional.order.first
63
- result = result.sort_by{|i| i.send(order.field)}
64
- result.reverse! if order.decending?
54
+ def find_many(opts)
55
+ result = ::Foo.collection.dup
56
+
57
+ case opts.order
58
+ when Array # first order only supported
59
+ item = opts.order.first
60
+ field, direction = item.split(" ")
61
+ result = result.sort_by{|i| i.send(field)}
62
+ result.reverse! if direction.to_s /desc/i
63
+ when String, Symbol
64
+ result = result.sort_by{|i| i.send(opts.order) }
65
65
  end
66
66
 
67
- if conditional.offset
68
- offset = conditional.offset.to_i
67
+ if opts.offset?
68
+ offset = opts.offset.to_i
69
69
  result = result[offset..-1]
70
70
  end
71
71
 
72
- conditional.conditions.each do |condition|
73
- filtered = case condition.operator
74
- when :eql
75
- result.select{|i| i.send(condition.field) == condition.value}
76
- when :not
77
- result.select{|i| i.send(condition.field) != condition.value}
78
- when :gt
79
- result.select{|i| !i.send(condition.field).nil? && (i.send(condition.field) > condition.value)}
80
- when :gte
81
- result.select{|i| !i.send(condition.field).nil? && (i.send(condition.field) >= condition.value)}
82
- when :lt
83
- result.select{|i| !i.send(condition.field).nil? && (i.send(condition.field) < condition.value)}
84
- when :lte
85
- result.select{|i| !i.send(condition.field).nil? && (i.send(condition.field) <= condition.value)}
86
- when :in
87
- result.select{|i| condition.value.include?(i.send(condition.field))}
88
- else
89
- []
72
+ if opts.conditions?
73
+ opts.conditions.each do |field, value|
74
+ result = result.select{|i| i.send(field) == value}.flatten.compact
90
75
  end
91
- result = filtered.flatten.compact
92
76
  end
93
- if conditional.limit
94
- result = result[0..(conditional.limit - 1)]
77
+
78
+ if opts.limit?
79
+ result = result[0..(opts.limit.to_i - 1)]
95
80
  end
96
81
  result
97
82
  end
98
-
99
83
  end
100
84
 
101
85
  class InstanceWrapper < Veneer::Base::InstanceWrapper
102
-
103
- def new_record?
104
- instance.new_record?
105
- end
106
-
107
- def save!
108
- instance.save!
109
- end
110
-
111
86
  def save
112
87
  instance.save
113
88
  rescue
@@ -170,7 +145,7 @@ class VeneerProxyTest < Test::Unit::TestCase
170
145
 
171
146
  teardown{ ::Foo.collection.clear }
172
147
 
173
- should "get the correct resource with equal" do
148
+ should "get the correct resource" do
174
149
  expected = ::Foo.collection.select{|i| i.name == "foo1"}.first
175
150
  result = Veneer(::Foo).first(:conditions => {:name => "foo1"})
176
151
  assert_equal expected, result.instance