wherever-positions 0.3.2 → 0.4.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.
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