localwiki_client 0.0.4 → 0.1.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 CHANGED
@@ -1,5 +1,6 @@
1
1
  LocalwikiClient
2
2
  ===============
3
+ [![Build Status](https://travis-ci.org/codeforseattle/localwiki_client.png?branch=master)](https://travis-ci.org/codeforseattle/localwiki_client) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/codeforseattle/localwiki_client)
3
4
 
4
5
  Synopsis
5
6
  --------
@@ -22,9 +23,15 @@ Usage
22
23
  wiki = LocalwikiClient.new 'seattlewiki.net'
23
24
  wiki.site_name
24
25
  => SeattleWiki
25
- wiki.total_resources('user')
26
+ wiki.count('user')
26
27
  => 47
27
28
 
29
+ Compatibility
30
+ -------------
31
+ * 1.9.3
32
+ * jruby-19mode
33
+ * rbx-19mode
34
+
28
35
  Contributing
29
36
  ------------
30
37
 
data/Rakefile CHANGED
@@ -2,19 +2,20 @@ require 'rake'
2
2
  require 'rspec/core'
3
3
  require 'rspec/core/rake_task'
4
4
 
5
- desc 'Default: run tests'
6
- task :default => :test
5
+ desc 'Default: run unit test specs'
6
+ task :default => :spec
7
7
 
8
- desc "Run specs"
8
+ desc 'Run all tests'
9
+ task :all => [:spec, :integration, :flog_detail]
10
+
11
+ desc "Run unit test specs"
9
12
  RSpec::Core::RakeTask.new do |t|
10
13
  t.pattern = "./spec/*_spec.rb"
11
14
  t.rspec_opts = ['-f d']
12
15
  end
13
16
 
14
- desc "Run tests"
15
- task :test do
16
- Rake::Task['spec'].invoke
17
- end
17
+ desc "Run unit test specs"
18
+ task :test => [:spec]
18
19
 
19
20
  desc "Run integration tests"
20
21
  RSpec::Core::RakeTask.new(:integration) do |t|
@@ -0,0 +1,128 @@
1
+ require 'faraday'
2
+ require 'json/pure'
3
+
4
+ module Localwiki
5
+
6
+ ##
7
+ # A client that wraps the localwiki api for a given server instance
8
+ #
9
+ class Client
10
+
11
+ attr_accessor :hostname # hostname of the server we'd like to point at
12
+ attr_reader :site_name # site resource - display name of wiki
13
+ attr_reader :time_zone # site resource - time zone of server, e.g. 'America/Chicago'
14
+ attr_reader :language_code # site resource - language code of the server, e.g. 'en-us'
15
+
16
+ ##
17
+ # Create a LocalWikiClient instance
18
+ #
19
+ # LocalwikiClient.new 'seattlewiki.net'
20
+ #
21
+ def initialize hostname
22
+ @hostname = hostname
23
+ create_connection
24
+ collect_site_details
25
+ end
26
+
27
+ ##
28
+ # Request total count of given resource
29
+ #
30
+ def count(resource)
31
+ list(resource.to_s,1)["meta"]["total_count"]
32
+ end
33
+
34
+ ##
35
+ # fetch a page by name ("The Page Name" or "The_Page_Name" or "the page name")
36
+ #
37
+ def page_by_name(name)
38
+ fetch(:page,"#{name.gsub!(/\s/, '_')}")
39
+ end
40
+
41
+ ##
42
+ # 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
46
+ def list(resource,limit=0,params={})
47
+ uri = '/api/' + resource.to_s
48
+ params.merge!({limit: limit.to_s})
49
+ http_get(uri,params)
50
+ end
51
+
52
+ ##
53
+ # fetch a specific resource
54
+ # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
55
+ # identifier is id, pagename, slug, etc.
56
+ # params is a hash of query string params
57
+ def fetch(resource,identifier,params={})
58
+ uri = '/api/' + resource.to_s + '/' + identifier
59
+ http_get(uri,params)
60
+ end
61
+
62
+ ##
63
+ # create a specific resource
64
+ # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
65
+ def create(resource,identifier,json)
66
+ raise 'Not Yet Implemented'
67
+ end
68
+
69
+ ##
70
+ # update a specific resource
71
+ # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
72
+ # identifier is id, pagename, slug, etc.
73
+ def update(resource,identifier,json)
74
+ raise 'Not Yet Implemented'
75
+ end
76
+
77
+ ##
78
+ # delete a specific resource
79
+ # resources are "site", "page", "user", "file", "map", "tag", "page_tag"
80
+ # identifier is id, pagename, slug, etc.
81
+ def delete(resource,identifier)
82
+ raise 'Not Yet Implemented'
83
+ end
84
+
85
+ private
86
+
87
+ ##
88
+ # Get site resource and set instance variables
89
+ #
90
+ def collect_site_details
91
+ site = fetch('site','1')
92
+ @site_name = site['name']
93
+ @time_zone = site['time_zone']
94
+ @language_code = site['language_code']
95
+ end
96
+
97
+ ##
98
+ # create Faraday::Connection instance and set @site
99
+ #
100
+ def create_connection
101
+ @site = Faraday.new :url => @hostname
102
+ end
103
+
104
+ ##
105
+ # http get request
106
+ # url is formatted as http://[@hostname]/[thing(s)-you-want]?[params]
107
+ #
108
+ def http_get(uri,params={})
109
+ params.merge!({format: 'json'})
110
+ full_url = 'http://' + @hostname + uri.to_s
111
+ response = @site.get full_url, params
112
+ JSON.parse(response.body)
113
+ end
114
+
115
+ def http_post()
116
+ raise 'Not Yet Implemented'
117
+ end
118
+
119
+ def http_put()
120
+ raise 'Not Yet Implemented'
121
+ end
122
+
123
+ def http_delete()
124
+ raise 'Not Yet Implemented'
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,5 @@
1
+ module Localwiki
2
+
3
+ VERSION = '0.1.0'
4
+
5
+ end
@@ -1,4 +1,8 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__)) unless
2
+ $LOAD_PATH.include?(File.dirname(__FILE__)) || $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
- require 'localwiki_client/localwiki_client'
4
+ require 'localwiki/client'
5
+ require 'localwiki/version'
6
+
7
+ # convenience class
8
+ class LocalwikiClient < Localwiki::Client; end
Binary file
@@ -1,8 +1,11 @@
1
+ $LOAD_PATH.unshift(File.expand_path('./lib', File.dirname(__FILE__)))
2
+ require 'localwiki/version'
3
+
1
4
  Gem::Specification.new do |s|
