betterific 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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODc5NGU1YjY0OTM2ZmM3NjViYzk1ZjNjM2YyN2E1OWE5ODM2ZDZlMA==
5
+ data.tar.gz: !binary |-
6
+ ZDljN2Y0MTU3MjIzMzllMDhkMjlhMTJhNjg3MWE3NTg5ZDJhNDM0OA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MjIzZjJiOTFkODZmMDkyODkzMzc3ZWM4ZWVkODBlODhmOTA0Mjk2YWRjOWI0
10
+ Yjg2YTkyNTI2NTczMzQ4NmNlZTJmMWI4OWUxYmNkZTc0NDc3N2ZmZTdjNTQz
11
+ NWNkMWNlNTVmMTM1NzI0ZTlhZWZjOTIwZTJiNDI0YWQwZGYxYmM=
12
+ data.tar.gz: !binary |-
13
+ YzIwNjUyNDJlNWZiYmFhODBkODRlYzFjODAzZDg4MmE1N2ZiMzk5ZDFhZGUy
14
+ YzM5MjA3ZDVjZTQyODAzMTg3OWIzNzhkYjc5YmIzZGZkMjg4YmYwZDNjZTdj
15
+ MDdkYzRlOTAyMmFhZjk4ZTBmNzE0MWZiMTQyNDUyNTEwOTA1ZWM=
data/README.md CHANGED
@@ -55,6 +55,21 @@ you can use
55
55
 
56
56
  Betterific::Client.betterifs(:ids => [id0, id1, ...])
57
57
 
58
+ ### Comments
59
+
60
+ You can see a list of comments by id or by betterif\_id using
61
+
62
+ Betterific::Client.comments(:ids => [id0, id1, ...])
63
+
64
+ and
65
+
66
+ Betterific::Client.comments(:betterif_ids => [id0, id1, ...])
67
+
68
+ If using betterif\_ids, you may also specify the desired sort order, which can
69
+ be either least\_recent or most\_recent
70
+
71
+ Betterific::Client.comments(:betterif_ids => [id0, id1, ...], :order => 'least_recent')
72
+
58
73
  ### Tags and Users
59
74
 
60
75
  You can see a list of tags or users by id using
@@ -5,6 +5,8 @@ module Betterific
5
5
 
6
6
  # The base URL to GET betterifs.
7
7
  BETTERIFS_BASE_URL = "#{BASE_URL}/betterifs".freeze
8
+ # The base URL to GET comments.
9
+ COMMENTS_BASE_URL = "#{BASE_URL}/comments".freeze
8
10
  # The base URL to GET tags.
9
11
  TAGS_BASE_URL = "#{BASE_URL}/tags".freeze
10
12
  # The base URL to GET users.
@@ -39,6 +39,35 @@ module Betterific
39
39
  end
40
40
  end
41
41
 
42
+ # Get a list of comments.
43
+ #
44
+ # ==== Parameters
45
+ #
46
+ # * +opts+ - {:ids => [id0, id1, ..., idx]} specifies the ids of the
47
+ # comment(s) to return.
48
+ # * +opts+ - {:betterif_ids => [id0, id1, ..., idx]} specifies the ids of
49
+ # the betterif(s) for which to return comments. This is ignored if :ids
50
+ # is given.
51
+ # * +opts+ - {:order => (least_recent|most_recent)} fetches either the
52
+ # least recent or most recent comments. This is ignored unless
53
+ # :betterif_ids is given.
54
+ def self.comments(opts={})
55
+ if opts[:ids].nil? && opts[:betterif_ids].nil?
56
+ raise "No ids or betterif_ids given."
57
+ end
58
+ unless opts[:order].nil?
59
+ unless %w{least_recent most_recent}.include?(opts[:order])
60
+ raise "Invalid order given."
61
+ end
62
+ end
63
+ params = [
64
+ opts[:ids] ? "comments[ids]=#{Array(opts[:ids]).map(&:to_s).join(',')}" : nil,
65
+ opts[:betterif_ids] ? "betterifs[ids]=#{Array(opts[:betterif_ids]).map(&:to_s).join(',')}" : nil,
66
+ opts[:order] ? "order=#{opts[:order]}" : nil
67
+ ].compact
68
+ get_json("#{COMMENTS_BASE_URL}?#{params.join('&')}")
69
+ end
70
+
42
71
  # Get a list of tags.
43
72
  #
44
73
  # ==== Parameters
@@ -107,6 +107,35 @@ module Betterific
107
107
  end
108
108
  end
109
109
 
