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 CHANGED
@@ -1,8 +1,13 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (2.3.14)
5
- bson (1.2.4)
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.2.4)
29
- bson (>= 1.2.4)
30
- mongoid (1.9.5)
31
- activesupport (< 3.0.0)
32
- bson (~> 1.2.1)
33
- durran-validatable (>= 2.0.1)
34
- mongo (~> 1.2.1)
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
- will_paginate (2.3.16)
57
+ tzinfo (0.3.30)
54
58
 
55
59
  PLATFORMS
56
60
  ruby
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
@@ -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, "DbStore::#{db_type.to_s.titlecase}Config".constantize
26
- klass.send :store_in, :"#{marker}_#{keys.join('_')}_#{db_type}"
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
- lookup = DbStore::Lookup.find_or_create_by(:name => name)
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
- lookup, record = create_lookup_record(name, version)
11
- record.values = key_to_string(values)
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, record = get_lookup_record(name, marker)
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
- record.values[value_key] || 0
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.lookups[get_marker] == version
36
- lookup.lookups[get_marker(keys)] = (version || lookup.lookups['current'])
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 create_lookup_record(name, version)
58
+ def new_version?(name, version)
60
59
  lookup = get_lookup(name)
61
- records = lookup.versions.where(:name => version)
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)
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{wherever-positions}
8
- s.version = "0.3.2"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Henry"]
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: 23
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Henry