rodzilla 0.1.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,19 +3,19 @@ module Rodzilla
3
3
  class Bugzilla < Base
4
4
 
5
5
  def version
6
- rpc_call( rpc_method: 'version' )
6
+ rpc_call :version
7
7
  end
8
8
 
9
9
  def time
10
- rpc_call( rpc_method: 'time' )
10
+ rpc_call :time
11
11
  end
12
12
 
13
13
  def timezone
14
- rpc_call( rpc_method: 'timezone' )
14
+ rpc_call :timezone
15
15
  end
16
16
 
17
17
  def extensions
18
- rpc_call( rpc_method: 'extensions' )
18
+ rpc_call :extensions
19
19
  end
20
20
 
21
21
  end
@@ -0,0 +1,7 @@
1
+ module Rodzilla
2
+ module Resource
3
+ class Group < Base
4
+
5
+ end
6
+ end
7
+ end
@@ -6,19 +6,19 @@ module Rodzilla
6
6
 
7
7
  # Returns a list of the ids of the products the user can search on.
8
8
  def get_selectable_products
9
- rpc_call( rpc_method: "get_selectable_products" )
9
+ rpc_call :get_selectable_products
10
10
  end
11
11
 
12
12
  def get_enterable_products
13
- rpc_call( rpc_method: "get_enterable_products" )
13
+ rpc_call :get_selectable_products
14
14
  end
15
15
 
16
16
  def get_accessible_products
17
- rpc_call( rpc_method: "get_accessible_products" )
17
+ rpc_call :get_accessible_products
18
18
  end
19
19
 
20
20
  def get_products(params={})
21
- rpc_call( params.merge( rpc_method: 'get' ) )
21
+ rpc_call :get, params
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,7 @@
1
+ module Rodzilla
2
+ module Resource
3
+ class User < Base
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Rodzilla
2
+ module Util
3
+
4
+ # Extracts the class name from a module string
5
+ #
6
+ # example:
7
+ # demodulize( Rodzilla::WebService::Error ) => 'Error'
8
+ #
9
+ # returns the String path argument
10
+ def demodulize(path)
11
+ path = path.to_s
12
+ if i = path.rindex('::')
13
+ path[(i+2)..-1]
14
+ else
15
+ path
16
+ end
17
+ end
18
+
19
+ module_function :demodulize
20
+
21
+ end
22
+ end
@@ -1,8 +1,8 @@
1
1
  module Rodzilla
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 1
5
- PATCH = 3
4
+ MINOR = 3
5
+ PATCH = 0
6
6
 
7
7
  STRING = [MAJOR,MINOR,PATCH].join('.')
8
8
  end