110
+ # Get a list of comments.
111
+ #
112
+ # ==== Parameters
113
+ #
114
+ # * +opts+ - {:ids => [id0, id1, ..., idx]} specifies the ids of the
115
+ # comment(s) to return.
116
+ # * +opts+ - {:betterif_ids => [id0, id1, ..., idx]} specifies the ids of
117
+ # the betterif(s) for which to return comments. This is ignored if :ids
118
+ # is given.
119
+ # * +opts+ - {:order => (least_recent|most_recent)} fetches either the
120
+ # least recent or most recent comments. This is ignored unless
121
+ # :betterif_ids is given.
122
+ def self.comments(opts={})
123
+ if opts[:ids].nil? && opts[:betterif_ids].nil?
124
+ raise "No ids or betterif_ids given."
125
+ end
126
+ unless opts[:order].nil?
127
+ unless %w{least_recent most_recent}.include?(opts[:order])
128
+ raise "Invalid order given."
129
+ end
130
+ end
131
+ params = [
132
+ opts[:ids] ? "comments[ids]=#{Array(opts[:ids]).map(&:to_s).join(',')}" : nil,
133
+ opts[:betterif_ids] ? "betterifs[ids]=#{Array(opts[:betterif_ids]).map(&:to_s).join(',')}" : nil,
134
+ opts[:order] ? "order=#{opts[:order]}" : nil
135
+ ].compact
136
+ get_protobuf("#{COMMENTS_BASE_URL}?#{params.join('&')}")
137
+ end
138
+
110
139
  # Get a list of tags.
111
140
  #
112
141
  # ==== Parameters
@@ -1,3 +1,3 @@
1
1
  module Betterific
2
- VERSION = "0.0.2" #:nodoc:
2
+ VERSION = "0.0.3" #:nodoc:
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'betterific'
2
+ require 'time'
2
3
 
4
+ BETTERIFIC_COMMENT_ID = 121 #:nodoc
3
5
  BETTERIFIC_TAG_ID = 400937 #:nodoc
4
6
  BETTERIF_ID = 224 #:nodoc
5
7
  USER_ID = 2 #:nodoc
@@ -7,10 +9,12 @@ USER_ID = 2 #:nodoc
7
9
  SEARCH_KINDS = %w{betterifs tags users}.freeze #:nodoc
8
10
 
9
11
  def ensure_valid_api_response(resp, client_modjule, opts={})
10
- if opts[:big]
11
- resp.total_results.should > 10
12
- else
13
- resp.total_results.should >= (opts[:allow_empty] ? 0 : 1)
12
+ unless opts[:comments]
13
+ if opts[:big]
14
+ resp.total_results.should > 10
15
+ else
16
+ resp.total_results.should >= (opts[:allow_empty] ? 0 : 1)
17
+ end
14
18
  end
15
19
  if opts[:big]
16
20
  resp.num_results.should == 10
@@ -28,7 +32,7 @@ def ensure_valid_api_response(resp, client_modjule, opts={})
28
32
  resp.betterifs.first.tags.is_a?(Array).should == true
29
33
  elsif client_modjule == Betterific::ProtobufClient
30
34
  resp.betterifs.first.tags.is_a?(ProtocolBuffers::RepeatedField).should == true
31
- else
35
+ elsif client_modjule != Betterific::Client
32
36
  raise "Invalid client_modjule #{client_modjule}"
33
37
  end
34
38
  if resp.betterifs.first.tags.size > 0
@@ -41,6 +45,23 @@ def ensure_valid_api_response(resp, client_modjule, opts={})
41
45
  end
42
46
  end
43
47
  end
48
+ if opts[:comments]
49
+ if opts[:big]
50
+ resp.comments.size.should == 10
51
+ else
52
+ resp.comments.size.should >= (opts[:allow_empty] ? 0 : 1)
53
+ end
54
+ if client_modjule == Betterific::JsonClient
55
+ resp.comments.is_a?(Array).should == true
56
+ elsif client_modjule == Betterific::ProtobufClient
57
+ resp.comments.is_a?(ProtocolBuffers::RepeatedField).should == true
58
+ elsif client_modjule != Betterific::Client
59
+ raise "Invalid client_modjule #{client_modjule}"
60
+ end
61
+ if client_modjule == Betterific::ProtobufClient && resp.comments.size > 0
62
+ resp.comments.first.is_a?(BetterIf::Comment).should == true
63
+ end
64
+ end
44
65
  if opts[:tags]
45
66
  if opts[:big]
46
67
  resp.tags.size.should == 10
