yamwow 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,17 +3,25 @@ require 'csv'
3
3
  module YamWow
4
4
  class CsvGenerator
5
5
 
6
- def initialize(column_headers)
7
- @column_headers = column_headers
6
+ attr_accessor :headers
7
+
8
+ def initialize
9
+ @headers = nil
8
10
  end
9
11
 
10
- def generate(messages)
12
+ def generate(items)
11
13
  CSV.generate do |csv|
12
- csv << @column_headers
13
- sorted_messages = messages.sort { |x, y| y.date_created <=> x.date_created }
14
- sorted_messages.each { |p| csv << yield(p) }
14
+ csv << headers_as_array if @headers
15
+ items.each { |i| csv << yield(i) }
15
16
  end
16
17
  end
17
18
 
19
+ private
20
+
21
+ def headers_as_array
22
+ return unless @headers
23
+ @headers.kind_of?(Array) ? @headers : @headers.split(',').map { |h| h.strip }
24
+ end
25
+
18
26
  end
19
27
  end
data/lib/yamwow/facade.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require_relative 'client'
2
+ Dir[File.expand_path(File.dirname(__FILE__) + '/*_request.rb')].each { |f| require f }
3
+
1
4
  module YamWow
2
5
  class Facade
3
6
 
@@ -5,34 +8,24 @@ module YamWow
5
8
  @client = Client.new oauth_token
6
9
  end
7
10
 
8
- def messages_for_topic(topic_name, options={})
9
- request = MessagesForTopicRequest.new @client, topic_name, options
10
- response = request.send
11
- response.messages
11
+ def messages_with_topic(topic_name, options={})
12
+ MessagesWithTopicRequest.new(@client, topic_name, options).send
12
13
  end
13
14
 
14
15
  def praises(options={})
15
- request = PraiseRequest.new @client, options
16
- response = request.send
17
- response.praises
16
+ PraiseRequest.new(@client, options).send
18
17
  end
19
18
 
20
- def topic(topic_name)
21
- request = TopicRequest.new @client, topic_name
22
- response = request.send
23
- response.topic
19
+ def topic_with_name(topic_name)
20
+ TopicWithNameRequest.new(@client, topic_name).send
24
21
  end
25
22
 
26
23
  def topics
27
- request = TopicsRequest.new @client
28
- response = request.send
29
- response.topics
24
+ TopicsRequest.new(@client).send
30
25
  end
31
26
 
32
- def group(group_name)
33
- request = GroupRequest.new @client, group_name
34
- response = request.send
35
- response.group
27
+ def group_with_name(group_name)
28
+ GroupWithNameRequest.new(@client, group_name).send
36
29
  end
37
30
 
38
31
  end
@@ -0,0 +1,40 @@
1
+ require_relative 'group'
2
+
3
+ module YamWow
4
+ class GroupWithNameRequest
5
+
6
+ def initialize(client, group_name)
7
+ @client = client
8
+ @group_name = group_name.downcase.gsub(/[^0-9a-z]/i, '')
9
+ end
10
+
11
+ def send
12
+ build_group group_data
13
+ end
14
+
15
+ private
16
+
17
+ def group_data
18
+ data = send_autocomplete_request
19
+ groups = data['groups'] || []
20
+ groups.select { |g| g['name'] == @group_name }.first
21
+ end
22
+
23
+ def send_autocomplete_request
24
+ @client.get_autocomplete prefix: autocomplete_prefix
25
+ end
26
+
27
+ def autocomplete_prefix
28
+ 'to:' + @group_name
29
+ end
30
+
31
+ def build_group(group_data)
32
+ return unless group_data
33
+ g = YamWow::Group.new
34
+ g.id = group_data['id']
35
+ g.name = group_data['full_name']
36
+ g
37
+ end
38
+
39
+ end
40
+ end
@@ -1,10 +1,9 @@
1
- require_relative 'topic_request'
2
- require_relative 'messages_for_topic_response'
1
+ require_relative 'topic_with_name_request'
3
2
  require_relative 'message'
4
3
  require_relative 'user'
5
4
 
6
5
  module YamWow
7
- class MessagesForTopicRequest
6
+ class MessagesWithTopicRequest
8
7
 
9
8
  def initialize(client, topic_name, options={})
10
9
  @client = client
@@ -12,7 +11,6 @@ module YamWow
12
11
  @options = options
13
12
  end
14
13
 
15
-
16
14
  def send
17
15
  @messages = []
18
16
  loop_finished = false
@@ -26,7 +24,8 @@ module YamWow
26
24
  loop_finished = no_more_messages || limit_reached
27
25
  end
28
26
 
29
- build_response
27
+ @messages.sort! { |x, y| y.date_created <=> x.date_created }
28
+ @messages
30
29
  end
31
30
 
32
31
  private
@@ -40,10 +39,10 @@ module YamWow
40
39
  end
41
40
 
42
41
  def get_topic_id
