amountable 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/amountable.rb +39 -1
- data/lib/amountable/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7fb532f0098d76632e7fbc2f46ad8a79570f798
|
4
|
+
data.tar.gz: df59859c26e14e795e38243b4a097059fccdffff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1b982b2a5d90e3c28ad0905ba0154c6f2c625681a989180743cc88dd0853918186330b91afe4f05fe7c13eae7a58d7241a38e6e920053b46d4fb3737ca2563b
|
7
|
+
data.tar.gz: 54a8b7d3ff9df4312b1dae3a8bc71a8a1fc063aba18ac71f055255d1b834531644b9e377657dfae7274908dafc04eacbd5872146af46139a7e05fc9a5c59c8db
|
data/lib/amountable.rb
CHANGED
@@ -59,10 +59,12 @@ module Amountable
|
|
59
59
|
class_attribute :amount_names
|
60
60
|
class_attribute :amount_sets
|
61
61
|
class_attribute :amounts_column_name
|
62
|
+
class_attribute :storage
|
62
63
|
self.amount_sets = Hash.new { |h, k| h[k] = Set.new }
|
63
64
|
self.amount_names = Set.new
|
64
65
|
self.amounts_column_name = 'amounts'
|
65
|
-
|
66
|
+
self.storage = (options[:storage] || :table).to_sym
|
67
|
+
case self.storage
|
66
68
|
when :table
|
67
69
|
has_many :amounts, class_name: 'Amountable::Amount', as: :amountable, dependent: :destroy, autosave: false
|
68
70
|
include Amountable::TableMethods
|
@@ -105,6 +107,42 @@ module Amountable
|
|
105
107
|
self.amount_names.include?(name.to_sym)
|
106
108
|
end
|
107
109
|
|
110
|
+
def where(opts, *rest)
|
111
|
+
return super unless opts.is_a?(Hash)
|
112
|
+
if self.storage == :jsonb
|
113
|
+
where_json(opts, *rest)
|
114
|
+
else
|
115
|
+
super
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def where_json(opts, *rest)
|
120
|
+
values = []
|
121
|
+
query = opts.inject([]) do |mem, (column, value)|
|
122
|
+
column = column.to_sym
|
123
|
+
if column.in?(self.amount_names) || column.in?(self.amount_sets.keys)
|
124
|
+
mem << "#{self.pg_json_field_access(column, :cents)} = '%s'"
|
125
|
+
mem << "#{self.pg_json_field_access(column, :currency)} = '%s'"
|
126
|
+
values << value.to_money.fractional
|
127
|
+
values << value.to_money.currency.iso_code
|
128
|
+
opts.delete(column)
|
129
|
+
end
|
130
|
+
mem
|
131
|
+
end
|
132
|
+
query = [query.join(' AND ')] + values
|
133
|
+
where(query, *rest).where(opts, *rest)
|
134
|
+
end
|
135
|
+
|
136
|
+
def pg_json_field_access(name, field = :cents)
|
137
|
+
name = name.to_sym
|
138
|
+
group = if name.in?(self.amount_names)
|
139
|
+
'amounts'
|
140
|
+
elsif name.in?(self.amount_sets.keys)
|
141
|
+
'sets'
|
142
|
+
end
|
143
|
+
"#{self.amounts_column_name}::json#>>'{#{group},#{name},#{field}}'"
|
144
|
+
end
|
145
|
+
|
108
146
|
end
|
109
147
|
end
|
110
148
|
|
data/lib/amountable/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amountable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emmanuel Turlay
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|