@@ -51,7 +72,7 @@ def ensure_valid_api_response(resp, client_modjule, opts={})
51
72
  resp.tags.is_a?(Array).should == true
52
73
  elsif client_modjule == Betterific::ProtobufClient
53
74
  resp.tags.is_a?(ProtocolBuffers::RepeatedField).should == true
54
- else
75
+ elsif client_modjule != Betterific::Client
55
76
  raise "Invalid client_modjule #{client_modjule}"
56
77
  end
57
78
  if client_modjule == Betterific::ProtobufClient && resp.tags.size > 0
@@ -68,7 +89,7 @@ def ensure_valid_api_response(resp, client_modjule, opts={})
68
89
  resp.users.is_a?(Array).should == true
69
90
  elsif client_modjule == Betterific::ProtobufClient
70
91
  resp.users.is_a?(ProtocolBuffers::RepeatedField).should == true
71
- else
92
+ elsif client_modjule != Betterific::Client
72
93
  raise "Invalid client_modjule #{client_modjule}"
73
94
  end
74
95
  if client_modjule == Betterific::ProtobufClient && resp.users.size > 0
@@ -85,26 +106,58 @@ def client_test(modjule)
85
106
  [:most_popular, :most_recent].each do |filter|
86
107
  it "should load #{filter} betterifs" do
87
108
  resp = modjule.betterifs(page_params.merge(:filter => filter))
88
- ensure_valid_api_response(resp, :betterifs => true, :big => page_params.empty?)
109
+ ensure_valid_api_response(resp, modjule, :betterifs => true, :big => page_params.empty?)
89
110
  end
90
111
  end
91
112
  it "should load betterifs via ids" do
92
113
  resp = modjule.betterifs(page_params.merge(:ids => BETTERIF_ID))
93
- ensure_valid_api_response(resp, :betterifs => true, :allow_empty => !page_params.empty?)
114
+ ensure_valid_api_response(resp, modjule, :betterifs => true, :allow_empty => !page_params.empty?)
94
115
  if page_params.empty?
95
116
  resp.betterifs.first.id.should == BETTERIF_ID
96
117
  end
97
118
  end
119
+ it "should load comments via ids" do
120
+ resp = modjule.comments(page_params.merge(:ids => BETTERIFIC_COMMENT_ID))
121
+ ensure_valid_api_response(resp, modjule, :comments => true, :allow_empty => !page_params.empty?)
122
+ if page_params.empty?
123
+ resp.comments.first.id.should == BETTERIFIC_COMMENT_ID
124
+ end
125
+ end
126
+ it "should load comments via betterif_ids" do
127
+ resp = modjule.comments(page_params.merge(:betterif_ids => BETTERIF_ID))
128
+ ensure_valid_api_response(resp, modjule, :comments => true, :allow_empty => !page_params.empty?)
129
+ if page_params.empty?
130
+ resp.comments.first.betterif.id.should == BETTERIF_ID
131
+ end
132
+ end
133
+ %w{least_recent most_recent}.each do |order|
134
+ it "should load comments via betterif_ids and #{order}" do
135
+ resp = modjule.comments(page_params.merge(:betterif_ids => BETTERIF_ID, :order => order))
136
+ ensure_valid_api_response(resp, modjule, :comments => true, :allow_empty => !page_params.empty?)
137
+ if page_params.empty?
138
+ resp.comments.first.betterif.id.should == BETTERIF_ID
139
+ if resp.comments.size > 1
140
+ first_comment_created_at = Time.parse(resp.comments.first.created_at)
141
+ last_comment_created_at = Time.parse(resp.comments.last.created_at)
142
+ if order == 'least_recent'
143
+ first_comment_created_at.should < last_comment_created_at
144
+ else
145
+ first_comment_created_at.should > last_comment_created_at
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
98
151
  it "should load tags via ids" do
99
152
  resp = modjule.tags(page_params.merge(:ids => BETTERIFIC_TAG_ID))
100
- ensure_valid_api_response(resp, :tags => true, :allow_empty => !page_params.empty?)
153
+ ensure_valid_api_response(resp, modjule, :tags => true, :allow_empty => !page_params.empty?)
101
154
  if page_params.empty?
102
155
  resp.tags.first.id.should == BETTERIFIC_TAG_ID
103
156
  end
104
157
  end
105
158
  it "should load users via ids" do
106
159
  resp = modjule.users(page_params.merge(:ids => USER_ID))
107
- ensure_valid_api_response(resp, :users => true, :allow_empty => !page_params.empty?)
160
+ ensure_valid_api_response(resp, modjule, :users => true, :allow_empty => !page_params.empty?)
108
161
  if page_params.empty?
