active_tools 0.0.12 → 0.0.13
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/lib/active_tools/active_record/polymorphic_conditions.rb +47 -0
- data/lib/active_tools/activerecord.rb +1 -0
- data/lib/active_tools/core_extension/concat_conditions.rb +19 -0
- data/lib/active_tools/core_extension/send_if.rb +17 -0
- data/lib/active_tools/core_extension/string_indent.rb +31 -0
- data/lib/active_tools/core_extension/string_round_with.rb +14 -0
- data/lib/active_tools/core_extension.rb +4 -0
- data/lib/active_tools/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0201fdba3d947f57909f521dcf3b02133bec417
|
4
|
+
data.tar.gz: 80157e9273b0359769f8008c3537d908b4a75885
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 692f52269b9f52d10e061d31821f695b896789b34d3b2fdfdb3014c389f7bd5c6a7e86f6a5223efb90b9db56c2ba4ae1ebe5808699e8b8b59361cd439cc5e2d8
|
7
|
+
data.tar.gz: 3be146c05980f3daaedf5beac48763afe9429dd35d4cd0883268ccb8b61c085ab493852a960a9cc0dd18f0bff2b418f69277690c34a04891c71aab77587064c8
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module ActiveTools
|
2
|
+
module ActiveRecord
|
3
|
+
module PolymorphicConditions
|
4
|
+
extend ::ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
def polymorphic_conditions(*args)
|
13
|
+
conditions = []
|
14
|
+
table = self.class.table_name
|
15
|
+
stack = args.extract_options!
|
16
|
+
sql_queries = stack.collect do |as_resource, hash|
|
17
|
+
resource_queries = hash.map do |name, find_options|
|
18
|
+
resource_class = name.to_s.classify.constantize
|
19
|
+
resource_table = resource_class.table_name
|
20
|
+
conditions << resource_class.name
|
21
|
+
if find_options[:conditions].present?
|
22
|
+
conditions += find_options[:conditions][1..-1]
|
23
|
+
end
|
24
|
+
joins_clause =
|
25
|
+
Array.wrap(find_options[:join]).collect do |association|
|
26
|
+
reflection = resource_class.reflections[association]
|
27
|
+
if reflection.macro == :belongs_to && reflection.options[:polymorphic] != true
|
28
|
+
"INNER JOIN #{reflection.klass.table_name} ON #{reflection.active_record.table_name}.#{reflection.foreign_key} = #{reflection.klass.table_name}.id"
|
29
|
+
elsif reflection.macro.in?([:has_many, :has_one]) && reflection.options[:as].nil?
|
30
|
+
"INNER JOIN #{reflection.klass.table_name} ON #{reflection.klass.table_name}.#{reflection.foreign_key} = #{reflection.active_record.table_name}.id"
|
31
|
+
end
|
32
|
+
end.compact.join(" ").strip
|
33
|
+
"(#{table}.#{as_resource}_type = ? AND EXISTS(#{["SELECT 1 FROM #{resource_table}#{joins_clause.left_indent(1) if joins_clause.present?} WHERE #{resource_table}.id = #{table}.#{as_resource}_id", find_options[:conditions].first].compact.join(" AND ")}))"
|
34
|
+
end
|
35
|
+
"CASE WHEN #{table}.#{as_resource}_type IS NOT NULL AND #{table}.#{as_resource}_id IS NOT NULL THEN #{resource_queries.join(" OR ")} ELSE TRUE END"
|
36
|
+
end
|
37
|
+
conditions.insert(0, "#{sql_queries.join(" OR ")}".send_if(:round_with, "(",")") {|q| q.present?})
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module OnLoadActiveRecord
|
44
|
+
include ActiveRecord::PolymorphicConditions
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -2,6 +2,7 @@ require 'active_tools/active_record/record_id'
|
|
2
2
|
require 'active_tools/active_record/adaptive_belongs_to'
|
3
3
|
require 'active_tools/active_record/custom_counter_cache'
|
4
4
|
require 'active_tools/active_record/with_permalink'
|
5
|
+
require 'active_tools/active_record/polymorphic_conditions'
|
5
6
|
|
6
7
|
module ActiveTools
|
7
8
|
module ActiveRecord
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActiveTools
|
2
|
+
module CoreExtension
|
3
|
+
|
4
|
+
module ConcatConditions
|
5
|
+
module ArrayExtension
|
6
|
+
def concat_as_condition_with(*args)
|
7
|
+
options = args.extract_options!
|
8
|
+
conditions = args.first||[]
|
9
|
+
operator = options[:operator]||"AND"
|
10
|
+
round = options[:round]||false
|
11
|
+
concat_array = [self[0],conditions[0]].compact
|
12
|
+
sql_clause = concat_array.present? ? concat_array.join(" #{operator} ") : nil
|
13
|
+
[(round && concat_array.size > 1) ? "(#{sql_clause})" : sql_clause, *((self[1..-1]||[])+(conditions[1..-1]||[]))]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
::Array.send(:include, ArrayExtension)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ActiveTools
|
2
|
+
module CoreExtension
|
3
|
+
|
4
|
+
module SendIf
|
5
|
+
module ObjectExtension
|
6
|
+
def send_if(*args, &block)
|
7
|
+
if yield(self) == true
|
8
|
+
send(*args)
|
9
|
+
else
|
10
|
+
self
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
::Object.send(:include, ObjectExtension)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module ActiveTools
|
2
|
+
module CoreExtension
|
3
|
+
|
4
|
+
module StringIndent
|
5
|
+
module StringExtension
|
6
|
+
def nobr
|
7
|
+
self.gsub(/\r/," ").gsub(/\n/," ")
|
8
|
+
end
|
9
|
+
|
10
|
+
def both_indent(*args)
|
11
|
+
indent_size = args.delete_at(0)
|
12
|
+
raise(TypeError, "Fixnum expected, #{indent_size.class} passed") unless indent_size.is_a?(Fixnum)
|
13
|
+
center(size+indent_size*2, *args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def left_indent(*args)
|
17
|
+
indent_size = args.delete_at(0)
|
18
|
+
raise(TypeError, "Fixnum expected, #{indent_size.class} passed") unless indent_size.is_a?(Fixnum)
|
19
|
+
rjust(size+indent_size, *args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def right_indent(*args)
|
23
|
+
indent_size = args.delete_at(0)
|
24
|
+
raise(TypeError, "Fixnum expected, #{indent_size.class} passed") unless indent_size.is_a?(Fixnum)
|
25
|
+
ljust(size+indent_size, *args)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
::String.send(:include, StringExtension)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module ActiveTools
|
2
|
+
module CoreExtension
|
3
|
+
|
4
|
+
module StringRoundWith
|
5
|
+
module StringExtension
|
6
|
+
def round_with(first, last = nil)
|
7
|
+
last ||= first
|
8
|
+
insert(0, first.to_s||"").insert(-1, last.to_s||"")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
::String.send(:include, StringExtension)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,9 +1,13 @@
|
|
1
|
+
require 'active_tools/core_extension/send_if'
|
1
2
|
require 'active_tools/core_extension/deep_copy'
|
2
3
|
require 'active_tools/core_extension/deep_merge'
|
3
4
|
require 'active_tools/core_extension/hashup'
|
4
5
|
require 'active_tools/core_extension/merge_hashup'
|
5
6
|
require 'active_tools/core_extension/kabuki'
|
6
7
|
require 'active_tools/core_extension/method_digger'
|
8
|
+
require 'active_tools/core_extension/concat_conditions'
|
9
|
+
require 'active_tools/core_extension/string_indent'
|
10
|
+
require 'active_tools/core_extension/string_round_with'
|
7
11
|
|
8
12
|
module ActiveTools
|
9
13
|
module CoreExtension
|
data/lib/active_tools/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valery Kvon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/active_tools/active_record/adaptive_belongs_to/adapter.rb
|
75
75
|
- lib/active_tools/active_record/custom_counter_cache.rb
|
76
76
|
- lib/active_tools/active_record/custom_counter_cache/instance_methods.rb
|
77
|
+
- lib/active_tools/active_record/polymorphic_conditions.rb
|
77
78
|
- lib/active_tools/active_record/record_id.rb
|
78
79
|
- lib/active_tools/active_record/with_permalink.rb
|
79
80
|
- lib/active_tools/activemodel.rb
|
@@ -81,6 +82,7 @@ files:
|
|
81
82
|
- lib/active_tools/activesupport.rb
|
82
83
|
- lib/active_tools/bundle.rb
|
83
84
|
- lib/active_tools/core_extension.rb
|
85
|
+
- lib/active_tools/core_extension/concat_conditions.rb
|
84
86
|
- lib/active_tools/core_extension/deep_copy.rb
|
85
87
|
- lib/active_tools/core_extension/deep_merge.rb
|
86
88
|
- lib/active_tools/core_extension/hashup.rb
|
@@ -90,6 +92,9 @@ files:
|
|
90
92
|
- lib/active_tools/core_extension/kabuki/zip.rb
|
91
93
|
- lib/active_tools/core_extension/merge_hashup.rb
|
92
94
|
- lib/active_tools/core_extension/method_digger.rb
|
95
|
+
- lib/active_tools/core_extension/send_if.rb
|
96
|
+
- lib/active_tools/core_extension/string_indent.rb
|
97
|
+
- lib/active_tools/core_extension/string_round_with.rb
|
93
98
|
- lib/active_tools/engine.rb
|
94
99
|
- lib/active_tools/misc.rb
|
95
100
|
- lib/active_tools/misc/input_source.rb
|