hukd 1.0.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.
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ .idea/*
7
+ nbproject/*
8
+ .project/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in hukd.gemspec
4
+ gemspec
@@ -0,0 +1,90 @@
1
+ API Client for HotUKDeals (HUKD)
2
+ ===================================
3
+
4
+ This client allows you to access all the documented API features from *HUKD REST API 2.0*
5
+ http://www.hotukdeals.com/rest-api/docs
6
+
7
+ Please note that the HUKD API Documentation is not entirely upto date (for example there is no longer a clothing category) and the deals return some additional fields such as mobile_deal_link which I've attempted to include.
8
+ You could say that the gem is actually more up to date than the API docs at the time of release :)
9
+
10
+ Prerequisites
11
+ -------------
12
+
13
+ gem install hukd
14
+
15
+ YOU ARE NOW READY TO GET SOME SWEET DEAL DATA!
16
+
17
+ Usage
18
+ -----
19
+
20
+ You can start of by creating an instance of the client, which just needs an Api Key.
21
+
22
+ require 'hukd'
23
+ hukd = Hukd.new("YOUR_API_KEY_HERE")
24
+
25
+ You can then make an API request to receive an array of Deal objects.
26
+
27
+ deals = hukd.hottest('deals')
28
+
29
+ The following API calls are available
30
+
31
+ hottest(forum='', category='', limit=20, options={})
32
+ newest(forum='', category='', limit=20, options={})
33
+ discussed(forum='', category='', limit=20, options={})
34
+ user(user='',forum='', category='', limit=20, options={})
35
+ tag(tag='',forum='', category='', limit=20, options={})
36
+ merchant(merchant='',forum='', category='', limit=20, options={})
37
+ online(forum='', category='', limit=20, options={})
38
+ offline(forum='', category='', limit=20, options={})
39
+ search(keywords='',forum='', category='', online=false, page=1, limit=20, exclude_expired=0)
40
+
41
+ The options hash can contain all the keys available from
42
+ http://www.hotukdeals.com/rest-api/docs
43
+
44
+ Each deal object has the following attributes available:
45
+
46
+ title
47
+ deal_link
48
+ mobile_deal_link
49
+ deal_image
50
+ description
51
+ submit_time
52
+ hot_time
53
+ poster_name
54
+ temperature
55
+ price
56
+ timestamp
57
+ expired
58
+ forum_name
59
+ forum_url_name
60
+ category_name
61
+ category_url_name
62
+ merchant_name
63
+ merchant_url_name
64
+ tags (a hash containing each tag as a string)
65
+ deal_image_highres
66
+
67
+ Combining everything together will give you something like this:
68
+
69
+ require 'hukd'
70
+ hukd = Hukd.new("YOUR_API_KEY_HERE")
71
+ deals = hukd.hottest('deals')
72
+ deals.each |deal| do
73
+ puts(deal.title)
74
+ end
75
+
76
+ This will fetch the hottest deals (default at 20) and print the title to the console.
77
+
78
+ Support
79
+ --------
80
+
81
+ Feel free to contact me or open an issue if need be.
82
+
83
+ PLEASE NOTE: You will need to add replace the "API_KEY_HERE" text with your key to make the tests pass.
84
+
85
+ Thanks
86
+ ------
87
+
88
+ To the [great guide](https://github.com/radar/guides/blob/master/gem-development.md) by [Hrvoje Šimić](https://github.com/shime) to help me develop my first gem :)
89
+
90
+ To the [badfruit](https://github.com/brianmichel/BadFruit) gem by [brianmichel](https://github.com/brianmichel) which I referenced and to develop my own gem
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hukd/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "hukd"
7
+ s.version = Hukd::VERSION
8
+ s.authors = ["Cube Websites"]
9
+ s.email = ["messages@cubewebsites.com"]
10
+ s.homepage = ""
11
+ s.summary = "API Wrapper for HotUKDeals (HUKD)"
12
+ s.description = "API Wrapper for HotUKDeals (HUKD)"
13
+
14
+ s.rubyforge_project = "hukd"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec", "~> 2.6"
22
+ s.add_runtime_dependency "httparty"
23
+ end
@@ -0,0 +1,11 @@
1
+ require "hukd/version"
2
+ require "httparty"
3
+
4
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'hukd', 'base')
5
+ require File.join(File.expand_path(File.dirname(__FILE__)), 'hukd', 'deal')
6
+
7
+ module Hukd
8
+ def self.new(apikey)
9
+ Hukd::Base.new(apikey);
10
+ end
11
+ end
@@ -0,0 +1,128 @@
1
+ module Hukd
2
+ class Base
3
+ attr_accessor :api_key
4
+ API_VERSION = "2.0"
5
+ API_BASE_URL = "http://api.hotukdeals.com/rest_api/v2/"
6
+
7
+ def initialize(key)
8
+ @api_key = key
9
+ end
10
+
11
+ def hottest(forum='', category='', limit=20, options={})
12
+ options['order'] = 'hot'
13
+ get(forum, category, limit, options)
14
+ end
15
+
16
+ def newest(forum='', category='', limit=20, options={})
17
+ options['order'] = 'new'
18
+ get(forum, category, limit, options)
19
+ end
20
+
21
+ def discussed(forum='', category='', limit=20, options={})
22
+ options['order'] = 'discussed'
23
+ get(forum, category, limit, options)
24
+ end
25
+
26
+ def user(user='',forum='', category='', limit=20, options={})
27
+ if(options['order'].nil?)
28
+ options['order'] = 'new'
29
+ end
30
+ options['username'] = user
31
+ get(forum, category, limit, options)
32
+ end
33
+
34
+ def tag(tag='',forum='', category='', limit=20, options={})
35
+ if(options['order'].nil?)
36
+ options['order'] = 'new'
37
+ end
38
+ options['tag'] = tag
39
+ get(forum, category, limit, options)
40
+ end
41
+
42
+ def merchant(merchant='',forum='', category='', limit=20, options={})
43
+ if(options['order'].nil?)
44
+ options['order'] = 'new'
45
+ end
46
+ options['merchant'] = merchant
47
+ get(forum, category, limit, options)
48
+ end
49
+
50
+ def online(forum='', category='', limit=20, options={})
51
+ if(options['order'].nil?)
52
+ options['order'] = 'new'
53
+ end
54
+ options['online_offline'] = 'online'
55
+ get(forum, category, limit, options)
56
+ end
57
+
58
+ def offline(forum='', category='', limit=20, options={})
59
+ if(options['order'].nil?)
60
+ options['order'] = 'new'
61
+ end
62
+ options['online_offline'] = 'offline'
63
+ get(forum, category, limit, options)
64
+ end
65
+
66
+ def search(keywords='',forum='', category='', online=false, page=1, limit=20, exclude_expired=0)
67
+ options = {}
68
+ options['search'] = keywords
69
+ options['page'] = page.to_int
70
+ options['results_per_page'] = limit.to_int
71
+ if(online!=false)
72
+ options['online_offline'] = 'online'
73
+ end
74
+
75
+ if(exclude_expired!=0)
76
+ options['exclude_expired'] = true
77
+ end
78
+ get(forum,category,limit,options)
79
+ end
80
+
81
+ def get(forum='', category='', limit=20, options={})
82
+ # Set the API_KEY
83
+ options['key'] = @api_key
84
+ options['output'] = 'json'
85
+
86
+ # Set the limit as long as it doesn't exceed the maximum allowed
87
+ if(limit > 500)
88
+ limit = 500
89
+ end
90
+ options['results_per_page'] = limit
91
+
92
+ # Specify a forum
93
+ if(forum != '')
94
+ options['forum'] = forum
95
+ end
96
+
97
+ # Specify a category
98
+ if(category != '')
99
+ options['category'] = category
100
+ end
101
+
102
+ # Make a request
103
+ resp = HTTParty.get("#{API_BASE_URL}", :query => options)
104
+
105
+ # Got a success response
106
+ if resp.code == 200
107
+ deals = MultiJson.load(resp.body)
108
+ # Ensure a valid response is returned
109
+ if (deals['error'])
110
+ raise Exception, deals['error']
111
+ end
112
+
113
+ # Returned parsed deals
114
+ return parse_deals(deals)
115
+ end
116
+
117
+ end
118
+
119
+ def parse_deals(hash)
120
+ dealsArray = Array.new
121
+ hash["deals"]["items"].each do |deal|
122
+ dealsArray.push(Deal.new(deal, self))
123
+ end
124
+ dealsArray
125
+ end
126
+
127
+ end
128
+ end
@@ -0,0 +1,43 @@
1
+ module Hukd
2
+ class Deal
3
+
4
+ attr_accessor :title, :deal_link, :mobile_deal_link, :deal_image, :description, :submit_time, :hot_time, :poster_name,
5
+ :temperature, :price, :timestamp, :expired,
6
+ :forum_name, :forum_url_name, :category_name, :category_url_name, :merchant_name, :merchant_url_name,
7
+ :tags, :deal_image_highres
8
+
9
+ def initialize(dealhash,hukd)
10
+ @title = dealhash["title"]
11
+ @deal_link = dealhash["deal_link"]
12
+ @mobile_deal_link = dealhash["mobile_deal_link"]
13
+ @deal_image = dealhash["deal_image"]
14
+ @description = dealhash["description"]
15
+ @submit_time = dealhash["submit_time"]
16
+ @hot_time = dealhash["hot_time"]
17
+ @poster_name = dealhash["poster_name"]
18
+ @temperature = dealhash["temperature"]
19
+ @price = dealhash["price"]
20
+ @timestamp = dealhash["timestamp"]
21
+ @expired = dealhash["expired"]
22
+ @forum_name = dealhash["forum"]["name"]
23
+ @forum_url_name = dealhash["forum"]["url_name"]
24
+ @category_name = dealhash["category"]["name"]
25
+ @category_url_name = dealhash["category"]["url_name"]
26
+ @merchant_name = dealhash["merchant"]["name"]
27
+ @merchant_url_name = dealhash["merchant"]["url_name"]
28
+ @tags = parse_tags(dealhash["tags"])
29
+ @deal_image_highres = dealhash["deal_image_highres"]
30
+ @hukd = hukd
31
+ self
32
+ end
33
+
34
+ def parse_tags(hash)
35
+ tags = Array.new
36
+ hash["items"].each do |tag|
37
+ tags.push(tag['name'])
38
+ end
39
+ tags
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module Hukd
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,52 @@
1
+ require "rspec"
2
+ require "hukd"
3
+
4
+ describe Hukd::Base do
5
+
6
+ it "shouldn't work without an API key'" do
7
+ expect { Hukd.new("").hottest('deals') }.to raise_error
8
+ end
9
+
10
+ it "should get hottest deals" do
11
+ Hukd.new("YOUR_API_KEY_HERE").hottest('deals').count.should equal(20)
12
+ end
13
+
14
+ it "should get a custom number of deals" do
15
+ Hukd.new("YOUR_API_KEY_HERE").hottest('deals','',10).count.should equal(10)
16
+ end
17
+
18
+ it "shouldn't get more than 500 deals" do
19
+ Hukd.new("YOUR_API_KEY_HERE").hottest('deals','',10000).count.should equal(500)
20
+ end
21
+
22
+ it "should be able to specify a forum" do
23
+ Hukd.new("YOUR_API_KEY_HERE").hottest('vouchers','',1)[0].forum_url_name.should == "vouchers"
24
+ end
25
+
26
+ it "should be able to specify a category" do
27
+ Hukd.new("YOUR_API_KEY_HERE").hottest('','fashion',0)[0].category_url_name.should == "fashion"
28
+ end
29
+
30
+ it "should be able to specify a forum and category" do
31
+ deal = Hukd.new("YOUR_API_KEY_HERE").hottest('freebies','mobiles',1)[0]
32
+ deal.forum_url_name.should == "freebies"
33
+ deal.category_url_name.should == "mobiles"
34
+ end
35
+
36
+ it "should search by username" do
37
+ Hukd.new("YOUR_API_KEY_HERE").user('wishihadadonkey','','',1)[0].poster_name.should == "wishihadadonkey"
38
+ end
39
+
40
+ it "should search by tag" do
41
+ deal = Hukd.new("YOUR_API_KEY_HERE").tag('xbox','deals','',1)[0].tags.should include('xbox')
42
+ end
43
+
44
+ it "should search by merchant" do
45
+ Hukd.new("YOUR_API_KEY_HERE").merchant('itunes.apple.com','','',1)[0].merchant_url_name.should == "itunes.apple.com"
46
+ end
47
+
48
+ it "should search by keyword" do
49
+ Hukd.new("YOUR_API_KEY_HERE").search('xbox','','',false,1,1)[0].title.should include("xbox")
50
+ end
51
+
52
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hukd
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Cube Websites
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2157188460 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.6'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2157188460
25
+ - !ruby/object:Gem::Dependency
26
+ name: httparty
27
+ requirement: &2157188040 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2157188040
36
+ description: API Wrapper for HotUKDeals (HUKD)
37
+ email:
38
+ - messages@cubewebsites.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - Gemfile
45
+ - README.md
46
+ - Rakefile
47
+ - hukd.gemspec
48
+ - lib/hukd.rb
49
+ - lib/hukd/base.rb
50
+ - lib/hukd/deal.rb
51
+ - lib/hukd/version.rb
52
+ - spec/hukd_spec.rb
53
+ homepage: ''
54
+ licenses: []
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project: hukd
73
+ rubygems_version: 1.8.15
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: API Wrapper for HotUKDeals (HUKD)
77
+ test_files:
78
+ - spec/hukd_spec.rb