money-mongoid 0.1.2 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,12 +1,19 @@
1
1
  source :rubygems
2
2
 
3
3
  gem 'money'
4
- gem 'mongoid', ">= 2.4.0"
4
+ gem 'mongoid', "~> 3.0.0"
5
+ gem 'origin'
6
+ gem 'moped'
7
+ gem 'origin-selectable_ext'
8
+
9
+ # gem 'mongoid', "~> 2.4"
10
+ # gem 'bson'
5
11
 
6
12
  group :development do
7
13
  gem "rspec", ">= 2.10"
8
14
  gem "rdoc", ">= 3.12"
9
15
  gem "bundler", ">= 1.1.0"
16
+
10
17
  gem "jeweler", ">= 1.8.4"
11
18
  gem "simplecov",">= 0.5"
12
19
  end
data/Gemfile.lock CHANGED
@@ -7,13 +7,13 @@ GEM
7
7
  activesupport (3.2.8)
8
8
  i18n (~> 0.6)
9
9
  multi_json (~> 1.0)
10
- bson (1.6.4)
11
- bson_ext (1.6.4)
12
- bson (~> 1.6.4)
13
- builder (3.0.0)
10
+ bson (1.7.0)
11
+ bson_ext (1.7.0)
12
+ bson (~> 1.7.0)
13
+ builder (3.0.3)
14
14
  diff-lcs (1.1.3)
15
15
  git (1.2.5)
16
- i18n (0.6.0)
16
+ i18n (0.6.1)
17
17
  jeweler (1.8.4)
18
18
  bundler (~> 1.0)
19
19
  git (>= 1.2.5)
@@ -23,14 +23,16 @@ GEM
23
23
  money (5.0.0)
24
24
  i18n (~> 0.4)
25
25
  json
26
- mongoid (3.0.4)
26
+ mongoid (3.0.6)
27
27
  activemodel (~> 3.1)
28
28
  moped (~> 1.1)
29
29
  origin (~> 1.0)
30
30
  tzinfo (~> 0.3.22)
31
- moped (1.2.0)
31
+ moped (1.2.5)
32
32
  multi_json (1.3.6)
33
- origin (1.0.6)
33
+ origin (1.0.9)
34
+ origin-selectable_ext (0.1.0)
35
+ origin
34
36
  rake (0.9.2.2)
35
37
  rdoc (3.12)
36
38
  json (~> 1.4)
@@ -39,9 +41,9 @@ GEM
39
41
  rspec-expectations (~> 2.11.0)
40
42
  rspec-mocks (~> 2.11.0)
41
43
  rspec-core (2.11.1)
42
- rspec-expectations (2.11.2)
44
+ rspec-expectations (2.11.3)
43
45
  diff-lcs (~> 1.1.3)
44
- rspec-mocks (2.11.2)
46
+ rspec-mocks (2.11.3)
45
47
  simplecov (0.6.4)
46
48
  multi_json (~> 1.0)
47
49
  simplecov-html (~> 0.5.3)
@@ -56,8 +58,10 @@ DEPENDENCIES
56
58
  bundler (>= 1.1.0)
57
59
  jeweler (>= 1.8.4)
58
60
  money
59
- mongoid (>= 2.4.0)
61
+ mongoid (~> 3.0.0)
60
62
  moped
63
+ origin
64
+ origin-selectable_ext
61
65
  rdoc (>= 3.12)
62
66
  rspec (>= 2.10)
63
67
  simplecov (>= 0.5)
data/README.md CHANGED
@@ -20,6 +20,8 @@ Bundle via Terminal:
20
20
  require 'money-mongoid'
21
21
  ``
22
22
 
23
+ Now also supports MoneyRange with between queries and can even do dynamic currency conversions as part of the query!!! ;)
24
+
23
25
  See specs for usage examples, fx `money/mongoid/3x/money_spec.rb`
24
26
 
25
27
  ## Contributing to money-mongoid
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.1
@@ -1,3 +1,5 @@
1
+ require 'origin-selectable_ext'
2
+
1
3
  module Mongoize
2
4
  extend ActiveSupport::Concern
