rodzilla 0.1.3 → 0.3.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.
@@ -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