2
5
  s.name = 'localwiki_client'
3
- s.version = '0.0.4'
6
+ s.version = Localwiki::VERSION
4
7
  s.authors = ["Brandon Faloona", "Seth Vincent"]
5
- s.description = %{ A thin wrapper around the Localwiki API. }
8
+ s.description = %{ A thin client that wraps the Localwiki API. }
6
9
  s.summary = "localwiki_client-#{s.version}"
7
10
  s.email = 'brandon@faloona.net'
8
11
  s.homepage = "http://github.com/bfaloona/localwiki_client"
@@ -10,7 +13,7 @@ Gem::Specification.new do |s|
10
13
  s.platform = Gem::Platform::RUBY
11
14
  s.required_ruby_version = '>= 1.9.2'
12
15
 
13
- s.add_dependency('rest-client')
16
+ s.add_dependency('faraday')
14
17
  s.add_dependency('json')
15
18
 
16
19
  s.add_development_dependency('rake')
@@ -0,0 +1,9 @@
1
+ {
2
+ "content": "<p>\n\t </p>\n<table class=\"details\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Location</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<p>\n\t\t\t\t\t2918 Southwest Avalon Way</p>\n\t\t\t\t<p>\n\t\t\t\t\tSeattle, WA 98126</p>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Hours</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t7am - 10pm Everyday</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Phone</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t(206) 935-7250</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Website</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<a href=\"http://www.lunaparkcafe.com/\">lunaparkcafe.com</a></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Established</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tMarch 18th, 1989</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Price range</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t$10</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Payment Methods</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tCash, credit cards</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Wheelchair accessibility</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tNo stairs.</td>\n\t\t</tr>\n\t</tbody>\n</table>\n<p>\n\tFantastic diner filled with historic references to the Luna Park amusement park.</p>\n<p>\n\t<span class=\"image_frame image_frame_border\"><img src=\"_files/luna_park_cafe_front.jpg\" style=\"width: 300px; height: 225px;\"></span><span class=\"image_frame image_frame_border\"><img src=\"_files/luna_park_cafe_batmobile_ride.jpg\" style=\"width: 300px; height: 225px;\"></span></p>\n<h3>\n\tRelated Links</h3>\n<ul>\n\t<li>\n\t\t<a href=\"Restaurants\">Restaurants</a></li>\n</ul>\n<p>\n\t </p>\n",
3
+ "id": 572,
4
+ "map": "/api/map/Luna_Park_Cafe",
5
+ "name": "Luna Park Cafe",
6
+ "page_tags": "/api/page_tags/Luna_Park_Cafe",
7
+ "resource_uri": "/api/page/Luna_Park_Cafe",
8
+ "slug": "luna park cafe"
9
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "domain": "mockwiki.foo",
3
+ "id": 1,
4
+ "language_code": "en-us",
5
+ "license": "<p>Except where otherwise noted, this content is licensed under a <a rel=\" license\" href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution License</a>. See <a href=\"/Copyrights\">Copyrights.</p>",
6
+ "name": "Salt Lake Wiki",
7
+ "resource_uri": "/api/site/1",
8
+ "signup_tos": "I agree to release my contributions under the <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/3.0/\" target=\"_blank\">Creative Commons-By license</a>, unless noted otherwise. See <a href=\"/Copyrights\" target=\"_blank\">Copyrights</a>.",
9
+ "time_zone": "America/Chicago"
10
+ }
@@ -0,0 +1,18 @@
1
+ {"meta": {
2
+ "limit": 20,
3
+ "next": null,
4
+ "offset": 0,
5
+ "previous": null,
6
+ "total_count": 1
7
+ }, "objects": [
8
+ {
9
+ "domain": "seattlewiki.net",
10
+ "id": 1,
11
+ "language_code": "en-us",
12
+ "license": "<p>Except where otherwise noted, this content is licensed under a <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution License</a>. See <a href=\"/Copyrights\">Copyrights.</p>",
13
+ "name": "SeattleWiki",
14
+ "resource_uri": "/api/site/1",
15
+ "signup_tos": "I agree to release my contributions under the <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/3.0/\" target=\"_blank\">Creative Commons-By license</a>, unless noted otherwise. See <a href=\"/Copyrights\" target=\"_blank\">Copyrights</a>.",
16
+ "time_zone": "America/Chicago"
17
+ }
18
+ ]}
@@ -0,0 +1,49 @@
1
+ {
2
+ "meta": {
3
+ "limit": 0,
4
+ "offset": 0,
5
+ "total_count": 6
6
+ }, "objects": [
7
+ {
8
+ "date_joined": "2012-10-05T21:12:34.103559",
9
+ "first_name": "",
10
+ "last_name": "",
11
+ "resource_uri": "",
12
+ "username": "AnonymousUser"
13
+ },
14
+ {
15
+ "date_joined": "2012-11-02T15:24:44.621040",
16
+ "first_name": "Lou",
17
+ "last_name": "Davis",
18
+ "resource_uri": "/api/user/3",
19
+ "username": "loudavis"
20
+ },
21
+ {
22
+ "date_joined": "2012-10-17T14:01:40.778496",
23
+ "first_name": "Tod",
24
+ "last_name": "Davis",
25
+ "resource_uri": "/api/user/2",
26
+ "username": "toddavis"
27
+ },
28
+ {
29
+ "date_joined": "2012-11-20T21:47:33.152069",
30
+ "first_name": "Jessie",
31
+ "last_name": "Me",
32
+ "resource_uri": "/api/user/4",
33
+ "username": "jessieme"
34
+ },
35
+ {
36
+ "date_joined": "2012-10-05T21:12:33",
37
+ "first_name": "Andrew",
38
+ "last_name": "Drew",
39
+ "resource_uri": "/api/user/1",
40
+ "username": "andrewdrew"
41
+ },
42
+ {
43
+ "date_joined": "2012-12-08T15:33:29.251275",
44
+ "first_name": "Ryan",
45
+ "last_name": "Buyin",
46
+ "resource_uri": "/api/user/5",
47
+ "username": "ryanbuyin"
48
+ }
49
+ ]}
data/spec/helper.rb ADDED
@@ -0,0 +1,4 @@
1
+
2
+ def load_json filename
3
+ File.open(File.expand_path("../data", __FILE__) + "/#{filename}", 'r').read
4
+ end
@@ -3,7 +3,7 @@ require 'localwiki_client'
3
3
 
