join_collection 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "mongoid"
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "mongoid"
23
24
  spec.add_development_dependency "rake"
24
25
  spec.add_development_dependency "rspec"
25
26
  end
@@ -1,12 +1,20 @@
1
+ require 'mongoid'
2
+
1
3
  class JoinCollection
2
4
 
3
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
+
7
+ class Doc; include Mongoid::Document; end
4
8
 
5
9
  attr_reader :source_objects
6
10
  attr_accessor :join_type, :singular_target, :plural_target
7
11
 
8
12
  def initialize(collection)
9
- @source_objects = collection
13
+ if collection.first.is_a?(Hash)
14
+ @source_objects = collection.map {|x| Doc.new(x)}
15
+ else
16
+ @source_objects = collection
17
+ end
10
18
  end
11
19
 
12
20
  def join_to(target, target_class, options)
@@ -113,4 +113,36 @@ describe JoinCollection do
113
113
  expect(@user_collection.source_objects.first.post_published).to be_false
114
114
  end
115
115
  end
116
+
117
+ context 'source objects are hash objects' do
118
+ it 'can still join to target object' do
119
+ user = User.new(:mysql_id => 1, :name => 'Bob')
120
+ User.stub(:where).and_return([user])
121
+
122
+ post = {:mysql_id => 1, :user_id => 1, :content => 'text 1', :published => true}
123
+ post_collection = JoinCollection.new([post])
124
+ post_collection.join_to(:user, User, :relation => {:user_id => :mysql_id}, :delegation => {:fields => [:user]})
125
+ expect(post_collection.source_objects.first.user).to eq(user)
126
+ end
127
+
128
+ it 'can still join one target object' do
129
+ post = Post.new(:mysql_id => 1, :user_id => 1, :content => 'text 1', :published => true)
130
+ Post.stub(:where).and_return([post])
131
+
132
+ user = {:mysql_id => 1, :name => 'Bob'}
133
+ user_collection = JoinCollection.new([user])
134
+ user_collection.join_one(:post, Post, :relation => {:user_id => :mysql_id}, :delegation => {:fields => [:post]})
135
+ expect(user_collection.source_objects.first.post).to eq(post)
136
+ end
137
+
138
+ it 'can still join many target objects' do
139
+ post = Post.new(:mysql_id => 1, :user_id => 1, :content => 'text 1', :published => true)
140
+ Post.stub(:where).and_return([post])
141
+
142
+ user = {:mysql_id => 1, :name => 'Bob'}
143
+ user_collection = JoinCollection.new([user])
144
+ user_collection.join_many(:post, Post, :relation => {:user_id => :mysql_id}, :delegation => {:fields => [:posts]})
145
+ expect(user_collection.source_objects.first.posts).to eq([post])
146
+ end
147
+ end
116
148
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: join_collection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,40 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-03 00:00:00.000000000 Z
12
+ date: 2013-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
15
+ name: mongoid
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '1.3'
22
- type: :development
21
+ version: '0'
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ~>
27
+ - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: '1.3'
29
+ version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: mongoid
31
+ name: bundler
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: '1.3'
38
38
  type: :development
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: '1.3'
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: rake
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -104,12 +104,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  - - ! '>='
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
+ segments:
108
+ - 0
109
+ hash: 3529857739931548642
107
110
  required_rubygems_version: !ruby/object:Gem::Requirement
108
111
  none: false
109
112
  requirements:
110
113
  - - ! '>='
111
114
  - !ruby/object:Gem::Version
112
115
  version: '0'
116
+ segments:
117
+ - 0
118
+ hash: 3529857739931548642
113
119
  requirements: []
114
120
  rubyforge_project:
115
121
  rubygems_version: 1.8.23