43
- request = TopicRequest.new @client, @topic_name
44
- response = request.send
45
- raise "Topic '#{@topic_name}' was not found." unless response.topic
46
- response.topic.id
42
+ request = TopicWithNameRequest.new @client, @topic_name
43
+ topic = request.send
44
+ raise "Topic '#{@topic_name}' was not found." unless topic
45
+ topic.id
47
46
  end
48
47
 
49
48
  def oldest_message_id
@@ -91,9 +90,5 @@ module YamWow
91
90
  @options[:limit_count] ? @options[:limit_count].to_i : 0
92
91
  end
93
92
 
94
- def build_response
95
- MessagesForTopicResponse.new @messages
96
- end
97
-
98
93
  end
99
94
  end
@@ -1,4 +1,5 @@
1
- require_relative 'messages_for_topic_request'
1
+ require_relative 'messages_with_topic_request'
2
+ require_relative 'praise'
2
3
 
3
4
  module YamWow
4
5
  class PraiseRequest
@@ -9,9 +10,9 @@ module YamWow
9
10
  end
10
11
 
11
12
  def send
12
- messages_by_topic_request = MessagesForTopicRequest.new @client, 'praise', @options
13
- messages_by_topic_response = messages_by_topic_request.send
14
- PraiseResponse.new messages_by_topic_response.messages
13
+ r = MessagesWithTopicRequest.new @client, 'praise', @options
14
+ messages = r.send
15
+ messages.map { |m| Praise.new m }
15
16
  end
16
17
 
17
18
  end
data/lib/yamwow/topic.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module YamWow
2
2
  class Topic
3
- attr_accessor :id, :name
3
+ attr_accessor :id, :name, :usages
4
4
  end
5
5
  end
@@ -0,0 +1,36 @@
1
+ require_relative 'topic'
2
+
3
+ module YamWow
4
+ class TopicWithNameRequest
5
+
6
+ def initialize(client, topic_name)
7
+ @client = client
8
+ @topic_name = topic_name
9
+ end
10
+
11
+ def send
12
+ build_topic topic_data
13
+ end
14
+
15
+ private
16
+
17
+ def topic_data
18
+ data = send_autocomplete_request
19
+ topics = data['topics'] || []
20
+ topics.select { |t| t['name'].casecmp(@topic_name) == 0 }.first
21
+ end
22
+
23
+ def send_autocomplete_request
24
+ @client.get_autocomplete prefix: @topic_name
25
+ end
26
+
27
+ def build_topic(topic_data)
28
+ return unless topic_data
29
+ t = Topic.new
30
+ t.id = topic_data['id']
31
+ t.name = topic_data['name']
32
+ t
33
+ end
34
+
35
+ end
36
+ end
@@ -1,7 +1,4 @@
1
-
2
-
3
1
  require_relative 'topic'
4
- require_relative 'topics_response'
5
2
 
6
3
  module YamWow
7
4
  class TopicsRequest
@@ -14,18 +11,20 @@ module YamWow
14
11
  @topics = []
15
12
  process_range '0', '9'
16
13
  process_range 'a', 'z'
17
- build_response
14
+ @topics.uniq! { |t| t.id }
15
+ @topics.sort! { |x, y| x.name.downcase <=> y.name.downcase }
16
+ @topics
18
17
  end
19
18
 
20
19
  private
21
20
 
22
- def process_range(first, last)
23
- (first..last).each do |current|
24
- response_data = send_autocomplete_request current
21
+ def process_range(first, last, current=nil)
22
+ ((current.to_s + first)..(current.to_s + last)).each do |prefix|
23
+ response_data = send_autocomplete_request prefix
25
24
  topics_data = response_data['topics'] || []
26
25
  topics = topics_data.map { |t| build_topic t }
27
26
  @topics += topics
28
- process_range current + first, current + last if topics.length == 50
27
+ process_range first, last, prefix if topics.length == 50
29
28
  end
30
29
  end
31
30
 
@@ -33,16 +32,11 @@ module YamWow
33
32
  @client.get_autocomplete prefix: prefix.downcase
34
33
  end
35
34
 
36
- def build_response
37
- topics = @topics.uniq { |t| t.id }
38
- topics = topics.sort { |x, y| x.name.downcase <=> y.name.downcase }
39
- TopicsResponse.new topics
40
- end
41
-
42
35
  def build_topic(topic_data)
43
36
  t = Topic.new
44
37
  t.id = topic_data['id']
45
38
  t.name = topic_data['name']
39
+ t.usages = topic_data['applications_count']
46
40
  t
47
41
  end
48
42
 
data/lib/yamwow.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  ENV['SSL_CERT_FILE'] ||= File.expand_path(File.dirname(__FILE__) + '/cacert.pem')
2
- Dir[File.expand_path(File.dirname(__FILE__) + '/yamwow/*.rb')].each { |f| require f }
2
+ require_relative 'yamwow/facade'
3
+ require_relative 'yamwow/csv_generator'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yamwow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-04 00:00:00.000000000 Z
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yam
16
- requirement: &70341913725080 !ruby/object:Gem::Requirement
16
+ requirement: &70195163260140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70341913725080
24
+ version_requirements: *70195163260140
25
25
  description:
