kickstapi 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,22 @@
1
+ require 'json'
2
+
1
3
  module Kickstapi
2
4
  class Project
3
5
  attr_accessor :id, :name, :url, :creator, :about,
4
- :pledged, :currency, :percentage_funded, :backers,
6
+ :pledged, :goal, :currency, :percentage_funded, :backers,
5
7
  :status, :end_date
8
+
9
+ def to_hash
10
+ hash = {}
11
+ self.instance_variables.each do |var|
12
+ sym = var.to_s.gsub /@/, ''
13
+ hash[sym.to_sym] = self.instance_variable_get var
14
+ end
15
+ hash
16
+ end
17
+
18
+ def to_json(*a)
19
+ self.to_hash.to_json
20
+ end
6
21
  end
7
- end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Kickstapi
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/kickstapi.rb CHANGED
@@ -9,8 +9,8 @@ module Kickstapi
9
9
  @agent ||= Mechanize.new
10
10
  end
11
11
 
12
- def self.search_projects filter = ""
13
- search_url = "http://www.kickstarter.com/projects/search?utf8=%E2%9C%93&term=#{URI::encode filter}"
12
+ def self.search_projects( filter = "", offset = 1)
13
+ search_url = "http://www.kickstarter.com/projects/search?page=#{offset}utf8=%E2%9C%93&term=#{URI::encode filter}"
14
14
 
15
15
  projects = []
16
16
  Kickstapi.get_agent.get(search_url) do |page|
@@ -20,7 +20,7 @@ module Kickstapi
20
20
  bb_card_link = bb_card.search("a").first
21
21
 
22
22
  p.name = bb_card_link.content
23
- p.url = bb_card_link.attributes["href"].value
23
+ p.url = bb_card_link.attributes["href"].value.split('?').first
24
24
  p.id = p.url.scan(/\/(\d+)\//).flatten.first.to_i
25
25
  bb_card_author = bb_card.search("span").first
26
26
  p.creator = bb_card_author.content.gsub(/\nby\n/, '').gsub(/\n/, '')
@@ -53,4 +53,22 @@ module Kickstapi
53
53
  return Kickstapi.search_projects(name).first
54
54
  end
55
55
 
56
+ def self.get_project_by_url url
57
+ p = Project.new
58
+ Kickstapi.get_agent.get(url) do |page|
59
+ p.name = page.search(%Q{//h2[@id='title']//a}).text
60
+ p.creator = page.search(%Q{//p[@id='subtitle']//span//a[@id='name']}).text
61
+ p.url = url
62
+ p.id = p.id = p.url.scan(/\/(\d+)\//).flatten.first.to_i
63
+ p.backers = page.search(%Q{//data[@itemprop='Project[backers_count]']}).first.attributes["data-value"].value.to_i
64
+ p.pledged = page.search(%Q{//data[@itemprop='Project[pledged]']}).first.attributes["data-value"].value.to_f
65
+ p.goal = page.search(%Q{//div[@id='pledged']}).first.attributes['data-goal'].value
66
+ p.currency = page.search(%Q{//data[@itemprop='Project[pledged]']}).first.attributes["data-currency"].value
67
+ p.percentage_funded = page.search(%Q{//div[@id='pledged']}).first.attributes['data-percent-raised'].value.to_f * 100
68
+ p.end_date = DateTime.parse page.search(%Q{//span[@id='project_duration_data']}).first.attributes['data-end_time'].value
69
+ end
70
+
71
+ p
72
+ end
73
+
56
74
  end
@@ -7,7 +7,8 @@ describe Kickstapi do
7
7
 
8
8
  before :all do
9
9
  @projects = Kickstapi.search_projects "Planetary Annihilation" # succesful project
10
- @failures = Kickstapi.search_projects "Quala" # failing project
10
+ @failure = Kickstapi.get_project "Quala" # failing project
11
+ @single_project = Kickstapi.get_project_by_url "http://www.kickstarter.com/projects/659943965/planetary-annihilation-a-next-generation-rts?ref=live"
11
12
  end
12
13
 
13
14
  context 'projects' do
@@ -19,7 +20,9 @@ describe Kickstapi do
19
20
  end
20
21
 
21
22
  context 'a project' do
22
- subject { @projects.first }
23
+ subject { @projects.first}
24
+
25
+ its(:to_hash) { should be_kind_of Hash }
23
26
 
24
27
  [ :id, :name, :url, :creator,
25
28
  :about, :pledged, :currency,
@@ -27,16 +30,34 @@ describe Kickstapi do
27
30
  :status].each do |method|
28
31
  it { should respond_to method }
29
32
  its(method) { should_not be_nil }
33
+ its(:to_hash) { should have_key method }
30
34
  end
31
35
 
32
36
  its(:id) { should be_kind_of Fixnum }
33
37
  its(:id) { should > 0 }
34
38
 
35
39
  its(:pledged) { should be_kind_of Float }
40
+
41
+ it "returns valid json" do
42
+ expect { JSON.parse @projects.first.to_json }.to_not raise_error JSON::ParserError
43
+ end
44
+ end
45
+
46
+ context 'project by URL' do
47
+ subject { @single_project }
48
+
49
+ [ :id, :name, :url, :creator,
50
+ :pledged, :currency,
51
+ :percentage_funded, :backers,
52
+ :goal].each do |method|
53
+ it { should respond_to method }
54
+ its(method) { should_not be_nil }
55
+ its(:to_hash) { should have_key method }
56
+ end
36
57
  end
37
58
 
38
59
  context 'failed project' do
39
- subject { @failures.first }
60
+ subject { @failure }
40
61
 
41
62
  its(:status) { should eql "Failed" }
42
63
  [:pledged, :percentage_funded, :backers].each do |method|
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kickstapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Kristof Vannotten
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-07-20 00:00:00.000000000 Z
12
+ date: 2013-08-06 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ! '>='
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ! '>='
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ! '>='
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ! '>='
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: simplecov
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ! '>='
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ! '>='
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: mechanize
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ! '>='
74
84
  - !ruby/object:Gem::Version
@@ -76,6 +86,7 @@ dependencies:
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ! '>='
81
92
  - !ruby/object:Gem::Version
@@ -103,26 +114,27 @@ files:
103
114
  homepage: https://github.com/kvannotten/kickstapi
104
115
  licenses:
105
116
  - MIT
106
- metadata: {}
107
117
  post_install_message:
108
118
  rdoc_options: []
109
119
  require_paths:
110
120
  - lib
111
121
  required_ruby_version: !ruby/object:Gem::Requirement
122
+ none: false
112
123
  requirements:
113
124
  - - ! '>='
114
125
  - !ruby/object:Gem::Version
115
126
  version: '0'
116
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
+ none: false
117
129
  requirements:
118
130
  - - ! '>='
119
131
  - !ruby/object:Gem::Version
120
132
  version: '0'
121
133
  requirements: []
122
134
  rubyforge_project:
123
- rubygems_version: 2.0.5
135
+ rubygems_version: 1.8.24
124
136
  signing_key:
125
- specification_version: 4
137
+ specification_version: 3
126
138
  summary: This gem offers an API for Kickstarter
127
139
  test_files:
128
140
  - spec/kickstapi_spec.rb
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZDNlZWI2NzJjNjNkZmQ1ZTViNmEwOWEwNjI4NGMyZjk1YjhmYTFhZg==
5
- data.tar.gz: !binary |-
6
- NGUxYjdhN2NlZGUwNDI4N2UxMzA2YWM5MzBlNjUyYzdkNTdiZmQ5Mg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- YTVlNjk5ZDM3OGJhN2FkYWRmMWE2ZDY4NGY0NzRiN2Q0NzExYTRiZmU2ZmM4
10
- NzE0ZGJlZTc5NzM5OTVkODNkNDg1ZjI0MGY4MzlmNDVmYTU0NTQ4ODE0ZmQ0
11
- ZDRhZTY0OGM5NWViZDhlNmNjMTEzZjE5ZmZlMzdhYzg4YjE0YjU=
12
- data.tar.gz: !binary |-
13
- ZDY2ZTU1Mzg4ZmJmZWJiNjk1NThmN2VlYzNlOWRlNzkyODg2NGQ2YjI1MmMy
14
- ODhjNTM3MTkyYTIyOWNmYWI1M2ViZGQ4YjRhYWNkNGI5YTIxNzZkZjc5YWFk
15
- ZWVmYjM3MWM4ODE5OWRiNDM5ODFmODM0M2Y5MDQyYWNjNzc5OGY=