mongoid_token 2.2.0 → 3.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e7e198c4a8ca7b585adc467c61fea48a3305c09
4
- data.tar.gz: 567b35c7a5325948819bdd451e81bc6c70ae947e
3
+ metadata.gz: 8c76063246f7bcb7225d68d373cfbc1b1ec569e1
4
+ data.tar.gz: cb1d18edee2bd3c1b201d51345c0d28bf0bdecf0
5
5
  SHA512:
6
- metadata.gz: 6b6efae4558362e1ecd71578b754f572511f99c31aa0e130a1aaedb1102185f50acf265c5e39c8ed7a679eab0780d7d98355fb2bc87a91da7eeee989aa3c6117
7
- data.tar.gz: 7f94095e40997135530fc3d4751033555379bda52e6dc200779823ed4f8a34466e9c9166a8def733039146926fc6f492082ae2a22f7698a633c2cb207d6d17fc
6
+ metadata.gz: 7f5e3b6924961274b881d0e9fa74fb524fad4eb622135d2668e4756ffc97c1ff28700d19db3d046aaaba22a9ed5a688efaf95cc1e361fb279b2aeebf74c1778a
7
+ data.tar.gz: f801efb0a8d8541b08d0b15c9dc777bbb821a37b6a4dfeac4a4b32096276e6a6117d3dabd9450995579e00262cdb01f68b9d756ae979566c602ae139c03ccf6d
data/README.md CHANGED
@@ -60,20 +60,18 @@ in your app
60
60
 
61
61
  ## Finders
62
62
 
