lonely_coder 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +8 -0
- data/Gemfile.lock +58 -0
- data/README.mdown +72 -0
- data/lib/lonely_coder/authentication.rb +41 -0
- data/lib/lonely_coder/magic_constants.rb +99 -0
- data/lib/lonely_coder/profile.rb +99 -0
- data/lib/lonely_coder/search.rb +199 -0
- data/lib/lonely_coder/search_pagination_parser.rb +12 -0
- data/lib/lonely_coder.rb +38 -0
- data/spec/authentication_spec.rb +26 -0
- data/spec/cassettes/failed_authentication.yml +328 -0
- data/spec/cassettes/find_location.yml +44 -0
- data/spec/cassettes/paginate_search_results.yml +879 -0
- data/spec/cassettes/search_by_filters.yml +1619 -0
- data/spec/cassettes/search_by_username.yml +1234 -0
- data/spec/cassettes/successful_authentication.yml +871 -0
- data/spec/helper_spec.rb +8 -0
- data/spec/location_id_spec.rb +11 -0
- data/spec/pagination_spec.rb +18 -0
- data/spec/profile_spec.rb +175 -0
- data/spec/search_spec.rb +102 -0
- data/spec/spec_helper.rb +9 -0
- metadata +113 -0
data/spec/helper_spec.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "pagination" do
|
4
|
+
before(:each) do
|
5
|
+
VCR.use_cassette('paginate_search_results', :erb => {:username => ENV['OKC_USERNAME'], :password => ENV['OKC_PASSWORD']}) do
|
6
|
+
@search = OKCupid.new(ENV['OKC_USERNAME'], ENV['OKC_PASSWORD']).search({
|
7
|
+
gentation: 'girls who like guys'
|
8
|
+
})
|
9
|
+
@search.results
|
10
|
+
@search.load_next_page
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "snags 10 more results" do
|
15
|
+
@search.results.size.should == 20
|
16
|
+
@search.results.all? {|p| p.kind_of?(OKCupid::Profile)}.should == true
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "Profile" do
|
5
|
+
it "checks for equality based on username" do
|
6
|
+
OKCupid::Profile.new(:username => 'someguy', :age => 22).should == OKCupid::Profile.new(:username => 'someguy', :age => 35)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "Profile from specific find" do
|
11
|
+
before(:each) do
|
12
|
+
VCR.use_cassette('search_by_username', :erb => {:username => ENV['OKC_USERNAME'], :password => ENV['OKC_PASSWORD']}) do
|
13
|
+
@profile = OKCupid.new(ENV['OKC_USERNAME'], ENV['OKC_PASSWORD']).profile_for('voliobi_te')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "has a username" do
|
18
|
+
@profile.username.should == 'voliobi_te'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has an age" do
|
22
|
+
@profile.age.should == '21'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has a match %" do
|
26
|
+
@profile.match.should == 45
|
27
|
+
end
|
28
|
+
|
29
|
+
it "has a friend %" do
|
30
|
+
@profile.friend.should == 56
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has an enemy %" do
|
34
|
+
@profile.enemy.should == 33
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has a location" do
|
38
|
+
@profile.location.should == 'Ann Arbor, Michigan'
|
39
|
+
end
|
40
|
+
|
41
|
+
it " doesn't has a small avatar url" do
|
42
|
+
@profile.small_avatar_url.should == nil
|
43
|
+
end
|
44
|
+
|
45
|
+
it "has a collection of thumbnail urls" do
|
46
|
+
@profile.profile_thumb_urls.should == ["http://akcdn.okccdn.com/media/img/user/d_160.png"]
|
47
|
+
end
|
48
|
+
|
49
|
+
it "has a sex" do
|
50
|
+
@profile.sex.should == 'M'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "has an orientation" do
|
54
|
+
@profile.orientation.should == 'Gay'
|
55
|
+
end
|
56
|
+
|
57
|
+
it "has a signle status" do
|
58
|
+
@profile.single.should == 'Single'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "has a last_online" do
|
62
|
+
@profile.last_online.should == "Today – 2:40am"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "has a ethnicity" do
|
66
|
+
@profile.ethnicity.should == 'White'
|
67
|
+
end
|
68
|
+
|
69
|
+
it "has a height" do
|
70
|
+
@profile.height.should == '6′ 2″ (1.88m).'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "has a body_type" do
|
74
|
+
@profile.body_type.should == 'Thin'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "has a diet" do
|
78
|
+
@profile.diet.should == 'Mostly anything'
|
79
|
+
end
|
80
|
+
|
81
|
+
it "has a smokes" do
|
82
|
+
@profile.smokes.should == 'No'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "has a drinks" do
|
86
|
+
@profile.drinks.should == 'Socially'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "has a drugs" do
|
90
|
+
@profile.drugs.should == 'Never'
|
91
|
+
end
|
92
|
+
|
93
|
+
it "has a religion" do
|
94
|
+
@profile.religion.should == 'Agnosticism but not too serious about it'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "has a sign" do
|
98
|
+
@profile.sign.should == 'Gemini and it’s fun to think about'
|
99
|
+
end
|
100
|
+
|
101
|
+
it "has a education" do
|
102
|
+
@profile.education.should == 'Working on college/university'
|
103
|
+
end
|
104
|
+
|
105
|
+
it "has a job" do
|
106
|
+
@profile.job.should == 'Student'
|
107
|
+
end
|
108
|
+
|
109
|
+
it "has a income" do
|
110
|
+
@profile.income.should == nil
|
111
|
+
end
|
112
|
+
|
113
|
+
it "has a offspring" do
|
114
|
+
@profile.offspring.should == nil
|
115
|
+
end
|
116
|
+
|
117
|
+
it "has a pets" do
|
118
|
+
@profile.pets.should == nil
|
119
|
+
end
|
120
|
+
|
121
|
+
it "has a speaks" do
|
122
|
+
@profile.speaks.should == 'English (Fluently), Serbian (Fluently), Croatian (Fluently)'
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "Profile from search result" do
|
128
|
+
before(:each) do
|
129
|
+
VCR.use_cassette('search_by_filters', :erb => {:username => ENV['OKC_USERNAME'], :password => ENV['OKC_PASSWORD']}) do
|
130
|
+
@profile = OKCupid.new(ENV['OKC_USERNAME'], ENV['OKC_PASSWORD']).search({
|
131
|
+
gentation: 'girls who like guys'
|
132
|
+
}).results.first
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
it "has a username" do
|
137
|
+
@profile.username.should == 'a2girl77'
|
138
|
+
end
|
139
|
+
|
140
|
+
it "has an age" do
|
141
|
+
@profile.age.should == '34'
|
142
|
+
end
|
143
|
+
|
144
|
+
it "has a match %" do
|
145
|
+
@profile.match.should == 92
|
146
|
+
end
|
147
|
+
|
148
|
+
it "has a friend %" do
|
149
|
+
@profile.friend.should == 82
|
150
|
+
end
|
151
|
+
|
152
|
+
it "has an enemy %" do
|
153
|
+
@profile.enemy.should == 0
|
154
|
+
end
|
155
|
+
|
156
|
+
it "has a location" do
|
157
|
+
@profile.location.should == 'Ann Arbor, Michigan'
|
158
|
+
end
|
159
|
+
|
160
|
+
it "has a small avatar url" do
|
161
|
+
@profile.small_avatar_url.should == 'http://ak0.okccdn.com/php/load_okc_image.php/images/82x82/82x82/126x67/497x439/2/5607892676107173868.jpeg'
|
162
|
+
end
|
163
|
+
|
164
|
+
it "has a sex" do
|
165
|
+
@profile.sex.should == 'F'
|
166
|
+
end
|
167
|
+
|
168
|
+
it "has an orientation" do
|
169
|
+
@profile.orientation.should == 'Straight'
|
170
|
+
end
|
171
|
+
|
172
|
+
it "has a signle status" do
|
173
|
+
@profile.single.should == 'Single'
|
174
|
+
end
|
175
|
+
end
|
data/spec/search_spec.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Search" do
|
4
|
+
|
5
|
+
it "complains about missing required keys" do
|
6
|
+
lambda { OKCupid::Search.new({}) }.should raise_error(OKCupid::Search::FilterError)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "complains about malformed key values" do
|
10
|
+
lambda { OKCupid::Search.new({
|
11
|
+
:gentation => 'Cats who like laser beams',
|
12
|
+
}) }.should raise_error(OKCupid::Filter::BadValue)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "generating the url" do
|
16
|
+
it "combines all the filters into a params string" do
|
17
|
+
OKCupid::Search.new({
|
18
|
+
:min_age => 33,
|
19
|
+
:max_age => 34,
|
20
|
+
:order_by => 'Match %',
|
21
|
+
:last_login => 'last decade',
|
22
|
+
:gentation => 'Guys who like guys',
|
23
|
+
:location => 'near me', # can be 'near me', 'anywhere', a location name (e.g. 'Ann Arbor, MI'), or a location id
|
24
|
+
:radius => 25, # acceptable values are 25, 50, 100, 250, 500
|
25
|
+
:require_photo => false,
|
26
|
+
:relationship_status => 'any'
|
27
|
+
}).url.should =='/match?matchOrderBy=MATCH&filter2=5,315360000&locid=0&filter4=3,25&filter5=1,0&filter6=35,0&filter7=0,20&filter8=2,33,34'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "Results" do
|
33
|
+
it "returns an array of OKCupid::Profile objects" do
|
34
|
+
VCR.use_cassette('search_by_filters', :erb => {:username => ENV['OKC_USERNAME'], :password => ENV['OKC_PASSWORD']}) do
|
35
|
+
@results = OKCupid.new(ENV['OKC_USERNAME'], ENV['OKC_PASSWORD']).search({
|
36
|
+
gentation: 'girls who like guys'
|
37
|
+
}).results
|
38
|
+
end
|
39
|
+
|
40
|
+
@results.should be_kind_of(Array)
|
41
|
+
@results.size.should == 10
|
42
|
+
@results.all? {|p| p.kind_of?(OKCupid::Profile)}.should == true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "Filters" do
|
47
|
+
describe "lookup" do
|
48
|
+
it "finds the encoded value" do
|
49
|
+
OKCupid::Filter.new('relationship_status', 'single').lookup('single').should == 2
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "parameterization" do
|
54
|
+
it "strings itself" do
|
55
|
+
OKCupid::Filter.new('relationship_status', 'single').to_param(1).should == 'filter1=35,2'
|
56
|
+
end
|
57
|
+
|
58
|
+
it "custom filters: ethnicity are added together" do
|
59
|
+
OKCupid::EthnicityFilter.new('ethnicity', ['white', 'black']).to_param(1).should == 'filter1=9,264'
|
60
|
+
end
|
61
|
+
|
62
|
+
it "custom filters: order_by" do
|
63
|
+
OKCupid::OrderByFilter.new('order_by', 'Match %').to_param(1).should == 'matchOrderBy=MATCH'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "custom filters: age" do
|
67
|
+
OKCupid::AgeFilter.new('age', [18,22]).to_param(1).should == 'filter1=2,18,22'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "custom filters: radius" do
|
71
|
+
OKCupid::RadiusFilter.new('radius', 50).to_param(1).should == 'filter1=3,50'
|
72
|
+
end
|
73
|
+
|
74
|
+
it "custom filters: radius" do
|
75
|
+
OKCupid::RadiusFilter.new('radius', nil).to_param(1).should == nil
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "custom filters: require photo" do
|
79
|
+
it "with true" do
|
80
|
+
OKCupid::RequirePhotoFilter.new('require_photo', true).to_param(1).should == 'filter1=1,1'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "with false" do
|
84
|
+
OKCupid::RequirePhotoFilter.new('require_photo', false).to_param(1).should == 'filter1=1,0'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'custom filters: location' do
|
89
|
+
it "can use the 'near me' value" do
|
90
|
+
OKCupid::LocationFilter.new('location', 'Near me').to_param(1).should == 'locid=0'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'can use a location query' do
|
94
|
+
OKCupid::LocationFilter.new('location', 'Cincinnati, Ohio').to_param(1).should == 'lquery=Cincinnati,%20Ohio'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "can use a location_id" do
|
98
|
+
OKCupid::LocationFilter.new('location', 4335338).to_param(1).should == 'locid=4335338'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lonely_coder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Trek Glowacki
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.0.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.2.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.2.1
|
46
|
+
description: ''
|
47
|
+
email:
|
48
|
+
- trek.glowacki@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- Gemfile
|
54
|
+
- Gemfile.lock
|
55
|
+
- README.mdown
|
56
|
+
- lib/lonely_coder.rb
|
57
|
+
- lib/lonely_coder/authentication.rb
|
58
|
+
- lib/lonely_coder/magic_constants.rb
|
59
|
+
- lib/lonely_coder/profile.rb
|
60
|
+
- lib/lonely_coder/search.rb
|
61
|
+
- lib/lonely_coder/search_pagination_parser.rb
|
62
|
+
- spec/authentication_spec.rb
|
63
|
+
- spec/cassettes/failed_authentication.yml
|
64
|
+
- spec/cassettes/find_location.yml
|
65
|
+
- spec/cassettes/paginate_search_results.yml
|
66
|
+
- spec/cassettes/search_by_filters.yml
|
67
|
+
- spec/cassettes/search_by_username.yml
|
68
|
+
- spec/cassettes/successful_authentication.yml
|
69
|
+
- spec/helper_spec.rb
|
70
|
+
- spec/location_id_spec.rb
|
71
|
+
- spec/pagination_spec.rb
|
72
|
+
- spec/profile_spec.rb
|
73
|
+
- spec/search_spec.rb
|
74
|
+
- spec/spec_helper.rb
|
75
|
+
homepage: http://github.com/trek/lonely_coder
|
76
|
+
licenses: []
|
77
|
+
post_install_message: ! "\n \n \n \n ,d88b.d88b,\n 88888888888\n `Y8888888Y'\n
|
78
|
+
\ `Y888Y'\n `Y'\n \n Good luck out there.\n \n \n "
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 1.8.21
|
97
|
+
signing_key:
|
98
|
+
specification_version: 3
|
99
|
+
summary: ''
|
100
|
+
test_files:
|
101
|
+
- spec/authentication_spec.rb
|
102
|
+
- spec/cassettes/failed_authentication.yml
|
103
|
+
- spec/cassettes/find_location.yml
|
104
|
+
- spec/cassettes/paginate_search_results.yml
|
105
|
+
- spec/cassettes/search_by_filters.yml
|
106
|
+
- spec/cassettes/search_by_username.yml
|
107
|
+
- spec/cassettes/successful_authentication.yml
|
108
|
+
- spec/helper_spec.rb
|
109
|
+
- spec/location_id_spec.rb
|
110
|
+
- spec/pagination_spec.rb
|
111
|
+
- spec/profile_spec.rb
|
112
|
+
- spec/search_spec.rb
|
113
|
+
- spec/spec_helper.rb
|