wherever-positions 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +16 -12
- data/VERSION +1 -1
- data/lib/wherever/db_store.rb +22 -2
- data/lib/wherever/db_store/lookup.rb +9 -1
- data/lib/wherever/wherever/lookup.rb +11 -14
- data/wherever-positions.gemspec +1 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
4
|
+
activemodel (3.1.1)
|
5
|
+
activesupport (= 3.1.1)
|
6
|
+
builder (~> 3.0.0)
|
7
|
+
i18n (~> 0.6)
|
8
|
+
activesupport (3.1.1)
|
9
|
+
multi_json (~> 1.0)
|
10
|
+
bson (1.4.1)
|
6
11
|
bson_ext (1.4.1)
|
7
12
|
builder (3.0.0)
|
8
13
|
columnize (0.3.4)
|
@@ -14,10 +19,10 @@ GEM
|
|
14
19
|
term-ansicolor (>= 1.0.6)
|
15
20
|
database_cleaner (0.6.7)
|
16
21
|
diff-lcs (1.1.3)
|
17
|
-
durran-validatable (2.0.1)
|
18
22
|
gherkin (2.5.4)
|
19
23
|
json (>= 1.4.6)
|
20
24
|
git (1.2.5)
|
25
|
+
i18n (0.6.0)
|
21
26
|
jeweler (1.6.4)
|
22
27
|
bundler (~> 1.0)
|
23
28
|
git (>= 1.2.5)
|
@@ -25,14 +30,13 @@ GEM
|
|
25
30
|
json (1.6.1)
|
26
31
|
linecache (0.46)
|
27
32
|
rbx-require-relative (> 0.0.4)
|
28
|
-
mongo (1.
|
29
|
-
bson (
|
30
|
-
mongoid (
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
will_paginate (< 2.9)
|
33
|
+
mongo (1.4.1)
|
34
|
+
bson (= 1.4.1)
|
35
|
+
mongoid (2.3.2)
|
36
|
+
activemodel (~> 3.1)
|
37
|
+
mongo (~> 1.4)
|
38
|
+
tzinfo (~> 0.3.22)
|
39
|
+
multi_json (1.0.3)
|
36
40
|
rake (0.9.2.2)
|
37
41
|
rbx-require-relative (0.0.5)
|
38
42
|
rcov (0.9.11)
|
@@ -50,7 +54,7 @@ GEM
|
|
50
54
|
ruby-debug-base (0.10.4)
|
51
55
|
linecache (>= 0.3)
|
52
56
|
term-ansicolor (1.0.7)
|
53
|
-
|
57
|
+
tzinfo (0.3.30)
|
54
58
|
|
55
59
|
PLATFORMS
|
56
60
|
ruby
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/wherever/db_store.rb
CHANGED
@@ -17,13 +17,33 @@ module DbStore
|
|
17
17
|
get_store(marker, keys, :dataset)
|
18
18
|
)
|
19
19
|
end
|
20
|
+
|
21
|
+
def new_lookup(name, keys=nil)
|
22
|
+
@stores ||= {}
|
23
|
+
@stores[name] = get_lookup(name, keys)
|
24
|
+
end
|
20
25
|
|
21
26
|
def get_store(marker, keys, db_type)
|
22
27
|
name = "#{marker.upcase}_#{keys.map(&:upcase).join('_')}_#{db_type.to_s.upcase}"
|
23
28
|
return "DbStore::#{name}".constantize if DbStore.constants.include?(name)
|
29
|
+
build_class(name, "DbStore::#{db_type.to_s.titlecase}Config".constantize, :"#{marker}_#{keys.join('_')}_#{db_type}")
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_lookup(name, keys)
|
33
|
+
if keys
|
34
|
+
DbStore::Lookup.find_or_create_by(:name => name, :keys => keys)
|
35
|
+
end
|
36
|
+
name = "Lookup_#{name.upcase}"
|
37
|
+
return "DbStore::#{name}".constantize if DbStore.constants.include?(name)
|
38
|
+
raise "Missing lookup key from definition" unless keys
|
39
|
+
|
40
|
+
build_class(name, DbStore::VersionConfig, :"lookup_#{name}")
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_class(name, module_object, store_in)
|
24
44
|
klass = DbStore.const_set(name, Class.new)
|
25
|
-
klass.send :include,
|
26
|
-
klass.send :store_in,
|
45
|
+
klass.send :include, module_object
|
46
|
+
klass.send :store_in, store_in
|
27
47
|
klass
|
28
48
|
end
|
29
49
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module DbStore
|
2
2
|
class Lookup
|
3
3
|
include Mongoid::Document
|
4
|
-
embeds_many :versions, :class_name => 'DbStore::Version'
|
5
4
|
field :name, :type => String
|
6
5
|
field :keys, :type => Hash
|
7
6
|
field :lookups, :type => Hash, :default => {}
|
7
|
+
field :current, :type => String
|
8
8
|
end
|
9
9
|
|
10
10
|
class Version
|
@@ -13,4 +13,12 @@ module DbStore
|
|
13
13
|
field :name, :type => String
|
14
14
|
field :values, :type => Hash, :default => Hash.new(0)
|
15
15
|
end
|
16
|
+
|
17
|
+
module VersionConfig
|
18
|
+
def self.included(base)
|
19
|
+
base.send :include, Mongoid::Document
|
20
|
+
base.field :name, :type => String
|
21
|
+
base.field :values, :type => Hash, :default => Hash.new(0)
|
22
|
+
end
|
23
|
+
end
|
16
24
|
end
|
@@ -1,24 +1,23 @@
|
|
1
1
|
class Wherever
|
2
2
|
module Lookup
|
3
3
|
def create_lookup(name, keys)
|
4
|
-
|
5
|
-
lookup.keys = keys
|
6
|
-
lookup.save
|
4
|
+
lookup_class = DbStore.new_lookup(name, keys)
|
7
5
|
|
8
6
|
self.class.class_eval do
|
9
7
|
define_method "set_#{name}" do |version, values|
|
10
|
-
|
11
|
-
|
12
|
-
record.save
|
8
|
+
new_version?(name, version)
|
9
|
+
lookup_class.create(:name => version, :values => key_to_string(values))
|
13
10
|
recalculate if set_price_lookup(name, version)
|
14
11
|
end
|
15
12
|
end
|
16
13
|
|
17
14
|
self.class.class_eval do
|
18
15
|
define_method "get_#{name}" do |marker, data|
|
19
|
-
lookup
|
16
|
+
lookup = get_lookup(name)
|
17
|
+
lookup_data = lookup_class.where(:name => lookup.lookups[marker]).first
|
18
|
+
return 0 unless lookup_data
|
20
19
|
value_key = lookup.keys.map{|key| data[key]}.join('_')
|
21
|
-
|
20
|
+
lookup_data.values[value_key] || 0
|
22
21
|
end
|
23
22
|
end
|
24
23
|
end
|
@@ -32,8 +31,8 @@ class Wherever
|
|
32
31
|
|
33
32
|
def set_price_lookup(name, version=nil, keys=[])
|
34
33
|
lookup = get_lookup(name)
|
35
|
-
return false if lookup.
|
36
|
-
lookup.lookups[get_marker(keys)] = (version || lookup.
|
34
|
+
return false if lookup.current == version
|
35
|
+
lookup.lookups[get_marker(keys)] = (version || lookup.current)
|
37
36
|
lookup.save
|
38
37
|
end
|
39
38
|
|
@@ -56,11 +55,9 @@ class Wherever
|
|
56
55
|
return [lookup, lookup.versions.find_or_create_by(:name => lookup.lookups[marker])]
|
57
56
|
end
|
58
57
|
|
59
|
-
def
|
58
|
+
def new_version?(name, version)
|
60
59
|
lookup = get_lookup(name)
|
61
|
-
|
62
|
-
raise InvalidLookupSetter, "Lookup '#{version}' for '#{name}' already set" unless records.empty?
|
63
|
-
return [lookup, lookup.versions.find_or_create_by(:name => version)]
|
60
|
+
raise InvalidLookupSetter, "Lookup '#{version}' for '#{name}' already set" if lookup.lookups.values.include?(version)
|
64
61
|
end
|
65
62
|
|
66
63
|
def get_lookup(name)
|
data/wherever-positions.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wherever-positions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Henry
|