rails_core_extensions 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.hound.yml +2 -0
  4. data/.rspec +2 -0
  5. data/.ruby-style.yml +233 -0
  6. data/.travis.yml +14 -0
  7. data/Gemfile +2 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +62 -0
  10. data/Rakefile +12 -0
  11. data/gemfiles/rails3.gemfile +13 -0
  12. data/gemfiles/rails4.gemfile +14 -0
  13. data/lib/rails_core_extensions.rb +41 -0
  14. data/lib/rails_core_extensions/action_controller_sortable.rb +22 -0
  15. data/lib/rails_core_extensions/action_view_currency_extensions.rb +26 -0
  16. data/lib/rails_core_extensions/action_view_extensions.rb +62 -0
  17. data/lib/rails_core_extensions/action_view_has_many_extensions.rb +32 -0
  18. data/lib/rails_core_extensions/activatable.rb +38 -0
  19. data/lib/rails_core_extensions/active_model_extensions.rb +47 -0
  20. data/lib/rails_core_extensions/active_record_cache_all_attributes.rb +43 -0
  21. data/lib/rails_core_extensions/active_record_cloning.rb +81 -0
  22. data/lib/rails_core_extensions/active_record_extensions.rb +228 -0
  23. data/lib/rails_core_extensions/active_record_liquid_extensions.rb +32 -0
  24. data/lib/rails_core_extensions/active_support_concern.rb +134 -0
  25. data/lib/rails_core_extensions/breadcrumb.rb +170 -0
  26. data/lib/rails_core_extensions/caches_action_without_host.rb +17 -0
  27. data/lib/rails_core_extensions/concurrency.rb +152 -0
  28. data/lib/rails_core_extensions/position_initializer.rb +27 -0
  29. data/lib/rails_core_extensions/railtie.rb +7 -0
  30. data/lib/rails_core_extensions/sortable.rb +52 -0
  31. data/lib/rails_core_extensions/tasks/position_initializer.rake +12 -0
  32. data/lib/rails_core_extensions/time_with_zone.rb +16 -0
  33. data/lib/rails_core_extensions/version.rb +3 -0
  34. data/rails_core_extensions.gemspec +38 -0
  35. data/spec/action_controller_sortable_spec.rb +52 -0
  36. data/spec/action_view_extensions_spec.rb +25 -0
  37. data/spec/active_model_extensions_spec.rb +130 -0
  38. data/spec/active_record_extensions_spec.rb +126 -0
  39. data/spec/breadcrumb_spec.rb +85 -0
  40. data/spec/concurrency_spec.rb +110 -0
  41. data/spec/position_initializer_spec.rb +48 -0
  42. data/spec/schema.rb +17 -0
  43. data/spec/spec_helper.rb +31 -0
  44. data/spec/spec_helper_model_base.rb +37 -0
  45. data/spec/support/coverage_loader.rb +26 -0
  46. metadata +294 -0