@@ -0,0 +1,67 @@
1
+ module Rodzilla
2
+ class WebService
3
+
4
+ attr_accessor :base_url, :format, :resource
5
+
6
+ # base_url - The String full uri of the Bugzilla api server
7
+ # username - The String containing the bugzilla authorized users username
8
+ # password - The String containing the bugzilla authorized users password
9
+ # format - The request/response format which defaults to :json
10
+ def initialize(base_url, username, password, format=:json)
11
+ @base_url = base_url
12
+ @username = username
13
+ @password = password
14
+ @format = format
15
+ end
16
+
17
+ # Provide a shortcut for instantiation Bug objects
18
+ #
19
+ # Returns an instance of the Rodzilla::Resource::Bug class
20
+ def bugs
21
+ bugzilla_resource('Bug')
22
+ end
23
+
24
+ # Provide a shortcut for instantiation Bugzilla objects
25
+ #
26
+ # Returns an instance of the Rodzilla::Resource::Bugzilla class
27
+ def bugzilla
28
+ bugzilla_resource('Bugzilla')
29
+ end
30
+
31
+ # Provide a shortcut for instantiation Classification objects
32
+ #
33
+ # Returns an instance of the Rodzilla::Resource::Classification class
34
+ def classifications
35
+ bugzilla_resource('Classification')
36
+ end
37
+
38
+ # Provide a shortcut for instantiation Group objects
39
+ #
40
+ # Returns an instance of the Rodzilla::Resource::Group class
41
+ def groups
42
+ bugzilla_resource('Group')
43
+ end
44
+
45
+ # Provide a shortcut for instantiation Product objects
46
+ #
47
+ # Returns an instance of the Rodzilla::Resource::Product class
48
+ def products
49
+ bugzilla_resource('Product')
50
+ end
51
+
52
+ # Provide a shortcut for instantiation User objects
53
+ #
54
+ # Returns an instance of the Rodzilla::Resource::User class
55
+ def users
56
+ bugzilla_resource('User')
57
+ end
58
+
59
+ def bugzilla_resource(resource)
60
+ raise Rodzilla::Error::ResourceNotFoundError, "Error: Rodzilla::Resource::#{resource} does not exist." unless Rodzilla::Resource.constants.include?(resource.to_sym)
61
+ @resource = Object.module_eval("Rodzilla::Resource::#{resource}").new(@base_url, @username, @password, @format)
62
+ end
63
+
64
+ protected :bugzilla_resource
65
+
66
+ end
67
+ end
data/rodzilla.gemspec CHANGED
@@ -22,11 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.require_paths = ["lib"]
23
23
 
24
24
  spec.add_dependency "httparty"
25
- spec.add_dependency "libxml-ruby"
26
- spec.add_dependency "yajl-ruby"
27
25
 
28
26
  spec.add_development_dependency "bundler", "~> 1.3"
29
- spec.add_development_dependency "minitest"
30
- spec.add_development_dependency "rake"
31
- spec.add_development_dependency "debugger", "~> 1.6.2"
32
27
  end
