croudia 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Croudia
2
2
 
3
- A Mechanize-based Ruby scraper for [Croudia](https://croudia.com)
3
+ A Mechanize-based scraper for [Croudia](https://croudia.com)
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,25 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```ruby
22
+ require 'croudia'
23
+
24
+ # Create a new instance
25
+ croudia = Croudia.new('username', 'password')
26
+
27
+ # Same as above
28
+ croudia = Croudia.new
29
+ croudia.login('username', 'password')
30
+
31
+ # Update status
32
+ croudia.update('Hello!')
33
+
34
+ # Follow @wktk
35
+ croudia.follow('wktk')
36
+
37
+ # Get the home timeline
38
+ croudia.timeline
39
+ ```
22
40
 
23
41
  ## Contributing
24
42
 
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
1
+ #!/usr/bin/env rake
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ spec.rspec_opts = ['-cfs']
9
+ end
10
+
11
+ task :default => :spec
data/croudia.gemspec CHANGED
@@ -4,8 +4,8 @@ require File.expand_path('../lib/croudia/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ['wktk']
6
6
  gem.email = ['wktk@wktk.in']
7
- gem.description = 'A Mechanize-based Ruby scraper for Croudia'
8
- gem.summary = gem.description
7
+ gem.description = 'A Mechanize-based scraper for Croudia'
8
+ gem.summary = 'Croudia scraper'
9
9
  gem.homepage = 'https://github.com/wktk/croudia-gem'
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
@@ -16,6 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Croudia::VERSION
17
17
 
18
18
  gem.add_dependency 'mechanize', '~> 2.5.1'
19
- gem.add_development_dependency 'rspec', '~> 2.10.1'
19
+ gem.add_development_dependency 'rake', '~> 0.9.2.2'
20
+ gem.add_development_dependency 'rdoc', '~> 3.12'
21
+ gem.add_development_dependency 'rspec', '~> 2.12.0'
20
22
  gem.add_development_dependency 'webmock', '~> 1.8.7'
21
23
  end
@@ -0,0 +1,5 @@
1
+ module Croudia
2
+ class Error < StandardError; end
3
+
4
+ class NotLoggedInError < Error; end
5
+ end
@@ -3,7 +3,7 @@ module Croudia
3
3
  module Friendships
4
4
  def follow(username)
5
5
  require_login
6
- post('/follows/target_follow',
6
+ post('/follows/target_follow',
7
7
  :target_user_name => username,
8
8
  :follow_action => 'enable',
9
9
  )
@@ -11,12 +11,45 @@ module Croudia
11
11
 
12
12
  def unfollow(username)
13
13
  require_login
14
- post('/follows/target_follow',
14
+ post('/follows/target_follow',
15
15
  :target_user_name => username,
16
16
  :follow_action => 'diable', # Yes, it is!
17
17
  )
18
18
  end
19
19
 
20
+ def approve(username)
21
+ require_login
22
+ post('/follows/follow_approve',
23
+ :target_user_name => username,
24
+ :follow_action => 'approve',
25
+ )
26
+ end
27
+
28
+ def refusal(username)
29
+ require_login
30
+ post('/follows/follow_refusal',
31
+ :target_user_name => username,
32
+ :follow_action => 'refusal',
33
+ )
34
+ end
35
+ alias refuse refusal
36
+
37
+ def block(username)
38
+ require_login
39
+ post('/blocks/setting',
40
+ :target_user_name => username,
41
+ :block_action => 'enable',
42
+ )
43
+ end
44
+
45
+ def unblock(username)
46
+ require_login
47
+ post('/blocks/setting',
48
+ :target_user_name => username,
49
+ :block_action => 'diable', # Yes, it's diable
50
+ )
51
+ end
52
+
20
53
  def following(username=nil, params={})
21
54
  username = @current_user.username unless username
22
55
  Parser.user_list(get("/follows/following/#{username}", params))
@@ -28,6 +61,12 @@ module Croudia
28
61
  Parser.user_list(get("/follows/follower/#{username}", params))
29
62
  end
30
63
  alias followers follower
64
+
65
+ def follow_request
66
+ require_login
67
+ Parser.user_list(get('/follows/follow_request'))
68
+ end
69
+ alias follow_requests follow_request
31
70
  end
32
71
  end
33
72
  end
@@ -1,3 +1,5 @@
1
+ require 'croudia/error'
2
+
1
3
  module Croudia
2
4
  class Scraper
3
5
  module Login
@@ -33,7 +35,7 @@ module Croudia
33
35
  alias logged_out logged_out?
34
36
 
35
37
  def require_login
36
- raise 'Not logged in' if logged_out?
38
+ raise NotLoggedInError, 'Not logged in' if logged_out?
37
39
  end
38
40
  end
39
41
  end
@@ -30,16 +30,22 @@ module Croudia
30
30
  Croudia::User.new(attrs)
31
31
  end
32
32
 
33
- def user_list(page, klass=Croudia::User)
34
- user_nodes = page.parser.xpath('//div[@data-role="content"]/ul[@data-role="listview"]/li[child::a]')
33
+ def user_list(page)
34
+ user_nodes = page.parser.xpath('//div[@data-role="content"]/ul[@data-role="listview"]/li[not(@data-role="list-divider")]')
35
35
  users = []
36
- user_nodes.map do |user_node|
36
+ user_nodes.each do |user_node|
37
37
  attrs = {
38
- :username => user_node.css('a').first.attribute('href').value.sub(%r{^/}, ''),
39
38
  :nickname => user_node.css('.bord').first.content,
40
39
  :avatar => "#{page.uri.scheme}://#{page.uri.host}" + user_node.css('img').first.attribute('src').value,
41
40
  :self_introduction => user_node.css('.fontg').first.content.strip,
42
41
  }
42
+ if (links = user_node.css('a')).size.nonzero?
43
+ # For following/followers page
44
+ attrs[:username] = links.first.attribute('href').value.sub(%r{^/}, '')
45
+ elsif (forms = user_node.xpath('//form[not(contains(@action,"/follows/"))]')).size.nonzero?
46
+ # For follow_request page
47
+ attrs[:username] = forms.first.attribute('action').value.sub(%r{^/}, '')
48
+ end
43
49
  if (following = user_node.css('.font1')).size.nonzero?
44
50
  attrs[:following] = /#e/i !~ following.first.attribute('style').value
45
51
  end
@@ -22,6 +22,38 @@ module Croudia
22
22
  result = form.submit
23
23
  raise 'Update failed' if result.body.include? 'error_popup'
24
24
  end
25
+
26
+ def favorite(voice_id)
27
+ require_login
28
+ post('/favorites',
29
+ :favorites_action => 'enable',
30
+ :voice_id => voice_id,
31
+ )
32
+ end
33
+
34
+ def unfavorite(voice_id)
35
+ require_login
36
+ post('/favorites',
37
+ :favorites_action => 'disable',
38
+ :voice_id => voice_id,
39
+ )
40
+ end
41
+
42
+ def spread(voice_id)
43
+ require_login
44
+ post('/spreads/spread_voice',
45
+ :favorites_action => 'enable',
46
+ :voice_id => voice_id,
47
+ )
48
+ end
49
+
50
+ def unspread(voice_id)
51
+ require_login
52
+ post('/spreads/spread_voice',
53
+ :favorites_action => 'disable',
54
+ :voice_id => voice_id,
55
+ )
56
+ end
25
57
  end
26
58
  end
27
59
  end
@@ -1,3 +1,4 @@
1
+ require 'croudia/error'
1
2
  require 'croudia/scraper/friendships'
2
3
  require 'croudia/scraper/login'
3
4
  require 'croudia/scraper/parser'
data/lib/croudia/user.rb CHANGED
@@ -31,13 +31,13 @@ module Croudia
31
31
 
32
32
  def initialize(*args)
33
33
  super
34
- @id = @username
35
- @spreadia = @spreadia.to_i if @spreadia
36
- @favodia = @favodia.to_i if @favodia
34
+ @id = username
35
+ @spreadia = spreadia.to_i if spreadia
36
+ @favodia = favodia.to_i if favodia
37
37
  end
38
38
 
39
39
  def to_s
40
- @username
40
+ username
41
41
  end
42
42
  end
43
43
  end
@@ -1,3 +1,3 @@
1
1
  module Croudia
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/croudia/voice.rb CHANGED
@@ -11,7 +11,7 @@ module Croudia
11
11
  alias favorite_count favorited_count
12
12
 
13
13
  def to_s
14
- "@#{@user.username}: #{@desc}"
14
+ "@#{user.username}: #{voice_desc}"
15
15
  end
16
16
 
17
17
  def to_i
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ describe Croudia::Error do
4
+ it 'is a kind of Error' do
5
+ Croudia::Error.kind_of? StandardError
6
+ end
7
+ end
8
+
9
+ describe Croudia::NotLoggedInError do
10
+ it 'is a kind of Croudia::Error' do
11
+ Croudia::NotLoggedInError.kind_of? Croudia::Error
12
+ end
13
+ end
@@ -22,23 +22,67 @@ describe Croudia::Scraper::Friendships do
22
22
  a_post('/follows/target_follow').with(:body => /target_user_name=wktk/).should have_been_made
23
23
  end
24
24
  end
25
+
26
+ describe '#approve' do
27
+ it 'posts to the correct resource' do
28
+ stub_post('/follows/follow_approve').to_return(:headers => {:content_type => 'text/html'})
29
+ @croudia.approve('wktk')
30
+ a_post('/follows/follow_approve').with(:body => /target_user_name=wktk/).should have_been_made
31
+ end
32
+ end
33
+
34
+ describe '#refusal' do
35
+ it 'posts to the correct resource' do
36
+ stub_post('/follows/follow_refusal').to_return(:headers => {:content_type => 'text/html'})
37
+ @croudia.refusal('wktk')
38
+ a_post('/follows/follow_refusal').with(:body => /target_user_name=wktk/).should have_been_made
39
+ end
40
+ end
41
+
42
+ describe '#block' do
43
+ it 'posts to the correct resource' do
44
+ stub_post('/blocks/setting').to_return(:headers => {:content_type => 'text/html'})
45
+ @croudia.block('wktk')
46
+ a_post('/blocks/setting').with(:body => /target_user_name=wktk/).should have_been_made
47
+ end
48
+ end
49
+
50
+ describe '#unblock' do
51
+ it 'posts to the correct resource' do
52
+ stub_post('/blocks/setting').to_return(:headers => {:content_type => 'text/html'})
53
+ @croudia.unblock('wktk')
54
+ a_post('/blocks/setting').with(:body => /target_user_name=wktk/).should have_been_made
55
+ end
56
+ end
25
57
  end
26
58
 
27
59
  context 'when not logged in' do
28
60
  before do
29
61
  @croudia = Croudia::Scraper.new
30
- @croudia.instance_variable_set('@logged_in', true)
62
+ @croudia.instance_variable_set('@logged_in', false)
31
63
  end
32
64
 
33
65
  describe '#follow' do
34
- it 'should raise error' do
35
- expect{ @croudia.follow('wktk') }.to raise_error
66
+ it 'raises an error' do
67
+ expect{ @croudia.follow('wktk') }.to raise_error Croudia::NotLoggedInError
36
68
  end
37
69
  end
38
70
 
39
71
  describe '#unfollow' do
40
- it 'should raise error' do
41
- expect{ @croudia.follow('wktk') }.to raise_error
72
+ it 'raises an error' do
73
+ expect{ @croudia.follow('wktk') }.to raise_error Croudia::NotLoggedInError
74
+ end
75
+ end
76
+
77
+ describe '#approve' do
78
+ it 'raises an error' do
79
+ expect{ @croudia.approve('wktk') }.to raise_error Croudia::NotLoggedInError
80
+ end
81
+ end
82
+
83
+ describe '#refusal' do
84
+ it 'raises an error' do
85
+ expect{ @croudia.refusal('wktk') }.to raise_error Croudia::NotLoggedInError
42
86
  end
43
87
  end
44
88
  end
@@ -46,7 +90,7 @@ describe Croudia::Scraper::Friendships do
46
90
  describe '#follower' do
47
91
  it 'gets the correct resource' do
48
92
  stub_get('/follows/follower/wktk').to_return(:headers => {:content_type => 'text/html'})
49
- Croudia.follower('wktk')
93
+ Croudia::Scraper.new.follower('wktk')
50
94
  a_get('/follows/follower/wktk').should have_been_made
51
95
  end
52
96
  end
@@ -54,8 +98,18 @@ describe Croudia::Scraper::Friendships do
54
98
  describe '#following' do
55
99
  it 'gets the correct resource' do
56
100
  stub_get('/follows/following/wktk').to_return(:headers => {:content_type => 'text/html'})
57
- Croudia.following('wktk')
101
+ Croudia::Scraper.new.following('wktk')
58
102
  a_get('/follows/following/wktk').should have_been_made
59
103
  end
60
104
  end
105
+
106
+ describe '#follow_request' do
107
+ it 'gets the correct resource' do
108
+ stub_get('/follows/follow_request').to_return(:headers => {:content_type => 'text/html'})
109
+ @croudia = Croudia::Scraper.new
110
+ @croudia.instance_variable_set('@logged_in', true)
111
+ @croudia.follow_request
112
+ a_get('/follows/follow_request').should have_been_made
113
+ end
114
+ end
61
115
  end
@@ -59,7 +59,7 @@ describe Croudia::Scraper::Login do
59
59
  it 'raises an error' do
60
60
  @croudia = Croudia::Scraper.new
61
61
  @croudia.instance_variable_set('@logged_in', false)
62
- expect{ @croudia.logout }.to raise_error
62
+ expect{ @croudia.logout }.to raise_error Croudia::NotLoggedInError
63
63
  end
64
64
  end
65
65
 
@@ -120,7 +120,9 @@ describe Croudia::Scraper::Login do
120
120
  describe '#require_login' do
121
121
  context 'when logged out' do
122
122
  it 'raises an errror' do
123
- expect{ Croudia::Scraper.new.require_login }.to raise_error
123
+ @croudia = Croudia::Scraper.new
124
+ @croudia.instance_variable_set('@logged_in', false)
125
+ expect{ @croudia.require_login }.to raise_error Croudia::NotLoggedInError
124
126
  end
125
127
  end
126
128
 
@@ -154,14 +154,12 @@ describe Croudia::Scraper::Parser::Users do
154
154
  end
155
155
 
156
156
  describe '#user_list' do
157
- before do
158
- stub_get('/follows/following/wktk').to_return(:body => fixture('following_wktk'), :headers => {:content_type => 'text/html'})
159
- stub_get('/follows/follower/wktk').to_return(:body => fixture('follower_wktk'), :headers => {:content_type => 'text/html'})
160
- @following = Croudia.following('wktk')
161
- @followers = Croudia.followers('wktk')
162
- end
163
-
164
157
  context 'when following list provided' do
158
+ before do
159
+ stub_get('/follows/following/wktk').to_return(:body => fixture('following_wktk'), :headers => {:content_type => 'text/html'})
160
+ @following = Croudia::Scraper.new.following('wktk')
161
+ end
162
+
165
163
  it 'gets all users in the page' do
166
164
  @following.size.should eq 3
167
165
  end
@@ -208,6 +206,11 @@ describe Croudia::Scraper::Parser::Users do
208
206
  end
209
207
 
210
208
  context 'when follower list provided' do
209
+ before do
210
+ stub_get('/follows/follower/wktk').to_return(:body => fixture('follower_wktk'), :headers => {:content_type => 'text/html'})
211
+ @followers = Croudia::Scraper.new.follower('wktk')
212
+ end
213
+
211
214
  it 'gets all users in the page' do
212
215
  @followers.size.should eq 3
213
216
  end
@@ -252,5 +255,38 @@ describe Croudia::Scraper::Parser::Users do
252
255
  end
253
256
  end
254
257
  end
258
+
259
+ context 'when follow_request list provided' do
260
+ before do
261
+ stub_get('/follows/follow_request').to_return(:body => fixture('follow_request'), :headers => {:content_type => 'text/html'})
262
+ @croudia = Croudia::Scraper.new
263
+ @croudia.instance_variable_set('@logged_in', true)
264
+ @requests = @croudia.follow_request
265
+ end
266
+
267
+ it 'gets all users in the page' do
268
+ @requests.size.should eq 2
269
+ end
270
+
271
+ it 'gets username' do
272
+ @requests[0].username.should eq 'wktk'
273
+ end
274
+
275
+ it 'gets nickname' do
276
+ @requests[0].nickname.should eq 'wktk!'
277
+ end
278
+
279
+ it 'gets avatar url' do
280
+ @requests[0].avatar.should eq Croudia.endpoint + '/avatar1'
281
+ end
282
+
283
+ it 'gets description' do
284
+ @requests[0].description.should eq "Description 1\nHello"
285
+ end
286
+
287
+ it 'trims description' do
288
+ @requests[0].description.should_not match /^\s|\s$/
289
+ end
290
+ end
255
291
  end
256
292
  end
@@ -37,7 +37,9 @@ describe Croudia::Scraper::Users do
37
37
 
38
38
  context 'when not logged in' do
39
39
  it 'raises an error' do
40
- expect{ Croudia::Scraper.new.current_user }.to raise_error
40
+ @croudia = Croudia::Scraper.new
41
+ @croudia.instance_variable_set('@logged_in', false)
42
+ expect{ @croudia.current_user }.to raise_error Croudia::NotLoggedInError
41
43
  end
42
44
  end
43
45
  end
@@ -67,7 +69,9 @@ describe Croudia::Scraper::Users do
67
69
  end
68
70
 
69
71
  it 'raises an error when not logged in' do
70
- expect{ Croudia::Scraper.new.user }.to raise_error
72
+ @croudia = Croudia::Scraper.new
73
+ @croudia.instance_variable_set('@logged_in', false)
74
+ expect{ @croudia.user }.to raise_error Croudia::NotLoggedInError
71
75
  end
72
76
  end
73
77
  end
@@ -31,7 +31,9 @@ describe Croudia::Scraper::Voices do
31
31
 
32
32
  context 'when not logged in' do
33
33
  it 'raises an error' do
34
- expect{ Croudia::Scraper.new.timeline }.to raise_error
34
+ @croudia = Croudia::Scraper.new
35
+ @croudia.instance_variable_set('@logged_in', false)
36
+ expect{ @croudia.timeline }.to raise_error Croudia::NotLoggedInError
35
37
  end
36
38
  end
37
39
  end
@@ -62,7 +64,9 @@ describe Croudia::Scraper::Voices do
62
64
 
63
65
  context 'when not logged in' do
64
66
  it 'raises an error' do
65
- expect{ Croudia::Scraper.new.reply_list }.to raise_error
67
+ @croudia = Croudia::Scraper.new
68
+ @croudia.instance_variable_set('@logged_in', false)
69
+ expect{ @croudia.reply_list }.to raise_error Croudia::NotLoggedInError
66
70
  end
67
71
  end
68
72
  end
@@ -70,7 +74,9 @@ describe Croudia::Scraper::Voices do
70
74
  describe '#update' do
71
75
  context 'when not logged in' do
72
76
  it 'raises an error' do
73
- expect{ Croudia::Scraper.new.update('Hi') }.to raise_error
77
+ @croudia = Croudia::Scraper.new
78
+ @croudia.instance_variable_set('@logged_in', false)
79
+ expect{ @croudia.update('Hi') }.to raise_error Croudia::NotLoggedInError
74
80
  end
75
81
  end
76
82
 
@@ -89,4 +95,84 @@ describe Croudia::Scraper::Voices do
89
95
  end
90
96
  end
91
97
  end
98
+
99
+ describe '#favorite' do
100
+ context 'when not logged in' do
101
+ it 'raises an error' do
102
+ @croudia = Croudia::Scraper.new
103
+ @croudia.instance_variable_set('@logged_in', false)
104
+ expect{ @croudia.favorite('1') }.to raise_error Croudia::NotLoggedInError
105
+ end
106
+ end
107
+
108
+ context 'when logged in' do
109
+ it 'posts to the correct resource' do
110
+ @croudia = Croudia::Scraper.new
111
+ @croudia.instance_variable_set('@logged_in', true)
112
+ stub_post('/favorites').to_return(:headers => {:content_type => 'text/html'})
113
+ @croudia.favorite('1')
114
+ a_post('/favorites').with(:body => /favorites_action=enable/).should have_been_made
115
+ end
116
+ end
117
+ end
118
+
119
+ describe '#unfavorite' do
120
+ context 'when not logged in' do
121
+ it 'raises an error' do
122
+ @croudia = Croudia::Scraper.new
123
+ @croudia.instance_variable_set('@logged_in', false)
124
+ expect{ @croudia.unfavorite('1') }.to raise_error Croudia::NotLoggedInError
125
+ end
126
+ end
127
+
128
+ context 'when logged in' do
129
+ it 'posts to the correct resource' do
130
+ @croudia = Croudia::Scraper.new
131
+ @croudia.instance_variable_set('@logged_in', true)
132
+ stub_post('/favorites').to_return(:headers => {:content_type => 'text/html'})
133
+ @croudia.unfavorite('1')
134
+ a_post('/favorites').with(:body => /favorites_action=disable/).should have_been_made
135
+ end
136
+ end
137
+ end
138
+
139
+ describe '#spread' do
140
+ context 'when not logged in' do
141
+ it 'raises an error' do
142
+ @croudia = Croudia::Scraper.new
143
+ @croudia.instance_variable_set('@logged_in', false)
144
+ expect{ @croudia.spread('1') }.to raise_error Croudia::NotLoggedInError
145
+ end
146
+ end
147
+
148
+ context 'when logged in' do
149
+ it 'posts to the correct resource' do
150
+ @croudia = Croudia::Scraper.new
151
+ @croudia.instance_variable_set('@logged_in', true)
152
+ stub_post('/spreads/spread_voice').to_return(:headers => {:content_type => 'text/html'})
153
+ @croudia.spread('1')
154
+ a_post('/spreads/spread_voice').with(:body => /favorites_action=enable/).should have_been_made
155
+ end
156
+ end
157
+ end
158
+
159
+ describe '#unspread' do
160
+ context 'when not logged in' do
161
+ it 'raises an error' do
162
+ @croudia = Croudia::Scraper.new
163
+ @croudia.instance_variable_set('@logged_in', false)
164
+ expect{ @croudia.unspread('1') }.to raise_error Croudia::NotLoggedInError
165
+ end
166
+ end
167
+
168
+ context 'when logged in' do
169
+ it 'posts to the correct resource' do
170
+ @croudia = Croudia::Scraper.new
171
+ @croudia.instance_variable_set('@logged_in', true)
172
+ stub_post('/spreads/spread_voice').to_return(:headers => {:content_type => 'text/html'})
173
+ @croudia.unspread('1')
174
+ a_post('/spreads/spread_voice').with(:body => /favorites_action=disable/).should have_been_made
175
+ end
176
+ end
177
+ end
92
178
  end
@@ -4,7 +4,7 @@ describe Croudia::Voice do
4
4
  describe '#to_s' do
5
5
  it 'returns "@username: text"' do
6
6
  user = Croudia::User.new(:username => 'wktk')
7
- Croudia::Voice.new(:user => user, :desc => 'Hello!').to_s.should eq '@wktk: Hello!'
7
+ Croudia::Voice.new(:user => user, :voice_desc => 'Hello!').to_s.should eq '@wktk: Hello!'
8
8
  end
9
9
  end
10
10
 
@@ -0,0 +1,69 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Croudia(クローディア)</title>
6
+ <meta content="authenticity_token" name="csrf-param">
7
+ <meta content="dummy_csrf_token" name="csrf-token">
8
+ </head>
9
+ <body>
10
+ <div data-role="page" data-dom-cache="false" class="no-cache" data-url="/follows/follow_request" data-id="hedder1" id="follow_request">
11
+ <div data-role="content">
12
+ <ul data-role="listview" data-split-icon="gear" id="follower_list" data-theme="c" data-dividertheme="i">
13
+ <li data-role="list-divider" class="bar">@testuser宛てのフォローリクエスト</li>
14
+ <li>
15
+ <img src="/avatar1" alt="wktk!" class="ui-li-icon avatar">
16
+ <p>
17
+ <span class="bord">wktk!</span>
18
+ <span class="gray">@wktk</span>
19
+ </p>
20
+ <!--
21
+ フォロー:10<br>
22
+ フォロワー:10
23
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>
24
+ -->
25
+ <p class="fontg" style="font-size:12px;">
26
+ Description 1
27
+ Hello
28
+ <form action="/follows/approve_dialog/wktk" method="get">
29
+ <button type="submit" data-theme="b">承認する</button>
30
+ </form>
31
+ <form action="/follows/refusal_dialog/wktk" method="get">
32
+ <button type="submit" data-theme="test">拒否する</button>
33
+ </form>
34
+ <form action="/wktk" method="get">
35
+ <button type="submit" data-theme="c">プロフィールを確認</button>
36
+ </form>
37
+ </p>
38
+ </li>
39
+ <li>
40
+ <img src="/avatar2" alt="testuser1" class="ui-li-icon avatar">
41
+ <p>
42
+ <span class="bord">testuser1</span>
43
+ <span class="gray">@testuser1</span>
44
+ </p>
45
+ <!--
46
+ フォロー:10<br>
47
+ フォロワー:10
48
+ <a href="/follows/menu" data-rel="dialog" data-transition="slideup"></a>
49
+ -->
50
+ <p class="fontg" style="font-size:12px;">
51
+ This is a test description.
52
+ Hi, hi!
53
+ <form action="/follows/approve_dialog/testuser1" method="get">
54
+ <button type="submit" data-theme="b">承認する</button>
55
+ </form>
56
+ <form action="/follows/refusal_dialog/testuser1" method="get">
57
+ <button type="submit" data-theme="test">拒否する</button>
58
+ </form>
59
+ <form action="/testuser1" method="get">
60
+ <button type="submit" data-theme="c">プロフィールを確認</button>
61
+ </form>
62
+ </p>
63
+ </li>
64
+ </ul>
65
+ <br>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: croudia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-23 00:00:00.000000000 Z
12
+ date: 2013-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 2.5.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.9.2.2
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '3.12'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.12'
30
62
  - !ruby/object:Gem::Dependency
31
63
  name: rspec
32
64
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +66,7 @@ dependencies:
34
66
  requirements:
35
67
  - - ~>
36
68
  - !ruby/object:Gem::Version
37
- version: 2.10.1
69
+ version: 2.12.0
38
70
  type: :development
39
71
  prerelease: false
40
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +74,7 @@ dependencies:
42
74
  requirements:
43
75
  - - ~>
44
76
  - !ruby/object:Gem::Version
45
- version: 2.10.1
77
+ version: 2.12.0
46
78
  - !ruby/object:Gem::Dependency
47
79
  name: webmock
48
80
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +91,7 @@ dependencies:
59
91
  - - ~>
60
92
  - !ruby/object:Gem::Version
61
93
  version: 1.8.7
62
- description: A Mechanize-based Ruby scraper for Croudia
94
+ description: A Mechanize-based scraper for Croudia
63
95
  email:
64
96
  - wktk@wktk.in
65
97
  executables: []
@@ -74,6 +106,7 @@ files:
74
106
  - croudia.gemspec
75
107
  - lib/croudia.rb
76
108
  - lib/croudia/api.rb
109
+ - lib/croudia/error.rb
77
110
  - lib/croudia/identity.rb
78
111
  - lib/croudia/scraper.rb
79
112
  - lib/croudia/scraper/friendships.rb
@@ -87,6 +120,7 @@ files:
87
120
  - lib/croudia/version.rb
88
121
  - lib/croudia/voice.rb
89
122
  - spec/croudia/api_spec.rb
123
+ - spec/croudia/error_spec.rb
90
124
  - spec/croudia/identity_spec.rb
91
125
  - spec/croudia/scraper/friendships_spec.rb
92
126
  - spec/croudia/scraper/login_spec.rb
@@ -99,6 +133,7 @@ files:
99
133
  - spec/croudia/version_spec.rb
100
134
  - spec/croudia/voice_spec.rb
101
135
  - spec/croudia_spec.rb
136
+ - spec/fixtures/follow_request.html
102
137
  - spec/fixtures/follower_wktk.html
103
138
  - spec/fixtures/following_wktk.html
104
139
  - spec/fixtures/user_wktk1.html
@@ -128,12 +163,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
163
  version: '0'
129
164
  requirements: []
130
165
  rubyforge_project:
131
- rubygems_version: 1.8.23
166
+ rubygems_version: 1.8.24
132
167
  signing_key:
133
168
  specification_version: 3
134
- summary: A Mechanize-based Ruby scraper for Croudia
169
+ summary: Croudia scraper
135
170
  test_files:
136
171
  - spec/croudia/api_spec.rb
172
+ - spec/croudia/error_spec.rb
137
173
  - spec/croudia/identity_spec.rb
138
174
  - spec/croudia/scraper/friendships_spec.rb
139
175
  - spec/croudia/scraper/login_spec.rb
@@ -146,6 +182,7 @@ test_files:
146
182
  - spec/croudia/version_spec.rb
147
183
  - spec/croudia/voice_spec.rb
148
184
  - spec/croudia_spec.rb
185
+ - spec/fixtures/follow_request.html
149
186
  - spec/fixtures/follower_wktk.html
150
187
  - spec/fixtures/following_wktk.html
151
188
  - spec/fixtures/user_wktk1.html