rearmed 1.0.0 → 1.0.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 +4 -4
- data/CHANGELOG.md +6 -2
- data/README.md +17 -7
- data/lib/generators/rearmed/setup_generator.rb +7 -7
- data/lib/rearmed/monkey_patches/rails.rb +107 -0
- data/lib/rearmed/monkey_patches/rails_3.rb +5 -5
- data/lib/rearmed/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b89bebeea7547a401cc55438789b46e09e82177
|
4
|
+
data.tar.gz: eb9048e4ee97652b778d424422969c3e73e6924e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d5d35e487207fe314f491965e7d9732b675da554dc49657dca0850aba11507aa681d50c3b75c3fde090c20f75edbf763f654363a239087a682c47e700f7a4f3
|
7
|
+
data.tar.gz: ad301662615d17735b59308291751a728ffa4fc24c306cb21c676c2b6fa0b9a37650f37f349b08272597bc92615b384ba41f1fb2cc8e64427380892e0c7912f8
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
---------
|
3
3
|
|
4
|
-
- **
|
4
|
+
- **1.0.0 - June 8, 2016**
|
5
|
+
- Ready for public use
|
6
|
+
- Major improvements to opt-in system
|
7
|
+
- Move some methods to Rearmed for use outside of monkey patching
|
8
|
+
- **0.9.1 - June 02, 2016**
|
5
9
|
- Add many new methods
|
6
10
|
- Switch to opt-in monkey patching
|
7
|
-
- **
|
11
|
+
- **0.9.0 - April 30, 2016**
|
8
12
|
- Gem Initial Release
|
data/README.md
CHANGED
@@ -21,15 +21,19 @@ Run `rails g rearmed:setup` to create a settings files in `config/initializers/r
|
|
21
21
|
Rearmed.enabled_patches = {
|
22
22
|
rails_4: {
|
23
23
|
or: false,
|
24
|
-
link_to_confirm: false
|
25
|
-
find_relation_each: false,
|
26
|
-
find_in_relation_batches: false,
|
24
|
+
link_to_confirm: false
|
27
25
|
},
|
28
26
|
rails_3: {
|
29
27
|
hash_compact: false,
|
30
28
|
pluck: false,
|
31
29
|
update_columns: false,
|
32
|
-
all: false
|
30
|
+
all: false
|
31
|
+
},
|
32
|
+
rails: {
|
33
|
+
pluck_to_hash: false,
|
34
|
+
pluck_to_struct: false,
|
35
|
+
find_relation_each: false,
|
36
|
+
find_in_relation_batches: false,
|
33
37
|
},
|
34
38
|
string: {
|
35
39
|
to_bool: false,
|
@@ -127,6 +131,14 @@ hash.only!(:foo, :bar)
|
|
127
131
|
|
128
132
|
### Rails
|
129
133
|
|
134
|
+
##### Additional ActiveRecord Methods
|
135
|
+
```ruby
|
136
|
+
Post.all.pluck_to_hash(:name, :category, :id)
|
137
|
+
Post.all.pluck_to_struct(:name, :category, :id)
|
138
|
+
Post.find_in_relation_batches # this returns a relation instead of an array
|
139
|
+
Post.find_relation_each # this returns a relation instead of an array
|
140
|
+
```
|
141
|
+
|
130
142
|
##### Rails 3.x Backports
|
131
143
|
```ruby
|
132
144
|
my_hash.compact
|
@@ -137,12 +149,10 @@ Post.pluck(:name, :id) # adds multi column pluck support ex. => [['first', 1], [
|
|
137
149
|
```
|
138
150
|
|
139
151
|
|
140
|
-
##### Rails 4.x Backports
|
152
|
+
##### Rails 4.x Backports
|
141
153
|
```ruby
|
142
154
|
Post.where(name: 'foo').or.where(content: 'bar')
|
143
155
|
= link_to 'Delete', post_path(post), method: :delete, confirm: "Are you sure you want to delete this post?" #returns rails 3 behaviour of allowing confirm attribute as well as data-confirm
|
144
|
-
Post.find_in_relation_batches # this returns a relation instead of an array
|
145
|
-
Post.find_relation_each # this returns a relation instead of an array
|
146
156
|
```
|
147
157
|
|
148
158
|
# Credits
|
@@ -4,11 +4,9 @@ module Rearmed
|
|
4
4
|
class SetupGenerator < Rails::Generators::Base
|
5
5
|
|
6
6
|
def setup
|
7
|
-
|
7
|
+
create_file "config/initializers/rearmed.rb", <<eos
|
8
8
|
Rearmed.enabled_patches = {
|
9
9
|
rails_4: {
|
10
|
-
find_relation_each: false,
|
11
|
-
find_in_relation_batches: false,
|
12
10
|
or: false,
|
13
11
|
link_to_confirm: false
|
14
12
|
},
|
@@ -18,6 +16,12 @@ Rearmed.enabled_patches = {
|
|
18
16
|
update_columns: false,
|
19
17
|
all: false
|
20
18
|
},
|
19
|
+
rails: {
|
20
|
+
pluck_to_hash: false,
|
21
|
+
pluck_to_struct: false,
|
22
|
+
find_relation_each: false,
|
23
|
+
find_in_relation_batches: false,
|
24
|
+
},
|
21
25
|
string: {
|
22
26
|
to_bool: false,
|
23
27
|
valid_integer: false,
|
@@ -28,8 +32,6 @@ Rearmed.enabled_patches = {
|
|
28
32
|
dig: false
|
29
33
|
},
|
30
34
|
array: {
|
31
|
-
index_all: false,
|
32
|
-
find: false,
|
33
35
|
dig: false,
|
34
36
|
delete_first: false
|
35
37
|
},
|
@@ -48,8 +50,6 @@ Rearmed.enabled_patches = {
|
|
48
50
|
|
49
51
|
require 'rearmed/apply_patches'
|
50
52
|
eos
|
51
|
-
|
52
|
-
create_file "config/initializers/rearmed.rb", contents
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
enabled = Rearmed.enabled_patches[:rails] == true
|
2
|
+
|
3
|
+
if defined?(ActiveRecord)
|
4
|
+
|
5
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails, :pluck_to_hash) == true
|
6
|
+
ActiveRecord::Base.class_eval do
|
7
|
+
def self.pluck_to_hash(*keys)
|
8
|
+
hash_type = keys[-1].is_a?(Hash) ? keys.pop.fetch(:hash_type, HashWithIndifferentAccess) : HashWithIndifferentAccess
|
9
|
+
block_given = block_given?
|
10
|
+
keys, formatted_keys = format_keys(keys)
|
11
|
+
keys_one = keys.size == 1
|
12
|
+
|
13
|
+
pluck(*keys).map do |row|
|
14
|
+
value = hash_type[formatted_keys.zip(keys_one ? [row] : row)]
|
15
|
+
block_given ? yield(value) : value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.pluck_to_struct(*keys)
|
20
|
+
struct_type = keys[-1].is_a?(Hash) ? keys.pop.fetch(:struct_type, Struct) : Struct
|
21
|
+
block_given = block_given?
|
22
|
+
keys, formatted_keys = format_keys(keys)
|
23
|
+
keys_one = keys.size == 1
|
24
|
+
|
25
|
+
struct = struct_type.new(*formatted_keys)
|
26
|
+
pluck(*keys).map do |row|
|
27
|
+
value = keys_one ? struct.new(*[row]) : struct.new(*row)
|
28
|
+
block_given ? yield(value) : value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def self.format_keys(keys)
|
35
|
+
if keys.blank?
|
36
|
+
[column_names, column_names]
|
37
|
+
else
|
38
|
+
[
|
39
|
+
keys,
|
40
|
+
keys.map do |k|
|
41
|
+
case k
|
42
|
+
when String
|
43
|
+
k.split(/\bas\b/i)[-1].strip.to_sym
|
44
|
+
when Symbol
|
45
|
+
k
|
46
|
+
end
|
47
|
+
end
|
48
|
+
]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
ActiveRecord::Batches.module_eval do
|
55
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails, :find_in_relation_batches) == true
|
56
|
+
def find_in_relation_batches(options = {})
|
57
|
+
options.assert_valid_keys(:start, :batch_size)
|
58
|
+
|
59
|
+
relation = self
|
60
|
+
start = options[:start]
|
61
|
+
batch_size = options[:batch_size] || 1000
|
62
|
+
|
63
|
+
unless block_given?
|
64
|
+
return to_enum(:find_in_relation_batches, options) do
|
65
|
+
total = start ? where(table[primary_key].gteq(start)).size : size
|
66
|
+
(total - 1).div(batch_size) + 1
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if logger && (arel.orders.present? || arel.taken.present?)
|
71
|
+
logger.warn("Scoped order and limit are ignored, it's forced to be batch order and batch size")
|
72
|
+
end
|
73
|
+
|
74
|
+
relation = relation.reorder(batch_order).limit(batch_size)
|
75
|
+
#records = start ? relation.where(table[primary_key].gteq(start)).to_a : relation.to_a
|
76
|
+
records = start ? relation.where(table[primary_key].gteq(start)) : relation
|
77
|
+
|
78
|
+
while records.any?
|
79
|
+
records_size = records.size
|
80
|
+
primary_key_offset = records.last.id
|
81
|
+
raise "Primary key not included in the custom select clause" unless primary_key_offset
|
82
|
+
|
83
|
+
yield records
|
84
|
+
|
85
|
+
break if records_size < batch_size
|
86
|
+
|
87
|
+
records = relation.where(table[primary_key].gt(primary_key_offset))#.to_a
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails, :find_relation_each) == true
|
93
|
+
def find_relation_each(options = {})
|
94
|
+
if block_given?
|
95
|
+
find_in_relation_batches(options) do |records|
|
96
|
+
records.each { |record| yield record }
|
97
|
+
end
|
98
|
+
else
|
99
|
+
enum_for :find_relation_each, options do
|
100
|
+
options[:start] ? where(table[primary_key].gteq(options[:start])).size : size
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
enabled = Rearmed.enabled_patches[:rails_3] == true
|
2
2
|
|
3
3
|
if defined?(ActiveSupport) && ActiveSupport::VERSION::MAJOR < 4
|
4
|
-
if
|
4
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails_3, :hash_compact) == true
|
5
5
|
Hash.class_eval do
|
6
6
|
def compact
|
7
7
|
self.select{|_, value| !value.nil?}
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
|
17
17
|
if defined?(ActiveRecord) && ActiveRecord::VERSION::MAJOR < 4
|
18
18
|
|
19
|
-
if
|
19
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails_3, :all) == true
|
20
20
|
ActiveRecord::FinderMethods.module_eval do
|
21
21
|
def all(*args)
|
22
22
|
args.any? ? apply_finder_options(args.first) : self
|
@@ -24,7 +24,7 @@ if defined?(ActiveRecord) && ActiveRecord::VERSION::MAJOR < 4
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
if
|
27
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails_3, :update_columns) == true
|
28
28
|
ActiveRecord::Persistence::ClassMethods.module_eval do
|
29
29
|
def update_columns(attributes)
|
30
30
|
raise ActiveRecordError, "cannot update a new record" if new_record?
|
@@ -45,7 +45,7 @@ if defined?(ActiveRecord) && ActiveRecord::VERSION::MAJOR < 4
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
if
|
48
|
+
if enabled || Rearmed.dig(Rearmed.enabled_patches, :rails_3, :pluck) == true
|
49
49
|
ActiveRecord::Relation.class_eval do
|
50
50
|
def pluck(*args)
|
51
51
|
args.map! do |column_name|
|
data/lib/rearmed/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rearmed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Weston Ganger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -71,12 +71,13 @@ files:
|
|
71
71
|
- lib/rearmed/monkey_patches/enumerable.rb
|
72
72
|
- lib/rearmed/monkey_patches/hash.rb
|
73
73
|
- lib/rearmed/monkey_patches/object.rb
|
74
|
+
- lib/rearmed/monkey_patches/rails.rb
|
74
75
|
- lib/rearmed/monkey_patches/rails_3.rb
|
75
76
|
- lib/rearmed/monkey_patches/rails_4.rb
|
76
77
|
- lib/rearmed/monkey_patches/string.rb
|
77
78
|
- lib/rearmed/version.rb
|
78
79
|
- test/tc_rearmed.rb
|
79
|
-
homepage: https://github.com/westonganger/
|
80
|
+
homepage: https://github.com/westonganger/rearmed-rb
|
80
81
|
licenses: []
|
81
82
|
metadata: {}
|
82
83
|
post_install_message:
|