3
5
  # See http://mongoid.org/en/mongoid/docs/upgrading.html
@@ -15,24 +17,82 @@ module Mongoize
15
17
  object.__evolve_to_money__.mongoize
16
18
  end
17
19
 
20
+ def custom_serialization?(operator)
21
+ return false unless operator
22
+ case operator
23
+ when "$gte", "$gt", "$lt", "$lte"
24
+ true
25
+ else
26
+ false
27
+ end
28
+ end
29
+
30
+ def custom_specify(name, operator, value, options = {})
31
+ money = value.__evolve_to_money__
32
+ case operator
33
+ when "$gte", "$gt", "$lt", "$lte"
34
+ specify_with_multiple_currencies(name, operator, money, options)
35
+ else
36
+ raise RuntimeError, "Unsupported operator"
37
+ end
38
+ end
39
+
40
+ def custom_between(field, value, options = {})
41
+ { "$gte" => ::Money.new(value.min, value.iso_code), "$lte" => ::Money.new(value.max, value.iso_code) }
42
+ end
43
+
44
+ def custom_between? field, value
45
+ true
46
+ end
47
+
18
48
  private
19
49
 
50
+ def specify_with_multiple_currencies(name, operator, value, options)
51
+ currencies = [value.currency.iso_code]
52
+ currencies.concat options[:compare_using] if options && options[:compare_using]
53
+ multiple_money_values = value.exchange_to_currencies(currencies.to_set)
54
+ subconditions = multiple_money_values.collect {|money| specify_with_single_currency(name, operator, money)}
55
+ if subconditions.count > 0
56
+ {"$or" => subconditions}
57
+ else
58
+ subconditions[0]
59
+ end
60
+ end
61
+
62
+ def specify_with_single_currency(name, operator, value)
63
+ {"#{name}.cents" => {operator => value.cents}, "#{name}.currency_iso" => value.currency.iso_code}
64
+ end
65
+
20
66
  def get_cents value
21
67
  value[:cents] || value['cents']
22
68
  end
23
69
 
24
70
  def get_currency value
25
71
  value[:currency_iso] || value['currency_iso']
26
- end
72
+ end
73
+
27
74
  end
28
75
  end
29
76
 
30
77
 
31
-
32
78
  class Money
33
79
  include Mongoize
34
80
 
35
81
  def __evolve_to_money__
36
82
  self
37
83
  end
