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