109
162
  resp.users.first.id.should == USER_ID
110
163
  end
@@ -115,7 +168,7 @@ def client_test(modjule)
115
168
  q = [random_query, random_query].join(' ')
116
169
  resp = modjule.search(page_params.merge(:namespace => kind, :q => q))
117
170
  resp.q.should == q
118
- ensure_valid_api_response(resp.send(kind), kind.to_sym => true, :allow_empty => true)
171
+ ensure_valid_api_response(resp.send(kind), modjule, kind.to_sym => true, :allow_empty => true)
119
172
  if modjule == Betterific::JsonClient
120
173
  SEARCH_KINDS.each do |other_kind|
121
174
  next if kind == other_kind
@@ -129,7 +182,7 @@ def client_test(modjule)
129
182
  resp = modjule.search(page_params.merge(:namespace => :all, :q => q))
130
183
  resp.q.should == q
131
184
  SEARCH_KINDS.each do |kind|
132
- ensure_valid_api_response(resp.send(kind), kind.to_sym => true, :allow_empty => true)
185
+ ensure_valid_api_response(resp.send(kind), modjule, kind.to_sym => true, :allow_empty => true)
133
186
  end
134
187
  end
135
188
  end
metadata CHANGED
@@ -1,80 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: betterific
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brad Cater
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-13 00:00:00.000000000 Z
11
+ date: 2013-08-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: hashie
16
14
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
15
  requirements:
19
16
  - - ~>
20
17
  - !ruby/object:Gem::Version
21
18
  version: 2.0.5
22
- prerelease: false
19
+ name: hashie
23
20
  type: :runtime
24
21
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
22
  requirements:
27
23
  - - ~>
28
24
  - !ruby/object:Gem::Version
29
25
  version: 2.0.5
26
+ prerelease: false
30
27
  - !ruby/object:Gem::Dependency
31
- name: json
32
28
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
29
  requirements:
35
30
  - - ~>
36
31
  - !ruby/object:Gem::Version
37
32
  version: 1.8.0
38
- prerelease: false
33
+ name: json
39
34
  type: :runtime
40
35
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
36
  requirements:
43
37
  - - ~>
44
38
  - !ruby/object:Gem::Version
45
39
  version: 1.8.0
40
+ prerelease: false
46
41
  - !ruby/object:Gem::Dependency
47
- name: ruby-protocol-buffers
48
42
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
43
  requirements:
51
44
  - - ~>
52
45
  - !ruby/object:Gem::Version
53
46
  version: 1.4.0
54
- prerelease: false
47
+ name: ruby-protocol-buffers
55
48
  type: :development
56
49
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
50
  requirements:
59
51
  - - ~>
60
52
  - !ruby/object:Gem::Version
61
53
  version: 1.4.0
54
+ prerelease: false
62
55
  - !ruby/object:Gem::Dependency
63
- name: rspec
64
56
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
57
  requirements:
67
58
  - - ~>
68
59
  - !ruby/object:Gem::Version
69
60
  version: 2.13.0
70
- prerelease: false
61
+ name: rspec
71
62
  type: :development
72
63
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
64
  requirements:
75
65
  - - ~>
76
66
  - !ruby/object:Gem::Version
77
67
  version: 2.13.0
68
+ prerelease: false
78
69
  description: This gem is a Ruby interface to the Betterific API.
79
70
  email:
80
71
  - bradcater@gmail.com
@@ -103,27 +94,26 @@ files:
103
94
  - spec/spec_helper.rb
104
95
  homepage: https://github.com/bradcater/betterific
105
96
  licenses: []
97
+ metadata: {}
106
98
  post_install_message:
107
99
  rdoc_options: []
108
100
  require_paths:
109
101
  - lib
110
102
  required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
103
  requirements:
113
104
  - - ! '>='
114
105
  - !ruby/object:Gem::Version
115
106
  version: '0'
116
107
  required_rubygems_version: !ruby/object:Gem::Requirement
117
- none: false
118
108
  requirements:
119
109
  - - ! '>='
120
110
  - !ruby/object:Gem::Version
121
111
  version: '0'
122
112
  requirements: []
123
113
  rubyforge_project:
124
- rubygems_version: 1.8.25
114
+ rubygems_version: 2.0.5
125
115
  signing_key:
126
- specification_version: 3
116
+ specification_version: 4
127
117
  summary: This gem is a Ruby interface to the Betterific API. It provides support via
128
118
  Protocol Buffers if the ruby-protocol-buffers gem is installed; otherwise, it uses
129
119
  JSON.