find_or_create_on_scopes 1.4.1 → 1.5.1

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
- SHA1:
3
- metadata.gz: e21b0d1d5374b9b0a8083be5c6caf98e6f976c9e
4
- data.tar.gz: dcdf412fc3ebf6d9d9ede925559a0d313465e81b
2
+ SHA256:
3
+ metadata.gz: 5903bce9f66535b6bb3d2c1184fd342c70c369104b24c2748de807bc0e604d26
4
+ data.tar.gz: 5c6dd59fbf555f3c2042f3791e02465cc2e773b5e08cb704b4fc043e14f5a116
5
5
  SHA512:
6
- metadata.gz: c55f6f6afeb8540e399b9ebb0a6ec3d4dc493e09c98474e9f0bc938ec2c6c195ce5d36dc13078221dffa119a0202d5be75dfff05e05c89ebf335f0a1fd79db33
7
- data.tar.gz: d3cf7432aa4b9f85cc090ca4dcee951b5b0f63323844a66551273e8cee49640a4b2d393ae6cdff0220effb6e5de8bb47bb0196158f1b7fc1a27149e04743726d
6
+ metadata.gz: 50979875ff4c6d1498a39b0ff1fa2faad75dc79272ec1b187a77aa169dc7b4a456350f0073e57c5da3d5f514da993efcabbc19639bd667ae70dd6a08e46ecb5a
7
+ data.tar.gz: 26e4919ab5b35f393f15dfb181e16d14126136f1126357325083a30bfcb0f97607c332cc7924ca9e714810b3a15e33e01f0556df0e2247fd54ccbef68cdd96a7
data/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ > ⚠️ **DEPRECATED:** `find_or_create_on_scopes` is no longer maintained.
2
+ > ActiveRecord's `find_or_create_by` plus relation scoping covers similar use
3
+ > cases on modern Rails. The final release is v1.5.1.
4
+
1
5
  find_or_create_on_scopes
2
6
  ========================
3
7
 
@@ -1,59 +1,69 @@
1
- # Generated by jeweler
1
+ # Generated by juwelier
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: find_or_create_on_scopes 1.4.1 ruby lib
5
+
6
+ # stub: find_or_create_on_scopes 1.5.1 ruby lib
6
7
 
7
8
  Gem::Specification.new do |s|
8
- s.name = "find_or_create_on_scopes"
9
- s.version = "1.4.1"
10
-
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Tim Morgan"]
14
- s.date = "2016-01-22"
15
- s.description = "Adds methods to ActiveRecord for conditionally finding, creating, or updating records."
16
- s.email = "git@timothymorgan.info"
9
+ s.name = "find_or_create_on_scopes".freeze
10
+ s.version = "1.5.1"
11
+
12
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
13
+ s.require_paths = ["lib".freeze]
14
+ s.authors = ["Tim Morgan".freeze]
15
+ s.description = "Adds methods to ActiveRecord for conditionally finding, creating, or updating records.".freeze
16
+ s.email = "git@timothymorgan.info".freeze
17
17
  s.extra_rdoc_files = [
18
- "LICENSE",
19
- "README.md"
18
+ "LICENSE",
19
+ "README.md"
20
20
  ]
21
21
  s.files = [
22
- "LICENSE",
23
- "README.md",
24
- "find_or_create_on_scopes.gemspec",
25
- "lib/find_or_create_on_scopes.rb"
22
+ "LICENSE",
23
+ "README.md",
24
+ "find_or_create_on_scopes.gemspec",
25
+ "lib/find_or_create_on_scopes.rb"
26
26
  ]