38
- end
84
+
85
+ def exchange_to_currencies(currencies)
86
+ currencies.map {|currency| exchange_to(currency)}
87
+ end
88
+
89
+ end
90
+
91
+ Mongoid::Fields.option :compare_using do |model, field, value|
92
+ value.each do |iso_code|
93
+ unless Money::Currency.find(iso_code)
94
+ raise ArgumentError, "Invalid ISO currency code: #{value}"
95
+ end
96
+ end
97
+ end
98
+
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ module Origin
3
+
4
+ # An origin selectable is selectable, in that it has the ability to select
5
+ # document from the database. The selectable module brings all functionality
6
+ # to the selectable that has to do with building MongoDB selectors.
7
+ module Selectable
8
+
9
+ private
10
+
11
+ # Create the standard expression query.
12
+ #
13
+ # @api private
14
+ #
15
+ # @example Create the selection.
16
+ # selectable.expr_query(age: 50)
17
+ #
18
+ # @param [ Hash ] criterion The field/value pairs.
19
+ #
20
+ # @return [ Selectable ] The cloned selectable.
21
+ #
22
+ # @since 1.0.0
23
+ def expr_query(criterion)
24
+ selection(criterion) do |selector, field, value|
25
+ if (field.is_a? Key) && custom_serialization?(field.name, field.operator)
26
+ specified = custom_specify(field.name, field.operator, value)
27
+ else
28
+ specified = field.specify(value.__expand_complex__, negating?)
29
+ end
30
+ selector.merge!(specified)
31
+ end
32
+ end
33
+
34
+ def between(criterion = nil)
35
+ selection(criterion) do |selector, field, value|
36
+ expr = custom_between?(field, value) ? custom_between(field, value) : { "$gte" => value.min, "$lte" => value.max }
37
+ selector.store(
38
+ field, expr
39
+ )
40
+ end
41
+ end
42
+
43
+ def custom_between? name, value
44
+ serializer = @serializers[name.to_s]
45
+ serializer && serializer.type.respond_to?(:custom_between?) && serializer.type.custom_between?(name, value)
46
+ end
47
+
48
+ def custom_between(name, value)
49
+ serializer = @serializers[name.to_s]
50
+ raise RuntimeError, "No Serializer found for field #{name}" unless serializer
51
+ serializer.type.custom_between(name, value, serializer.options)
52
+ end
53
+
54
+
55
+ def custom_serialization?(name, operator)
56
+ serializer = @serializers[name.to_s]
57
+ serializer && serializer.type.respond_to?(:custom_serialization?) && serializer.type.custom_serialization?(operator)
58
+ end
59
+
60
+ def custom_specify(name, operator, value)
61
+ serializer = @serializers[name.to_s]
62
+ raise RuntimeError, "No Serializer found for field #{name}" unless serializer
63
+ serializer.type.custom_specify(name, operator, value, serializer.options)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,43 @@
1
+ class Range
2
+ def dollars
3
+ ::MoneyRange.new self, 'usd'
4
+ end
5
+
6
+ def euros
7
+ ::MoneyRange.new self, 'eur'
8
+ end
9
+
10
+ def to_currency iso_code
11
+ ::MoneyRange.new self, iso_code
12
+ end
13
+ end
14
+
15
+ class Money
16
+ def self.range range, iso_code
17
+ ::MoneyRange.new range, iso_code
18
+ end
19
+ end
20
+
21
+ # http://blog.jayfields.com/2008/02/ruby-replace-methodmissing-with-dynamic.html
22
+ class DelegateDecorator
23
+ def initialize(subject)
24
+ subject.public_methods(false).each do |meth|
25
+ (class << self; self; end).class_eval do
26
+ define_method meth do |*args|
27
+ subject.send meth, *args
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ class MoneyRange < DelegateDecorator
35
+ attr_reader :iso_code, :range
36
+
37
+ def initialize range, iso_code
38
+ super(range)
39
+ @range = range
40
+ @iso_code = iso_code
41
+ end
42
+ end
43
+
@@ -1,2 +1,3 @@
1
1
  require 'money/mongoid/core_ext/string'
2
2
  require 'money/mongoid/core_ext/array'
3
+ require 'money/mongoid/core_ext/range'
@@ -22,7 +22,7 @@ end
22
22
  module Mongoid
23
23
  module Document
24
24
  module ClassMethods
25
- include Money::Mongoid::Macros
25
+ include Mongoid::Money::Macros
26
26
  end
27
27
  end
28
28
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Mongoid
4
4
  module Monetizable
5
- include Money::Orm::Generic
5
+ include ::Money::Orm::Generic
6
6
 
7
7
  def self.included(base)
8
8
  base.class_eval do
@@ -11,7 +11,7 @@ module Mongoid
11
11
 
12
12
  validates_numericality_of :cents
13
13
  end
14
- base.extend Money::Orm::Generic::ClassMethods
14
+ base.extend ::Money::Orm::Generic::ClassMethods
15
15
  end
16
16
  end
17
17
  end
@@ -2,7 +2,7 @@ module Mongoid
2
2
  module Monetize
3
3
  def self.included(base)
4
4
  base.extend ClassMethods
5
- base.extend Money::Orm::Generic::ClassMethods
5
+ base.extend ::Money::Orm::Generic::ClassMethods
6
6
  end
7
7
 
8
8
  module ClassMethods
@@ -10,12 +10,12 @@ module Mongoid
10
10
  as_poly = options.delete(:as) || default_polymorphic_money
11
11
 
12
12
  unless as_poly
13
- raise ArgumentError, "You must set an :as option indicating the polymorphic Monetizable model. See money-rails gem."
13
+ raise ArgumentError, "You must set an :as option indicating the polymorphic Monetizable model - was: #{options}. See money-rails gem."
14
14
  end
15
15
 
