mongoid_alize 0.4.1 → 0.4.2

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.
@@ -2,7 +2,7 @@ module Mongoid
2
2
  module Alize
3
3
  class Callback
4
4
 
5
- attr_accessor :fields
5
+ attr_accessor :denorm_attrs
6
6
 
7
7
  attr_accessor :klass
8
8
  attr_accessor :relation
@@ -14,12 +14,12 @@ module Mongoid
14
14
 
15
15
  attr_accessor :debug
16
16
 
17
- def initialize(_klass, _relation, _fields)
17
+ def initialize(_klass, _relation, _denorm_attrs)
18
18
  self.debug = ENV["ALIZE_DEBUG"]
19
19
 
20
20
  self.klass = _klass
21
21
  self.relation = _relation
22
- self.fields = _fields
22
+ self.denorm_attrs = _denorm_attrs
23
23
 
24
24
  self.metadata = _klass.relations[_relation.to_s]
25
25
  if !(self.metadata.polymorphic? &&
@@ -58,30 +58,31 @@ module Mongoid
58
58
  "denormalize_#{direction}_#{relation}"
59
59
  end
60
60
 
61
- def define_fields_method
62
- _fields = fields
63
- if fields.is_a?(Proc)
64
- klass.send(:define_method, fields_method_name) do |inverse|
65
- _fields.bind(self).call(inverse).map(&:to_s)
61
+ def define_denorm_attrs
62
+ _denorm_attrs = denorm_attrs
63
+ if denorm_attrs.is_a?(Proc)
64
+ klass.send(:define_method, denorm_attrs_name) do |inverse|
65
+ _denorm_attrs.bind(self).call(inverse).map(&:to_s)
66
66
  end
67
67
  else
68
- klass.send(:define_method, fields_method_name) do |inverse|
69
- _fields.map(&:to_s)
68
+ klass.send(:define_method, denorm_attrs_name) do |inverse|
69
+ _denorm_attrs.map(&:to_s)
70
70
  end
71
71
  end
72
72
  end
73
73
 
74
- def fields_method_name
75
- "#{callback_name}_fields"
74
+ def denorm_attrs_name
75
+ "#{callback_name}_attrs"
76
76
  end
77
77
 
78
78
  def field_values(source, options={})
79
79
  extras = options[:id] ? "['_id']" : "[]"
80
80
  <<-RUBY
81
- (#{fields_method_name}(#{source}) + #{extras}).inject({}) { |hash, name|
81
+ value = (#{denorm_attrs_name}(#{source}) + #{extras}).inject({}) do |hash, name|
82
82
  hash[name] = #{source}.send(name)
83
83
  hash
84
- }
84
+ end
85
+ value.respond_to?(:mongoize) ? value.mongoize : value
85
86
  RUBY
86
87
  end
87
88
 
@@ -19,13 +19,11 @@ module Mongoid
19
19
  CALLBACK
20
20
  end
21
21
 
22
- def define_fields
22
+ def define_mongoid_field
23
23
  ensure_field_not_defined!(prefixed_name, klass)
24
24
  klass.class_eval <<-CALLBACK, __FILE__, __LINE__ + 1
25
25
  field :#{prefixed_name}, :type => Array, :default => []
26
26
  CALLBACK
27
-
28
- define_fields_method
29
27
  end
30
28
  end
31
29
  end
@@ -27,13 +27,11 @@ module Mongoid
27
27
  CALLBACK
28
28
  end
29
29
 
30
- def define_fields
30
+ def define_mongoid_field
31
31
  ensure_field_not_defined!(prefixed_name, klass)
32
32
  klass.class_eval <<-CALLBACK, __FILE__, __LINE__ + 1
33
33
  field :#{prefixed_name}, :type => Hash, :default => {}
34
34
  CALLBACK
35
-
36
- define_fields_method
37
35
  end
38
36
  end
39
37
  end
@@ -3,7 +3,8 @@ module Mongoid
3
3
  class FromCallback < Callback
4
4
 
5
5
  def attach
6
- define_fields
6
+ define_mongoid_field
7
+ define_denorm_attrs
7
8
 
8
9
  define_callback
9
10
  alias_callback
@@ -3,7 +3,7 @@ module Mongoid
3
3
  class ToCallback < Callback
4
4
 
5
5
  def attach
6
- define_fields
6
+ define_denorm_attrs
7
7
 
8
8
  define_callback
9
9
  alias_callback
@@ -112,10 +112,6 @@ module Mongoid
112
112
  "[self.#{relation}].flatten.compact"
113
113
  end
114
114
 
115
- def define_fields
116
- define_fields_method
117
- end
118
-
119
115
  def set_callback
120
116
  unless callback_attached?("save", aliased_callback_name)
121
117
  klass.set_callback(:save, :after, aliased_callback_name)
@@ -5,6 +5,11 @@ class Person
5
5
  field :name, type: String
6
6
  field :created_at, type: Time
7
7
 
8
+ if SpecHelper.mongoid_3?
9
+ field :my_date, type: Date
10
+ field :my_datetime, type: DateTime
11
+ end
12
+
8
13
  # the attached head
9
14
  has_one :head
10
15
 
@@ -34,7 +34,7 @@ describe Mongoid::Alize::Callback do
34
34
  callback.inverse_klass = Person
35
35
  callback.inverse_relation = :head
36
36
  callback.inverse_metadata.should == Person.relations["head"]
37
- callback.fields.should == [:name, :created_at]
37
+ callback.denorm_attrs.should == [:name, :created_at]
38
38
  end
39
39
 
40
40
  it "should not set inverses for the child in a polymorphic association" do
@@ -83,37 +83,37 @@ describe Mongoid::Alize::Callback do
83
83
  @callback.aliased_callback_name.should == "denormalize_spec_person"
84
84
  end
85
85
 
86
- it "should add _fields to the callback name" do
87
- @callback.fields_method_name.should == "_denormalize_spec_person_fields"
86
+ it "should add _attrs to the callback name" do
87
+ @callback.denorm_attrs_name.should == "_denormalize_spec_person_attrs"
88
88
  end
89
89
  end
90
90
 
91
- describe "define fields method" do
92
- def define_fields_method
93
- @callback.send(:define_fields_method)
91
+ describe "#define_denorm_attrs" do
92
+ def define_denorm_attrs
93
+ @callback.send(:define_denorm_attrs)
94
94
  end
95
95
 
96
- describe "when fields is an array" do
96
+ describe "when denorm_attrs is an array" do
97
97
  before do
98
98
  @callback = new_callback
99
99
  end
100
100
 
101
- it "should return the fields w/ to_s applied" do
102
- define_fields_method
101
+ it "should return the denorm_attrs w/ to_s applied" do
102
+ define_denorm_attrs
103
103
  @head = Head.new
104
- @head.send("_denormalize_spec_person_fields", nil).should == ["name", "created_at"]
104
+ @head.send("_denormalize_spec_person_attrs", nil).should == ["name", "created_at"]
105
105
  end
106
106
  end
107
107
 
108
- describe "when fields is a proc" do
108
+ describe "when denorm_attrs is a proc" do
109
109
  before do
110
110
  @callback = klass.new(Head, :person, lambda { |inverse| [:name, :created_at] })
111
111
  end
112
112
 
113
- it "should return the fields w/ to_s applied" do
114
- define_fields_method
113
+ it "should return the denorm_attrs w/ to_s applied" do
114
+ define_denorm_attrs
115
115
  @head = Head.new
116
- @head.send("_denormalize_spec_person_fields", Person.new).should == ["name", "created_at"]
116
+ @head.send("_denormalize_spec_person_attrs", Person.new).should == ["name", "created_at"]
117
117
  end
118
118
  end
119
119
  end
@@ -13,16 +13,16 @@ describe Mongoid::Alize::Callbacks::From::Many do
13
13
  klass.new(*args)
14
14
  end
15
15
 
16
- describe "#define_fields" do
16
+ describe "#define_mongoid_field" do
17
17
  it "should define an Array called {relation}_fields" do
18
18
  callback = new_callback
19
- callback.send(:define_fields)
19
+ callback.send(:define_mongoid_field)
20
20
  Head.fields["wanted_by_fields"].type.should == Array
21
21
  end
22
22
 
23
23
  it "should default the field to empty" do
24
24
  callback = new_callback
25
- callback.send(:define_fields)
25
+ callback.send(:define_mongoid_field)
26
26
  Head.new.wanted_by_fields.should == []
27
27
  end
28
28
 
@@ -32,7 +32,7 @@ describe Mongoid::Alize::Callbacks::From::Many do
32
32
  end
33
33
  callback = new_callback
34
34
  expect {
35
- callback.send(:define_fields)
35
+ callback.send(:define_mongoid_field)
36
36
  }.to raise_error(Mongoid::Alize::Errors::AlreadyDefinedField,
37
37
  "wanted_by_fields is already defined on the Head model.")
38
38
  end
@@ -62,13 +62,13 @@ describe Mongoid::Alize::Callbacks::From::Many do
62
62
  describe "valid fields" do
63
63
  before do
64
64
  @callback = new_callback
65
- @callback.send(:define_fields)
65
+ @callback.send(:define_mongoid_field)
66
+ @callback.send(:define_denorm_attrs)
66
67
  @callback.send(:define_callback)
67
68
  end
68
69
 
69
70
  it "should set fields from a changed relation" do
70
- @head.wanted_by_ids << @person.id
71
- @head.should be_wanted_by_ids_changed
71
+ @head.wanted_by = [@person]
72
72
  run_callback
73
73
  @head.wanted_by_fields.should == [bob_fields]
74
74
  end
@@ -83,12 +83,12 @@ describe Mongoid::Alize::Callbacks::From::Many do
83
83
  describe "with a field that doesn't exist" do
84
84
  before do
85
85
  @callback = klass.new(Head, :wanted_by, [:notreal])
86
- @callback.send(:define_fields)
86
+ @callback.send(:define_mongoid_field)
87
87
  @callback.send(:define_callback)
88
88
  end
89
89
 
90
90
  it "should raise a no method error" do
91
- @head.wanted_by_ids << @person.id
91
+ @head.wanted_by = [@person]
92
92
  @head.wanted_by_fields.should be_nil
93
93
  expect {
94
94
  run_callback
@@ -109,7 +109,8 @@ describe Mongoid::Alize::Callbacks::From::Many do
109
109
  @person = Person.create(:name => "Bob")
110
110
 
111
111
  @callback = klass.new(Head, :sees, [:name])
112
- @callback.send(:define_fields)
112
+ @callback.send(:define_mongoid_field)
113
+ @callback.send(:define_denorm_attrs)
113
114
  @callback.send(:define_callback)
114
115
 
115
116
  @head.relations["sees"].should_not be_stores_foreign_key
@@ -13,17 +13,17 @@ describe Mongoid::Alize::Callbacks::From::One do
13
13
  klass.new(*args)
14
14
  end
15
15
 
16
- describe "#define_fields" do
16
+ describe "#define_mongoid_field" do
17
17
  describe "with an array of fields" do
18
18
  it "should add a field generated from %{relation}_fields" do
19
19
  callback = new_callback
20
- callback.send(:define_fields)
20
+ callback.send(:define_mongoid_field)
21
21
  Head.fields["person_fields"].type.should == Hash
22
22
  end
23
23
 
24
24
  it "should default the field to empty" do
25
25
  callback = new_callback
26
- callback.send(:define_fields)
26
+ callback.send(:define_mongoid_field)
27
27
  Head.new.person_fields.should == {}
28
28
  end
29
29
 
@@ -33,7 +33,7 @@ describe Mongoid::Alize::Callbacks::From::One do
33
33
  end
34
34
  callback = new_callback
35
35
  expect {
36
- callback.send(:define_fields)
36
+ callback.send(:define_mongoid_field)
37
37
  }.to raise_error(Mongoid::Alize::Errors::AlreadyDefinedField,
38
38
  "person_fields is already defined on the Head model.")
39
39
  end
@@ -58,7 +58,8 @@ describe Mongoid::Alize::Callbacks::From::One do
58
58
 
59
59
  before do
60
60
  @callback = new_callback
61
- @callback.send(:define_fields)
61
+ @callback.send(:define_mongoid_field)
62
+ @callback.send(:define_denorm_attrs)
62
63
  create_models
63
64
  @callback.send(:define_callback)
64
65
  end
@@ -107,7 +108,8 @@ describe Mongoid::Alize::Callbacks::From::One do
107
108
 
108
109
  before do
109
110
  @callback = klass.new(Person, :head, [:size])
110
- @callback.send(:define_fields)
111
+ @callback.send(:define_mongoid_field)
112
+ @callback.send(:define_denorm_attrs)
111
113
 
112
114
  @person = Person.create
113
115
  @head = Head.create(:size => 5)
@@ -43,7 +43,7 @@ describe Mongoid::Alize::ToCallback do
43
43
 
44
44
  before do
45
45
  @callback = new_callback
46
- @callback.send(:define_fields)
46
+ @callback.send(:define_denorm_attrs)
47
47
  create_models
48
48
  @callback.send(:define_callback)
49
49
  end
@@ -75,7 +75,7 @@ describe Mongoid::Alize::ToCallback do
75
75
 
76
76
  before do
77
77
  @callback = new_callback
78
- @callback.send(:define_fields)
78
+ @callback.send(:define_denorm_attrs)
79
79
  create_models
80
80
  @callback.send(:define_destroy_callback)
81
81
  end
@@ -11,7 +11,7 @@ describe Mongoid::Alize::ToCallback do
11
11
 
12
12
  def define_and_create(callback_name=:define_callback)
13
13
  @callback = new_callback
14
- @callback.send(:define_fields)
14
+ @callback.send(:define_denorm_attrs)
15
15
  create_models
16
16
  @callback.send(callback_name)
17
17
  end
@@ -11,7 +11,7 @@ describe Mongoid::Alize::ToCallback do
11
11
 
12
12
  def define_and_create(callback_name=:define_callback)
13
13
  @callback = new_callback
14
- @callback.send(:define_fields)
14
+ @callback.send(:define_denorm_attrs)
15
15
  create_models
16
16
  @callback.send(callback_name)
17
17
  end
@@ -11,7 +11,7 @@ describe Mongoid::Alize::ToCallback do
11
11
 
12
12
  def define_and_create(callback_name=:define_callback)
13
13
  @callback = new_callback
14
- @callback.send(:define_fields)
14
+ @callback.send(:define_denorm_attrs)
15
15
  create_models
16
16
  @callback.send(callback_name)
17
17
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class Mongoid::Alize::SpecFromCallback < Mongoid::Alize::FromCallback
4
- def define_fields
4
+ def define_mongoid_field
5
5
  end
6
6
 
7
7
  def define_callback
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::Alize::ToCallback do
4
+
5
+ before do
6
+ @now = Time.parse('2013-01-05T12:00:22-700')
7
+ stub(Time).now { @now }
8
+
9
+ Head.class_eval do
10
+ field :sees_fields, :type => Array, :default => []
11
+ end
12
+ Person.class_eval do
13
+ fields = [:name, :location, :created_at]
14
+ fields += [:my_date, :my_datetime] if SpecHelper.mongoid_3?
15
+ alize_to :seen_by, fields: fields
16
+ end
17
+
18
+ @head = Head.create(:sees => [@person = Person.create(sees_fields_without_id)])
19
+ @person.seen_by = @head
20
+ end
21
+
22
+ def sees_fields_without_id
23
+ fields = { "name"=> "Bob",
24
+ "location" => "Paris",
25
+ "created_at" => @now }
26
+
27
+ fields.merge!( "my_date" => @now.to_date,
28
+ "my_datetime" => @now.to_datetime ) if SpecHelper.mongoid_3?
29
+
30
+ fields
31
+ end
32
+
33
+ def sees_fields_with_id
34
+ sees_fields_without_id.merge!( "_id" => @person.id )
35
+ end
36
+
37
+ def sees_fields_mongoized
38
+ fields = sees_fields_with_id.merge!( "created_at" => @now.utc )
39
+
40
+ fields.merge!( "my_date" => @now.utc.to_date,
41
+ "my_datetime" => @now.utc ) if SpecHelper.mongoid_3?
42
+
43
+ fields
44
+ end
45
+
46
+ it "should push the mongoized values to the relation" do
47
+ @head.sees_fields.should == [sees_fields_mongoized]
48
+ end
49
+ end
@@ -15,7 +15,7 @@ describe Mongoid::Alize::ToCallback do
15
15
 
16
16
  def define_and_create(callback_name=:define_callback)
17
17
  @callback = new_callback
18
- @callback.send(:define_fields)
18
+ @callback.send(:define_denorm_attrs)
19
19
  create_models
20
20
  @callback.send(callback_name)
21
21
  end
@@ -47,10 +47,10 @@ describe Mongoid::Alize::ToCallback do
47
47
  end
48
48
  end
49
49
 
50
- describe "#define_fields" do
51
- it "should define the fields method" do
52
- mock(@callback).define_fields_method
53
- @callback.send(:define_fields)
50
+ describe "#define_denorm_attrs" do
51
+ it "should define the denorm attrs method" do
52
+ mock(@callback).define_denorm_attrs
53
+ @callback.send(:define_denorm_attrs)
54
54
  end
55
55
  end
56
56
 
data/spec/spec_helper.rb CHANGED
@@ -1,21 +1,28 @@
1
1
  require 'rubygems'
2
- require 'looksee'
3
- require 'awesome_print'
4
- require 'wirble'
5
2
  require 'mongoid'
6
3
 
7
- def three?
8
- Mongoid::VERSION =~ /^3/
4
+ unless ENV['CI']
5
+ require 'looksee'
6
+ require 'awesome_print'
7
+ require 'wirble'
8
+ end
9
+
10
+ module SpecHelper
11
+ def self.mongoid_3?
12
+ defined?(Mongoid::VERSION) && Mongoid::VERSION =~ /^3/
13
+ end
9
14
  end
10
15
 
11
16
  Mongoid.configure do |config|
12
- if three?
17
+ if SpecHelper.mongoid_3?
13
18
  config.connect_to("mongoid_alize_test")
14
- Moped.logger = Logger.new("log/test.log")
15
- Moped.logger.level = Logger::DEBUG
19
+ Moped.logger = Logger.new($stdout)
20
+ Moped.logger.level = Logger::INFO
16
21
  else
22
+ logger = Logger.new($stdout)
23
+ logger.level = Logger::INFO
17
24
  config.master = Mongo::Connection.new("localhost", 27017,
18
- :logger => Logger.new("log/test.log")).db("mongoid_alize_test")
25
+ :logger => logger).db("mongoid_alize_test")
19
26
  end
20
27
  end
21
28
 
@@ -26,6 +33,8 @@ Dir["#{File.dirname(__FILE__)}/helpers/*.rb"].each { |f| require f }
26
33
  RSpec.configure do |config|
27
34
  config.include(MacrosHelper)
28
35
 
36
+ puts "MongoidVersion - #{Mongoid::VERSION}"
37
+
29
38
  config.mock_with :rr
30
39
  config.before :each do
31
40
  Mongoid.purge!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_alize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
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-12 00:00:00.000000000 Z
12
+ date: 2013-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
@@ -76,6 +76,7 @@ files:
76
76
  - spec/mongoid/alize/from_callback_spec.rb
77
77
  - spec/mongoid/alize/instance_helpers_spec.rb
78
78
  - spec/mongoid/alize/macros_spec.rb
79
+ - spec/mongoid/alize/mongoize_spec.rb
79
80
  - spec/mongoid/alize/to_callback_spec.rb
80
81
  - spec/mongoid_alize_spec.rb
81
82
  - spec/spec_helper.rb