mongoid-casino 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,8 @@
1
1
  require 'csv'
2
2
  require 'mongoid'
3
3
 
4
- libs = %w(collection dimension focus intersection lobby projection
5
- query question store version)
4
+ libs = %w(collection dimension document focus intersection lobby
5
+ projection query question store version)
6
6
  path = File.dirname(__FILE__)
7
7
 
8
8
  libs.each do |lib|
@@ -44,7 +44,11 @@ module Casino
44
44
  end
45
45
 
46
46
  def store
47
- @store ||= Store.new key
47
+ @store ||= Store.new document
48
+ end
49
+
50
+ def document
51
+ @document ||= Casino::Document.new(key, questions.map(&:name)).compose
48
52
  end
49
53
 
50
54
  def key
@@ -127,7 +131,9 @@ module Casino
127
131
  end
128
132
 
129
133
  def intersection_ids
130
- intersections.map(&:selector)
134
+ intersections.map do |intersection|
135
+ intersection.selector.mongoize
136
+ end
131
137
  end
132
138
 
133
139
  def determine_results(given_intersections)
@@ -160,7 +166,7 @@ module Casino
160
166
  def pending_intersections
161
167
  ids = stored_results.map(&:id)
162
168
  intersections.reject do |intersection|
163
- ids.include? intersection.selector
169
+ ids.include? intersection.selector.mongoize
164
170
  end
165
171
  end
166
172
 
@@ -0,0 +1,27 @@
1
+ module Casino
2
+ class Document
3
+
4
+ def initialize(key, question_names)
5
+ @key = key
6
+ @question_names = Array question_names
7
+ end
8
+
9
+ def compose
10
+ klass = Class.new
11
+ klass.send :include, Mongoid::Document
12
+ klass.store_in collection: @key
13
+ assign_fields klass
14
+ klass
15
+ end
16
+
17
+ private
18
+
19
+ def assign_fields klass
20
+ @question_names.each do |name|
21
+ name = String(name).parameterize.underscore.to_sym
22
+ klass.field name
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -1,6 +1,6 @@
1
1
  module Casino
2
2
  class Store
3
- attr_accessor :collection_name
3
+ attr_accessor :collection_class, :collection_name
4
4
 
5
5
  delegate :drop, :find, :indexes, :insert, to: :collection
6
6
 
@@ -9,8 +9,9 @@ module Casino
9
9
 
10
10
  delegate :where, :in, to: :criteria
11
11
 
12
- def initialize(collection_name)
13
- self.collection_name = collection_name
12
+ def initialize(document_class)
13
+ self.collection_class = document_class
14
+ self.collection_name = document_class.collection_name
14
15
  end
15
16
 
16
17
  def collection
@@ -23,18 +24,14 @@ module Casino
23
24
 
24
25
  def merge(*documents)
25
26
  documents.each do |document|
26
- document = mongoize document
27
+ document = document.mongoize
27
28
  criteria = find _id: document['_id']
28
29
  criteria.upsert document
29
30
  end
30
31
  end
31
32
 
32
33
  def criteria
33
- @criteria ||= build_criteria
34
- end
35
-
36
- def mongoize(hash)
37
- hash.keys.map { |key| build_mongoized_hash(hash, key) }.reduce(&:merge)
34
+ @criteria ||= collection_class.scoped
38
35
  end
39
36
 
40
37
  private
@@ -43,22 +40,5 @@ module Casino
43
40
  @session ||= Mongoid.default_session
44
41
  end
45
42
 
46
- def build_criteria
47
- klass = Class.new
48
- klass.send(:include, Mongoid::Document)
49
- klass.store_in collection: collection_name
50
- klass.scoped
51
- end
52
-
53
- def evolve(value)
54
- value.class.respond_to?(:evolve) ? value.class.evolve(value) : value
55
- end
56
-
57
- def build_mongoized_hash(hash, key)
58
- value = hash[key]
59
- value = value.is_a?(Hash) ? mongoize(value) : value
60
- { key => evolve(value) }
61
- end
62
-
63
43
  end
64
44
  end
@@ -1,3 +1,3 @@
1
1
  module Casino
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -7,6 +7,7 @@ describe Casino::Collection do
7
7
  it { Collection.must_respond_to :question }
8
8
  it { Collection.must_respond_to :lobby }
9
9
  it { Collection.must_respond_to :register }
10
+ it { Collection.new.must_respond_to :document }
10
11
  it { Collection.new.must_respond_to :query }
11
12
  it { Collection.new.must_respond_to :intersection }
