localwiki_client 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +2 -1
- data/History.txt +11 -0
- data/README.md +33 -0
- data/Rakefile +19 -2
- data/integration/helper.rb +9 -0
- data/{spec/integration → integration}/live_saltlake_wiki_spec.rb +2 -2
- data/integration/live_test_wiki_spec.rb +47 -0
- data/lib/localwiki/client.rb +131 -38
- data/lib/localwiki/version.rb +1 -1
- data/localwiki_client.gemspec +6 -2
- data/spec/basic_crud_spec.rb +67 -0
- data/spec/basic_spec.rb +34 -0
- data/spec/fetch_version_spec.rb +43 -0
- data/spec/fixtures/cassettes/basic.yml +91 -0
- data/spec/fixtures/cassettes/basic_crud.yml +90 -0
- data/spec/fixtures/cassettes/basic_crud_delete_fail.yml +42 -0
- data/spec/fixtures/cassettes/basic_crud_delete_success.yml +42 -0
- data/spec/fixtures/cassettes/basic_crud_read_fail.yml +52 -0
- data/spec/fixtures/cassettes/basic_crud_read_success.yml +40 -0
- data/spec/fixtures/cassettes/basic_crud_update_success.yml +42 -0
- data/spec/fixtures/cassettes/basic_fetch_version_success.yml +130 -0
- data/spec/fixtures/cassettes/basic_page_by_name_spaces.yml +41 -0
- data/spec/fixtures/cassettes/basic_unique_authors_success.yml +130 -0
- data/spec/fixtures/cassettes/fetch.yml +46 -0
- data/spec/fixtures/cassettes/localwiki_client.yml +366 -0
- data/spec/fixtures/cassettes/slug.yml +46 -0
- data/spec/helper.rb +15 -3
- data/spec/localwiki_client_spec.rb +31 -25
- data/spec/slug_spec.rb +26 -0
- metadata +100 -61
- data/localwiki_client-0.0.4.gem +0 -0
- data/spec/data/page_fetch.json +0 -9
- data/spec/data/site_fetch.json +0 -10
- data/spec/data/site_list.json +0 -18
- data/spec/data/user_list.json +0 -49
- data/spec/page_spec.rb +0 -41
- data/spec/site_spec.rb +0 -48
- data/spec/user_spec.rb +0 -41
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 57676e3cee0822abe0c07ab173531579f1cccb21
|
4
|
+
data.tar.gz: c7b7b0370f9372cca7b2149e0374737a04fca115
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9a420a1750d4d72858603feff2eeb7656e27649526b5138eeffb8d933fc685e5de239515df86f2cbaed82e46c1b760c0d28b18122d1816f27d34f1218fcc0a9c
|
7
|
+
data.tar.gz: 254a56caf270b691b689ea326f8d3000ebe211aedfece5b411646f9609997ccc06c9caefe0b03d1ecbe80c322cdac7a17b1f189c16288c918138fadc4d407bd9
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/History.txt
CHANGED
data/README.md
CHANGED
@@ -20,14 +20,34 @@ Usage
|
|
20
20
|
## Example
|
21
21
|
|
22
22
|
require 'localwiki_client'
|
23
|
+
|
24
|
+
# read access
|
23
25
|
wiki = LocalwikiClient.new 'seattlewiki.net'
|
24
26
|
wiki.site_name
|
25
27
|
=> SeattleWiki
|
26
28
|
wiki.count('user')
|
27
29
|
=> 47
|
28
30
|
|
31
|
+
# write access
|
32
|
+
wiki = LocalwikiClient.new 'seattlewiki.net', 'myusername', 'myapikey'
|
33
|
+
page_json = {name: 'Current Events', content: 'Coming Soon!'}.to_json
|
34
|
+
response = wiki.create('page', page_json)
|
35
|
+
response.status
|
36
|
+
=> 201
|
37
|
+
|
38
|
+
Features / Problems
|
39
|
+
-------------------
|
40
|
+
|
41
|
+
* #create, #read (#fetch), #update, #delete provide basic CRUD functionality
|
42
|
+
* #list fetches all (or with a limit) of a specific type of resource
|
43
|
+
* #fetch_version retrieves version history for a resource
|
44
|
+
* a few helper methods exist, more to come
|
45
|
+
* #count, #page_by_name, #unique_authors
|
46
|
+
|
47
|
+
|
29
48
|
Compatibility
|
30
49
|
-------------
|
50
|
+
* 2.0.0
|
31
51
|
* 1.9.3
|
32
52
|
* jruby-19mode
|
33
53
|
* rbx-19mode
|
@@ -36,8 +56,21 @@ Contributing
|
|
36
56
|
------------
|
37
57
|
|
38
58
|
To get your improvements included, please fork and submit a pull request.
|
59
|
+
|
39
60
|
Bugs and/or failing tests are very appreciated.
|
40
61
|
|
62
|
+
Contributors
|
63
|
+
------------
|
64
|
+
Seth Vincent
|
65
|
+
|
66
|
+
Brandon Faloona
|
67
|
+
|
68
|
+
Helen Canzler
|
69
|
+
|
70
|
+
Jerry Frost
|
71
|
+
|
72
|
+
Matt Adkins
|
73
|
+
|
41
74
|
LICENSE
|
42
75
|
-------
|
43
76
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rspec/core'
|
3
3
|
require 'rspec/core/rake_task'
|
4
|
+
require 'yard'
|
4
5
|
|
5
6
|
desc 'Default: run unit test specs'
|
6
7
|
task :default => :spec
|
@@ -19,7 +20,7 @@ task :test => [:spec]
|
|
19
20
|
|
20
21
|
desc "Run integration tests"
|
21
22
|
RSpec::Core::RakeTask.new(:integration) do |t|
|
22
|
-
t.pattern = "
|
23
|
+
t.pattern = "integration/*_spec.rb"
|
23
24
|
t.rspec_opts = ['-f d']
|
24
25
|
end
|
25
26
|
|
@@ -31,4 +32,20 @@ end
|
|
31
32
|
desc "Detailed Flog report! (*nix only)"
|
32
33
|
task :flog_detail do
|
33
34
|
system('find lib -name \*.rb | xargs flog -d')
|
34
|
-
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Generate YARD documentation for files in ['lib/**/*.rb']"
|
38
|
+
YARD::Rake::YardocTask.new(:yard)
|
39
|
+
|
40
|
+
desc "Delete VCR fixtures and logs"
|
41
|
+
task :vcr_purge do
|
42
|
+
files = Dir[File.expand_path("../spec/fixtures/cassettes/*", __FILE__)].map do |file|
|
43
|
+
file if File.file?(file)
|
44
|
+
end
|
45
|
+
files.each { |file| File.delete(file) }
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "Sanitize VCR fixtures (remove Apikey values)"
|
49
|
+
task :vcr_sanitize do
|
50
|
+
system(%{ruby -pi -e "gsub(/- ApiKey .+:.+/, '- ApiKey testuser:key')" spec/fixtures/cassettes/*.yml})
|
51
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
require 'localwiki_client'
|
3
|
+
|
4
|
+
def test_env_vars_set?
|
5
|
+
return true if ENV['localwiki_client_user'] && ENV['localwiki_client_apikey']
|
6
|
+
puts "\nTo add or modify tests in the spec folder you need to do two things:"
|
7
|
+
puts "\tContact sethvincent@gmail.com to request a username and apikey on the test server."
|
8
|
+
puts "\tSet these two environment variables:\n\t\texport localwiki_client_user=USERNAME\n\t\texport localwiki_client_apikey=APIKEY"
|
9
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
|
+
|
3
|
+
if test_env_vars_set?
|
4
|
+
|
5
|
+
describe 'LIVE testwiki instance' do
|
6
|
+
|
7
|
+
before(:all) {
|
8
|
+
@wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
|
9
|
+
ENV['localwiki_client_user'],
|
10
|
+
ENV['localwiki_client_apikey']
|
11
|
+
}
|
12
|
+
|
13
|
+
context "CRUD methods" do
|
14
|
+
|
15
|
+
before(:all) do
|
16
|
+
require 'securerandom'
|
17
|
+
@pagename = "TestPage#{SecureRandom.uuid}"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "#create('page', json) response.status is 201" do
|
21
|
+
json = {name: @pagename, content: '<p>Created!</p>'}.to_json
|
22
|
+
response = @wiki.create('page', json)
|
23
|
+
response.status.should eq 201
|
24
|
+
end
|
25
|
+
|
26
|
+
it "#read('page', 'TestPage<uuid>') response.status is 200" do
|
27
|
+
response = @wiki.read('page', @pagename)
|
28
|
+
response["content"].should match(/Created!/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "#update('page', 'TestPage<uuid>', json) response.status is 204" do
|
32
|
+
json = {content: '<p>Updated!</p>'}.to_json
|
33
|
+
response = @wiki.update('page', @pagename, json)
|
34
|
+
response.status.should eq 204
|
35
|
+
@wiki.read('page', @pagename)["content"].should match(/Updated!/)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "#delete('page', 'TestPage<uuid>') response.status is 204" do
|
39
|
+
response = @wiki.delete('page', @pagename)
|
40
|
+
response.status.should eq 204
|
41
|
+
@wiki.read('page', @pagename).status.should eq 404
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
data/lib/localwiki/client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'faraday'
|
2
|
-
require 'json
|
2
|
+
require 'json'
|
3
3
|
|
4
4
|
module Localwiki
|
5
5
|
|
@@ -8,41 +8,54 @@ module Localwiki
|
|
8
8
|
#
|
9
9
|
class Client
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
# hostname of the server we'd like to point at
|
12
|
+
attr_accessor :hostname
|
13
|
+
|
14
|
+
# site resource - display name of wiki
|
15
|
+
attr_reader :site_name
|
16
|
+
|
17
|
+
# site resource - time zone of server, example: 'America/Chicago'
|
18
|
+
attr_reader :time_zone
|
19
|
+
|
20
|
+
# site resource - language code of the server, example: 'en-us'
|
21
|
+
attr_reader :language_code
|
15
22
|
|
16
23
|
##
|
17
24
|
# Create a LocalWikiClient instance
|
18
25
|
#
|
19
|
-
#
|
26
|
+
# @example LocalwikiClient.new 'seattlewiki.net'
|
20
27
|
#
|
21
|
-
def initialize hostname
|
28
|
+
def initialize hostname, user=nil, apikey=nil
|
22
29
|
@hostname = hostname
|
30
|
+
@user = user
|
31
|
+
@apikey = apikey
|
23
32
|
create_connection
|
24
33
|
collect_site_details
|
25
34
|
end
|
26
35
|
|
27
36
|
##
|
28
37
|
# Request total count of given resource
|
29
|
-
#
|
38
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
39
|
+
# @return [Fixnum] resource count
|
40
|
+
# @example wiki.count('user')
|
30
41
|
def count(resource)
|
31
42
|
list(resource.to_s,1)["meta"]["total_count"]
|
32
43
|
end
|
33
44
|
|
34
45
|
##
|
35
46
|
# fetch a page by name ("The Page Name" or "The_Page_Name" or "the page name")
|
36
|
-
#
|
47
|
+
# @param name "The Page Name" or "The_Page_Name" or "the page name"
|
48
|
+
# @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
|
37
49
|
def page_by_name(name)
|
38
50
|
fetch(:page,"#{name.gsub!(/\s/, '_')}")
|
39
51
|
end
|
40
52
|
|
41
53
|
##
|
42
54
|
# list of a specific type of resource
|
43
|
-
# resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
44
|
-
# limit is an integer
|
45
|
-
# params is a hash of query string params
|
55
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
56
|
+
# @param limit is an integer
|
57
|
+
# @param params is a hash of query string params
|
58
|
+
# @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
|
46
59
|
def list(resource,limit=0,params={})
|
47
60
|
uri = '/api/' + resource.to_s
|
48
61
|
params.merge!({limit: limit.to_s})
|
@@ -51,42 +64,79 @@ module Localwiki
|
|
51
64
|
|
52
65
|
##
|
53
66
|
# fetch a specific resource
|
54
|
-
#
|
55
|
-
# identifier is id, pagename, slug, etc.
|
56
|
-
# params is a hash of query string params
|
67
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
68
|
+
# @param identifier is id, pagename, slug, etc.
|
69
|
+
# @param params is a hash of query string params
|
70
|
+
# @example wiki.update('page', '<page tag>')
|
71
|
+
# @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
|
57
72
|
def fetch(resource,identifier,params={})
|
58
|
-
uri = '/api/' + resource.to_s + '/' + identifier
|
73
|
+
uri = '/api/' + resource.to_s + '/' + slugify(identifier)
|
74
|
+
http_get(uri,params)
|
75
|
+
end
|
76
|
+
alias_method :read, :fetch
|
77
|
+
|
78
|
+
##
|
79
|
+
# fetch version information for a resource
|
80
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
81
|
+
# @param identifier is id, pagename, slug, etc.
|
82
|
+
# @param params is a hash of query string params
|
83
|
+
# @example wiki.fetch_version('page', 'First Page')
|
84
|
+
# @return [Hash] the parsed JSON object from the response body, otherwise the whole http response object
|
85
|
+
def fetch_version(resource,identifier,params={})
|
86
|
+
uri = '/api/' + resource.to_s + '_version?name=' + identifier
|
59
87
|
http_get(uri,params)
|
60
88
|
end
|
61
89
|
|
90
|
+
##
|
91
|
+
# number of unique authors that have modified a resource
|
92
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
93
|
+
# @param identifier is id, pagename, slug, etc.
|
94
|
+
# @param params is a hash of query string params
|
95
|
+
# @example wiki.unique_authors('page', 'First Page')
|
96
|
+
# @return [Fixnum]
|
97
|
+
def unique_authors(resource,identifier,params={})
|
98
|
+
json = fetch_version(resource,identifier,params)
|
99
|
+
json['objects'].map {|entry| entry['history_user']}.uniq.length
|
100
|
+
end
|
101
|
+
|
62
102
|
##
|
63
103
|
# create a specific resource
|
64
|
-
#
|
65
|
-
|
66
|
-
|
104
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
105
|
+
# @param json is a json object
|
106
|
+
# @example wiki.create('page', <json object containing the page tag>)
|
107
|
+
# @return [HTTPResponse] the http response object
|
108
|
+
def create(resource, json)
|
109
|
+
uri = '/api/' + resource.to_s + '/'
|
110
|
+
http_post(uri, json)
|
67
111
|
end
|
68
112
|
|
69
113
|
##
|
70
114
|
# update a specific resource
|
71
|
-
#
|
72
|
-
# identifier is id, pagename, slug, etc.
|
115
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
116
|
+
# @param identifier is id, pagename, slug, etc.
|
117
|
+
# @param json is a json object
|
118
|
+
# @example wiki.update('page', '<page tag>', <json object>)
|
119
|
+
# @return [HTTPResponse] the http response object
|
73
120
|
def update(resource,identifier,json)
|
74
|
-
|
121
|
+
uri = '/api/' + resource.to_s + '/' + slugify(identifier)
|
122
|
+
http_put(uri, json)
|
75
123
|
end
|
76
124
|
|
77
125
|
##
|
78
126
|
# delete a specific resource
|
79
|
-
#
|
80
|
-
# identifier is id, pagename, slug, etc.
|
127
|
+
# @param resource are "site", "page", "user", "file", "map", "tag", "page_tag"
|
128
|
+
# @param identifier is id, pagename, slug, etc.
|
129
|
+
# @example wiki.delete('page', '<page tag>')
|
130
|
+
# @return [HTTPResponse] the http response object
|
81
131
|
def delete(resource,identifier)
|
82
|
-
|
132
|
+
uri = '/api/' + resource.to_s + '/' + slugify(identifier)
|
133
|
+
http_delete(uri)
|
83
134
|
end
|
84
135
|
|
85
136
|
private
|
86
137
|
|
87
138
|
##
|
88
139
|
# Get site resource and set instance variables
|
89
|
-
#
|
90
140
|
def collect_site_details
|
91
141
|
site = fetch('site','1')
|
92
142
|
@site_name = site['name']
|
@@ -96,32 +146,75 @@ module Localwiki
|
|
96
146
|
|
97
147
|
##
|
98
148
|
# create Faraday::Connection instance and set @site
|
99
|
-
#
|
100
149
|
def create_connection
|
101
150
|
@site = Faraday.new :url => @hostname
|
102
151
|
end
|
103
|
-
|
152
|
+
|
104
153
|
##
|
105
154
|
# http get request
|
106
|
-
#
|
107
|
-
#
|
155
|
+
# @param uri /api/<resource>/<resource identifier>
|
156
|
+
# @param params is a hash of query string params
|
157
|
+
# @return [Hash] the parsed JSON object, otherwise the http response object
|
108
158
|
def http_get(uri,params={})
|
109
159
|
params.merge!({format: 'json'})
|
110
160
|
full_url = 'http://' + @hostname + uri.to_s
|
111
161
|
response = @site.get full_url, params
|
112
|
-
JSON.parse(response.body)
|
162
|
+
JSON.parse(response.body) rescue response
|
113
163
|
end
|
114
|
-
|
115
|
-
|
116
|
-
|
164
|
+
|
165
|
+
##
|
166
|
+
# http post request
|
167
|
+
# @param uri /api/<resource>/
|
168
|
+
# @param json is a json object
|
169
|
+
# @return [HTTPResponse] the http response object
|
170
|
+
def http_post(uri, json)
|
171
|
+
full_url = 'http://' + @hostname + uri.to_s
|
172
|
+
|
173
|
+
@site.post do |req|
|
174
|
+
req.url full_url
|
175
|
+
req.headers['Content-Type'] = 'application/json'
|
176
|
+
req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
|
177
|
+
req.body = json
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
##
|
182
|
+
# http put request
|
183
|
+
# @param uri /api/<resource>/<resource identifier>
|
184
|
+
# @param json is a json object
|
185
|
+
# @return [HTTPResponse] the http response object
|
186
|
+
def http_put(uri, json)
|
187
|
+
full_url = 'http://' + @hostname + uri.to_s
|
188
|
+
|
189
|
+
@site.put do |req|
|
190
|
+
req.url full_url
|
191
|
+
req.headers['Content-Type'] = 'application/json'
|
192
|
+
req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
|
193
|
+
req.body = json
|
194
|
+
end
|
117
195
|
end
|
118
196
|
|
119
|
-
|
120
|
-
|
197
|
+
##
|
198
|
+
# http delete request
|
199
|
+
# @param uri /api/<resource>/<resource identifier>
|
200
|
+
# @return [HTTPResponse] the http response object
|
201
|
+
def http_delete(uri)
|
202
|
+
full_url = 'http://' + @hostname + uri.to_s
|
203
|
+
|
204
|
+
@site.delete do |req|
|
205
|
+
req.url full_url
|
206
|
+
req.headers['Content-Type'] = 'application/json'
|
207
|
+
req.headers['Authorization'] = "ApiKey #{@user}:#{@apikey}"
|
208
|
+
end
|
121
209
|
end
|
122
210
|
|
123
|
-
|
124
|
-
|
211
|
+
##
|
212
|
+
# create human readable identifier that is used to create clean urls
|
213
|
+
# @param string
|
214
|
+
# @example slugify('My Page') == 'My_Page'
|
215
|
+
# @return [String]
|
216
|
+
def slugify(string)
|
217
|
+
string.to_s.strip.gsub(' ', "_")
|
125
218
|
end
|
126
219
|
|
127
220
|
end
|
data/lib/localwiki/version.rb
CHANGED
data/localwiki_client.gemspec
CHANGED
@@ -14,11 +14,15 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.required_ruby_version = '>= 1.9.2'
|
15
15
|
|
16
16
|
s.add_dependency('faraday')
|
17
|
-
s.add_dependency('
|
17
|
+
s.add_dependency('json_pure')
|
18
18
|
|
19
19
|
s.add_development_dependency('rake')
|
20
20
|
s.add_development_dependency('rspec', '>= 2.9.0')
|
21
|
-
s.add_development_dependency('
|
21
|
+
s.add_development_dependency('vcr')
|
22
|
+
s.add_development_dependency('webmock', '>= 1.8.0', '< 1.10')
|
23
|
+
s.add_development_dependency('yard')
|
24
|
+
s.add_development_dependency('kramdown')
|
25
|
+
|
22
26
|
s.add_development_dependency('rb-fsevent')
|
23
27
|
|
24
28
|
unless ENV['TRAVIS'] == 'true'
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
|
+
|
3
|
+
describe 'LocalwikiClient' do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
VCR.insert_cassette 'basic_crud', :record => :new_episodes
|
7
|
+
@wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
|
8
|
+
ENV['localwiki_client_user'],
|
9
|
+
ENV['localwiki_client_apikey']
|
10
|
+
require 'securerandom'
|
11
|
+
@pagename = "TestPage#{SecureRandom.uuid}"
|
12
|
+
@path_matcher = lambda do |request_1, request_2|
|
13
|
+
URI(request_1.uri).path.match(/TestPage/) && URI(request_2.uri).path.match(/TestPage/)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after(:all) do
|
18
|
+
VCR.eject_cassette
|
19
|
+
end
|
20
|
+
|
21
|
+
context "CRUD method" do
|
22
|
+
|
23
|
+
it "#create('page', json) response.status is 201" do
|
24
|
+
response = @wiki.create('page', {name: @pagename, content: '<p>Created!</p>'}.to_json)
|
25
|
+
response.status.should eq 201
|
26
|
+
end
|
27
|
+
|
28
|
+
it "#read('page', pagename) response.status should match(/Created!/)" do
|
29
|
+
VCR.use_cassette 'basic_crud_read_success', :match_requests_on => [:method, @path_matcher] do
|
30
|
+
response = @wiki.read('page', @pagename)
|
31
|
+
response["content"].should match(/Created!/)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "#update('page', pagename, json) response.status is 204" do
|
36
|
+
VCR.use_cassette 'basic_crud_update_success', :match_requests_on => [:method, @path_matcher] do
|
37
|
+
response = @wiki.update('page', @pagename, {content: '<foo>'}.to_json)
|
38
|
+
response.status.should eq 204
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "#delete('page', pagename) response.status is 204" do
|
43
|
+
VCR.use_cassette 'basic_crud_delete_success', :match_requests_on => [:method, @path_matcher] do
|
44
|
+
response = @wiki.delete('page', @pagename)
|
45
|
+
response.status.should eq 204
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when page does not exist" do
|
50
|
+
|
51
|
+
it "#read returns response.status of 404" do
|
52
|
+
VCR.use_cassette 'basic_crud_read_fail', :match_requests_on => [:method, @path_matcher] do
|
53
|
+
response = @wiki.read('page', @pagename)
|
54
|
+
response.status.should eq 404
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "#delete returns response.status of 404" do
|
59
|
+
VCR.use_cassette 'basic_crud_delete_fail', :match_requests_on => [:method, @path_matcher] do
|
60
|
+
response = @wiki.delete('page', @pagename)
|
61
|
+
response.status.should eq 404
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/spec/basic_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
|
+
|
3
|
+
describe 'LocalwikiClient' do
|
4
|
+
|
5
|
+
context "#create and #page_by_name" do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
VCR.insert_cassette 'basic', :record => :new_episodes
|
9
|
+
@wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
|
10
|
+
ENV['localwiki_client_user'],
|
11
|
+
ENV['localwiki_client_apikey']
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
VCR.eject_cassette
|
16
|
+
end
|
17
|
+
|
18
|
+
it "handle spaces" do
|
19
|
+
require 'securerandom'
|
20
|
+
base_name = "Test Page"
|
21
|
+
page_name = "#{base_name}#{SecureRandom.uuid}"
|
22
|
+
path_matcher = lambda do |request_1, request_2|
|
23
|
+
URI(request_1.uri).path.match(/Test/) && URI(request_2.uri).path.match(/Test/)
|
24
|
+
end
|
25
|
+
@wiki.create('page', {name: page_name, content: '<p>Created page with spaces!</p>'}.to_json)
|
26
|
+
VCR.use_cassette 'basic_page_by_name_spaces', :match_requests_on => [:method, path_matcher] do
|
27
|
+
response = @wiki.page_by_name(page_name)
|
28
|
+
response["content"].should match(/Created page with spaces!/)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path("../helper", __FILE__)
|
2
|
+
|
3
|
+
describe 'LocalwikiClient' do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
VCR.insert_cassette 'fetch', :record => :new_episodes
|
7
|
+
@wiki = Localwiki::Client.new 'ec2-54-234-151-52.compute-1.amazonaws.com',
|
8
|
+
ENV['localwiki_client_user'],
|
9
|
+
ENV['localwiki_client_apikey']
|
10
|
+
require 'securerandom'
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:all) do
|
14
|
+
VCR.eject_cassette
|
15
|
+
end
|
16
|
+
|
17
|
+
context "#fetch_version" do
|
18
|
+
|
19
|
+
it "returns json that includes all edits" do
|
20
|
+
pagename = "TestPage#{SecureRandom.uuid}"
|
21
|
+
VCR.use_cassette 'basic_fetch_version_success', :match_requests_on => [:method] do
|
22
|
+
@wiki.create('page', {name: pagename, content: '<p>Created!</p>'}.to_json)
|
23
|
+
@wiki.update('page', pagename, {content: '<p>foo</p>'}.to_json)
|
24
|
+
response = @wiki.fetch_version('page', pagename)
|
25
|
+
response['meta']['total_count'].should eq 2
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "#unique_authors" do
|
31
|
+
|
32
|
+
it "returns the number of authors" do
|
33
|
+
pagename = "TestPage#{SecureRandom.uuid}"
|
34
|
+
VCR.use_cassette 'basic_unique_authors_success', :match_requests_on => [:method] do
|
35
|
+
@wiki.create('page', {name: pagename, content: '<p>Created!</p>'}.to_json)
|
36
|
+
@wiki.update('page', pagename, {content: '<p>foo</p>'}.to_json)
|
37
|
+
@wiki.unique_authors('page', pagename).should eq 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|