hari 0.0.3 → 0.0.4

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.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hari
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Rodrigues
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-28 00:00:00.000000000 Z
11
+ date: 2013-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -140,33 +140,32 @@ dependencies:
140
140
  name: pry
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - '>='
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ! '>='
150
+ - - '>='
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: delorean
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - '>='
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- description: ! ' Hari is a graph library on top of Redis database + Lua scripts
168
-
169
- '
167
+ description: |2
168
+ Hari is a graph library on top of Redis database + Lua scripts
170
169
  email: victorc.rodrigues@gmail.com
171
170
  executables: []
172
171
  extensions: []
@@ -195,21 +194,23 @@ files:
195
194
  - lib/hari/entity/serialization/string.rb
196
195
  - lib/hari/entity/serialization/time.rb
197
196
  - lib/hari/errors.rb
197
+ - lib/hari/keys.rb
198
+ - lib/hari/keys/key.rb
199
+ - lib/hari/keys/list.rb
200
+ - lib/hari/keys/set.rb
201
+ - lib/hari/keys/sorted_set.rb
202
+ - lib/hari/keys/string.rb
198
203
  - lib/hari/node.rb
199
204
  - lib/hari/node/queries.rb
200
- - lib/hari/node/queries/list.rb
201
205
  - lib/hari/node/queries/relation.rb
202
- - lib/hari/node/queries/relation/backend/list.rb
203
206
  - lib/hari/node/queries/relation/backend/sorted_set.rb
204
207
  - lib/hari/node/queries/relation/runnable.rb
205
208
  - lib/hari/node/queries/relation/start.rb
206
209
  - lib/hari/node/queries/relation/step.rb
207
- - lib/hari/node/queries/set.rb
208
- - lib/hari/node/queries/sorted_set.rb
210
+ - lib/hari/node/queries/type.rb
209
211
  - lib/hari/node/repository.rb
210
212
  - lib/hari/node/serialization.rb
211
213
  - lib/hari/relation.rb
212
- - lib/hari/relation/linked_list.rb
213
214
  - lib/hari/relation/sorted_set.rb
214
215
  - lib/hari/version.rb
215
216
  - spec/hari/configuration_spec.rb
@@ -222,9 +223,11 @@ files:
222
223
  - spec/hari/entity/serialization/string_spec.rb
223
224
  - spec/hari/entity/serialization/time_spec.rb
224
225
  - spec/hari/entity/serialization_spec.rb
225
- - spec/hari/node/lists_spec.rb
226
- - spec/hari/node/sets_spec.rb
227
- - spec/hari/node/sorted_sets_spec.rb
226
+ - spec/hari/keys/key_spec.rb
227
+ - spec/hari/keys/lists_spec.rb
228
+ - spec/hari/keys/sets_spec.rb
229
+ - spec/hari/keys/sorted_sets_spec.rb
230
+ - spec/hari/keys/string_spec.rb
228
231
  - spec/hari/node_spec.rb
229
232
  - spec/hari_spec.rb
230
233
  - spec/spec_helper.rb
@@ -238,17 +241,17 @@ require_paths:
238
241
  - lib
239
242
  required_ruby_version: !ruby/object:Gem::Requirement
240
243
  requirements:
241
- - - ! '>='
244
+ - - '>='
242
245
  - !ruby/object:Gem::Version
243
246
  version: '0'
244
247
  required_rubygems_version: !ruby/object:Gem::Requirement
245
248
  requirements:
246
- - - ! '>='
249
+ - - '>='
247
250
  - !ruby/object:Gem::Version
248
251
  version: '0'
249
252
  requirements: []
250
253
  rubyforge_project:
251
- rubygems_version: 2.0.6
254
+ rubygems_version: 2.0.3
252
255
  signing_key:
253
256
  specification_version: 4
254
257
  summary: Hari is a graph library on top of Redis + Lua scripts
@@ -263,10 +266,11 @@ test_files:
263
266
  - spec/hari/entity/serialization/string_spec.rb
264
267
  - spec/hari/entity/serialization/time_spec.rb
265
268
  - spec/hari/entity/serialization_spec.rb
266
- - spec/hari/node/lists_spec.rb
267
- - spec/hari/node/sets_spec.rb
268
- - spec/hari/node/sorted_sets_spec.rb
269
+ - spec/hari/keys/key_spec.rb
270
+ - spec/hari/keys/lists_spec.rb
271
+ - spec/hari/keys/sets_spec.rb
272
+ - spec/hari/keys/sorted_sets_spec.rb
273
+ - spec/hari/keys/string_spec.rb
269
274
  - spec/hari/node_spec.rb
270
275
  - spec/hari_spec.rb
271
276
  - spec/spec_helper.rb
