yamwow 0.0.8 → 0.0.9

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