qor_dsl 0.2.1 → 0.3.0
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.
- data/README.md +1 -1
- data/example/gemfile.rb +2 -2
- data/lib/qor_dsl/config.rb +1 -1
- data/lib/qor_dsl/node.rb +68 -54
- data/lib/qor_dsl.rb +5 -1
- data/qor_dsl.gemspec +1 -1
- data/test/layout_test.rb +44 -16
- metadata +2 -8
data/README.md
CHANGED
data/example/gemfile.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'qor_dsl'
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/qor_dsl'))
|
4
4
|
|
5
5
|
class Gemfile
|
6
6
|
include Qor::Dsl
|
@@ -31,7 +31,7 @@ Gemfile.find(:gem) do |n|
|
|
31
31
|
!!n.options[:git].nil?
|
32
32
|
end
|
33
33
|
|
34
|
-
Gemfile.
|
34
|
+
Gemfile.first(:group, 'development').find(:gem)
|
35
35
|
|
36
36
|
Gemfile.deep_find(:gem)
|
37
37
|
Gemfile.deep_find(:gem) do |n|
|
data/lib/qor_dsl/config.rb
CHANGED
data/lib/qor_dsl/node.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Qor
|
2
2
|
module Dsl
|
3
3
|
class Node
|
4
|
-
attr_accessor :name, :config, :parent, :children, :data, :
|
4
|
+
attr_accessor :name, :config, :parent, :children, :data, :block, :all_nodes, :dummy
|
5
5
|
|
6
6
|
def initialize(name=nil, options={})
|
7
7
|
self.name = name
|
@@ -9,6 +9,23 @@ module Qor
|
|
9
9
|
self.dummy = options[:dummy]
|
10
10
|
end
|
11
11
|
|
12
|
+
def node(type, options={}, &blk)
|
13
|
+
config.node(type, options, &blk)
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_config(config)
|
17
|
+
self.config = config
|
18
|
+
config.__node = self
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_child(child)
|
22
|
+
child.parent = self
|
23
|
+
children << child
|
24
|
+
root.all_nodes ||= []
|
25
|
+
root.all_nodes << child
|
26
|
+
end
|
27
|
+
|
28
|
+
|
12
29
|
## Node Config
|
13
30
|
def config_name
|
14
31
|
config.__name
|
@@ -18,71 +35,68 @@ module Qor
|
|
18
35
|
config.__options || {} rescue {}
|
19
36
|
end
|
20
37
|
|
21
|
-
def child_config(type)
|
22
|
-
config.__children[type] || nil
|
23
|
-
end
|
24
38
|
|
25
|
-
|
26
|
-
|
39
|
+
## Node
|
40
|
+
def parents
|
41
|
+
parent ? [parent, parent.parents].flatten : []
|
27
42
|
end
|
28
43
|
|
29
|
-
def
|
30
|
-
|
44
|
+
def children
|
45
|
+
@children ||= []
|
46
|
+
@children = @children.flatten.compact
|
47
|
+
@children
|
31
48
|
end
|
32
49
|
|
33
|
-
def
|
34
|
-
|
50
|
+
def root
|
51
|
+
parent ? parent.root : self
|
35
52
|
end
|
36
53
|
|
37
54
|
def root?
|
38
55
|
root == self
|
39
56
|
end
|
40
57
|
|
41
|
-
def
|
42
|
-
|
58
|
+
def dummy?
|
59
|
+
!!dummy
|
43
60
|
end
|
44
61
|
|
45
|
-
def
|
46
|
-
|
62
|
+
def is_node?(node_type=nil, name_str=nil)
|
63
|
+
(node_type.nil? || (config_name.to_s == node_type.to_s)) && (name_str.nil? || (name.to_s == name_str.to_s))
|
47
64
|
end
|
48
65
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return config_options[:default_options] || {} if dummy?
|
54
|
-
{}
|
66
|
+
|
67
|
+
## Node Data
|
68
|
+
def default_value
|
69
|
+
config_options[:default_value]
|
55
70
|
end
|
56
71
|
|
57
72
|
def value
|
58
|
-
((config.__children.size > 0 || block.nil?) ? (options[:value] || name) : block.call) ||
|
59
|
-
(dummy? ? config_options[:default_value] : nil)
|
73
|
+
((config.__children.size > 0 || block.nil?) ? (options[:value] || name) : block.call) || default_value
|
60
74
|
end
|
61
75
|
|
62
|
-
def
|
63
|
-
|
76
|
+
def default_options
|
77
|
+
config_options[:default_options]
|
64
78
|
end
|
65
79
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
80
|
+
def options
|
81
|
+
return data[-1] if data.is_a?(Array) && data[-1].is_a?(Hash)
|
82
|
+
return data if data.is_a?(Hash)
|
83
|
+
return name if name.is_a?(Hash)
|
84
|
+
return default_options || {}
|
69
85
|
end
|
70
86
|
|
71
|
-
def
|
72
|
-
|
87
|
+
def default_block
|
88
|
+
config_options[:default_block]
|
73
89
|
end
|
74
90
|
|
75
|
-
def
|
76
|
-
@
|
77
|
-
@children = @children.flatten.compact
|
78
|
-
@children
|
91
|
+
def block
|
92
|
+
@block || default_block
|
79
93
|
end
|
80
94
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
95
|
+
|
96
|
+
## Query
|
97
|
+
def first(type=nil, name=nil, &block)
|
98
|
+
selected_children = find(type, name, &block)
|
99
|
+
selected_children.is_a?(Array) ? selected_children[0] : selected_children
|
86
100
|
end
|
87
101
|
|
88
102
|
def deep_find(type=nil, name=nil, &block)
|
@@ -97,28 +111,15 @@ module Qor
|
|
97
111
|
end
|
98
112
|
|
99
113
|
results = parent.find(type, name, &block) if results.length == 0 && child_config_options(type)[:inherit]
|
100
|
-
|
101
|
-
|
102
|
-
return results[0] if !name.nil? && results.is_a?(Array) && results.length == 1
|
103
|
-
|
104
|
-
results
|
105
|
-
end
|
106
|
-
|
107
|
-
def first(type=nil, name=nil, &block)
|
108
|
-
selected_children = find(type, name, &block)
|
109
|
-
selected_children.is_a?(Array) ? selected_children[0] : selected_children
|
114
|
+
process_find_results(results, type)
|
110
115
|
end
|
111
116
|
|
112
|
-
## Inspect
|
113
|
-
def inspect_name
|
114
|
-
"{#{config_name}: #{name || 'nil'}}"
|
115
|
-
end
|
116
117
|
|
117
|
-
def
|
118
|
+
def inspect
|
118
119
|
obj_options = {
|
119
120
|
'name' => name,
|
120
|
-
'parent' => parent && parent.inspect_name,
|
121
121
|
'config' => config_name,
|
122
|
+
'parent' => parent && parent.inspect_name,
|
122
123
|
'children' => children.map(&:inspect_name),
|
123
124
|
'data' => data,
|
124
125
|
'block' => block
|
@@ -126,6 +127,7 @@ module Qor
|
|
126
127
|
Qor::Dsl.inspect_object(self, obj_options)
|
127
128
|
end
|
128
129
|
|
130
|
+
|
129
131
|
private
|
130
132
|
def process_find_results(results, type)
|
131
133
|
if results.length == 0 &&
|
@@ -134,6 +136,18 @@ module Qor
|
|
134
136
|
end
|
135
137
|
results
|
136
138
|
end
|
139
|
+
|
140
|
+
def child_config(type)
|
141
|
+
config.__children[type] || nil
|
142
|
+
end
|
143
|
+
|
144
|
+
def child_config_options(type)
|
145
|
+
child_config(type).__options || {} rescue {}
|
146
|
+
end
|
147
|
+
|
148
|
+
def inspect_name
|
149
|
+
"{#{config_name}: #{name || 'nil'}}"
|
150
|
+
end
|
137
151
|
end
|
138
152
|
end
|
139
153
|
end
|
data/lib/qor_dsl.rb
CHANGED
@@ -11,7 +11,11 @@ module Qor
|
|
11
11
|
|
12
12
|
def self.inspect_object(obj, options)
|
13
13
|
options = options.inject({}) do |summary, value|
|
14
|
-
|
14
|
+
unless [:nil?, :empty?, :blank?].any? { |method|
|
15
|
+
value[1].respond_to?(method) && value[1].send(method)
|
16
|
+
}
|
17
|
+
summary[value[0]] = value[1]
|
18
|
+
end
|
15
19
|
summary
|
16
20
|
end
|
17
21
|
|
data/qor_dsl.gemspec
CHANGED
data/test/layout_test.rb
CHANGED
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'configure')
|
|
3
3
|
|
4
4
|
describe Layout do
|
5
5
|
def many_times
|
6
|
-
threads =
|
6
|
+
threads = 100.times.map do |t|
|
7
7
|
Thread.new do
|
8
8
|
yield
|
9
9
|
end
|
@@ -19,11 +19,11 @@ describe Layout do
|
|
19
19
|
Layout::Configuration.find(:template).length.must_equal 2
|
20
20
|
Layout::Configuration.deep_find(:template).length.must_equal 3
|
21
21
|
# :settings, :meta, :meta, :meta, :meta, :context, :template
|
22
|
-
Layout::Configuration.
|
22
|
+
Layout::Configuration.first(:gadget, :quick_buy).deep_find().length.must_equal 7
|
23
23
|
|
24
24
|
# Find by name
|
25
|
-
Layout::Configuration.
|
26
|
-
Layout::Configuration.deep_find(:desc, "From Google").value.must_equal "From Google"
|
25
|
+
Layout::Configuration.first(:gadget, 'quick_buy').name.must_equal :quick_buy
|
26
|
+
Layout::Configuration.deep_find(:desc, "From Google")[0].value.must_equal "From Google"
|
27
27
|
|
28
28
|
# Find by block
|
29
29
|
Layout::Configuration.first(:template) do |n|
|
@@ -31,11 +31,11 @@ describe Layout do
|
|
31
31
|
end.value.must_equal 'Hello World2'
|
32
32
|
|
33
33
|
Layout::Configuration.deep_find(:desc) do |n|
|
34
|
-
n.parents.include?(Layout::Configuration.
|
34
|
+
n.parents.include?(Layout::Configuration.first(:action, :google))
|
35
35
|
end[0].value.must_equal 'From Google'
|
36
36
|
|
37
37
|
# Inherit
|
38
|
-
Layout::Configuration.
|
38
|
+
Layout::Configuration.first(:gadget, :product_link).find(:template)[0].value.must_equal "Hello World"
|
39
39
|
|
40
40
|
# Store any data
|
41
41
|
Layout::Configuration.first(:template).data.must_equal ["v1", {:since => "09:00", :to => "12:00"}]
|
@@ -44,12 +44,10 @@ describe Layout do
|
|
44
44
|
Layout::Configuration.find(:template)[1].options.must_equal({:since => "13:00", :to => "18:00"})
|
45
45
|
|
46
46
|
# Parents
|
47
|
-
Layout::Configuration.
|
47
|
+
Layout::Configuration.first(:gadget, :quick_buy).first(:template).parents.count.must_equal 2
|
48
48
|
|
49
49
|
# Value for node
|
50
|
-
Layout::Configuration.
|
51
|
-
|
52
|
-
Layout::Configuration.find(:gadget, :quick_buy).value.must_equal :quick_buy
|
50
|
+
Layout::Configuration.first(:gadget, :quick_buy).value.must_equal :quick_buy
|
53
51
|
end
|
54
52
|
# More is coming... (multi, alias_node)
|
55
53
|
end
|
@@ -57,7 +55,7 @@ describe Layout do
|
|
57
55
|
it "test node helper" do
|
58
56
|
many_times do
|
59
57
|
Layout::Configuration.load('test/layout.rb', :force => true)
|
60
|
-
node = Layout::Configuration.
|
58
|
+
node = Layout::Configuration.first(:gadget, :quick_buy)
|
61
59
|
node.is_node?(:gadget).must_equal true
|
62
60
|
node.is_node?(:gadget, 'quick_buy').must_equal true
|
63
61
|
node.is_node?(:template).must_equal false
|
@@ -104,12 +102,42 @@ describe Layout do
|
|
104
102
|
end
|
105
103
|
end
|
106
104
|
|
107
|
-
it "default value
|
105
|
+
it "default value" do
|
108
106
|
many_times do
|
109
|
-
Layout::Configuration.load(
|
110
|
-
|
111
|
-
|
112
|
-
|
107
|
+
config = Layout::Configuration.load(nil, :force => true) do
|
108
|
+
layout "new" do
|
109
|
+
description
|
110
|
+
end
|
111
|
+
end
|
112
|
+
# default value
|
113
|
+
config.first(:layout).first(:description).value.must_equal 'TODO'
|
114
|
+
config.first(:layout).first(:description).dummy?.must_equal false
|
115
|
+
|
116
|
+
# default block
|
117
|
+
config.first(:layout).first(:description_block).value.must_equal 'FIXME'
|
118
|
+
refute_nil config.first(:layout).first(:description_block).block
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
it "find dummy nodes" do
|
123
|
+
many_times do
|
124
|
+
config = Layout::Configuration.load(nil, :force => true) do
|
125
|
+
layout "new"
|
126
|
+
end
|
127
|
+
config.first(:layout).first(:description).value.must_equal 'TODO'
|
128
|
+
config.first(:layout).first(:description).dummy?.must_equal true
|
129
|
+
config.first(:layout).find(:description).count.must_equal 1
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
it "name as options" do
|
134
|
+
many_times do
|
135
|
+
config = Layout::Configuration.load(nil, :force => true) do
|
136
|
+
layout "new" do
|
137
|
+
description :hello => true
|
138
|
+
end
|
139
|
+
end
|
140
|
+
config.first(:layout).first(:description).options.must_equal({:hello => true})
|
113
141
|
end
|
114
142
|
end
|
115
143
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qor_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-08 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Qor DSL is designed to be as flexible as possible while helping you to
|
15
15
|
create your DSLs.
|
@@ -46,18 +46,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
46
46
|
- - ! '>='
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
|
-
segments:
|
50
|
-
- 0
|
51
|
-
hash: 2719584306054087370
|
52
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
51
|
requirements:
|
55
52
|
- - ! '>='
|
56
53
|
- !ruby/object:Gem::Version
|
57
54
|
version: '0'
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
hash: 2719584306054087370
|
61
55
|
requirements: []
|
62
56
|
rubyforge_project:
|
63
57
|
rubygems_version: 1.8.24
|