ahub 0.3.2 → 0.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bfb442b4a4c757931552161a6b829ec90efa4177
4
- data.tar.gz: 324d4dffb5e41825ee53905e501db6dbaf7a99a7
3
+ metadata.gz: f15ac34fc04f78ba2a17031596dfb90dccbbf567
4
+ data.tar.gz: 98c3444ab17ff20dd792105d1aa8ed58f8b7b1f7
5
5
  SHA512:
6
- metadata.gz: 8ddd10bc8ed3711ac85acd435c494265ef1f4c4c9d961e189242ba04d6473041d69ef8c7c5cd4a288e5e0df34a9e4061765f4d08c878021999f3eb19e1c3c1fd
7
- data.tar.gz: 2f1a075a48a6db50b65aba5185ba491be4ab62b4b2afc24c0054dbc6414ede472183fa650f208e2f2b70241005efd50a2aea83dfcf9fe0a10ec4f13ebd362c18
6
+ metadata.gz: c3be66373cb10dfeaf82b7adb93387bd174beb8b2a61ff225d58b3d0b854386719641e98d7ca35510141b6ccab95b9f9c0571b5166347a2ef1953ae9a44d981f
7
+ data.tar.gz: 3762549149f4338b191ad195ff39ac736329482b70b4194ca8e6a4be0fefdc61231a126321c32898542811292e4a1330f05461140a32870a86f35f2f432b2352
data/lib/ahub/answer.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  module Ahub
2
2
  class Answer
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
 
6
5
  def self.create(question_id:, body:, username:, password:)
7
6
  url = "#{Ahub::DOMAIN}/services/v2/question/#{question_id}/answer.json"
@@ -10,7 +9,7 @@ module Ahub
10
9
  end
11
10
 
12
11
  def initialize(attrs)
13
- super(attrs)
12
+ super
14
13
  @author = Ahub::User.new(attrs[:author])
15
14
  end
16
15
 
data/lib/ahub/group.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  module Ahub
2
2
  class Group
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
 
6
5
  def add(user_id)
7
6
  add_user(user_id)
@@ -0,0 +1,90 @@
1
+ require 'base64'
2
+ require 'active_support/inflector'
3
+ require 'active_support/concern'
4
+
5
+ module Ahub
6
+ module APIResource
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ end
11
+
12
+ def update
13
+ raise NotImplementedError
14
+ end
15
+
16
+ def destroy
17
+ raise NotImplementedError
18
+ end
19
+
20
+ def initialize(attrs)
21
+ attrs.each_pair do |k,v|
22
+ self.instance_variable_set("@#{k.to_s.underscore}", v)
23
+
24
+ self.class.send(:define_method, k.to_s.underscore.to_sym) do
25
+ instance_variable_get("@#{__method__}")
26
+ end
27
+ end
28
+ end
29
+
30
+ class_methods do
31
+ def headers(username:'answerhub', password:'answerhub')
32
+ encoded = "Basic #{::Base64.strict_encode64("#{username}:#{password}")}"
33
+
34
+ {
35
+ 'Authorization' => encoded,
36
+ 'Accept' => "application/json",
37
+ 'Content-type' => "application/json",
38
+ }
39
+ end
40
+
41
+ def admin_headers
42
+ headers(username: Ahub::ADMIN_USER, password: Ahub::ADMIN_PASS)
43
+ end
44
+
45
+ def find(id)
46
+ url = "#{base_url}/#{id}.json"
47
+
48
+ new get_resource(url: url, headers:admin_headers)
49
+ rescue RestClient::ResourceNotFound => e
50
+ nil
51
+ end
52
+
53
+ def find_all(params: nil, page: 1, pageSize: 30)
54
+ url = "#{base_url}.json?page=#{page}&pageSize=#{pageSize}"
55
+
56
+ if params
57
+ params.each{|k,v| url << "&#{k}=#{URI.encode(v)}"}
58
+ end
59
+
60
+ get_resources(url: url, headers: admin_headers, klass: self)
61
+ end
62
+
63
+ def base_url
64
+ class_name = name.gsub(/Ahub::/, '').downcase
65
+ "#{Ahub::DOMAIN}/services/v2/#{class_name}"
66
+ end
67
+
68
+ def object_id_from_response(response)
69
+ response.headers[:location].match(/(?<id>\d*)\.json/)[:id].to_i
70
+ end
71
+
72
+ def get_resource(url:, headers:)
73
+ JSON.parse(RestClient.get(url, admin_headers), symbolize_names:true)
74
+ end
75
+
76
+ def get_resources(url:, headers:, klass:)
77
+ JSON.parse(RestClient.get(url, admin_headers), symbolize_names:true)[:list].map do |node|
78
+ klass.new(node)
79
+ end
80
+ end
81
+
82
+ private
83
+
84
+ def create_resource(url:, payload:, headers:)
85
+ response = RestClient.post(url, payload.to_json, headers)
86
+ find(object_id_from_response(response))
87
+ end
88
+ end
89
+ end
90
+ end
data/lib/ahub/question.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  module Ahub
2
2
  class Question
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
 
6
5
  def self.create(title:, body:, topics:, space_id: nil, username:, password:)
7
6
  url = "#{base_url}.json"
data/lib/ahub/space.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Ahub
2
2
  class Space
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
  end
6
5
  end