4
4
  describe 'LIVE saltlakewiki.org' do
5
5
 
6
- subject { LocalwikiClient.new 'saltlakewiki.org' }
6
+ subject { Localwiki::Client.new 'saltlakewiki.org' }
7
7
 
8
8
  context '#time_zone' do
9
9
  it {subject.time_zone.should eq 'America/Chicago' }
@@ -14,7 +14,7 @@ describe 'LIVE saltlakewiki.org' do
14
14
  end
15
15
 
16
16
  context '#total_resources("user")' do
17
- it {subject.total_resources('user').to_i.should > 2}
17
+ it {subject.count('user').to_i.should > 2}
18
18
  end
19
19
 
20
20
  end
@@ -1,74 +1,37 @@
1
1
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
2
  require 'localwiki_client'
3
3
  require 'rspec/mocks'
4
+ require 'helper'
4
5
 
5
- describe 'LocalwikiClient' do
6
+ describe 'LocalwikiClient convenience class' do
6
7
 
7
- context 'Site details' do
8
- subject { LocalwikiClient.new 'mockwiki.foo' }
8
+ context 'initialize' do
9
+
10
+ before(:all) do
11
+ @site_fetch_json = load_json 'site_fetch.json'
12
+ end
9
13
 
10
14
  before(:each) do
