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.
- data/lib/kickstapi/project.rb +17 -2
- data/lib/kickstapi/version.rb +1 -1
- data/lib/kickstapi.rb +21 -3
- data/spec/kickstapi_spec.rb +24 -3
- metadata +17 -5
- checksums.yaml +0 -15
data/lib/kickstapi/project.rb
CHANGED
@@ -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
|
data/lib/kickstapi/version.rb
CHANGED
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
|
data/spec/kickstapi_spec.rb
CHANGED
@@ -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
|
-
@
|
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 { @
|
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.
|
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-
|
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:
|
135
|
+
rubygems_version: 1.8.24
|
124
136
|
signing_key:
|
125
|
-
specification_version:
|
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=
|