27
- s.homepage = "http://github.com/riscfuture/find_or_create_on_scopes"
28
- s.required_ruby_version = Gem::Requirement.new(">= 1.9")
29
- s.rubygems_version = "2.5.1"
30
- s.summary = "find_or_create-type methods on ActiveRecord scopes"
27
+ s.homepage = "http://github.com/riscfuture/find_or_create_on_scopes".freeze
28
+ s.required_ruby_version = Gem::Requirement.new(">= 1.9".freeze)
29
+ s.rubygems_version = "2.6.3".freeze
30
+ s.summary = "[DEPRECATED] find_or_create-type methods on ActiveRecord scopes".freeze
31
+ s.post_install_message = <<~MSG
32
+
33
+ ⚠️ DEPRECATED: find_or_create_on_scopes is no longer maintained.
34
+
35
+ No longer maintained. ActiveRecord's `find_or_create_by` plus relation scoping covers similar use cases on modern Rails.
31
36
 
32
- if s.respond_to? :specification_version then
37
+ This is the final release. No further updates are planned.
38
+
39
+ MSG
40
+
41
+ if s.respond_to? :specification_version
33
42
  s.specification_version = 4
34
43
 
35
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
36
- s.add_runtime_dependency(%q<activerecord>, [">= 3.1"])
37
- s.add_development_dependency(%q<jeweler>, [">= 0"])
38
- s.add_development_dependency(%q<yard>, [">= 0"])
39
- s.add_development_dependency(%q<redcarpet>, [">= 0"])
40
- s.add_development_dependency(%q<sqlite3>, [">= 0"])
41
- s.add_development_dependency(%q<rspec>, [">= 0"])
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0')
45
+ s.add_runtime_dependency('activerecord'.freeze, [">= 3.1"])
46
+ s.add_development_dependency('activerecord-jdbcsqlite3-adapter'.freeze, [">= 0"])
47
+ s.add_development_dependency('juwelier'.freeze, [">= 0"])
48
+ s.add_development_dependency('redcarpet'.freeze, [">= 0"])
49
+ s.add_development_dependency('rspec'.freeze, [">= 0"])
50
+ s.add_development_dependency('sqlite3'.freeze, [">= 0"])
42
51
  else
43
- s.add_dependency(%q<activerecord>, [">= 3.1"])
44
- s.add_dependency(%q<jeweler>, [">= 0"])
45
- s.add_dependency(%q<yard>, [">= 0"])
46
- s.add_dependency(%q<redcarpet>, [">= 0"])
47
- s.add_dependency(%q<sqlite3>, [">= 0"])
48
- s.add_dependency(%q<rspec>, [">= 0"])
52
+ s.add_dependency('activerecord'.freeze, [">= 3.1"])
53
+ s.add_dependency('activerecord-jdbcsqlite3-adapter'.freeze, [">= 0"])
54
+ s.add_dependency('sqlite3'.freeze, [">= 0"])
55
+ s.add_dependency('sqlite3'.freeze, [">= 0"])
56
+ s.add_dependency('sqlite3'.freeze, [">= 0"])
57
+ s.add_dependency('sqlite3'.freeze, [">= 0"])
58
+ s.add_dependency('yard'.freeze, [">= 0"])
49
59
  end
50
60
  else
51
- s.add_dependency(%q<activerecord>, [">= 3.1"])
52
- s.add_dependency(%q<jeweler>, [">= 0"])
53
- s.add_dependency(%q<yard>, [">= 0"])
54
- s.add_dependency(%q<redcarpet>, [">= 0"])
55
- s.add_dependency(%q<sqlite3>, [">= 0"])
56
- s.add_dependency(%q<rspec>, [">= 0"])
61
+ s.add_dependency('juwelier'.freeze, [">= 0"])
62
+ s.add_dependency('juwelier'.freeze, [">= 0"])
63
+ s.add_dependency('redcarpet'.freeze, [">= 0"])
64
+ s.add_dependency('rspec'.freeze, [">= 0"])
65
+ s.add_dependency('yard'.freeze, [">= 0"])
66
+ s.add_dependency('yard'.freeze, [">= 0"])
67
+ s.add_development_dependency('yard'.freeze, [">= 0"])
57
68
  end