data/lib/ahub/topic.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Ahub
2
2
  class Topic
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
  end
6
5
  end
data/lib/ahub/user.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  module Ahub
2
2
  class User
3
- extend Ahub::APIHelpers
4
- include Ahub::ClassHelpers
3
+ include Ahub::APIResource
5
4
 
6
5
  def self.create(username:, email:, password:nil)
7
6
  url = "#{base_url}.json"
@@ -25,14 +24,10 @@ module Ahub
25
24
  @groups = attrs[:groups].map{|group| Ahub::Group.new(group)} if attrs[:groups]
26
25
  end
27
26
 
28
- def is_complete?
29
- !!@complete
30
- end
31
-
32
27
  def questions
33
28
  unless @questions
34
- response = self.class.get_resource(url: "#{self.class.base_url}/#{id}/question.json", headers: self.class.admin_headers)
35
- @questions = response[:list].map{ |question| Ahub::Question.new(question) }
29
+ url = "#{self.class.base_url}/#{id}/question.json"
30
+ @questions = self.class.get_resources(url: url, headers: self.class.admin_headers, klass: Ahub::Question)
36
31
  end
37
32
 
38
33
  @questions
@@ -40,8 +35,8 @@ module Ahub
40
35
 
41
36
  def answers
42
37
  unless @answers
43
- response = self.class.get_resource(url: "#{self.class.base_url}/#{id}/answer.json", headers: self.class.admin_headers)
44
- @answers = response[:list].map{ |answer| Ahub::Answer.new(answer) }
38
+ url = "#{self.class.base_url}/#{id}/answer.json"
39
+ @answers = self.class.get_resources(url: url, headers: self.class.admin_headers, klass: Ahub::Answer)
45
40
  end
46
41
 
47
42
  @answers
data/lib/ahub/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ahub
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/ahub.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require 'dotenv'
2
2
  require 'rest_client'
3
- require 'active_support/inflector'
4
- require 'ahub/modules/api_helpers'
5
- require 'ahub/modules/class_helpers'
3
+ require 'ahub/modules/api_resource'
6
4
  require 'ahub/version'
7
5
  require 'ahub/user'
8
6
  require 'ahub/question'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abel Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-12 00:00:00.000000000 Z
11
+ date: 2015-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -133,8 +133,7 @@ files:
133
133
  - lib/ahub.rb
134
134
  - lib/ahub/answer.rb
135
135
  - lib/ahub/group.rb
136
- - lib/ahub/modules/api_helpers.rb
137
- - lib/ahub/modules/class_helpers.rb
136
+ - lib/ahub/modules/api_resource.rb
138
137
  - lib/ahub/question.rb
139
138
  - lib/ahub/space.rb
140
139
  - lib/ahub/topic.rb
@@ -1,60 +0,0 @@
1
- module Ahub
2
- module APIHelpers
3
- require 'base64'
4
-
5
- def headers(username:'answerhub', password:'answerhub')
6
- encoded = "Basic #{::Base64.strict_encode64("#{username}:#{password}")}"
7
-
8
- {
9
- 'Authorization' => encoded,
10
- 'Accept' => "application/json",
11
- 'Content-type' => "application/json",
12
- }
13
- end
14
-
15
- def admin_headers
16
- headers(username: Ahub::ADMIN_USER, password: Ahub::ADMIN_PASS)
17
- end
18
-
19
- def find(id)
20
- url = "#{base_url}/#{id}.json"
21
-
22
- new get_resource(url: url, headers:admin_headers)
23
- rescue RestClient::ResourceNotFound => e
24
- nil
25
- end
26
-
27
- def find_all(params: nil, page: 1, pageSize: 30)
28
- url = "#{base_url}.json?page=#{page}&pageSize=#{pageSize}"
29
-
30
- if params
31
- params.each{|k,v| url << "&#{k}=#{URI.encode(v)}"}
32
- end
33
-
34
- get_resource(url: url, headers: admin_headers)[:list].map do |node|
35
- new(node)
36
- end
37
- end
38
-
39
- def base_url
40
- class_name = name.gsub(/Ahub::/, '').downcase
41
- "#{Ahub::DOMAIN}/services/v2/#{class_name}"
42
- end
43
-
44
- def object_id_from_response(response)
45
- response.headers[:location].match(/(?<id>\d*)\.json/)[:id].to_i
46
- end
47
-
48
- def get_resource(url:, headers:)
49
- JSON.parse(RestClient.get(url, admin_headers), symbolize_names:true)
50
- end
51
-
52
- private
53
-
54
- def create_resource(url:, payload:, headers:)
55
- response = RestClient.post(url, payload.to_json, headers)
56
- find(object_id_from_response(response))
57
- end
58
-
59
- end
60
- end
@@ -1,21 +0,0 @@
1
- module Ahub
2
- module ClassHelpers
3
- def update
4
- raise NotImplementedError
5
- end
6
-
7
- def destroy
8
- raise NotImplementedError
9
- end
10
-
11
- def initialize(attrs)
12
- attrs.each_pair do |k,v|
13
- self.instance_variable_set("@#{k.to_s.underscore}", v)
14
-
15
- self.class.send(:define_method, k.to_s.underscore.to_sym) do
16
- instance_variable_get("@#{__method__}")
17
- end
18
- end
19
- end
20
- end
21
- end