kayakoapi-ruby 1.0.4 → 1.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,10 +1,6 @@
1
- # Kayakoapi::Ruby
1
+ # Kayakoapi-Ruby
2
2
 
3
- Basic ruby app to generate Kayako API URLS.
4
-
5
- Currently prints the generated URL to the console.
6
-
7
- Minutely tested.
3
+ Basic ruby gem to generate API signatures compatible with the [Kayako REST API](http://wiki.kayako.com/display/DEV/Kayako+REST+API)
8
4
 
9
5
  ## Installation
10
6
 
@@ -12,9 +8,9 @@ Add this line to your application's Gemfile:
12
8
 
13
9
  gem 'kayakoapi-ruby'
14
10
 
15
- And then execute:
11
+ And then:
16
12
 
17
- $ bundle
13
+ $ bundle install
18
14
 
19
15
  Or install it yourself as:
20
16
 
@@ -22,18 +18,21 @@ Or install it yourself as:
22
18
 
23
19
  ## Usage
24
20
 
25
- $ kayakoapi-ruby - u url-base -k app-key -s app-secret
21
+ require 'kayako-ruby'
26
22
 
27
- salt is randomly generated.
23
+ generator = KayakoApi.new('http://my.kayako.helpdesk/api', 'my-application-key', 'my-application-secret')
28
24
 
29
- e.g.
25
+ generator.url
26
+ #=> "http://my.kayako.helpdesk/api/index.php?signature=%57%56%4A%65%4D%65+%31%4A%6B%34%33%4E%32%6C%56%6E/%70%4D%6D%33%5A%57%79%31%4F%51%31%50%62%34%76%67%74%47%41%4E%67%4A%42%35%45=&salt=5870184239&apikey=1234567890"
30
27
 
31
- $ kayakoapi-ruby -u http://my-api-url/
28
+ generator.signature
29
+ #=> {:signature=>"%61%33%4F%6F%59%39%44%79%71%31%4F%6D%4D%6F%74%7A%47%44%4A%76%37%30%4F%6C%6F%48%74/%79%6D%6F%4C%70%43%77%57%52%57%41%6F%52%45%6B=", :salt=>"5265651781", :apikey=>"my-application-key"}
32
30
 
33
- Output:
31
+ nb. you will need to add your own controller and action to the url.
34
32
 
35
- $ Generated URL: http://my-api-url/api/index.php?/Controller/Action&signature=%57%56%4A%65%4D%65+%31%4A%6B%34%33%4E%32%6C%56%6E/%70%4D%6D%33%5A%57%79%31%4F%51%31%50%62%34%76%67%74%47%41%4E%67%4A%42%35%45=&salt=5870184239&apikey=1234567890
33
+ If an error occurs, KayakoApi#url will return false.
36
34
 
35
+ The salt is randomly generated, but included in the querystring (as per the [Kayako REST API](http://wiki.kayako.com/display/DEV/Kayako+REST+API).
37
36
 
38
37
  ## Contributing
39
38
 
@@ -2,22 +2,25 @@ require "kayakoapi-ruby/version"
2
2
  require "kayakoapi-ruby/apisig"
3
3
  require "kayakoapi-ruby/urlgenerator"
4
4
 
5
- module Kayakoapi
6
- require 'uri'
5
+ require 'uri'
7
6
 
8
- class App
9
- def initialize(base_url, app_key, app_secret)
10
- @api_sig = APISig.new(app_key, app_secret)
11
- @url_builder = URLGenerator.new(base_url)
12
- end
7
+ class KayakoApi
8
+ def initialize(base_url, app_key, app_secret)
9
+ @api_sig = Kayakoapi::APISig.new(app_key, app_secret)
10
+ @url_builder = Kayakoapi::URLGenerator.new(base_url)
11
+ end
13
12
 
14
- def run
15
- @api_sig.new_signature.each { |key, value| @url_builder.append_to_url(key, value) }
16
- begin
17
- puts "Generated URL: #{@url_builder.full_url}"
18
- rescue => e
19
- puts "URL Could not be generated, no parameters were appended to the URL."
20
- end
13
+ def url
14
+ @api_sig.new_signature.each { |key, value| @url_builder.append_to_url(key, value) }
15
+ begin
16
+ @url_builder.full_url
17
+ rescue => e
18
+ false
21
19
  end
22
20
  end
21
+
22
+ def signature
23
+ @api_sig.new_signature
24
+ end
23
25
  end
26
+
@@ -1,5 +1,4 @@
1
1
  module Kayakoapi
2
- # Required Libraries
3
2
  require 'openssl'
4
3
  require 'base64'
5
4
 
@@ -10,7 +9,7 @@ module Kayakoapi
10
9
  end
11
10
 
12
11
  def get_salt()
13
- @last_salt = rand(10000000000).to_s
12
+ rand(10000000000).to_s
14
13
  end
15
14
 
16
15
  def hash(key, salt)
@@ -22,11 +21,11 @@ module Kayakoapi
22
21
  end
23
22
 
24
23
  def new_signature()
25
- self.get_salt
26
- hash = self.hash(@secret_key, @last_salt)
24
+ salt = self.get_salt
25
+ hash = self.hash(@secret_key, salt)
27
26
  b64hash = self.b64encode hash
28
- @last_hash = URLGenerator::urlncode b64hash.strip
29
- return { signature: @last_hash, salt: @last_salt, apikey: @api_key }
27
+ last_hash = URLGenerator::urlncode b64hash.strip
28
+ return { signature: last_hash, salt: salt, apikey: @api_key }
30
29
  end
31
30
  end
32
31
  end
@@ -1,5 +1,5 @@
1
1
  module Kayakoapi
2
- class NoURLParametersException < Exception
2
+ class NoURLParameters < Exception
3
3
  def initialize(data)
4
4
  @data = data
5
5
  end
@@ -2,9 +2,12 @@ module Kayakoapi
2
2
  require 'uri'
3
3
 
4
4
  class URLGenerator
5
+ attr_accessor :url_root, :params
6
+
5
7
  def initialize(url_root)
6
8
  @url_root = url_root
7
9
  @params = {}
10
+ @first_param = true
8
11
  end
9
12
 
10
13
  def append_to_url(key, value)
@@ -14,10 +17,15 @@ module Kayakoapi
14
17
  def full_url
15
18
  current_url = @url_root
16
19
  if @params.empty?
17
- raise NoURLParametersException.new(msg: "Params hash is empty while attempting to build a URL.")
20
+ raise NoURLParameters.new(msg: "Params hash is empty while attempting to build a URL.")
18
21
  else
19
22
  @params.each do |key, value|
20
- current_url += "&#{key}=#{value}"
23
+ if @first_param
24
+ current_url += "?#{key}=#{value}"
25
+ @first_param = false
26
+ else
27
+ current_url += "&#{key}=#{value}"
28
+ end
21
29
  end
22
30
  return current_url
23
31
  end
@@ -31,4 +39,4 @@ module Kayakoapi
31
39
  URI.escape(string, Regexp.new("[Generating an API Signature^#{URI::PATTERN::UNRESERVED}]"))
32
40
  end
33
41
  end
34
- end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module Kayakoapi
2
- VERSION = "1.0.4"
2
+ VERSION = "1.1.0"
3
3
  end
data/spec/apisig_spec.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
  require "kayakoapi-ruby/apisig"
3
- require "kayakoapi-ruby/urlgenerator"
4
3
 
5
4
  describe "APISig" do
6
5
  before :each do
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,5 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
1
4
  lib = File.expand_path('../lib', __FILE__)
2
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require "kayakoapi-ruby/urlgenerator"
3
+ require "kayakoapi-ruby/exceptions"
4
+
5
+ describe "URLGenerator" do
6
+ before :each do
7
+ @urlgen = Kayakoapi::URLGenerator.new("http://fake-url.com/")
8
+ @urlgen.append_to_url('one', 'valueone')
9
+ @urlgen.append_to_url('two', 'valuetwo')
10
+ end
11
+
12
+ it "should remember the url" do
13
+ @urlgen.url_root.should_not be_nil
14
+ end
15
+
16
+ it "should accept new parameters" do
17
+ @urlgen.append_to_url('troled', 'pigs')
18
+ @urlgen.params.should have_key('troled')
19
+ @urlgen.params['troled'].should eq 'pigs'
20
+ end
21
+
22
+ it "should return a string when asked to create a full_url" do
23
+ @urlgen.full_url.should eq "http://fake-url.com/?one=valueone&two=valuetwo"
24
+ end
25
+
26
+ it "should raise on failure" do
27
+ @urlgen.params = {}
28
+ expect{@urlgen.full_url}.to raise_error(Kayakoapi::NoURLParameters)
29
+ end
30
+
31
+ it "has a static method for encoding urls" do
32
+ Kayakoapi::URLGenerator::urlncode('tr o%ed').should eq "%74%72%20%6F%%65%64"
33
+ end
34
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kayakoapi-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-07 00:00:00.000000000 Z
12
+ date: 2013-03-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -30,8 +30,7 @@ dependencies:
30
30
  description: Ruby Shoes app to generate Kayako API URLs.
31
31
  email:
32
32
  - bulletraven@gmail.com
33
- executables:
34
- - kayakoapi
33
+ executables: []
35
34
  extensions: []
36
35
  extra_rdoc_files: []
37
36
  files:
@@ -41,7 +40,6 @@ files:
41
40
  - LICENSE.txt
42
41
  - README.md
43
42
  - Rakefile
44
- - bin/kayakoapi
45
43
  - kayakoapi-ruby.gemspec
46
44
  - lib/kayakoapi-ruby.rb
47
45
  - lib/kayakoapi-ruby/apisig.rb
@@ -50,6 +48,7 @@ files:
50
48
  - lib/kayakoapi-ruby/version.rb
51
49
  - spec/apisig_spec.rb
52
50
  - spec/spec_helper.rb
51
+ - spec/urlgenerator_spec.rb
53
52
  homepage: https://github.com/wadtech/kayakoapi-ruby
54
53
  licenses: []
55
54
  post_install_message:
@@ -70,10 +69,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
69
  version: '0'
71
70
  requirements: []
72
71
  rubyforge_project:
73
- rubygems_version: 1.8.24
72
+ rubygems_version: 1.8.25
74
73
  signing_key:
75
74
  specification_version: 3
76
75
  summary: Ruby Shoes app to generate Kayako Resolve API URLs.
77
76
  test_files:
78
77
  - spec/apisig_spec.rb
79
78
  - spec/spec_helper.rb
79
+ - spec/urlgenerator_spec.rb
data/bin/kayakoapi DELETED
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'kayakoapi-ruby'
4
- require 'optparse'
5
-
6
- options = {}
7
-
8
- OptionParser.new do |opts|
9
- opts.banner = "Usage: kayakoapi-ruby [options]"
10
-
11
- opts.on("-u", "--url [URL]", "Base URL for your API Call") do |url|
12
- options[:url] = url
13
- end
14
-
15
- opts.on("-k", "--key [KEY]", "API Key from your Kayako Helpdesk") do |key|
16
- options[:app_key] = key
17
- end
18
-
19
- opts.on("-s", "--secret [SECRET]", "API Secret from your Kayako Helpdesk") do |secret|
20
- options[:secret] = secret
21
- end
22
-
23
- opts.on_tail("-h", "--help", "Show this message") do
24
- puts opts
25
- exit
26
- end
27
-
28
- opts.on_tail("--version", "Show version") do
29
- puts "Kayako API URL Generator: v#{Kayakoapi::VERSION}"
30
- exit
31
- end
32
- end.parse!
33
-
34
- [:url, :app_key, :secret].each do |setting|
35
- if options[setting] == nil
36
- print "Please enter a value for #{setting}: "
37
- options[setting] = gets
38
- end
39
- end
40
-
41
- app = Kayakoapi::App.new(options[:url], options[:app_key], options[:secret])
42
- app.run