58
69
  end
59
-
@@ -2,6 +2,10 @@
2
2
 
3
3
  module FindOrCreateOnScopes
4
4
 
5
+ # Return this in a block from `find_or_create` or `create_or_update` to abort
6
+ # the creation/updating of a record.
7
+ ABORT_SAVE = Object.new
8
+
5
9
  # Locates a record according to the current scope. Returns the record if
6
10
  # found. If not found, creates a new record with the attributes of the current
7
11
  # scope and the provided attributes.
@@ -10,6 +14,7 @@ module FindOrCreateOnScopes
10
14
  # @yield [record] Yields the record before it is saved.
11
15
  # @yieldparam [ActiveRecord::Base] record The found or created record before
12
16
  # it is saved.
17
+ # @yieldreturn [ABORT_SAVE, nil] If `ABORT_SAVE` the record is not saved.
13
18
  # @return [ActiveRecord::Base] The found or created record.
14
19
 
15
20
  def find_or_create(*args, &block)
@@ -42,6 +47,7 @@ module FindOrCreateOnScopes
42
47
  # @yield [record] Yields the record before it is saved.
43
48
  # @yieldparam [ActiveRecord::Base] record The found or created record before
44
49
  # it is saved.
50
+ # @yieldreturn [ABORT_SAVE, nil] If `ABORT_SAVE` the record is not saved.
45
51
  # @return [ActiveRecord::Base] The found or created record.
46
52
 
47
53
  def create_or_update(*args, &block)
@@ -74,19 +80,19 @@ module FindOrCreateOnScopes
74
80
  transaction do
75
81
  record = first || new(*args)
76
82
  if record.new_record?
77
- yield record if block_given?
78
- record.send(meth) if meth
83
+ result = block_given? ? yield(record) : nil
84
+ record.send(meth) if meth && result != ABORT_SAVE
79
85
  end
80
86
  end
81
87
  return record
82
- rescue => err
83
- if (defined?(Mysql2::Error) && err.kind_of?(Mysql2::Error)) ||
84
- (defined?(PG::Error) && err.kind_of?(PG::Error)) ||
85
- (defined?(ActiveRecord::JDBCError) && err.kind_of?(ActiveRecord::JDBCError)) ||
86
- err.kind_of?(ActiveRecord::ActiveRecordError)
87
- if err.to_s.include?('duplicate key value violates unique constraint') ||
88
- err.to_s.start_with?('Duplicate entry') ||
89
- err.kind_of?(ActiveRecord::RecordNotUnique)
88
+ rescue StandardError => e
89
+ if (defined?(Mysql2::Error) && e.kind_of?(Mysql2::Error)) ||
90
+ (defined?(PG::Error) && e.kind_of?(PG::Error)) ||
91
+ (defined?(ActiveRecord::JDBCError) && e.kind_of?(ActiveRecord::JDBCError)) ||
92
+ e.kind_of?(ActiveRecord::ActiveRecordError)
93
+ if e.to_s.include?('duplicate key value violates unique constraint') ||
94
+ e.to_s.start_with?('Duplicate entry') ||
95
+ e.kind_of?(ActiveRecord::RecordNotUnique)
90
96
  retry
91
97
  else
92
98
  raise
@@ -101,18 +107,18 @@ module FindOrCreateOnScopes
101
107
  transaction do
102
108
  record = first || new
103
109
  record.assign_attributes(*args) unless args.empty?
104
- yield record if block_given?
105
- record.send(meth) if meth
110
+ result = block_given? ? yield(record) : nil
111
+ record.send(meth) if meth && result != ABORT_SAVE
106
112
  end
107
113
  return record