11
15
  response = double('response')
12
- response.stub(:body) {
13
- %q[{"domain": "mockwiki.foo", "id": 1, "language_code": "en-us", "license": "<p>Except where otherwise noted, this content is licensed under a <a rel=\" license\" href=\"http://creativecommons.org/licenses/by/3.0/\">Creative Commons Attribution License</a>. See <a href=\"/Copyrights\">Copyrights.</p>", "name": "Salt Lake Wiki", "resource_uri": "/api/site/1", "signup_tos": "I agree to release my contributions under the <a rel=\"license\" href=\"http://creativecommons.org/licenses/by/3.0/\" target=\"_blank\">Creative Commons-By license</a>, unless noted otherwise. See <a href=\"/Copyrights\" target=\"_blank\">Copyrights</a>.","time_zone": "America/Chicago"}]
14
- }
15
- RestClient::Request.should_receive(:execute
16
+ response.stub(:body) { @site_fetch_json }
17
+ conn = double('conn')
18
+ Faraday.should_receive(:new
16
19
  ).with(
17
- {:method => :get,
18
- :url => 'http://mockwiki.foo/api/site/1?limit=0&format=json',
19
- :timeout => 120}
20
+ { url: 'mockwiki.foo' }
21
+ ).and_return(conn)
22
+ # Faraday::Connection.any_instance
23
+ conn.should_receive(:get
24
+ ).with(
25
+ 'http://mockwiki.foo/api/site/1',
26
+ {format: 'json'}
20
27
  ).and_return(response)
21
28
  end
22
29
 
23
- it {should respond_to :hostname}
24
- it {should respond_to :site_name}
25
- it {should respond_to :time_zone}
26
- it {should respond_to :language_code}
27
- it {should respond_to :total_resources}
28
- it {should respond_to :page_by_name}
29
-
30
- context 'mockwiki.foo' do
31
-
32
- context '#time_zone' do
33
- it {subject.time_zone.should eq 'America/Chicago' }
34
- end
35
-
36
- context '#language_code' do
37
- it {subject.language_code.should eq 'en-us'}
38
- end
39
-
40
- context '#total_resources("user")' do
41
- it 'should eq 6' do
42
- response = double('response')
43
- response.stub(:body) {
44
- %q<{"meta": {"limit": 0, "offset": 0, "total_count": 6}, "objects": [{"date_joined": "2012-10-05T21:12:34.103559", "first_name": "", "last_name": "", "resource_uri": "", "username": "AnonymousUser"}, {"date_joined": "2012-11-02T15:24:44.621040", "first_name": "Kris", "last_name": "Trujillo", "resource_uri": "/api/user/3", "username": "kristrujillo"}, {"date_joined": "2012-10-17T14:01:40.778496", "first_name": "Tod", "last_name": "Robbins", "resource_uri": "/api/user/2", "username": "todrobbins"}, {"date_joined": "2012-11-20T21:47:33.152069", "first_name": "Jessie", "last_name": "", "resource_uri": "/api/user/4", "username": "jessiepech"}, {"date_joined": "2012-10-05T21:12:33", "first_name": "Andrew", "last_name": "Sullivan", "resource_uri": "/api/user/1", "username": "licyeus"}, {"date_joined": "2012-12-08T15:33:29.251275", "first_name": "Ryan", "last_name": "", "resource_uri": "/api/user/5", "username": "saltlakeryan"}]}>
45
- }
46
- RestClient::Request.should_receive(:execute
47
- ).with(
48
- {:method => :get,
49
- :url => 'http://mockwiki.foo/api/user?limit=1&format=json',
50
- :timeout => 120}
51
- ).and_return(response)
52
- subject.total_resources('user').should eq 6
53
- end
54
- end
55
-
56
- context "#page_by_name('Luna Park Cafe')" do
57
- it 'has content matching "amusement park"' do
58
- response = double('response')
59
- response.stub(:body) {
60
- %q[{"content": "<p>\n\t </p>\n<table class=\"details\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Location</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<p>\n\t\t\t\t\t2918 Southwest Avalon Way</p>\n\t\t\t\t<p>\n\t\t\t\t\tSeattle, WA 98126</p>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Hours</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t7am - 10pm Everyday</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Phone</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t(206) 935-7250</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Website</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<a href=\"http://www.lunaparkcafe.com/\">lunaparkcafe.com</a></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Established</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tMarch 18th, 1989</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Price range</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t$10</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Payment Methods</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tCash, credit cards</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"background-color: rgb(232, 236, 239);\">\n\t\t\t\t<strong>Wheelchair accessibility</strong></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\tNo stairs.</td>\n\t\t</tr>\n\t</tbody>\n</table>\n<p>\n\tFantastic diner filled with historic references to the Luna Park amusement park.</p>\n<p>\n\t<span class=\"image_frame image_frame_border\"><img src=\"_files/luna_park_cafe_front.jpg\" style=\"width: 300px; height: 225px;\"></span><span class=\"image_frame image_frame_border\"><img src=\"_files/luna_park_cafe_batmobile_ride.jpg\" style=\"width: 300px; height: 225px;\"></span></p>\n<h3>\n\tRelated Links</h3>\n<ul>\n\t<li>\n\t\t<a href=\"Restaurants\">Restaurants</a></li>\n</ul>\n<p>\n\t </p>\n", "id": 572, "map": "/api/map/Luna_Park_Cafe", "name": "Luna Park Cafe", "page_tags": "/api/page_tags/Luna_Park_Cafe", "resource_uri": "/api/page/Luna_Park_Cafe", "slug": "luna park cafe"}]
61
- }
62
- RestClient::Request.should_receive(:execute
63
- ).with(
64
- {:method => :get,
65
- :url => 'http://mockwiki.foo/api/page/Luna_Park_Cafe?limit=0&format=json',
66
- :timeout => 120}
67
- ).and_return(response)
68
- subject.page_by_name('Luna Park Cafe')['content'].should match(/amusement park/)
69
- end
70
- end
30
+ subject { LocalwikiClient.new 'mockwiki.foo' }
71
31
 
32
+ context '#site_name' do
33
+ it { subject.site_name.should eq 'Salt Lake Wiki' }
72
34
  end
35
+
73
36
  end
74
37
  end
data/spec/page_spec.rb ADDED
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require 'localwiki_client'
3
+ require 'rspec/mocks'
4
+ require 'helper'
5
+
6
+ describe Localwiki::Client do
7
+
8
+ context 'page' do
9
+
10
+ before(:all) do
11
+ @site_fetch_json = load_json 'site_fetch.json'
12
+ end
13
+
14
+ subject { Localwiki::Client.new 'mockwiki.foo' }
15
+
16
+ context "#page_by_name('Luna Park Cafe')" do
17
+ it 'has content matching "amusement park"' do
18
+ response = double('response')
19
+ response.stub(:body) { @site_fetch_json }
20
+ conn = double('conn')
21
+ Faraday.should_receive(:new
22
+ ).with(
23
+ { url: 'mockwiki.foo' }
24
+ ).and_return(conn)
25
+ conn.should_receive(:get
26
+ ).with(
27
+ 'http://mockwiki.foo/api/site/1',
28
+ {format: 'json'}
29
+ ).and_return(response)
30
+ response1 = double('response1')
31
+ response1.stub(:body) { load_json 'page_fetch.json' }
32
+ conn.should_receive(:get
33
+ ).with(
34
+ 'http://mockwiki.foo/api/page/Luna_Park_Cafe', {format: 'json'}
35
+ ).and_return(response1)
36
+ subject.page_by_name('Luna Park Cafe')['content'].should match(/amusement park/)
37
+ end
38
+ end
39
+
40
+ end
41
+ end
data/spec/site_spec.rb ADDED
@@ -0,0 +1,48 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require 'localwiki_client'
3
+ require 'rspec/mocks'
4
+ require 'helper'
5
+
6
+ describe Localwiki::Client do
7
+
8
+ context 'site' do
9
+
10
+ before(:all) do
11
+ @site_fetch_json = load_json 'site_fetch.json'
12
+ end
13
+
14
+ before(:each) do
15
+ response = double('response')
16
+ response.stub(:body) { @site_fetch_json }
17
+ conn = double('conn')
18
+ Faraday.should_receive(:new
19
+ ).with(
20
+ { url: 'mockwiki.foo' }
21
+ ).and_return(conn)
22
+ # Faraday::Connection.any_instance
23
+ conn.should_receive(:get
24
+ ).with(
25
+ 'http://mockwiki.foo/api/site/1',
26
+ {format: 'json'}
27
+ ).and_return(response)
28
+ end
29
+
30
+ subject { Localwiki::Client.new 'mockwiki.foo' }
31
+
32
+ context 'attributes' do
33
+
34
+ context '#site_name' do
35
+ it { subject.site_name.should eq 'Salt Lake Wiki' }
36
+ end
37
+
38
+ context '#time_zone' do
39
+ it { subject.time_zone.should eq 'America/Chicago' }
40
+ end
41
+
42
+ context '#language_code' do
43
+ it { subject.language_code.should eq 'en-us'}
44
+ end
45
+
46
+ end
47
+ end
48
+ end
data/spec/user_spec.rb ADDED
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require 'localwiki_client'
3
+ require 'rspec/mocks'
4
+ require 'helper'
5
+
6
+ describe Localwiki::Client do
7
+
8
+ context 'user' do
9
+
10
+ before(:all) do
11
+ @site_fetch_json = load_json 'site_fetch.json'
12
+ end
13
+
14
+ subject { Localwiki::Client.new 'mockwiki.foo' }
15
+
16
+ context '#total_resources("user")' do
17
+ it 'should eq 6' do
18
+ response = double('response')
19
+ response.stub(:body) { @site_fetch_json }
20
+ conn = double('conn')
21
+ Faraday.should_receive(:new
22
+ ).with(
23
+ { url: 'mockwiki.foo' }
24
+ ).and_return(conn)
25
+ conn.should_receive(:get
26
+ ).with(
27
+ 'http://mockwiki.foo/api/site/1',
28
+ {format: 'json'}
29
+ ).and_return(response)
30
+ response1 = double('response1')
31
+ response1.stub(:body) { load_json 'user_list.json' }
32
+ conn.should_receive(:get
33
+ ).with(
34
+ 'http://mockwiki.foo/api/user', {format: 'json', limit: '1'}
35
+ ).and_return(response1)
36
+ subject.count('user').should eq 6
37
+ end
38
+ end
39
+
40
+ end
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localwiki_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,10 +10,10 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-05 00:00:00.000000000 Z
13
+ date: 2013-02-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rest-client
16
+ name: faraday
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
@@ -156,7 +156,7 @@ dependencies:
156
156
  - - ! '>='
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
- description: ! ' A thin wrapper around the Localwiki API. '
159
+ description: ! ' A thin client that wraps the Localwiki API. '
160
160
  email: brandon@faloona.net
161
161
  executables: []
162
162
  extensions: []
@@ -170,15 +170,25 @@ files:
170
170
  - History.txt
171
171
  - README.md
172
172
  - Rakefile
173
+ - lib/localwiki/client.rb
174
+ - lib/localwiki/version.rb
173
175
  - lib/localwiki_client.rb
174
- - lib/localwiki_client/localwiki_client.rb
176
+ - localwiki_client-0.0.4.gem
175
177
  - localwiki_client.gemspec
178
+ - spec/data/page_fetch.json
179
+ - spec/data/site_fetch.json
180
+ - spec/data/site_list.json
181
+ - spec/data/user_list.json
182
+ - spec/helper.rb
176
183
  - spec/integration/live_saltlake_wiki_spec.rb
177
184
  - spec/localwiki_client_spec.rb
185
+ - spec/page_spec.rb
186
+ - spec/site_spec.rb
187
+ - spec/user_spec.rb
178
188
  homepage: http://github.com/bfaloona/localwiki_client
179
189
  licenses:
180
190
  - MIT
181
- post_install_message: ! "\n Thank you for installing localwiki_client 0.0.4\n "
191
+ post_install_message: ! "\n Thank you for installing localwiki_client 0.1.0\n "
182
192
  rdoc_options:
183
193
  - --charset=UTF-8
184
194
  require_paths:
@@ -200,6 +210,6 @@ rubyforge_project:
200
210
  rubygems_version: 1.8.24
201
211
  signing_key:
202
212
  specification_version: 3
203
- summary: localwiki_client-0.0.4
213
+ summary: localwiki_client-0.1.0
204
214
  test_files: []
205
215
  has_rdoc:
@@ -1,70 +0,0 @@
1
- require 'rest-client'
2
- require 'json/pure'
3
-
4
- ##
5
- # A client that wraps the localwiki api for a given server instance
6
- #
7
- class LocalwikiClient
8
-
9
- attr_accessor :hostname # hostname of the server we'd like to point at
10
- attr_reader :site_name # site resource - display name of wiki
11
- attr_reader :time_zone # site resource - time zone of server, e.g. 'America/Chicago'
12
- attr_reader :language_code # site resource - language code of the server, e.g. 'en-us'
13
-
14
- ##
15
- # Creating a LocalWikiClient instance will get it's site resource data
16
- #
17
- # LocalwikiClient.new 'seattlewiki.net'
18
- #
19
- def initialize hostname
20
- @hostname = hostname
21
- collect_site_details
22
- end
23
-
24
- ##
25
- # Get site resource and set ivars
26
- #
27
- def collect_site_details
28
- site = get_resource('site/1')
29
- @site_name = site['name']
30
- @time_zone = site['time_zone']
31
- @language_code = site['language_code']
32
- end
33
-
34
- ##
35
- # http get request
36
- # url is formatted as http://[url-to-wiki]/[thing-you-want]&format=json
37
- #
38
- def get(resource,timeout=120)
39
- response = RestClient::Request.execute(
40
- :method => :get,
41
- :url => 'http://' + @hostname + resource + '&format=json',
42
- :timeout => timeout)
43
- JSON.parse(response.body)
44
- end
45
-
46
- ##
47
- # http get of a specfic type of resource
48
- # resource_types are "site", "page", "user", "file", "map"
49
- # limit is an integer
50
- # filters is a querystring param in the form "&option=value"
51
- def get_resource(content_type,limit=0,filters='')
52
- resource = '/api/' + content_type + '?limit=' + limit.to_s + filters
53
- get(resource)
54
- end
55
-
56
- ##
57
- # Request total_count of given resource
58
- #
59
- def total_resources(content_type)
60
- get_resource(content_type,1)["meta"]["total_count"]
61
- end
62
-
63
- ##
64
- # Return a page that matches name ("The Page Name" or "The_Page_Name")
65
- #
66
- def page_by_name(name)
67
- get_resource("page/#{name.gsub!(/\s/, '_')}")
68
- end
69
-
70
- end