16
16
  self.embeds_one name.to_sym, options.merge(:as => as_poly)
17
17
  end
18
- alias_method :monetize, :monetize_one
18
+ # alias_method :monetize, :monetize_one
19
19
 
20
20
  def monetize_many name, options = {:as => :priced}
21
21
  as_poly = options.delete(:as) || default_polymorphic_money
data/lib/money/mongoid.rb CHANGED
@@ -1,8 +1,14 @@
1
1
  require 'money'
2
2
  require 'money/mongoid/core_ext'
3
+
4
+ require 'money/orm/generic'
5
+ require 'money/mongoid/macros'
6
+ require 'money/mongoid/monetizable'
7
+ require 'money/mongoid/monetize'
8
+
3
9
  require 'money/orm/generic'
4
10
 
5
- if Mongoid::VERSION > '3'
11
+ if ::Mongoid::VERSION > '3'
6
12
  require "money/mongoid/3x/money"
7
13
  else
8
14
  require "money/mongoid/2x/money"
@@ -14,4 +20,57 @@ module Mongoid
14
20
  attr_accessor :default_polymorphic_money
15
21
  end
16
22
  end
23
+
24
+ module Moneys
25
+ def self.macros
26
+ [:value, :price, :cost]
27
+ end
28
+
29
+ macros.each do |klass|
30
+ name = "#{klass}_class"
31
+
32
+ # define getter
33
+ define_singleton_method name do
34
+ var_name = :"@#{name}"
35
+ unless instance_variable_get(var_name)
36
+ instance_variable_set(var_name, klass.to_s.camelize.constantize)
37
+ end
38
+ instance_variable_get(var_name)
39
+ end
40
+ end
41
+
42
+ macros.each do |name|
43
+ writ_klass = "#{name}_class"
44
+ # define attr writer
45
+ self.send(:attr_writer, writ_klass)
46
+ end
47
+
48
+ class << self
49
+ def classes= klass
50
+ macros.each {|m| send("#{m.to_s.underscore}_class=", klass) }
51
+ end
52
+
53
+ def macro_map
54
+ {
55
+ :costing => :cost,
56
+ :priced_at => :price,
57
+ :valued_at => :value
58
+ }
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ class Object
65
+ Mongoid::Moneys.macro_map.each do |method_name, klass|
66
+ define_method method_name do |amount, currency=nil|
67
+ currency = ::Money::Currency.new(currency || ::Money.default_currency)
68
+ money = Money.new(amount, currency)
69
+
70
+ class_name = "#{klass}_class"
71
+ money_klass = Mongoid::Moneys.send(class_name)
72
+ money_klass.new :price => money
73
+ end
74
+ end
17
75
  end
76
+
@@ -4,8 +4,11 @@ class Money
4
4
  # Virtual price / currency attributes
5
5
  module ClassMethods
6
6
  def monetize_for *names
7
- options = names.last.kind_of?(Hash) ? names.delete(names.last) : {:as => :priced}
8
- names.each {|name| monetize name, options }
7
+ options = names.extract_options!
8
+ options = {:as => :priced} if options.blank?
9
+ names.each do |name|
10
+ monetize_one name, options.dup
11
+ end
9
12
  end
10
13
  end
11
14
 
data/lib/money-mongoid.rb CHANGED
@@ -1 +1,2 @@
1
+ require 'mongoid'
1
2
  require 'money/mongoid'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "money-mongoid"
8
- s.version = "0.1.2"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = "2012-08-28"
12
+ s.date = "2012-09-24"
13
13
  s.description = "Makes it easy to use money with mongoid"
14
14
  s.email = "kmandrup@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -29,8 +29,10 @@ Gem::Specification.new do |s|
29
29
  "lib/money/mongoid.rb",
30
30
  "lib/money/mongoid/2x/money.rb",
31
31
  "lib/money/mongoid/3x/money.rb",
32
+ "lib/money/mongoid/3x/origin/selectable.rb",
32
33
  "lib/money/mongoid/core_ext.rb",
33
34
  "lib/money/mongoid/core_ext/array.rb",
35
+ "lib/money/mongoid/core_ext/range.rb",
34
36
  "lib/money/mongoid/core_ext/string.rb",