@@ -0,0 +1 @@
1
+ {"error":null,"id":1,"result":{"extensions":{"AutoComplete":{"version":"0.1"}}}}
@@ -0,0 +1 @@
1
+ {"error":null,"id":1,"result":{"version":"4.4"}}
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ describe Rodzilla::JsonRpc::Error do
4
+
5
+ describe "Exceptions" do
6
+ it "it should have a InvalidResponseId" do
7
+ Rodzilla::JsonRpc::Error.constants.must_include(:InvalidResponseId)
8
+ end
9
+
10
+ it "it should have a UnsupportedHttpMethod" do
11
+ Rodzilla::JsonRpc::Error.constants.must_include(:UnsupportedHttpMethod)
12
+ end
13
+
14
+ it "it should have a ResponseError" do
15
+ Rodzilla::JsonRpc::Error.constants.must_include(:ResponseError)
16
+ end
17
+
18
+ it "it should have a ClientError which inherits from ResponseError" do
19
+ Rodzilla::JsonRpc::Error.constants.must_include(:ClientError)
20
+ Rodzilla::JsonRpc::Error::ClientError.superclass.must_equal(Rodzilla::JsonRpc::Error::ResponseError)
21
+ end
22
+
23
+ it "it should have a ServerError which inherits from ResponseError" do
24
+ Rodzilla::JsonRpc::Error.constants.must_include(:ServerError)
25
+ Rodzilla::JsonRpc::Error::ServerError.superclass.must_equal(Rodzilla::JsonRpc::Error::ResponseError)
26
+ end
27
+
28
+ it "it should have a HttpError" do
29
+ Rodzilla::JsonRpc::Error.constants.must_include(:HttpError)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,65 @@
1
+ require "test_helper"
2
+
3
+ describe Rodzilla::JsonRpc::Request do
4
+ before do
5
+ @request = Rodzilla::JsonRpc::Request.new
6
+ def new_breq(&block)
7
+ Rodzilla::JsonRpc::Request.new(&block)
8
+ end
9
+ end
10
+
11
+ it "should yield itself if a block is given on initialize" do
12
+ r = new_breq { |req| req.id = 15 }
13
+ r.id.must_equal(15)
14
+ end
15
+
16
+ it "should have a method get_request_object" do
17
+ @request.must_respond_to(:get_request_object)
18
+ end
19
+
20
+ it "get_request_object should return a hash with id, method, and params" do
21
+ r = new_breq do |req|
22
+ req.id = 5
23
+ req.method = 'Test'
24
+ req.params = { name: 'nada' }
25
+ end
26
+
27
+ obj = r.get_request_object
28
+ obj.must_be_kind_of(Hash)
29
+
30
+ obj.keys.must_include(:id)
31
+ obj.keys.must_include(:method)
32
+ obj.keys.must_include(:params)
33
+
34
+ obj[:params].must_be_kind_of(Array)
35
+
36
+ end
37
+
38
+ it "serialize should a valid JSON String" do
39
+ r = new_breq { |req| req.id = 5; req.method = "Hello" }
40
+ r.serialize.must_be_kind_of(String)
41
+ end
42
+
43
+ describe "attributes" do
44
+ it "should have methods 'method' and 'method='" do
45
+ @request.must_respond_to(:method)
46
+ @request.must_respond_to(:method=)
47
+ end
48
+
49
+ it "should have methods params and params=" do
50
+ @request.must_respond_to(:params)
51
+ @request.must_respond_to(:params=)
52
+ end
53
+
54
+ it "should have methods id and id=" do
55
+ @request.must_respond_to(:id)
56
+ @request.must_respond_to(:id=)
57
+ end
58
+
59
+ it "should have methods headers and headers=" do
60
+ @request.must_respond_to(:headers)
61
+ @request.must_respond_to(:headers=)
62
+ end
63
+ end
64
+
65
+ end
@@ -0,0 +1,42 @@
1
+ require "test_helper"
2
+
3
+ describe Rodzilla::JsonRpc::Response do
4
+
5
+ before do
6
+ def new_response; Rodzilla::JsonRpc::Response.new; end
7
+ @response = Rodzilla::JsonRpc::Response.new
8
+ end
9
+
10
+ it "error should always be nil after initialization" do
11
+ new_response.error.must_be_nil
12
+ end
13
+
14
+ describe "read_http_response" do
15
+ it "should respond_to read_http_response" do
16
+ @response.must_respond_to(:read_http_response)
17
+ end
18
+
19
+ it "should raise an ArgumentError when no args" do
20
+ lambda {
21
+ @response.read_http_response
22
+ }.must_raise(ArgumentError)
23
+ end
24
+ end
25
+
26
+ describe "accessors" do
27
+ it "should have method id & id=" do
28
+ @response.must_respond_to(:id)
29
+ @response.must_respond_to(:id=)
30
+ end
31
+
32
+ it "should have methods error & error=" do
33
+ @response.must_respond_to(:error)
34
+ @response.must_respond_to(:error=)
35
+ end
36
+
37
+ it "should have methods result & result=" do
38
+ @response.must_respond_to(:result)
39
+ @response.must_respond_to(:result=)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,110 @@
1
+ require 'test_helper'
2
+
3
+ describe Rodzilla::JsonRpc::Service do
4
+ before do
5
+ def new_service; Rodzilla::JsonRpc::Service.new('http://bugzilla.test.com/jsonrpc.cgi', 'user', 'passwd'); end
6
+ @service = Rodzilla::JsonRpc::Service.new('http://bugzilla.test.com/jsonrpc.cgi', 'user', 'passwd')
7
+ stub_bugzilla_request('Bugzilla.version')
8
+ @version_body = method_fixture('Bugzilla_version.json').read
9
+ end
10
+
11
+ it "must include HTTParty" do
12
+ @service.class.ancestors.must_include(HTTParty)
13
+ end
14
+
15
+ it "must set Bugzilla_login and Bugzilla_password on initialize" do
16
+ s = new_service
17
+ s.instance_variable_get(:@credentials).wont_be_nil
18
+ s.credentials.must_equal({ Bugzilla_login: "user", Bugzilla_password: "passwd" })
19
+ end
20
+
21
+ it "execute_request_and_response should return the Response#result" do
22
+ s = Rodzilla::JsonRpc::Service.new('http://bugzilla.test.com/jsonrpc.cgi', 'user', 'passwd')
23
+ res = s.execute_request_and_response(:post)
24
+ res.must_be_kind_of(Hash)
25
+ res.must_equal(s.rpc_response.result)
26
+ end
27
+
28
+ describe "cycle_id checks" do
29
+
30
+ it "generate_cycle_id should return 1" do
31
+ @service.send(:generate_cycle_id).must_equal(1)
32
+ end
33
+
34
+ it "check_cycle_id should return false if request.id is not equal to response.id" do
35
+ s = new_service
36
+ s.send(:setup_request)
37
+ s.rpc_request.id = 5
38
+ s.rpc_response = Rodzilla::JsonRpc::Response.new
39
+ s.rpc_response.id = 4
40
+ s.send(:check_cycle_id).must_equal(false)
41
+ end
42
+
43
+ it "check_cycle_id should return true if request.id and response.id are equal" do
44
+ s = new_service
45
+ s.send(:setup_request)
46
+ s.rpc_request.id = 3
47
+ s.rpc_response = Rodzilla::JsonRpc::Response.new
48
+ s.rpc_response.id = 3
49
+ s.send(:check_cycle_id).must_equal(true)
50
+ end
51
+ end
52
+
53
+
54
+ describe "send_request!" do
55
+ it "should raise an ArgumentError when no rpc_method is supplied" do
56
+ lambda { @service.send_request! }.must_raise(ArgumentError)
57
+ end
58
+
59
+ it "should raise a UnsupportedHttpMethod error when a http_method besides GET or POST is used" do
60
+ lambda {
61
+ @service.send_request!('Bugzilla.version', {}, :put)
62
+ }.must_raise(Rodzilla::JsonRpc::Error::UnsupportedHttpMethod)
63
+ end
64
+
65
+ it "should return a JSON Hash for a successfull API call" do
66
+ @service.send_request!('Bugzilla.version').must_be_kind_of(Hash)
67
+ end
68
+ end
69
+
70
+ describe "setup request" do
71
+
72
+ it "should instantiate the request object" do
73
+ s = new_service
74
+ s.rpc_request = nil
75
+ s.send(:setup_request)
76
+ s.rpc_request.must_be_kind_of(Rodzilla::JsonRpc::Request)
77
+ end
78
+
79
+ it "should set the json-rpc header on request.headers object" do
80
+ s = new_service
81
+ s.rpc_request = nil
82
+ s.send(:setup_request)
83
+ s.rpc_request.headers.must_equal({ 'Content-Type' => 'application/json-rpc' })
84
+ end
85
+
86
+ end
87
+
88
+ describe "setup_request_data" do
89
+
90
+ it "should raise an ArgumentError when no rcp_method is supplied" do
91
+ lambda { @service.send(:setup_request_data) }.must_raise(ArgumentError)
92
+ end
93
+
94
+ it "should always include the credentials in the params" do
95
+ new_method = 'Bugzilla.version'
96
+ new_params = { ids: [1,2,3] }
97
+
98
+ orig_creds = @service.credentials.dup
99
+
100
+ @service.send(:setup_request_data, new_method, new_params )
101
+
102
+
103
+ @service.rpc_request.method.must_equal(new_method)
104
+
105
+ @service.rpc_request.params[:Bugzilla_login].wont_be_nil
106
+ @service.rpc_request.params[:Bugzilla_password].wont_be_nil
107
+ end
108
+ end
109
+
110
+ end