ro 1.2.0 → 1.3.1
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 +8 -8
- data/lib/ro.rb +2 -1
- data/lib/ro/model.rb +39 -7
- data/lib/ro/node.rb +78 -8
- data/lib/ro/node/list.rb +9 -73
- data/lib/ro/pagination.rb +54 -0
- data/ro.gemspec +2 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWFhMGNiNGMwNGRjYWYxZDg1NjgyMzgxMDQ4ZDIwZmY4Y2VjMjk5Nw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODUyOWE1NGMwZTNiZmJkZWU3ODI5MzU2NDUwYWZkZDMzYTZjZDAwMg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmQ2YjQwMmIyODQwOTA1OWM3YTQwYzhhNTVjOWM0OTBkOGE1YTZhNmViZWU3
|
10
|
+
ZGU0ZDZkOGYwMTRmYTJiMTQ3ZGJlYmI1Y2RkOTQyYTQxNzA4ZDBiZTY2YTQy
|
11
|
+
MDhiZjIzNDNkNjM3ZWNlYWUyYzA4ZmIwNTU4YTljZjVmZTlkODc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzY5MTQ4ZjNhOWExMTMyNGI3MTE5NzIzYTAxY2EzMTIxYjc1NjdkYzgwYjFm
|
14
|
+
NGU2MjA5Mzc0OTFmMDIyNTYyMmRkYWFhOGFmMDJiZmUwYmQ0MmM3ZTNlNDAz
|
15
|
+
MDU4MTExMzg1Yjg3NTUyZjhkNzUzOTZhNjg0MjI1ZmVhY2VkOWM=
|
data/lib/ro.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
#
|
12
12
|
module Ro
|
13
|
-
Version = '1.
|
13
|
+
Version = '1.3.1' unless defined?(Version)
|
14
14
|
|
15
15
|
def version
|
16
16
|
Ro::Version
|
@@ -311,6 +311,7 @@
|
|
311
311
|
root.rb
|
312
312
|
lock.rb
|
313
313
|
git.rb
|
314
|
+
pagination.rb
|
314
315
|
|
315
316
|
cache.rb
|
316
317
|
|
data/lib/ro/model.rb
CHANGED
@@ -58,23 +58,55 @@ module Ro
|
|
58
58
|
all.last
|
59
59
|
end
|
60
60
|
|
61
|
-
def Model.find(
|
62
|
-
|
61
|
+
def Model.find(id)
|
62
|
+
re = %r/#{ id.to_s.gsub(/[-_]/, '[-_]') }/i
|
63
|
+
all.detect{|model| model.id.to_s == id.to_s}
|
63
64
|
end
|
64
65
|
|
65
|
-
def Model.
|
66
|
-
|
66
|
+
def Model.[](id)
|
67
|
+
find(id)
|
68
|
+
end
|
69
|
+
|
70
|
+
def Model.method_missing(method, *args, &block)
|
71
|
+
id = method
|
72
|
+
model = find(id)
|
73
|
+
return model if model
|
74
|
+
super
|
67
75
|
end
|
68
76
|
|
69
77
|
def Model.models_for(result)
|
70
78
|
case result
|
71
79
|
when Array
|
72
|
-
Array(result).flatten.compact.map{|element| new(element)}
|
80
|
+
List.for(Array(result).flatten.compact.map{|element| new(element)})
|
73
81
|
else
|
74
82
|
new(result)
|
75
83
|
end
|
76
84
|
end
|
77
85
|
|
86
|
+
def Model.paginate(*args, &block)
|
87
|
+
all.paginate(*args, &block)
|
88
|
+
end
|
89
|
+
|
90
|
+
class List < ::Array
|
91
|
+
include Pagination
|
92
|
+
|
93
|
+
def List.for(*args, &block)
|
94
|
+
new(*args, &block)
|
95
|
+
end
|
96
|
+
|
97
|
+
def select(*args, &block)
|
98
|
+
List.for super
|
99
|
+
end
|
100
|
+
|
101
|
+
def detect(*args, &block)
|
102
|
+
super
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def List(*args, &block)
|
107
|
+
List.new(*args, &block)
|
108
|
+
end
|
109
|
+
|
78
110
|
#
|
79
111
|
attr_accessor(:node)
|
80
112
|
|
@@ -144,7 +176,7 @@ if __FILE__ == $0
|
|
144
176
|
p ara.id
|
145
177
|
p ara.first_name
|
146
178
|
|
147
|
-
|
148
|
-
|
179
|
+
require 'pry'
|
180
|
+
binding.pry
|
149
181
|
|
150
182
|
end
|
data/lib/ro/node.rb
CHANGED
@@ -2,14 +2,14 @@ module Ro
|
|
2
2
|
class Node
|
3
3
|
fattr :root
|
4
4
|
fattr :path
|
5
|
-
fattr :name
|
6
5
|
fattr :type
|
7
6
|
fattr :loaded
|
8
7
|
fattr :fields
|
9
8
|
|
10
9
|
def initialize(path)
|
11
10
|
@path = Ro.realpath(path.to_s)
|
12
|
-
@
|
11
|
+
@id = File.basename(@path)
|
12
|
+
@slug = Slug.for(@id)
|
13
13
|
@type = File.basename(File.dirname(@path))
|
14
14
|
@root = Ro::Root.new(File.dirname(File.dirname(@path)))
|
15
15
|
@loaded = false
|
@@ -19,15 +19,47 @@ module Ro
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def id
|
22
|
-
@
|
22
|
+
@id
|
23
|
+
end
|
24
|
+
|
25
|
+
def _id
|
26
|
+
@id
|
27
|
+
end
|
28
|
+
|
29
|
+
def type
|
30
|
+
attributes[:type] || @type
|
31
|
+
end
|
32
|
+
|
33
|
+
def _type
|
34
|
+
@type
|
35
|
+
end
|
36
|
+
|
37
|
+
def path
|
38
|
+
attributes[:path] || @path
|
39
|
+
end
|
40
|
+
|
41
|
+
def _path
|
42
|
+
@path
|
23
43
|
end
|
24
44
|
|
25
45
|
def slug
|
26
|
-
attributes[:slug] ||
|
46
|
+
attributes[:slug] || @slug
|
47
|
+
end
|
48
|
+
|
49
|
+
def _slug
|
50
|
+
@slug
|
27
51
|
end
|
28
52
|
|
29
53
|
def identifier
|
30
|
-
"#{
|
54
|
+
"#{ _type }/#{ _id }"
|
55
|
+
end
|
56
|
+
|
57
|
+
def hash
|
58
|
+
identifier.hash
|
59
|
+
end
|
60
|
+
|
61
|
+
def ==(other)
|
62
|
+
attributes == other.attributes
|
31
63
|
end
|
32
64
|
|
33
65
|
def inspect
|
@@ -67,13 +99,43 @@ module Ro
|
|
67
99
|
end
|
68
100
|
|
69
101
|
def assets
|
70
|
-
asset_paths.map do |
|
71
|
-
|
102
|
+
asset_paths.map do |path|
|
103
|
+
name = path.sub(asset_dir + "/", "")
|
104
|
+
url = url_for(name)
|
105
|
+
Asset.new(name, :path => path, :url => url)
|
72
106
|
end
|
73
107
|
end
|
74
108
|
|
75
109
|
def asset_urls
|
76
|
-
|
110
|
+
assets.map(&:url)
|
111
|
+
end
|
112
|
+
|
113
|
+
class Asset < ::String
|
114
|
+
fattr(:path)
|
115
|
+
fattr(:url)
|
116
|
+
|
117
|
+
def initialize(name, options = {})
|
118
|
+
super(name)
|
119
|
+
ensure
|
120
|
+
options = Map.for(options)
|
121
|
+
|
122
|
+
Asset.fattrs.each do |attr|
|
123
|
+
if options.has_key?(attr)
|
124
|
+
value = options[attr]
|
125
|
+
send(attr, value)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def name
|
131
|
+
self
|
132
|
+
end
|
133
|
+
|
134
|
+
IMAGE_RE = %r/[.](jpg|jpeg|png|gif|tif|tiff)$/i
|
135
|
+
|
136
|
+
def image?
|
137
|
+
!!(self =~ IMAGE_RE)
|
138
|
+
end
|
77
139
|
end
|
78
140
|
|
79
141
|
def url_for(*args, &block)
|
@@ -171,6 +233,10 @@ module Ro
|
|
171
233
|
def attributes
|
172
234
|
_load{ @attributes }
|
173
235
|
end
|
236
|
+
|
237
|
+
def attributes=(attributes)
|
238
|
+
@attributes = attributes
|
239
|
+
end
|
174
240
|
|
175
241
|
def instance_eval(*args, &block)
|
176
242
|
_load{ super }
|
@@ -224,6 +290,10 @@ module Ro
|
|
224
290
|
attributes
|
225
291
|
end
|
226
292
|
|
293
|
+
def load!(&block)
|
294
|
+
_load(&block)
|
295
|
+
end
|
296
|
+
|
227
297
|
def _load(&block)
|
228
298
|
unless @loaded
|
229
299
|
if @loading
|
data/lib/ro/node/list.rb
CHANGED
@@ -57,12 +57,12 @@ module Ro
|
|
57
57
|
when String, Symbol
|
58
58
|
if @type.nil?
|
59
59
|
type = key.to_s
|
60
|
-
list = select{|node| type == node.
|
60
|
+
list = select{|node| type == node._type}
|
61
61
|
list.type = type
|
62
62
|
list
|
63
63
|
else
|
64
|
-
|
65
|
-
detect{|node|
|
64
|
+
id = Slug.for(key.to_s)
|
65
|
+
detect{|node| id == node.id}
|
66
66
|
end
|
67
67
|
else
|
68
68
|
super(*args, &block)
|
@@ -82,9 +82,9 @@ module Ro
|
|
82
82
|
select{|node| node.instance_eval(&block)}
|
83
83
|
|
84
84
|
when !args.empty?
|
85
|
-
|
86
|
-
index =
|
87
|
-
select{|node| index[node.
|
85
|
+
ids = args.flatten.compact.uniq.map{|arg| Slug.for(arg.to_s)}
|
86
|
+
index = ids.inject(Hash.new){|h,id| h.update(id => id)}
|
87
|
+
select{|node| index[node.id]}
|
88
88
|
|
89
89
|
else
|
90
90
|
raise ArgumentError.new
|
@@ -99,8 +99,8 @@ module Ro
|
|
99
99
|
detect{|node| node.instance_eval(&block)}
|
100
100
|
|
101
101
|
when args.size == 1
|
102
|
-
|
103
|
-
detect{|node| node.
|
102
|
+
id = args.first.to_s
|
103
|
+
detect{|node| node.id == id}
|
104
104
|
|
105
105
|
when args.size > 1
|
106
106
|
where(*args, &block)
|
@@ -114,71 +114,7 @@ module Ro
|
|
114
114
|
[root, type].compact.join('/')
|
115
115
|
end
|
116
116
|
|
117
|
-
|
118
|
-
options = Map.options_for!(args)
|
119
|
-
|
120
|
-
ensure_pagination_state!
|
121
|
-
|
122
|
-
page = Integer(args.shift || options[:page] || @page)
|
123
|
-
per = Integer(args.shift || options[:per] || options[:size] || @per)
|
124
|
-
|
125
|
-
@page = [page.abs, 1].max
|
126
|
-
@per = [per.abs, 1].max
|
127
|
-
|
128
|
-
offset = (@page - 1) * @per
|
129
|
-
length = @per
|
130
|
-
|
131
|
-
replace(self.slice(offset, length))
|
132
|
-
|
133
|
-
self
|
134
|
-
end
|
135
|
-
|
136
|
-
def page(*args)
|
137
|
-
ensure_pagination_state!
|
138
|
-
|
139
|
-
if args.empty?
|
140
|
-
return @page
|
141
|
-
else
|
142
|
-
options = Map.options_for!(args)
|
143
|
-
page = args.shift || options[:page]
|
144
|
-
options[:page] = page
|
145
|
-
paginate(options)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
alias_method(:current_page, :page)
|
150
|
-
|
151
|
-
def per(*args)
|
152
|
-
ensure_pagination_state!
|
153
|
-
|
154
|
-
if args.empty?
|
155
|
-
return @per
|
156
|
-
else
|
157
|
-
options = Map.options_for!(args)
|
158
|
-
per = args.shift || options[:per]
|
159
|
-
options[:per] = per
|
160
|
-
paginate(options)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
def num_pages
|
165
|
-
(size.to_f / per).ceil
|
166
|
-
end
|
167
|
-
|
168
|
-
def total_pages
|
169
|
-
num_pages
|
170
|
-
end
|
171
|
-
|
172
|
-
def ensure_pagination_state!
|
173
|
-
unless defined?(@page)
|
174
|
-
@page = 1
|
175
|
-
end
|
176
|
-
unless defined?(@per)
|
177
|
-
@per = size
|
178
|
-
end
|
179
|
-
[@page, @per]
|
180
|
-
end
|
181
|
-
|
117
|
+
include Pagination
|
182
118
|
|
183
119
|
def method_missing(method, *args, &block)
|
184
120
|
Ro.log "Ro::List(#{ identifier })#method_missing(#{ method.inspect }, #{ args.inspect })"
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Ro
|
2
|
+
module Pagination
|
3
|
+
def paginate(*args)
|
4
|
+
options = Map.options_for!(args)
|
5
|
+
|
6
|
+
page = Integer(args.shift || options[:page] || 1)
|
7
|
+
per = Integer(args.shift || options[:per] || options[:size] || 10)
|
8
|
+
|
9
|
+
page = [page.abs, 1].max
|
10
|
+
per = [per.abs, 1].max
|
11
|
+
|
12
|
+
offset = (page - 1) * per
|
13
|
+
length = per
|
14
|
+
|
15
|
+
slice = dup.slice(offset, length)
|
16
|
+
slice.page = page
|
17
|
+
slice.per = per
|
18
|
+
slice.num_pages = (size.to_f / per).ceil
|
19
|
+
slice
|
20
|
+
end
|
21
|
+
|
22
|
+
def page=(page)
|
23
|
+
@page = page
|
24
|
+
end
|
25
|
+
|
26
|
+
def page(*args)
|
27
|
+
@page
|
28
|
+
end
|
29
|
+
|
30
|
+
def current_page
|
31
|
+
@page
|
32
|
+
end
|
33
|
+
|
34
|
+
def per=(per)
|
35
|
+
@per = per
|
36
|
+
end
|
37
|
+
|
38
|
+
def per
|
39
|
+
@per
|
40
|
+
end
|
41
|
+
|
42
|
+
def num_pages=(num_pages)
|
43
|
+
@num_pages = num_pages
|
44
|
+
end
|
45
|
+
|
46
|
+
def num_pages
|
47
|
+
@num_pages
|
48
|
+
end
|
49
|
+
|
50
|
+
def total_pages
|
51
|
+
num_pages
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/ro.gemspec
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "ro"
|
6
|
-
spec.version = "1.
|
6
|
+
spec.version = "1.3.1"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "ro"
|
9
9
|
spec.description = "description: ro kicks the ass"
|
@@ -24,6 +24,7 @@ Gem::Specification::new do |spec|
|
|
24
24
|
"lib/ro/model.rb",
|
25
25
|
"lib/ro/node.rb",
|
26
26
|
"lib/ro/node/list.rb",
|
27
|
+
"lib/ro/pagination.rb",
|
27
28
|
"lib/ro/root.rb",
|
28
29
|
"lib/ro/slug.rb",
|
29
30
|
"lib/ro/template.rb",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ara T. Howard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: map
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/ro/model.rb
|
158
158
|
- lib/ro/node.rb
|
159
159
|
- lib/ro/node/list.rb
|
160
|
+
- lib/ro/pagination.rb
|
160
161
|
- lib/ro/root.rb
|
161
162
|
- lib/ro/slug.rb
|
162
163
|
- lib/ro/template.rb
|