yaml_conditions 0.0.0.3 → 0.0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -2
- data/Rakefile +1 -1
- data/lib/yaml/conditions.rb +1 -2
- data/lib/yaml/query_builder.rb +35 -6
- data/spec/cases/orms/active_record/version_2_delayed_job_spec.rb +10 -1
- data/tasks/yaml_conditions.rake +1 -1
- data/yaml_conditions.gemspec +2 -2
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -39,6 +39,8 @@ Just to give you a little background, I build this gem/plugin just to filter my
|
|
39
39
|
|
40
40
|
So, I added some custom magic for filtering Delayed::Job objects, like this:
|
41
41
|
|
42
|
+
Delayed::Job.find(:first, :yaml_conditions => { :class => Delayed::PerformableMethod, :args => [ QuoteRequest.find(435), Supplier.find(57) ] })
|
43
|
+
|
42
44
|
Delayed::Job.first(:yaml_conditions => { :handler => { :class => Delayed::PerformableMethod, :method => :new_registration, :args => [ User.find(1), '*', '*' ] } })
|
43
45
|
|
44
46
|
Delayed::Job.first(:yaml_conditions => { :handler => { :args => [ { :user => { :last_name => 'Marcelo', :address => { :city => 'Rio Negro' } } } ] } })
|
@@ -47,8 +49,8 @@ As you probably realize, '*' is interpreted as a wildcard.
|
|
47
49
|
|
48
50
|
If :handler is not provided as top level key of the hash, then the hash will be wrapped inside a handler key. For example, the following queries return the same results:
|
49
51
|
|
50
|
-
Delayed::Job.last(:yaml_conditions => { :handler => { :class => SimpleJob, :
|
51
|
-
Delayed::Job.last(:yaml_conditions => { :class => SimpleJob, :
|
52
|
+
Delayed::Job.last(:yaml_conditions => { :handler => { :class => SimpleJob, :name => 'job_name', :kind => 'some_kind' }})
|
53
|
+
Delayed::Job.last(:yaml_conditions => { :class => SimpleJob , :name => 'job_name', :kind => 'some_kind' })
|
52
54
|
|
53
55
|
This wrapping magic it's only available for Delayed::Job for now.
|
54
56
|
|
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ require 'echoe'
|
|
3
3
|
|
4
4
|
# PACKAGING ============================================================
|
5
5
|
|
6
|
-
Echoe.new('yaml_conditions', '0.0.0.
|
6
|
+
Echoe.new('yaml_conditions', '0.0.0.4') do |p|
|
7
7
|
p.description = ''
|
8
8
|
p.url = 'http://github.com/marklazz/yaml_conditions'
|
9
9
|
p.author = 'Marcelo Giorgi'
|
data/lib/yaml/conditions.rb
CHANGED
data/lib/yaml/query_builder.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Yaml
|
2
2
|
module QueryBuilder
|
3
3
|
|
4
|
+
ParseObjectFromYaml = /\!ruby\/\w+\:([^\s]+)/
|
5
|
+
|
4
6
|
def __include_db_adapter_if_necessary__
|
5
7
|
adapter_name = self.connection.adapter_name
|
6
8
|
adapter_capitalized = adapter_name.upcase[0].chr + adapter_name.downcase[1..-1]
|
@@ -56,7 +58,16 @@ module Yaml
|
|
56
58
|
end
|
57
59
|
|
58
60
|
def __check_yaml_nested_hierarchy_on_list__(value, yaml_conditions)
|
59
|
-
return false if !value.is_a?(Array)
|
61
|
+
return false if !value.is_a?(Array)
|
62
|
+
yaml_conditions = if value.length != yaml_conditions.length
|
63
|
+
if value.length > yaml_conditions.length
|
64
|
+
yaml_conditions + (['*'] * (value.length - yaml_conditions.length))
|
65
|
+
else
|
66
|
+
yaml_conditions[0..-1+(value.length-yaml_conditions.length)]
|
67
|
+
end
|
68
|
+
else
|
69
|
+
yaml_conditions
|
70
|
+
end
|
60
71
|
yaml_conditions.zip(value).inject(true) do |result, (cond, nested_value)|
|
61
72
|
result &= __check_yaml_nested_hierarchy__(nested_value, cond)
|
62
73
|
end
|
@@ -99,14 +110,32 @@ module Yaml
|
|
99
110
|
end
|
100
111
|
|
101
112
|
def __yaml_load_object_recursively__(object)
|
113
|
+
return nil if object.nil?
|
114
|
+
return object.map { |v| __yaml_load_object_recursively__(v) } if object.is_a?(Array)
|
115
|
+
if object.is_a?(Hash)
|
116
|
+
return object.keys.inject({}) do |result, k|
|
117
|
+
result[__yaml_load_object_recursively__(k).to_sym] = __yaml_load_object_recursively__(object[k])
|
118
|
+
result
|
119
|
+
end
|
120
|
+
elsif object.is_a?(Symbol)
|
121
|
+
return object
|
122
|
+
end
|
102
123
|
yaml_object = __yaml_deserialize__(object)
|
103
|
-
if yaml_object.respond_to?(:value) && yaml_object.respond_to?(:type_id) && yaml_object.type_id == 'struct'
|
104
|
-
yaml_object = yaml_object.value
|
105
|
-
|
106
|
-
|
124
|
+
if yaml_object.is_a?(Struct) || (yaml_object.respond_to?(:value) && yaml_object.respond_to?(:type_id) && yaml_object.type_id == 'struct')
|
125
|
+
yaml_object = yaml_object.respond_to?(:value) ? yaml_object.value : yaml_object
|
126
|
+
keys = yaml_object.respond_to?(:members) ? yaml_object.members : yaml_object.keys
|
127
|
+
yaml_object = keys.inject(yaml_object) do |yobject, key|
|
128
|
+
value = yobject.respond_to?(key.to_sym) ? yobject.send(key.to_sym) : yobject[key]
|
129
|
+
yobject[key] = begin
|
130
|
+
if value.is_a?(Array) || value.is_a?(String)
|
131
|
+
__yaml_load_object_recursively__(value)
|
132
|
+
else
|
133
|
+
value
|
134
|
+
end
|
135
|
+
end
|
107
136
|
yobject
|
108
137
|
end
|
109
|
-
yaml_object[:class]
|
138
|
+
yaml_object[:class]=(yaml_object.class.to_s) unless yaml_object.is_a?(Struct)
|
110
139
|
yaml_object
|
111
140
|
else
|
112
141
|
yaml_object
|
@@ -10,7 +10,6 @@ rescue LoadError
|
|
10
10
|
# not installed
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
13
|
describe ::Orms::ActiveRecordVersion2 do
|
15
14
|
|
16
15
|
before do
|
@@ -28,6 +27,16 @@ describe ::Orms::ActiveRecordVersion2 do
|
|
28
27
|
|
29
28
|
subject { Delayed::Job.first(:yaml_conditions => @yaml_conditions) }
|
30
29
|
|
30
|
+
context 'test filter by class' do
|
31
|
+
|
32
|
+
before do
|
33
|
+
@yaml_conditions = { :class => Delayed::PerformableMethod }
|
34
|
+
end
|
35
|
+
|
36
|
+
it { should == @job }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
31
40
|
context 'test filter by args' do
|
32
41
|
|
33
42
|
before do
|
data/tasks/yaml_conditions.rake
CHANGED
data/yaml_conditions.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{yaml_conditions}
|
5
|
-
s.version = "0.0.0.
|
5
|
+
s.version = "0.0.0.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Marcelo Giorgi"]
|
9
|
-
s.date = %q{2010-11-
|
9
|
+
s.date = %q{2010-11-28}
|
10
10
|
s.default_executable = %q{console.sh}
|
11
11
|
s.description = %q{}
|
12
12
|
s.email = %q{marklazz.uy@gmail.com}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml_conditions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 71
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 0.0.0.
|
10
|
+
- 4
|
11
|
+
version: 0.0.0.4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Marcelo Giorgi
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-11-
|
19
|
+
date: 2010-11-28 00:00:00 -02:00
|
20
20
|
default_executable: console.sh
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|