pebblebed 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,9 +17,18 @@ module Pebblebed
17
17
  end
18
18
  end
19
19
 
20
- def service_url(url)
20
+ def service_url(url, params = nil)
21
21
  result = @root_url.dup
22
22
  result.path = result.path.sub(/\/+$/, "") + url
23
+ if params
24
+ result.query << '&' if result.query
25
+ result.query ||= ''
26
+ result.query << if params.is_a?(Hash)
27
+ params.entries.map { |k, v| CGI.escape(k.to_s) + '=' + CGI.escape(v.to_s) }.join('&')
28
+ else
29
+ params
30
+ end
31
+ end
23
32
  result
24
33
  end
25
34
 
@@ -0,0 +1,31 @@
1
+ module Pebblebed
2
+ class UIDQuery
3
+
4
+ attr_reader :uids, :path, :oid
5
+ def initialize(uids)
6
+ @multiple = uids =~ /\,/
7
+ if list?
8
+ @uids = uids.split(',')
9
+ else
10
+ @klass, @path, @oid = Uid.parse(uids)
11
+ @uids = uids
12
+ end
13
+ end
14
+
15
+ def list?
16
+ !!@multiple
17
+ end
18
+
19
+ def one?
20
+ !(list? || wildcard?)
21
+ end
22
+
23
+ def wildcard?
24
+ Uid.valid_wildcard_path?(path) || wildcard_oid?
25
+ end
26
+
27
+ def wildcard_oid?
28
+ !list? && (oid == '*' || oid.nil?)
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Pebblebed
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
data/lib/pebblebed.rb CHANGED
@@ -3,6 +3,7 @@ require 'pebblebed/http'
3
3
  require 'pebblebed/connector'
4
4
  require 'pebblebed/config'
5
5
  require 'pebblebed/uid'
6
+ require 'pebblebed/uid_query'
6
7
  require 'pebblebed/clients/abstract_client'
7
8
  require 'pebblebed/clients/generic_client'
8
9
  require 'pebblebed/clients/checkpoint_client'
@@ -15,6 +15,7 @@ describe Pebblebed::GenericClient do
15
15
  client = Pebblebed::GenericClient.new("session_key", "http://example.org/")
16
16
  client.service_url("/test").to_s.should eq "http://example.org/test"
17
17
  client.service_url("").to_s.should eq "http://example.org"
18
+ client.service_url("/test", :foo => 'bar').to_s.should eq "http://example.org/test?foo=bar"
18
19
  end
19
20
 
20
21
  it "wraps JSON-results in a deep struct" do