63
- **Note: overriding of the `find` method has been deprecated in this
64
- version and will be removed in the next major release.**
63
+ By default, the gem will add a convenience `find_by_[token name]` method, to
64
+ make it a tiny bit simpler to query by your tokens. If you'd rather it didn't,
65
+ you can disable these with the
66
+ [`skip_finders` configuration option](#skip-finders-skip_finders).
65
67
 
66
- By default, the gem will override the existing `find` method in Mongoid,
67
- in order to search for documents based on their token first (although
68
- the default behaviour of ObjectIDs is also there). You can disable these
69
- with the [`skip_finders` configuration option](#skip-finders-skip_finders).
68
+ The methods accept either a single token, or an array of tokens:
70
69
 
71
70
  ```ruby
72
- Video.find("x3v98")
73
- Account.find("ACC-123456")
71
+ Video.find_by_token("x3v98") # If your token was named 'token'
72
+ Account.find_by_account_number(["ACC-123456", "ACC-567890"]) # If your token was named 'account_number'
74
73
  ```
75
74
 
76
-
77
75
  ## Configuration
78
76
 
79
77
  ### Tokens
@@ -184,8 +182,7 @@ token :field_name => :yet_another
184
182
 
185
183
  ### Skip Finders (`:skip_finders`)
186
184
 
187
- This will prevent the gem from creating the customised finders and
188
- overrides for the default `find` behaviour used by Mongoid.
185
+ This will prevent the gem from creating the extra `find_by_*` methods.
189
186
 
190
187
  __Example:__
191
188
  ```ruby
@@ -9,15 +9,6 @@ module Mongoid
9
9
  self.find_by field_name.to_sym => token
10
10
  end
11
11
  end
12
-
13
- klass.define_singleton_method :"find_with_#{field_name}" do |*args| # this is going to be painful if tokens happen to look like legal object ids
14
- warn "[DEPRECATION] Using `find' from Mongoid::Token has been deprecated and will be removed in version 3.0.0."
15
- args.all?{|arg| BSON::ObjectId.legal?(arg)} ? send(:"find_without_#{field_name}",*args) : klass.send(:"find_by_#{field_name.to_s}", args.first)
16
- end
17
-
18
- # this craziness taken from, and then compacted into a string class_eval
19
- # http://geoffgarside.co.uk/2007/02/19/activesupport-alias-method-chain-modules-and-class-methods/
20
- klass.class_eval("class << self; alias_method_chain :find, :#{field_name} if self.method_defined?(:find); end")
21
12
  end
22
13
  end
23
14
  end
@@ -16,7 +16,7 @@ class Mongoid::Token::Options
16
16
  end
17
17
 
18
18
  def field_name
19
- @options[:field_name]
19
+ !@options[:id] && @options[:field_name] || :_id
20
20
  end
21
21
 
22
22
  def skip_finders?
@@ -27,6 +27,10 @@ class Mongoid::Token::Options
27
27
  @options[:override_to_param]
28
28
  end
29
29
 
30
+ def generate_on_init
31
+ @options[:id] || @options[:generate_on_init]
32
+ end
33
+
30
34
  def pattern
31
35
  @options[:pattern] ||= case @options[:contains].to_sym
32
36
  when :alphanumeric
@@ -61,12 +65,14 @@ class Mongoid::Token::Options
61
65
 
62
66
  def merge_defaults(options)
63
67
  {
64
- :length => 4,
65
- :retry_count => 3,
66
- :contains => :alphanumeric,
67
- :field_name => :token,
68
- :skip_finders => false,
69
- :override_to_param => true,
68
+ id: false,
69
+ length: 4,
70
+ retry_count: 3,
71
+ contains: :alphanumeric,
72
+ field_name: :token,
73
+ skip_finders: false,
74
+ override_to_param: true,
75
+ generate_on_init: false
70
76
  }.merge(options)
71
77
  end
72
78
  end
data/lib/mongoid/token.rb CHANGED
@@ -20,14 +20,14 @@ module Mongoid
20
20
  add_token_field_and_index(options)
21
21
  add_token_collision_resolver(options)
22
22
  set_token_callbacks(options)
23
-
23
+
24
24
  define_custom_finders(options) if options.skip_finders? == false
25
25
  override_to_param(options) if options.override_to_param?
26
26
  end
27
27
 
28
28
  private
29
29
  def add_token_field_and_index(options)
30
- self.field options.field_name, :type => String, :default => nil
30
+ self.field options.field_name, :type => String, :default => default_value(options)
31
31
  self.index({ options.field_name => 1 }, { :unique => true, :sparse => true })
32
32
  end
33
33
 
@@ -57,6 +57,10 @@ module Mongoid
57
57
  self.send(options.field_name) || super()
58
58
  end
59
59
  end
60
+
61
+ def default_value(options)
62
+ options.generate_on_init && Mongoid::Token::Generator.generate(options.pattern) || nil
63
+ end
60
64
  end
61
65
 
62
66
  protected
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MongoidToken
2
- VERSION = "2.2.0"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -1,13 +1,7 @@
1
1
  require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
2
 
3
3
  describe Mongoid::Token::Finders do
4
- before do
5
- @orig_stderr = $stderr
6
- $stderr = StringIO.new
7
- end
8
-
9
4
  after do
10
- $stderr = @orig_stderr
11
5
  Object.send(:remove_const, :Document) if Object.constants.include?(:Document)
12
6
  Object.send(:remove_const, :AnotherDocument) if Object.constants.include?(:AnotherDocument)
13
7
  end
@@ -19,20 +13,6 @@ describe Mongoid::Token::Finders do
19
13
  klass.singleton_methods.should include(:"find_by_#{field}")
20
14
  end
21
15
 
22
- it "override the `find` method of the document" do
23
- klass = Class.new
24
- klass.define_singleton_method(:find) {|*args| :original_find }
25
- klass.define_singleton_method(:find_by) {|*args| :token_find }
26
-
27
- Mongoid::Token::Finders.define_custom_token_finder_for(klass)
28
-
29
- klass.find(BSON::ObjectId.new).should == :original_find
30
- klass.find(BSON::ObjectId.new, BSON::ObjectId.new).should == :original_find
31
- klass.find().should == :original_find
32
- klass.find(BSON::ObjectId.new, "token").should == :token_find
33
- klass.find("token").should == :token_find
34
- end
35
-
36
16
  it "retrieve a document using the dynamic finder" do
37
17
  class Document; include Mongoid::Document; field :token; end
38
18
  document = Document.create!(:token => "1234")
@@ -47,30 +27,4 @@ describe Mongoid::Token::Finders do
47
27
  Mongoid::Token::Finders.define_custom_token_finder_for(Document)
48
28
  Document.find_by_token(["1234", "5678"]).should == [document, document2]
49
29
  end
50
-
51
- it "retrieve a document using the `find` method" do
52
- class AnotherDocument; include Mongoid::Document; field :token; end
53
- document = AnotherDocument.create! :token => "1234"
54
- Mongoid::Token::Finders.define_custom_token_finder_for(AnotherDocument)
55
- AnotherDocument.find("1234").should == document
56
- end
57
-
58
- it 'retrieves multiple documents using the `find` method' do
59
- class AnotherDocument; include Mongoid::Document; field :token; end
60
- document = AnotherDocument.create! :token => "1234"
61
- document2 = AnotherDocument.create! :token => "5678"
62
- Mongoid::Token::Finders.define_custom_token_finder_for(AnotherDocument)
63
- AnotherDocument.find(["1234", "5678"]).should == [document, document2]
64
- end
65
-
66
- describe :deprecations do
67
- it "includes `find`" do
68
- class AnotherDocument; include Mongoid::Document; field :token; end
69
- document = AnotherDocument.create! :token => "1234"
70
- Mongoid::Token::Finders.define_custom_token_finder_for(AnotherDocument)
71
- AnotherDocument.find("1234")
72
- $stderr.rewind
73
- $stderr.string.chomp.should start_with("[DEPRECATION]"), "Expected deprecation warning for `find` method"
74
- end
75
- end
76
30
  end
@@ -67,4 +67,36 @@ describe Mongoid::Token::Options do
67
67
  expect(Mongoid::Token::Options.new.skip_finders?).to eq false
68
68
  end
69
69
  end
70
+
71
+ describe "id" do
72
+ context "when true" do
73
+ it "returns '_id' sa the field name" do
74
+ expect(Mongoid::Token::Options.new({id: true, field_name: :a_token}).field_name).to eq :_id
75
+ end
76
+ end
77
+
78
+ context "when false" do
79
+ it "returns the field_name option as the field name" do
80
+ expect(Mongoid::Token::Options.new({id: false, field_name: :a_token}).field_name).to eq :a_token
81
+ end
82
+ end
83
+ end
84
+
85
+ describe :generate_on_init do
86
+ it "defaults to false" do
87
+ expect(Mongoid::Token::Options.new({}).generate_on_init).to eq false
88
+ end
89
+
90
+ context "when id option set" do
91
+ it "is true" do
92
+ expect(Mongoid::Token::Options.new({id: true}).generate_on_init).to eq true
93
+ end
94
+ end
95
+
96
+ context "when id option is not set" do
97
+ it "is false" do
98
+ expect(Mongoid::Token::Options.new({id: false}).generate_on_init).to eq false
99
+ end
100
+ end
101
+ end
70
102
  end
@@ -4,6 +4,7 @@ describe Mongoid::Token do
4
4
  after do
5
5
  Object.send(:remove_const, :Document) if Object.constants.include?(:Document)
6
6
  Object.send(:remove_const, :AnotherDocument) if Object.constants.include?(:AnotherDocument)
7
+ Object.send(:remove_const, :UntaintedDocument) if Object.constants.include?(:UntaintedDocument)
7
8
  end
8
9
 
9
10
  let(:document_class) do
@@ -259,4 +260,28 @@ describe Mongoid::Token do
259
260
  end
260
261
  end
261
262
  end
263
+
264
+ describe "with overriden id" do
265
+ # Capture warnings about overriding _id, for cleaner test output
266
+ before do
267
+ @orig_stdout = $stdout
268
+ $stdout = StringIO.new
269
+ document_class.send(:token, id: true)
270
+ end
271
+
272
+ after do
273
+ $stdout = @orig_stdout
274
+ end
275
+
276
+ let(:document){ document_class.new }
277
+
278
+ it "should replace the _id field with a token" do
279
+ expect(document).to have_field(:_id)
280
+ expect(document).to_not have_field(:token)
281
+ end
282
+
283
+ it "should have a default token" do
284
+ expect(document.id).to_not be_blank
285
+ end
286
+ end
262
287
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_token
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicholas Bruning