35
37
  "lib/money/mongoid/macros.rb",
36
38
  "lib/money/mongoid/monetizable.rb",
@@ -41,9 +43,11 @@ Gem::Specification.new do |s|
41
43
  "spec/money/mongoid/2x/product.rb",
42
44
  "spec/money/mongoid/3x/money_spec.rb",
43
45
  "spec/money/mongoid/3x/product.rb",
46
+ "spec/money/mongoid/models.rb",
44
47
  "spec/money/mongoid/models/account.rb",
45
48
  "spec/money/mongoid/models/price.rb",
46
49
  "spec/money/mongoid/monetize_spec.rb",
50
+ "spec/money/mongoid/shared_ex.rb",
47
51
  "spec/money/mongoid/spec_helper.rb",
48
52
  "spec/money/mongoid/support/mongoid.yml",
49
53
  "spec/money/mongoid/version_setup.rb",
@@ -60,7 +64,10 @@ Gem::Specification.new do |s|
60
64
 
61
65
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
62
66
  s.add_runtime_dependency(%q<money>, [">= 0"])
63
- s.add_runtime_dependency(%q<mongoid>, [">= 2.4.0"])
67
+ s.add_runtime_dependency(%q<mongoid>, ["~> 3.0.0"])
68
+ s.add_runtime_dependency(%q<origin>, [">= 0"])
69
+ s.add_runtime_dependency(%q<moped>, [">= 0"])
70
+ s.add_runtime_dependency(%q<origin-selectable_ext>, [">= 0"])
64
71
  s.add_development_dependency(%q<rspec>, [">= 2.10"])
65
72
  s.add_development_dependency(%q<rdoc>, [">= 3.12"])
66
73
  s.add_development_dependency(%q<bundler>, [">= 1.1.0"])
@@ -68,7 +75,10 @@ Gem::Specification.new do |s|
68
75
  s.add_development_dependency(%q<simplecov>, [">= 0.5"])
69
76
  else
70
77
  s.add_dependency(%q<money>, [">= 0"])
71
- s.add_dependency(%q<mongoid>, [">= 2.4.0"])
78
+ s.add_dependency(%q<mongoid>, ["~> 3.0.0"])
79
+ s.add_dependency(%q<origin>, [">= 0"])
80
+ s.add_dependency(%q<moped>, [">= 0"])
81
+ s.add_dependency(%q<origin-selectable_ext>, [">= 0"])
72
82
  s.add_dependency(%q<rspec>, [">= 2.10"])
73
83
  s.add_dependency(%q<rdoc>, [">= 3.12"])
74
84
  s.add_dependency(%q<bundler>, [">= 1.1.0"])
@@ -77,7 +87,10 @@ Gem::Specification.new do |s|
77
87
  end
78
88
  else
79
89
  s.add_dependency(%q<money>, [">= 0"])
80
- s.add_dependency(%q<mongoid>, [">= 2.4.0"])
90
+ s.add_dependency(%q<mongoid>, ["~> 3.0.0"])
91
+ s.add_dependency(%q<origin>, [">= 0"])
92
+ s.add_dependency(%q<moped>, [">= 0"])
93
+ s.add_dependency(%q<origin-selectable_ext>, [">= 0"])
81
94
  s.add_dependency(%q<rspec>, [">= 2.10"])
82
95
  s.add_dependency(%q<rdoc>, [">= 3.12"])
83
96
  s.add_dependency(%q<bundler>, [">= 1.1.0"])
@@ -9,6 +9,22 @@ describe 'Mongoid custom Money type' do
9
9
  let(:products) do
10
10
  end
11
11
 
12
+ before :all do
13
+ # Mongoid.logger = Logger.new($stdout)
14
+ # Moped.logger = Logger.new($stdout)
15
+
16
+ Money.add_rate("USD","EUR", 0.5)
17
+ Money.add_rate("EUR","USD", 2)
18
+ end
19
+
20
+ def create_money iso_code, count = 6, options = {step: 500}
21
+ step = options[:step]
22
+ count.times do |n|
23
+ Product.create :price => Money.new(n * step, iso_code)
24
+ end
25
+ end
26
+
27
+
12
28
  its(:price) { should be_a Money }