@@ -0,0 +1,50 @@
1
+ require 'pebblebed/uid'
2
+ require 'pebblebed/uid_query'
3
+
4
+ describe Pebblebed::UIDQuery do
5
+ context "with comma separated uids." do
6
+ subject { Pebblebed::UIDQuery.new("xyz:a.b.c$1,xyz:a.b.c$2") }
7
+
8
+ its(:list?) { should be_true }
9
+ its(:wildcard?) { should be_false }
10
+ its(:one?) { should be_false }
11
+ its(:uids) { should eq(["xyz:a.b.c$1", "xyz:a.b.c$2"]) }
12
+
13
+ end
14
+
15
+ context "with a wildcard path." do
16
+ subject { Pebblebed::UIDQuery.new("xyz:a.b.*") }
17
+
18
+ its(:list?) { should be_false }
19
+ its(:wildcard?) { should be_true }
20
+ its(:one?) { should be_false }
21
+ its(:uids) { should eq("xyz:a.b.*") }
22
+ end
23
+
24
+ context "without any oid." do
25
+ subject { Pebblebed::UIDQuery.new("xyz:a.b.c") }
26
+
27
+ its(:list?) { should be_false }
28
+ its(:wildcard?) { should be_true }
29
+ its(:one?) { should be_false }
30
+ its(:uids) { should eq("xyz:a.b.c") }
31
+ end
32
+
33
+ context "with a wildcard oid." do
34
+ subject { Pebblebed::UIDQuery.new("xyz:a.b.c$*") }
35
+
36
+ its(:list?) { should be_false }
37
+ its(:wildcard?) { should be_true }
38
+ its(:one?) { should be_false }
39
+ its(:uids) { should eq("xyz:a.b.c$*") }
40
+ end
41
+
42
+ context "with a completely constrained uid" do
43
+ subject { Pebblebed::UIDQuery.new("xyz:a.b.c$1") }
44
+
45
+ its(:list?) { should be_false }
46
+ its(:wildcard?) { should be_false }
47
+ its(:one?) { should be_true }
48
+ its(:uids) { should eq("xyz:a.b.c$1") }
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pebblebed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-14 00:00:00.000000000 Z
13
+ date: 2012-05-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70227836596560 !ruby/object:Gem::Requirement
17
+ requirement: &70306887832940 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70227836596560
25
+ version_requirements: *70306887832940
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &70227836595980 !ruby/object:Gem::Requirement
28
+ requirement: &70306887832320 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70227836595980
36
+ version_requirements: *70306887832320
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: simplecov
39
- requirement: &70227836595040 !ruby/object:Gem::Requirement
39
+ requirement: &70306887831520 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70227836595040
47
+ version_requirements: *70306887831520
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: deepstruct
50
- requirement: &70227836594380 !ruby/object:Gem::Requirement
50
+ requirement: &70306887830640 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70227836594380
58
+ version_requirements: *70306887830640
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: curb
61
- requirement: &70227836593660 !ruby/object:Gem::Requirement
61
+ requirement: &70306887829680 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.8.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70227836593660
69
+ version_requirements: *70306887829680
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: yajl-ruby
72
- requirement: &70227836628500 !ruby/object:Gem::Requirement
72
+ requirement: &70306887829040 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70227836628500
80
+ version_requirements: *70306887829040
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: queryparams
83
- requirement: &70227836634040 !ruby/object:Gem::Requirement
83
+ requirement: &70306887828360 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *70227836634040
91
+ version_requirements: *70306887828360
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: futurevalue
94
- requirement: &70227836637420 !ruby/object:Gem::Requirement
94
+ requirement: &70306887827660 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *70227836637420
102
+ version_requirements: *70306887827660
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: pathbuilder
105
- requirement: &70227836642820 !ruby/object:Gem::Requirement
105
+ requirement: &70306887827160 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70227836642820
113
+ version_requirements: *70306887827160
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: nokogiri
116
- requirement: &70227836646700 !ruby/object:Gem::Requirement
116
+ requirement: &70306887826500 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :runtime
123
123
  prerelease: false
124
- version_requirements: *70227836646700
124
+ version_requirements: *70306887826500
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: i18n
127
- requirement: &70227836873840 !ruby/object:Gem::Requirement
127
+ requirement: &70306887819280 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :runtime
134
134
  prerelease: false
135
- version_requirements: *70227836873840
135
+ version_requirements: *70306887819280
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: activesupport
138
- requirement: &70227837080040 !ruby/object:Gem::Requirement
138
+ requirement: &70306887818520 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: '0'
144
144
  type: :runtime
145
145
  prerelease: false
146
- version_requirements: *70227837080040
146
+ version_requirements: *70306887818520
147
147
  description: Development tools for working with Pebblebed
148
148
  email:
149
149
  - katrina@bengler.no
@@ -168,6 +168,7 @@ files:
168
168
  - lib/pebblebed/parts.rb
169
169
  - lib/pebblebed/sinatra.rb
170
170
  - lib/pebblebed/uid.rb
171
+ - lib/pebblebed/uid_query.rb
171
172
  - lib/pebblebed/version.rb
172
173
  - pebblebed.gemspec
173
174
  - spec/checkpoint_client_spec.rb
@@ -178,6 +179,7 @@ files:
178
179
  - spec/mock_pebble.rb
179
180
  - spec/mockcached.rb
180
181
  - spec/spec_helper.rb
182
+ - spec/uid_query_spec.rb
181
183
  - spec/uid_spec.rb
182
184
  homepage: ''
183
185
  licenses: []
@@ -212,4 +214,5 @@ test_files:
212
214
  - spec/mock_pebble.rb
213
215
  - spec/mockcached.rb
214
216
  - spec/spec_helper.rb
217
+ - spec/uid_query_spec.rb
215
218
  - spec/uid_spec.rb