12
13
  it { Collection.new.must_respond_to :answer }
@@ -66,6 +67,13 @@ describe Casino::Collection do
66
67
 
67
68
  end
68
69
 
70
+ describe '#document' do
71
+ let(:storage_key) { "key" }
72
+ let(:questions) { ['Question Name'] }
73
+ subject { Collection.new.document }
74
+ it { subject.ancestors.must_include Mongoid::Document }
75
+ end
76
+
69
77
  describe '#query' do
70
78
  subject { Collection.new.query('', '', '') }
71
79
  it { subject.must_be_instance_of Casino::Query }
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Casino::Document do
4
+ describe '#compose' do
5
+ subject { Casino::Document.new('key', ['Question Name']).compose }
6
+ it { subject.new.must_respond_to :question_name }
7
+ it { subject.new.must_respond_to :question_name= }
8
+ it { subject.ancestors.must_include Mongoid::Document }
9
+ it { subject.collection_name.must_equal :key }
10
+ end
11
+ end
@@ -1,11 +1,13 @@
1
1
  describe Casino::Store do
2
2
 
3
3
  let(:key) { "collection_name" }
4
- let(:store) { Casino::Store.new(key) }
4
+ let(:document) { Casino::Document.new(key, ['value']).compose }
5
+ let(:store) { Casino::Store.new(document) }
5
6
 
6
7
  subject { store }
7
8
 
8
9
  it { subject.must_respond_to :collection_name }
10
+ it { subject.must_respond_to :collection_class }
9
11
 
10
12
  it "establishes a connection to the default session" do
11
13
  store.collection.database.session.must_equal Mongoid.default_session
@@ -35,23 +37,23 @@ describe Casino::Store do
35
37
  { 'value' => { 'signups' => 10850, 'uniques' => 9822 } }
36
38
  end
37
39
 
38
- let(:document) { womens_boots.merge(value_hash) }
39
- let(:document_two) { mens_boots.merge(value_hash) }
40
+ let(:attributes) { womens_boots.merge(value_hash) }
41
+ let(:attributes_two) { mens_boots.merge(value_hash) }
40
42
 
41
- it "adds new documents to the collection" do
42
- store.merge(document)
43
- store.first.must_equal store.mongoize(document)
43
+ it "adds new document attributes to the collection" do
44
+ store.merge(attributes)
45
+ store.first.must_equal attributes.mongoize
44
46
  end
45
47
 
46
- it "updates documents" do
47
- store.merge(document)
48
- store.merge(document.merge(value: { signups: 2 }))
48
+ it "updates documents with new attributes" do
49
+ store.merge(attributes)
50
+ store.merge(attributes.merge(value: { signups: 2 }))
49
51
  store.first['value']['signups'].must_equal 2
50
52
  end
51
53
 
52
54
  it "does not replace the wrong document" do
53
- store.merge(document)
54
- store.merge(document_two)
55
+ store.merge(attributes)
56
+ store.merge(attributes_two)
55
57
  store.find.count.wont_equal 1
56
58
  end
57
59
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-casino
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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: 2013-07-19 00:00:00.000000000 Z
12
+ date: 2013-07-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -141,6 +141,7 @@ files:
141
141
  - lib/casino.rb
142
142
  - lib/casino/collection.rb
143
143
  - lib/casino/dimension.rb
144
+ - lib/casino/document.rb
144
145
  - lib/casino/focus.rb
145
146
  - lib/casino/intersection.rb
146
147
  - lib/casino/intersection/match/all.rb
@@ -165,6 +166,7 @@ files:
165
166
  - spec/fixtures/models/note.rb
166
167
  - spec/lib/casino/collection_spec.rb
167
168
  - spec/lib/casino/dimension_spec.rb
169
+ - spec/lib/casino/document_spec.rb
168
170
  - spec/lib/casino/focus_spec.rb
169
171
  - spec/lib/casino/intersection/match/all_spec.rb
170
172
  - spec/lib/casino/intersection/match/base_spec.rb
@@ -215,6 +217,7 @@ test_files:
215
217
  - spec/fixtures/models/note.rb
216
218
  - spec/lib/casino/collection_spec.rb
217
219
  - spec/lib/casino/dimension_spec.rb
220
+ - spec/lib/casino/document_spec.rb
218
221
  - spec/lib/casino/focus_spec.rb
219
222
  - spec/lib/casino/intersection/match/all_spec.rb
220
223
  - spec/lib/casino/intersection/match/base_spec.rb