@@ -0,0 +1,85 @@
1
+ require 'rails_core_extensions/breadcrumb'
2
+
3
+ require 'action_view'
4
+
5
+ describe RailsCoreExtensions::Breadcrumb do
6
+ before do
7
+ class MockView
8
+ include ActionView::Helpers::TagHelper
9
+ include ActionView::Helpers::UrlHelper
10
+ include ActionView::Helpers::CaptureHelper
11
+ attr_accessor :output_buffer
12
+ include RailsCoreExtensions::Breadcrumb
13
+
14
+ attr_reader :params
15
+
16
+ def initialize(params)
17
+ @params = params
18
+ end
19
+ end
20
+ end
21
+
22
+ after { Object.send(:remove_const, 'MockView') }
23
+
24
+ subject { MockView.new(:action => action) }
25
+
26
+ let(:objects_path) { '/users' }
27
+ let(:parent) { nil }
28
+
29
+ before do
30
+ allow(subject).to receive(:objects_path) { objects_path }
31
+ allow(subject).to receive(:collection_url) { objects_path }
32
+
33
+ allow(subject).to receive(:parent) { parent }
34
+ allow(subject).to receive(:parent_object) { parent }
35
+
36
+ allow(subject).to receive(:controller) { double(:controller, :show => nil) }
37
+ end
38
+
39
+ context '#breadcrumbs (* = link)' do
40
+ let(:user_class) { double(:table_name => 'users', :model_name => double(:singular_route_key => 'user')) }
41
+ let(:user) { double(:to_s => 'Alice', :new_record? => new_record, :class => user_class) }
42
+ context 'for a new record' do
43
+ let(:action) { 'new' }
44
+ let(:new_record) { true }
45
+
46
+ it 'should breadcrumb: *Users / New' do
47
+ result = subject.breadcrumbs(user)
48
+ expect(result).to be_html_safe
49
+ expect(result).to eq(
50
+ %q(<ul class="breadcrumb"><li><a href="/users">Users</a></li><li class="active">New</li></ul>)
51
+ )
52
+ end
53
+ end
54
+
55
+ context 'for a existing record' do
56
+ let(:new_record) { false }
57
+
58
+ context 'when editing' do
59
+ let(:action) { 'edit' }
60
+ it 'should breadcrumb: *Users / *Alice / Edit' do
61
+ expect(subject).to receive(:link_to).with('Users', '/users') {
62
+ '<a href="/users">Users</a>'.html_safe }
63
+ expect(subject).to receive(:link_to).with('Alice', user) {
64
+ '<a href="/users/1">Alice</a>'.html_safe }
65
+ result = subject.breadcrumbs(user)
66
+ expect(result).to be_html_safe
67
+ expect(result).to eq(
68
+ %q(<ul class="breadcrumb"><li><a href="/users">Users</a></li><li><a href="/users/1">Alice</a></li><li class="active">Edit</li></ul>)
69
+ )
70
+ end
71
+ end
72
+
73
+ context 'when showing' do
74
+ let(:action) { 'show' }
75
+ it 'should breadcrumb: *Users / Alice' do
76
+ result = subject.breadcrumbs(user)
77
+ expect(result).to be_html_safe
78
+ expect(result).to eq(
79
+ %q(<ul class="breadcrumb"><li><a href="/users">Users</a></li><li>Alice</li></ul>)
80
+ )
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ class TestConcurrencyCache
4
+ @@cache = {}
5
+
6
+ def self.read(key)
7
+ @@cache[key]
8
+ end
9
+
10
+ def self.write(key, value)
11
+ @@cache[key] = value
12
+ end
13
+
14
+ def self.delete(key)
15
+ @@cache.delete(key)
16
+ end
17
+
18
+ def self.clear
19
+ @@cache = {}
20
+ end
21
+ end
22
+
23
+ describe Concurrency do
24
+ before :each do
25
+ TestConcurrencyCache.clear
26
+
27
+ class ConcurrencyTest
28
+ include Concurrency
29
+
30
+ self.concurrency_cache = TestConcurrencyCache
31
+
32
+ def self.class_test_method
33
+ sleep(1)
34
+ end
35
+
36
+ def instance_test_method
37
+ sleep(1)
38
+ end
39
+
40
+ def self.both_instance_and_class_test_method; end
41
+ def both_instance_and_class_test_method; end
42
+ end
43
+ end
44
+
45
+ after :each do
46
+ Object.send(:remove_const, :ConcurrencyTest)
47
+ end
48
+
49
+ it "should allow specifying which methods should implement the concurrency check" do
50
+ expect { ConcurrencyTest.send(:concurrency_safe, :instance_test_method) }
51
+ .to_not raise_error
52
+ expect { ConcurrencyTest.send(:concurrency_safe, :class_test_method) }
53
+ .to_not raise_error
54
+ expect { ConcurrencyTest.send(:concurrency_safe, :both_instance_and_class_test_method) }
55
+ .to raise_error(Concurrency::AmbiguousMethodException)
56
+ expect { ConcurrencyTest.send(:concurrency_safe, :both_instance_and_class_test_method, type: :instance) }
57
+ .to_not raise_error
58
+ expect { ConcurrencyTest.send(:concurrency_safe, :both_instance_and_class_test_method, type: :class) }
59
+ .to_not raise_error
60
+ expect { ConcurrencyTest.send(:concurrency_safe, :unknown_method) }
61
+ .to raise_error(Concurrency::NoMethodException)
62
+ end
63
+
64
+ it "should allow identyfying the type of a method" do
65
+ expect(ConcurrencyTest.send(:method_types, :class_test_method)).to eq ['class']
66
+ expect(ConcurrencyTest.send(:method_types, :instance_test_method)).to eq ['instance']
67
+ expect(ConcurrencyTest.send(:method_types, :both_instance_and_class_test_method)).to eq ['class','instance']
68
+ expect(ConcurrencyTest.send(:method_types, :unknown_method)).to be_blank
69
+ expect(ConcurrencyTest.send(:method_type, :class_test_method)).to eq 'class'
70
+ expect(ConcurrencyTest.send(:method_type, :instance_test_method)).to eq 'instance'
71
+ expect { ConcurrencyTest.send(:method_type, :both_instance_and_class_test_method) }
72
+ .to raise_error(Concurrency::AmbiguousMethodException)
73
+ expect { ConcurrencyTest.send(:method_type, :unknown_method) }
74
+ .to raise_error(Concurrency::NoMethodException)
75
+ end
76
+
77
+ it "should allow checking the concurrency lock for specified class methods" do
78
+ ConcurrencyTest.send(:concurrency_safe, :class_test_method)
79
+ started = false
80
+ expect(ConcurrencyTest.concurrency_safe_method_locked?(:class_test_method)).to be false
81
+ thread = Thread.new { ConcurrencyTest.send(:class_test_method); started = true }
82
+ thread.join
83
+ expect(ConcurrencyTest.concurrency_safe_method_locked?(:class_test_method)).to be true until started
84
+ end
85
+
86
+ it "should allow checking the concurrency lock for specified instance methods" do
87
+ ConcurrencyTest.send(:concurrency_safe, :class_test_method)
88
+ instance = ConcurrencyTest.new
89
+ started = false
90
+ expect(instance.concurrency_safe_method_locked?(:instance_test_method)).to be false
91
+ thread = Thread.new { instance.send(:instance_test_method); started = true }
92
+ thread.join
93
+ expect(instance.concurrency_safe_method_locked?(:instance_test_method)).to be true until started
94
+ end
95
+
96
+ it "should implement the concurrency check for specified class methods" do
97
+ ConcurrencyTest.send(:concurrency_safe, :class_test_method)
98
+ threads = 2.times.map { Thread.new { ConcurrencyTest.send(:class_test_method) } }
99
+ expect { threads.each(&:join) }
100
+ .to raise_error(Concurrency::ConcurrentCallException)
101
+ end
102
+
103
+ it "should implement the concurrency check for specified instance methods" do
104
+ ConcurrencyTest.send(:concurrency_safe, :instance_test_method)
105
+ instance = ConcurrencyTest.new
106
+ threads = 2.times.map { Thread.new { instance.send(:instance_test_method) } }
107
+ expect { threads.each(&:join) }
108
+ .to raise_error(Concurrency::ConcurrentCallException)
109
+ end
110
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ connect_to_sqlite
4
+
5
+ describe RailsCoreExtensions::PositionInitializer, 'When repositioning' do
6
+ class Child < ActiveRecord::Base; end
7
+
8
+ before do
9
+ Child.create!(parent_id: 1, name: 'A child')
10
+ end
11
+
12
+ after do
13
+ Child.delete_all
14
+ end
15
+
16
+ subject { RailsCoreExtensions::PositionInitializer.new(Child, :parent_id) }
17
+ let(:child) { Child.find_by_name('A child') }
18
+
19
+ context 'when not initialized' do
20
+ specify { expect(child.position).to be_nil }
21
+ end
22
+
23
+ context 'when positioned' do
24
+ before { subject.positionalize }
25
+
26
+ specify { expect(child.position).to eq 1 }
27
+
28
+ context 'when additional models are created' do
29
+ let(:child2) { Child.find_by_name('Another child') }
30
+ let(:child3) { Child.find_by_name('Third child') }
31
+
32
+ before do
33
+ Child.create!(parent_id: 2, name: 'Another child')
34
+ Child.create!(parent_id: 1, name: 'Third child')
35
+ end
36
+
37
+ context 'when re-positioned' do
38
+ before { subject.positionalize }
39
+
40
+ it 'should reposition in groups by linked parent' do
41
+ expect(child.position).to eq 2
42
+ expect(child3.position).to eq 1
43
+ expect(child2.position).to eq 1
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ ActiveRecord::Schema.define(:version => 1) do
2
+ create_table :models do |t|
3
+ t.string :name
4
+ t.string :age
5
+ t.integer :position
6
+ t.integer :category_id
7
+ end
8
+
9
+ create_table :parents do |t|
10
+ end
11
+
12
+ create_table :children do |t|
13
+ t.string :name
14
+ t.integer :parent_id
15
+ t.integer :position
16
+ end
17
+ end
@@ -0,0 +1,31 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'rubygems'
9
+ require 'bundler/setup'
10
+ require 'support/coverage_loader'
11
+
12
+ require 'action_controller'
13
+ require 'active_record'
14
+
15
+ require 'rails_core_extensions'
16
+
17
+ RSpec.configure do |config|
18
+ config.raise_errors_for_deprecations!
19
+ config.run_all_when_everything_filtered = true
20
+ config.filter_run :focus
21
+ config.order = :random
22
+ end
23
+
24
+ DB_FILE = 'tmp/test_db'
25
+ def connect_to_sqlite
26
+ FileUtils.mkdir_p File.dirname(DB_FILE)
27
+ FileUtils.rm_f DB_FILE
28
+
29
+ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_FILE
30
+ load('spec/schema.rb')
31
+ end
@@ -0,0 +1,37 @@
1
+ # Helper defines a active-model like model so tests can work in rails2/3 environments
2
+ begin
3
+ require 'active_model'
4
+ class ModelBase
5
+ include ActiveModel::Validations
6
+ end
7
+ rescue LoadError # can't load active_model, so rails < 3
8
+ require 'active_record'
9
+ class ModelBase < ActiveRecord::Base
10
+ end
11
+
12
+ require 'nulldb_rspec'
13
+
14
+ # Custom NullDB so can reconnect to regular adapter after running
15
+ module NullDB::CustomNullifiedDatabase
16
+ def self.included(spec_example)
17
+ spec_example.before :all do
18
+ ActiveRecord::Base.establish_connection :adapter => :nulldb, :schema => 'spec/schema.rb'
19
+ end
20
+
21
+ spec_example.before :each do
22
+ ActiveRecord::Base.connection.checkpoint!
23
+ end
24
+
25
+ spec_example.after :all do
26
+ ActiveRecord::Base.remove_connection
27
+
28
+ begin
29
+ connect_to_sqlite
30
+ rescue ActiveRecord::AdapterNotSpecified
31
+ # swallow reconnection when running in nulldb / lite environment
32
+ # without any app boot, and hence no db config for :test
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ MINIMUM_COVERAGE = 74.3
2
+
3
+ unless ENV['COVERAGE'] == 'off'
4
+ require 'simplecov'
5
+ require 'simplecov-rcov'
6
+ require 'coveralls'
7
+ Coveralls.wear!
8
+
9
+ SimpleCov.formatters = [
10
+ SimpleCov::Formatter::RcovFormatter,
11
+ Coveralls::SimpleCov::Formatter
12
+ ]
13
+ SimpleCov.start do
14
+ add_filter '/vendor/'
15
+ add_filter '/spec/'
16
+ add_group 'lib', 'lib'
17
+ end
18
+ SimpleCov.at_exit do
19
+ SimpleCov.result.format!
20
+ percent = SimpleCov.result.covered_percent
21
+ unless percent >= MINIMUM_COVERAGE
22
+ puts "Coverage must be above #{MINIMUM_COVERAGE}%. It is #{"%.2f" % percent}%"
23
+ Kernel.exit(1)
24
+ end
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,294 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_core_extensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michael Noack
8
+ - Allesandro Berardi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-06-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 2.3.0
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: 5.0.0
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 2.3.0
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: 5.0.0
34
+ - !ruby/object:Gem::Dependency
35
+ name: actionpack
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.3.0
41
+ - - "<"
42
+ - !ruby/object:Gem::Version
43
+ version: 5.0.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 2.3.0
51
+ - - "<"
52
+ - !ruby/object:Gem::Version
53
+ version: 5.0.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: bundler
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.3'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.3'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: activerecord-nulldb-adapter
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: simplecov-rcov
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: coveralls
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: sqlite3
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ - !ruby/object:Gem::Dependency
167
+ name: travis
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: make_resourceful
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ - !ruby/object:Gem::Dependency
195
+ name: inherited_resources
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ description: Set of extensions to core rails libraries.
209
+ email:
210
+ - support@travellink.com.au
211
+ executables: []
212
+ extensions: []
213
+ extra_rdoc_files: []
214
+ files:
215
+ - ".gitignore"
216
+ - ".hound.yml"
217
+ - ".rspec"
218
+ - ".ruby-style.yml"
219
+ - ".travis.yml"
220
+ - Gemfile
221
+ - LICENSE.txt
222
+ - README.md
223
+ - Rakefile
224
+ - gemfiles/rails3.gemfile
225
+ - gemfiles/rails4.gemfile
226
+ - lib/rails_core_extensions.rb
227
+ - lib/rails_core_extensions/action_controller_sortable.rb
228
+ - lib/rails_core_extensions/action_view_currency_extensions.rb
229
+ - lib/rails_core_extensions/action_view_extensions.rb
230
+ - lib/rails_core_extensions/action_view_has_many_extensions.rb
231
+ - lib/rails_core_extensions/activatable.rb
232
+ - lib/rails_core_extensions/active_model_extensions.rb
233
+ - lib/rails_core_extensions/active_record_cache_all_attributes.rb
234
+ - lib/rails_core_extensions/active_record_cloning.rb
235
+ - lib/rails_core_extensions/active_record_extensions.rb
236
+ - lib/rails_core_extensions/active_record_liquid_extensions.rb
237
+ - lib/rails_core_extensions/active_support_concern.rb
238
+ - lib/rails_core_extensions/breadcrumb.rb
239
+ - lib/rails_core_extensions/caches_action_without_host.rb
240
+ - lib/rails_core_extensions/concurrency.rb
241
+ - lib/rails_core_extensions/position_initializer.rb
242
+ - lib/rails_core_extensions/railtie.rb
243
+ - lib/rails_core_extensions/sortable.rb
244
+ - lib/rails_core_extensions/tasks/position_initializer.rake
245
+ - lib/rails_core_extensions/time_with_zone.rb
246
+ - lib/rails_core_extensions/version.rb
247
+ - rails_core_extensions.gemspec
248
+ - spec/action_controller_sortable_spec.rb
249
+ - spec/action_view_extensions_spec.rb
250
+ - spec/active_model_extensions_spec.rb
251
+ - spec/active_record_extensions_spec.rb
252
+ - spec/breadcrumb_spec.rb
253
+ - spec/concurrency_spec.rb
254
+ - spec/position_initializer_spec.rb
255
+ - spec/schema.rb
256
+ - spec/spec_helper.rb
257
+ - spec/spec_helper_model_base.rb
258
+ - spec/support/coverage_loader.rb
259
+ homepage: http://github.com/sealink/rails_core_extensions
260
+ licenses:
261
+ - MIT
262
+ metadata: {}
263
+ post_install_message:
264
+ rdoc_options: []
265
+ require_paths:
266
+ - lib
267
+ required_ruby_version: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ required_rubygems_version: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: '0'
277
+ requirements: []
278
+ rubyforge_project:
279
+ rubygems_version: 2.4.8
280
+ signing_key:
281
+ specification_version: 4
282
+ summary: Set of extensions to core rails libraries.
283
+ test_files:
284
+ - spec/action_controller_sortable_spec.rb
285
+ - spec/action_view_extensions_spec.rb
286
+ - spec/active_model_extensions_spec.rb
287
+ - spec/active_record_extensions_spec.rb
288
+ - spec/breadcrumb_spec.rb
289
+ - spec/concurrency_spec.rb
290
+ - spec/position_initializer_spec.rb
291
+ - spec/schema.rb
292
+ - spec/spec_helper.rb
293
+ - spec/spec_helper_model_base.rb
294
+ - spec/support/coverage_loader.rb