108
- rescue => err
109
- if (defined?(Mysql2::Error) && err.kind_of?(Mysql2::Error)) ||
110
- (defined?(PG::Error) && err.kind_of?(PG::Error)) ||
111
- (defined?(ActiveRecord::JDBCError) && err.kind_of?(ActiveRecord::JDBCError)) ||
112
- err.kind_of?(ActiveRecord::ActiveRecordError)
113
- if err.to_s.include?('duplicate key value violates unique constraint') ||
114
- err.to_s.start_with?('Duplicate entry') ||
115
- err.kind_of?(ActiveRecord::RecordNotUnique)
114
+ rescue StandardError => e
115
+ if (defined?(Mysql2::Error) && e.kind_of?(Mysql2::Error)) ||
116
+ (defined?(PG::Error) && e.kind_of?(PG::Error)) ||
117
+ (defined?(ActiveRecord::JDBCError) && e.kind_of?(ActiveRecord::JDBCError)) ||
118
+ e.kind_of?(ActiveRecord::ActiveRecordError)
119
+ if e.to_s.include?('duplicate key value violates unique constraint') ||
120
+ e.to_s.start_with?('Duplicate entry') ||
121
+ e.kind_of?(ActiveRecord::RecordNotUnique)
116
122
 
117
123
  # sadly there's no way to tell which keys are the duplicate ones from a
118
124
  # SQL error, so we just retry 3 times and then give up :/
@@ -128,12 +134,12 @@ module FindOrCreateOnScopes
128
134
  retry
129
135
  end
130
136
  else
131
- raise err
137
+ raise e
132
138
  end
133
139
  else
134
- raise err
140
+ raise e
135
141
  end
136
142
  end
137
143
  end
138
144
 
139
- ActiveRecord::Relation.send :include, FindOrCreateOnScopes
145
+ ActiveRecord::Relation.include FindOrCreateOnScopes
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: find_or_create_on_scopes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Morgan
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2016-01-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -25,7 +24,7 @@ dependencies:
25
24
  - !ruby/object:Gem::Version
26
25
  version: '3.1'
27
26
  - !ruby/object:Gem::Dependency
28
- name: jeweler
27
+ name: activerecord-jdbcsqlite3-adapter
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ">="
@@ -39,7 +38,7 @@ dependencies:
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
40
  - !ruby/object:Gem::Dependency
42
- name: yard
41
+ name: juwelier
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
@@ -67,7 +66,7 @@ dependencies:
67
66
  - !ruby/object:Gem::Version
68
67
  version: '0'
69
68
  - !ruby/object:Gem::Dependency
70
- name: sqlite3
69
+ name: rspec
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - ">="
@@ -81,7 +80,7 @@ dependencies:
81
80
  - !ruby/object:Gem::Version
82
81
  version: '0'
83
82
  - !ruby/object:Gem::Dependency
84
- name: rspec
83
+ name: sqlite3
85
84
  requirement: !ruby/object:Gem::Requirement
86
85
  requirements:
87
86
  - - ">="
@@ -110,7 +109,14 @@ files:
110
109
  homepage: http://github.com/riscfuture/find_or_create_on_scopes
111
110
  licenses: []
112
111
  metadata: {}
113
- post_install_message:
112
+ post_install_message: |2+
113
+
114
+ ⚠️ DEPRECATED: find_or_create_on_scopes is no longer maintained.
115
+
116
+ No longer maintained. ActiveRecord's `find_or_create_by` plus relation scoping covers similar use cases on modern Rails.
117
+
118
+ This is the final release. No further updates are planned.
119
+
114
120
  rdoc_options: []
115
121
  require_paths:
116
122
  - lib
@@ -125,9 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
131
  - !ruby/object:Gem::Version
126
132
  version: '0'
127
133
  requirements: []
128
- rubyforge_project:
129
- rubygems_version: 2.5.1
130
- signing_key:
134
+ rubygems_version: 4.0.11
131
135
  specification_version: 4
132
- summary: find_or_create-type methods on ActiveRecord scopes
136
+ summary: "[DEPRECATED] find_or_create-type methods on ActiveRecord scopes"
133
137
  test_files: []
138
+ ...