13
29
 
14
30
  specify { subject.price.cents.should == 3000 }
@@ -30,12 +46,7 @@ describe 'Mongoid custom Money type' do
30
46
  end
31
47
 
32
48
  it "should be searchable by price using gte and a money value of different currency" do
33
- Money.add_rate("USD","EUR", 0.5)
34
- Money.add_rate("EUR","USD", 2)
35
-
36
- 6.times do |n|
37
- Product.create :price => Money.new(n * 500, 'USD')
38
- end
49
+ create_money 'USD'
39
50
 
40
51
  # So far only works by explicit conversion before search. Any solution?
41
52
  Product.all.exchange_to! 'EUR'
@@ -46,4 +57,31 @@ describe 'Mongoid custom Money type' do
46
57
  search_res = Product.where :price.gte => Money.new(2000, 'EUR')
47
58
  search_res.count.should == 0
48
59
  end
60
+
61
+ it 'should search using money range' do
62
+ create_money 'USD'
63
+
64
+ res1 = Product.between price: (500..2000).dollars
65
+ res2 = Product.between price: (500..2000).to_currency('USD')
66
+
67
+ res1.count.should == 4
68
+ res2.count.should == res1.count
69
+
70
+ res3 = Product.between price: Money.range((500..2000), 'usd')
71
+ res3.count.should == 4
72
+ end
73
+
74
+
75
+ it "should respect the currency information when using comparison operators" do
76
+ Product.delete_all
77
+
78
+ create_money 'USD'
79
+ create_money 'EUR'
80
+
81
+ search_res = Product.where :price.gte => Money.new(2000, 'EUR')
82
+ search_res.count.should == 2
83
+ search_res = Product.where :price.lt => Money.new(2000, "USD")
84
+ search_res.count.should == 6
85
+
86
+ end
49
87
  end
@@ -1,7 +1,7 @@
1
1
  class Product
2
2
  include Mongoid::Document
3
3
 
4
- field :price, :type => Money
4
+ field :price, :type => Money, :compare_using => ["USD", "EUR"]
5
5
 
6
6
  def exchange_to! currency_iso
7
7
  self.price = self.price.exchange_to(currency_iso)
@@ -7,6 +7,6 @@ class Account
7
7
  embeds_one :deposit, :as => :priced
8
8
  monetize_one :rental_price
9
9
 
10
- monetize :rent
11
- monetize_many :costs, :class_name => 'Price'
10
+ monetize_one :rent
11
+ monetize_many :costs, :class_name => 'Price', :as => :costing
12
12
  end
@@ -1,15 +1,13 @@
1
1
  class Price
2
2
  include Mongoid::Document
3
3
 
4
- monetizable_orm :mongoid, :as => :priced
5
-
6
- # embedded_in :priced, :polymorphic => true
4
+ monetizable :as => :priced
7
5
 
8
6
  def self.for amount, currency = nil
9
7
  currency = ::Money::Currency.new(currency || ::Money.default_currency)
10
- money = Money.new(amount, currency)
8
+ money = ::Money.new(amount, currency)
11
9
 
12
10
  # see 'kristianmandrup' fork of money (money/macros)
13
- Money::Macros.price_class.new :price => money
11
+ Mongoid::Money::Macros.price_class.new :price => money
14
12
  end
15
13
  end
@@ -0,0 +1,2 @@
1
+ require 'money/mongoid/models/price'
2
+ require 'money/mongoid/models/account'
@@ -1,4 +1,6 @@
1
1
  require 'money/mongoid/spec_helper'
2
+ require 'money/mongoid/models'
3
+ require 'money/mongoid/shared_ex'
2
4
 
3
5
  describe Money::Mongoid::Monetizable do
4
6
  before do
@@ -45,7 +47,7 @@ describe Money::Mongoid::Monetizable do
45
47
  subject { cost_account }
46
48
 
47
49
  before do
48
- MoneyRails::Moneys.cost_class = Price
50
+ Mongoid::Moneys.cost_class = Price
49
51
  end
