join_collection 0.1.0 → 0.2.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.
@@ -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