272
- has_rdoc:
@@ -1,147 +0,0 @@
1
- module Hari
2
- class Node < Entity
3
- module Queries
4
- class List
5
-
6
- attr_reader :node, :name
7
-
8
- def initialize(node = nil)
9
- @node = node
10
- end
11
-
12
- def key
13
- @key ||= begin
14
- prefix = node ? "#{Hari.node_key(node)}:" : ''
15
- prefix + name.to_s
16
- end
17
- end
18
-
19
- def list(name)
20
- @name = name
21
- self
22
- end
23
-
24
- def list!(name)
25
- @name = name
26
- range
27
- end
28
-
29
- def [](*args)
30
- arg = args.first
31
-
32
- if args.size == 2
33
- range *args
34
- elsif arg.kind_of? Integer
35
- at arg
36
- elsif arg.kind_of? Range
37
- range arg.first, arg.last
38
- end
39
- end
40
-
41
- def first
42
- self[0]
43
- end
44
-
45
- def last
46
- self[-1]
47
- end
48
-
49
- def []=(index, member)
50
- Hari.redis.lset key, index, member
51
- end
52
-
53
- def range(start = 0, stop = -1)
54
- Hari.redis.lrange key, start, stop
55
- end
56
-
57
- alias :members :range
58
- alias :to_a :range
59
-
60
- def from(index)
61
- range index
62
- end
63
-
64
- def to(index)
65
- range 0, index
66
- end
67
-
68
- def at(index)
69
- Hari.redis.lindex key, index
70
- end
71
-
72
- alias :index :at
73
-
74
- def trim(start, stop)
75
- Hari.redis.ltrim key, start, stop
76
- end
77
-
78
- def count
79
- Hari.redis.llen key
80
- end
81
-
82
- alias :size :count
83
- alias :length :count
84
-
85
- def empty?
86
- count == 0
87
- end
88
-
89
- def one?
90
- count == 1
91
- end
92
-
93
- def many?
94
- count > 1
95
- end
96
-
97
- def include?(member)
98
- range.include? member
99
- end
100
-
101
- alias :member? :include?
102
-
103
- def push(*members)
104
- Hari.redis.rpush key, members
105
- end
106
-
107
- alias :rpush :push
108
- alias :add :push
109
-
110
- def lpush(*members)
111
- Hari.redis.lpush key, members
112
- end
113
-
114
- def <<(member)
115
- push member
116
- end
117
-
118
- def insert_before(pivot, member)
119
- Hari.redis.linsert key, :before, pivot, member
120
- end
121
-
122
- def insert_after(pivot, member)
123
- Hari.redis.linsert key, :after, pivot, member
124
- end
125
-
126
- alias :insert :insert_after
127
-
128
- def delete(member, count = 0)
129
- Hari.redis.lrem key, count, member
130
- end
131
-
132
- def pop
133
- Hari.redis.rpop key
134
- end
135
-
136
- alias :rpop :pop
137
-
138
- def shift
139
- Hari.redis.lpop key
140
- end
141
-
142
- alias :lpop :shift
143
-
144
- end
145
- end
146
- end
147
- end
@@ -1,35 +0,0 @@
1
- module Hari::Node::Queries::Relation
2
- module Backend
3
- module List
4
- extend self
5
-
6
- def fetch(node, options = {})
7
- list = node.list list_name(options)
8
- send "fetch_#{options[:result]}", list, options
9
- end
10
-
11
- def fetch_relations_ids(list, options = {})
12
- start = options.fetch(:from, 0)
13
- stop = options.limit(:limit, -1)
14
-
15
- list.range start, stop
16
- end
17
-
18
- def fetch_nodes_ids(list, options)
19
- index = list.name =~ /in$/ ? 1 : 2
20
- fetch_relations_ids(list, options).map { |r| r.split(':')[index] }
21
- end
22
-
23
- def fetch_count(list, options)
24
- list.count
25
- end
26
-
27
- private
28
-
29
- def list_name(options)
30
- "#{options[:relation]}:#{options[:direction]}"
31
- end
32
-
33
- end
34
- end
35
- end
@@ -1,116 +0,0 @@
1
- module Hari
2
- class Node < Entity
3
- module Queries
4
- class Set
5
-
6
- attr_reader :node, :name
7
-
8
- def initialize(node = nil)
9
- @node = node
10
- end
11
-
12
- def key
13
- @key ||= begin
14
- prefix = node ? "#{Hari.node_key(node)}:" : ''
15
- prefix + name.to_s
16
- end
17
- end
18
-
19
- def set(name)
20
- @name = name
21
- self
22
- end
23
-
24
- def set!(name)
25
- @name = name
26
- members
27
- end
28
-
29
- def members
30
- Hari.redis.smembers key
31
- end
32
-
33
- def rand(count = 1)
34
- Hari.redis.srandmember key, count
35
- end
36
-
37
- def count
38
- Hari.redis.scard key
39
- end
40
-
41
- alias :size :count
42
- alias :length :count
43
-
44
- def empty?
45
- count == 0
46
- end
47
-
48
- def one?
49
- count == 1
50
- end
51
-
52
- def many?
53
- count > 1
54
- end
55
-
56
- def include?(member)
57
- Hari.redis.sismember key, member
58
- end
59
-
60
- alias :member? :include?
61
-
62
- def add(*members)
63
- Hari.redis.sadd key, members
64
- end
65
-
66
- def <<(member)
67
- add member
68
- end
69
-
70
- def delete(*members)
71
- Hari.redis.srem key, members
72
- end
73
-
74
- def pop
75
- Hari.redis.spop key
76
- end
77
-
78
- def intersect(*set_queries)
79
- Hari.redis.sinter key, set_query_keys(set_queries)
80
- end
81
-
82
- def &(other_set_query)
83
- intersect other_set_query
84
- end
85
-
86
- def diff(*set_queries)
87
- Hari.redis.sdiff key, set_query_keys(set_queries)
88
- end
89
-
90
- def -(other_set_query)
91
- diff other_set_query
92
- end
93
-
94
- private
95
-
96
- def set_query_keys(set_queries)
97
- keys = set_queries.map do |query|
98
- ensure_set_query! query
99
- query.key
100
- end
101
-
102
- fail 'no query keys' if keys.empty?
103
-
104
- keys
105
- end
106
-
107
- def ensure_set_query!(query)
108
- unless query.kind_of?(Hari::Node::Queries::Set)
109
- fail 'not a set query'
110
- end
111
- end
112
-
113
- end
114
- end
115
- end
116
- end
@@ -1,130 +0,0 @@
1
- module Hari
2
- class Node < Entity
3
- module Queries
4
- class SortedSet
5
-
6
- attr_reader :node, :name
7
-
8
- def initialize(node = nil)
9
- @node = node
10
- end
11
-
12
- def key
13
- @key ||= begin
14
- prefix = node ? "#{Hari.node_key(node)}:" : ''
15
- prefix + name.to_s
16
- end
17
- end
18
-
19
- def sorted_set(name)
20
- @name = name
21
- self
22
- end
23
-
24
- def sorted_set!(name)
25
- @name = name
26
- members
27
- end
28
-
29
- def range(start = 0, stop = -1, options = {})
30
- return revrange(start, stop, options) if options[:desc]
31
-
32
- Hari.redis.zrange key, start, stop, options.slice(:with_scores)
33
- end
34
-
35
- alias :members :range
36
-
37
- def range_with_scores
38
- range 0, -1, with_scores: true
39
- end
40
-
41
- def revrange(start = 0, stop = -1, options = {})
42
- Hari.redis.zrevrange key, start, stop, options.slice(:with_scores)
43
- end
44
-
45
- alias :reverse_range :revrange
46
- alias :desc_range :revrange
47
-
48
- def revrange_with_scores
49
- revrange 0, -1, with_scores: true
50
- end
51
-
52
- def range_by_score(min, max, options = {})
53
- return revrange_by_score(min, max, options) if options[:desc]
54
-
55
- Hari.redis.zrangebyscore key, min, max, options.slice(:with_scores, :limit)
56
- end
57
-
58
- def revrange_by_score(min, max, options = {})
59
- Hari.redis.zrevrangebyscore key, max, min, options.slice(:with_scores, :limit)
60
- end
61
-
62
- def rank(member, options = {})
63
- return revrank(member, options) if options[:desc]
64
-
65
- Hari.redis.zrank key, member
66
- end
67
-
68
- alias :ranking :rank
69
- alias :position :rank
70
-
71
- def revrank(member)
72
- Hari.redis.zrevrank key, member
73
- end
74
-
75
- alias :reverse_ranking :revrank
76
- alias :reverse_position :revrank
77
-
78
- def count
79
- Hari.redis.zcard key
80
- end
81
-
82
- alias :size :count
83
- alias :length :count
84
-
85
- def empty?
86
- count == 0
87
- end
88
-
89
- def one?
90
- count == 1
91
- end
92
-
93
- def many?
94
- count > 1
95
- end
96
-
97
- def include?(member)
98
- score(member).present?
99
- end
100
-
101
- alias :member? :include?
102
-
103
- def score(member)
104
- Hari.redis.zscore key, member
105
- end
106
-
107
- def add(*score_members)
108
- Hari.redis.zadd key, score_members.to_a.flatten
109
- end
110
-
111
- def <<(*score_members)
112
- add score_members
113
- end
114
-
115
- def delete(*members)
116
- Hari.redis.zrem key, members
117
- end
118
-
119
- def trim_by_rank(start, stop)
120
- Hari.redis.zremrangebyrank key, start, stop
121
- end
122
-
123
- def trim_by_score(min, max)
124
- Hari.redis.zremrangebyscore key, min, max
125
- end
126
-
127
- end
128
- end
129
- end
130
- end
@@ -1,16 +0,0 @@
1
- module Hari
2
- class Relation < Entity
3
- module LinkedList
4
- extend self
5
-
6
- def create(rel)
7
- Relation::DIRECTIONS.each { |d| Hari.redis.lpush rel.key(d), rel.id }
8
- end
9
-
10
- def delete(rel)
11
- Relation::DIRECTIONS.each { |d| Hari.redis.lrem rel.key(d), 1, rel.id }
12
- end
13
-
14
- end
15
- end
16
- end