50
52
 
51
53
  let(:cost_account) do
@@ -73,10 +75,10 @@ describe Money::Mongoid::Monetizable do
73
75
  subject { valued_at(4000) }
74
76
 
75
77
  before do
76
- MoneyRails::Moneys.classes = Price
78
+ Mongoid::Moneys.classes = Price
77
79
  end
78
80
 
79
- specify { MoneyRails::Moneys.value_class.should == Price }
81
+ specify { Mongoid::Moneys.value_class.should == Price }
80
82
 
81
83
  specify { subject.should be_a Price }
82
84
  specify { subject.price.should be_a Money }
@@ -0,0 +1,13 @@
1
+ shared_examples 'a generic account' do
2
+ it "rental is money" do
3
+ subject.rental_price.price.should == Money.new(3000)
4
+ end
5
+
6
+ it "deposit is also money" do
7
+ subject.deposit.price.should == Money.new(150)
8
+ end
9
+
10
+ it "and rent is also money" do
11
+ subject.rent.price.should == Money.new(100)
12
+ end
13
+ end
@@ -5,6 +5,8 @@ require 'money'
5
5
  require 'money/mongoid/version_setup'
6
6
 
7
7
  Mongoid.configure do |config|
8
+ # Mongoid.logger.level = Logger::DEBUG
9
+ # Moped.logger.level = Logger::DEBUG
8
10
  Mongoid::VersionSetup.configure config
9
11
  end
10
12
 
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rspec'
2
+ require 'money-mongoid'
2
3
 
3
4
  SPEC_DIR = File.dirname(__FILE__)
4
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-28 00:00:00.000000000 Z
12
+ date: 2012-09-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: money
@@ -29,12 +29,28 @@ dependencies:
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: mongoid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: origin
32
48
  requirement: !ruby/object:Gem::Requirement
33
49
  none: false
34
50
  requirements:
35
51
  - - ! '>='
36
52
  - !ruby/object:Gem::Version
37
- version: 2.4.0
53
+ version: '0'
38
54
  type: :runtime
39
55
  prerelease: false
40
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +58,39 @@ dependencies:
42
58
  requirements:
43
59
  - - ! '>='
44
60
  - !ruby/object:Gem::Version
45
- version: 2.4.0
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: moped
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: origin-selectable_ext
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
46
94
  - !ruby/object:Gem::Dependency
47
95
  name: rspec
48
96
  requirement: !ruby/object:Gem::Requirement
@@ -143,8 +191,10 @@ files:
143
191
  - lib/money/mongoid.rb
144
192
  - lib/money/mongoid/2x/money.rb
145
193
  - lib/money/mongoid/3x/money.rb
194
+ - lib/money/mongoid/3x/origin/selectable.rb
146
195
  - lib/money/mongoid/core_ext.rb
147
196
  - lib/money/mongoid/core_ext/array.rb
197
+ - lib/money/mongoid/core_ext/range.rb
148
198
  - lib/money/mongoid/core_ext/string.rb
149
199
  - lib/money/mongoid/macros.rb
150
200
  - lib/money/mongoid/monetizable.rb
@@ -155,9 +205,11 @@ files:
155
205
  - spec/money/mongoid/2x/product.rb
156
206
  - spec/money/mongoid/3x/money_spec.rb
157
207
  - spec/money/mongoid/3x/product.rb
208
+ - spec/money/mongoid/models.rb
158
209
  - spec/money/mongoid/models/account.rb
159
210
  - spec/money/mongoid/models/price.rb
160
211
  - spec/money/mongoid/monetize_spec.rb
212
+ - spec/money/mongoid/shared_ex.rb
161
213
  - spec/money/mongoid/spec_helper.rb
162
214
  - spec/money/mongoid/support/mongoid.yml
163
215
  - spec/money/mongoid/version_setup.rb
@@ -177,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
229
  version: '0'
178
230
  segments:
179
231
  - 0
180
- hash: -49042986198452463
232
+ hash: 3922419886446166376
181
233
  required_rubygems_version: !ruby/object:Gem::Requirement
182
234
  none: false
183
235
  requirements: