kickstapi 0.0.2 → 0.0.3

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.
@@ -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=