26
26
  email: matthew-github@matthewriley.name
27
27
  executables: []
@@ -33,20 +33,15 @@ files:
33
33
  - lib/yamwow/csv_generator.rb
34
34
  - lib/yamwow/facade.rb
35
35
  - lib/yamwow/group.rb
36
- - lib/yamwow/group_request.rb
37
- - lib/yamwow/group_response.rb
36
+ - lib/yamwow/group_with_name_request.rb
38
37
  - lib/yamwow/message.rb
39
- - lib/yamwow/messages_for_topic_request.rb
40
- - lib/yamwow/messages_for_topic_response.rb
38
+ - lib/yamwow/messages_with_topic_request.rb
41
39
  - lib/yamwow/praise.rb
42
40
  - lib/yamwow/praise_request.rb
43
- - lib/yamwow/praise_response.rb
44
41
  - lib/yamwow/throttle.rb
45
42
  - lib/yamwow/topic.rb
46
- - lib/yamwow/topic_request.rb
47
- - lib/yamwow/topic_response.rb
43
+ - lib/yamwow/topic_with_name_request.rb
48
44
  - lib/yamwow/topics_request.rb
49
- - lib/yamwow/topics_response.rb
50
45
  - lib/yamwow/user.rb
51
46
  - lib/yamwow.rb
52
47
  homepage: http://rubygems.org/gems/yamwow
@@ -1,47 +0,0 @@
1
- require_relative 'group'
2
- require_relative 'group_response'
3
-
4
- module YamWow
5
- class GroupRequest
6
-
7
- def initialize(client, group_name)
8
- @client = client
9
- @group_name = group_name.gsub /[^0-9a-z]/i, ''
10
- end
11
-
12
- def send
13
- group_data = get_group_data
14
- group_data ? build_response(group_data) : build_empty_response
15
- end
16
-
17
- private
18
-
19
- def get_group_data
20
- data = send_autocomplete_request
21
- topics = data['groups'] || []
22
- topics.select { |t| t['name'].downcase == @group_name.downcase }[0]
23
- end
24
-
25
- def send_autocomplete_request
26
- prefix = 'to:' + @group_name.downcase
27
- @client.get_autocomplete prefix: prefix
28
- end
29
-
30
- def build_empty_response
31
- GroupResponse.new nil
32
- end
33
-
34
- def build_response(group_data)
35
- group = build_group group_data
36
- GroupResponse.new group
37
- end
38
-
39
- def build_group(group_data)
40
- g = YamWow::Group.new
41
- g.id = group_data['id']
42
- g.name = group_data['full_name']
43
- g
44
- end
45
-
46
- end
47
- end
@@ -1,11 +0,0 @@
1
- module YamWow
2
- class GroupResponse
3
-
4
- attr_reader :group
5
-
6
- def initialize(group)
7
- @group = group
8
- end
9
-
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module YamWow
2
- class MessagesForTopicResponse
3
-
4
- attr_reader :messages
5
-
6
- def initialize(messages)
7
- @messages = messages
8
- end
9
-
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- require_relative 'praise'
2
-
3
- module YamWow
4
- class PraiseResponse
5
-
6
- def initialize(messages)
7
- @messages = messages
8
- end
9
-
10
- def praises
11
- @praises ||= @messages.map { |m| Praise.new m }
12
- end
13
-
14
- end
15
- end
@@ -1,46 +0,0 @@
1
- require_relative 'topic'
2
- require_relative 'topic_response'
3
-
4
- module YamWow
5
- class TopicRequest
6
-
7
- def initialize(client, topic_name)
8
- @client = client
9
- @topic_name = topic_name
10
- end
11
-
12
- def send
13
- topic_data = get_topic_data
14
- topic_data ? build_response(topic_data) : build_empty_response
15
- end
16
-
17
- private
18
-
19
- def get_topic_data
20
- data = send_autocomplete_request
21
- topics = data['topics'] || []
22
- topics.select { |t| t['name'].downcase == @topic_name.downcase }[0]
23
- end
24
-
25
- def send_autocomplete_request
26
- @client.get_autocomplete prefix: @topic_name.downcase
27
- end
28
-
29
- def build_empty_response
30
- TopicResponse.new nil
31
- end
32
-
33
- def build_response(topic_data)
34
- topic = build_topic topic_data
35
- TopicResponse.new topic
36
- end
37
-
38
- def build_topic(topic_data)
39
- t = Topic.new
40
- t.id = topic_data['id']
41
- t.name = topic_data['name']
42
- t
43
- end
44
-
45
- end
46
- end
@@ -1,11 +0,0 @@
1
- module YamWow
2
- class TopicResponse
3
-
4
- attr_reader :topic
5
-
6
- def initialize(topic)
7
- @topic = topic
8
- end
9
-
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- module YamWow
2
- class TopicsResponse
3
-
4
- attr_reader :topics
5
-
6
- def initialize(topics)
7
- @topics = topics
8
- end
9
-
10
- end
11
- end