mongoid_token 2.2.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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