crowdskout 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/crowdskout.gemspec +1 -1
- data/lib/crowdskout.rb +4 -2
- data/lib/crowdskout/api.rb +8 -2
- data/lib/crowdskout/auth/oauth2.rb +6 -0
- data/lib/crowdskout/components/attributes/attribute.rb +12 -0
- data/lib/crowdskout/components/attributes/option.rb +7 -3
- data/lib/crowdskout/components/component.rb +13 -2
- data/lib/crowdskout/components/fields/field_options.rb +12 -0
- data/lib/crowdskout/components/profiles/collection.rb +30 -0
- data/lib/crowdskout/components/profiles/field.rb +29 -0
- data/lib/crowdskout/components/profiles/item.rb +34 -0
- data/lib/crowdskout/components/profiles/profile.rb +22 -16
- data/lib/crowdskout/components/profiles/{name.rb → value.rb} +10 -6
- data/lib/crowdskout/components/result_set.rb +4 -2
- data/lib/crowdskout/exceptions/oauth2_exception.rb +6 -0
- data/lib/crowdskout/exceptions/service_exception.rb +6 -0
- data/lib/crowdskout/services/attribute_service.rb +20 -6
- data/lib/crowdskout/services/base_service.rb +6 -0
- data/lib/crowdskout/services/field_service.rb +11 -0
- data/lib/crowdskout/services/profile_service.rb +27 -2
- data/lib/crowdskout/util/config.rb +6 -0
- data/lib/crowdskout/util/helpers.rb +6 -0
- data/lib/crowdskout/version.rb +1 -1
- data/spec/crowdskout/auth/oauth2_spec.rb +1 -1
- data/spec/crowdskout/services/attribute_service_spec.rb +1 -0
- data/spec/crowdskout/services/field_service_spec.rb +1 -0
- data/spec/crowdskout/services/profile_service_spec.rb +54 -26
- metadata +6 -4
- data/lib/crowdskout/components/profiles/gender.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26a82fafee392d2d1494dcf24b3eb88689e656fb
|
4
|
+
data.tar.gz: 9a6d19a488a1dbe4398ff7e85e0edae5d55c8dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57cc85584ddcb813b76870d3d681a48634dc7639bd73899c096797aebe83d9fb79aedd54a0a8d5c20128954dc736bd837dca231bed1fc2ce75c569ad29ec23b9
|
7
|
+
data.tar.gz: 07e130cf6470641e4bb3f72d332542723f89063e402bacaefdf0acd2c72f51b964e20deb606d41940143fe3da442b4add1c79220991387cac3004cfd76abb337
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Crowdskout
|
2
2
|
|
3
|
-
|
3
|
+
[![Build Status](https://travis-ci.org/revvco/crowdskout.png?branch=master)](https://travis-ci.org/revvco/crowdskout) [![Gem Version](https://badge.fury.io/rb/crowdskout.svg)](https://badge.fury.io/rb/crowdskout) [![Code Climate](https://codeclimate.com/github/revvco/crowdskout/badges/gpa.svg)](https://codeclimate.com/github/revvco/crowdskout)
|
4
4
|
|
5
|
-
|
5
|
+
A Ruby wrapper for the Crowdskout API.
|
6
6
|
|
7
|
-
|
7
|
+
Crowdskout API documentation can be found [here](http://docs.crowdskout.com/api/#get-the-options-for-a-field)
|
8
8
|
|
9
9
|
## Installation
|
10
10
|
|
@@ -50,4 +50,4 @@ Or install it yourself as:
|
|
50
50
|
field_options = api.get_options_for_a_field("AddressCity")
|
51
51
|
|
52
52
|
# Fetching attributes
|
53
|
-
attributes = api.get_attributes
|
53
|
+
attributes = api.get_attributes
|
data/crowdskout.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "crowdskout"
|
8
|
-
s.version = '0.0.
|
8
|
+
s.version = '0.0.5'
|
9
9
|
s.platform = Gem::Platform::RUBY
|
10
10
|
s.authors = ["Crowdskout", "Revv","Kyle Schutt"]
|
11
11
|
s.homepage = "https://github.com/revvco/crowdskout"
|
data/lib/crowdskout.rb
CHANGED
@@ -48,8 +48,10 @@ module Crowdskout
|
|
48
48
|
autoload :Attribute, 'crowdskout/components/attributes/attribute'
|
49
49
|
autoload :Option, 'crowdskout/components/attributes/option'
|
50
50
|
autoload :Profile, 'crowdskout/components/profiles/profile'
|
51
|
-
autoload :
|
52
|
-
autoload :
|
51
|
+
autoload :Collection, 'crowdskout/components/profiles/collection'
|
52
|
+
autoload :Item, 'crowdskout/components/profiles/item'
|
53
|
+
autoload :Field, 'crowdskout/components/profiles/field'
|
54
|
+
autoload :Value, 'crowdskout/components/profiles/value'
|
53
55
|
autoload :FieldOptions, 'crowdskout/components/fields/field_options'
|
54
56
|
end
|
55
57
|
|
data/lib/crowdskout/api.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
#
|
2
|
+
# api.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
class Api
|
3
9
|
# Class constructor
|
@@ -19,7 +25,7 @@ module Crowdskout
|
|
19
25
|
def get_profile(profile_id, collections)
|
20
26
|
Services::ProfileService.get_profile(profile_id, collections)
|
21
27
|
end
|
22
|
-
def create_profile(profile
|
28
|
+
def create_profile(profile)
|
23
29
|
Services::ProfileService.create_profile(profile, params)
|
24
30
|
end
|
25
31
|
def create_profiles_bulk(profiles)
|
@@ -41,7 +47,7 @@ module Crowdskout
|
|
41
47
|
def get_attributes(params = {})
|
42
48
|
Services::AttributeService.get_attributes(params)
|
43
49
|
end
|
44
|
-
def get_attribute(attribute_id)
|
50
|
+
def get_attribute(attribute_id, params = {})
|
45
51
|
Services::AttributeService.get_attribute(attribute_id)
|
46
52
|
end
|
47
53
|
def create_attribute(name, type, options = nil)
|
@@ -1,8 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# attribute.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Components
|
3
9
|
class Attribute < Component
|
4
10
|
attr_accessor :id, :type, :locked, :name, :options
|
5
11
|
|
12
|
+
# Factory method to create an Attribute object from a json string
|
13
|
+
# @param [Hash] props - properties to create object from
|
14
|
+
# @return [Attribute]
|
6
15
|
def self.create(props)
|
7
16
|
obj = Attribute.new
|
8
17
|
if props
|
@@ -22,6 +31,9 @@ module Crowdskout
|
|
22
31
|
obj
|
23
32
|
end
|
24
33
|
|
34
|
+
# Add an Option
|
35
|
+
# @param [Option] option
|
36
|
+
# @return [Array] the options array
|
25
37
|
def add_options(option)
|
26
38
|
@options = [] if @options.nil?
|
27
39
|
@options << option
|
@@ -1,13 +1,17 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
|
+
# option.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
2
6
|
|
3
7
|
module Crowdskout
|
4
8
|
module Components
|
5
9
|
class Option < Component
|
6
10
|
attr_accessor :id, :value
|
7
11
|
|
8
|
-
# Factory method to create an
|
12
|
+
# Factory method to create an Option object from a json string
|
9
13
|
# @param [Hash] props - properties to create object from
|
10
|
-
# @return [
|
14
|
+
# @return [Option]
|
11
15
|
def self.create(props)
|
12
16
|
obj = Option.new
|
13
17
|
if props
|
@@ -1,7 +1,15 @@
|
|
1
|
+
#
|
2
|
+
# component.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Components
|
3
9
|
class Component
|
4
10
|
|
11
|
+
# Return the object as hash
|
12
|
+
# @return [Hash]
|
5
13
|
def to_hash
|
6
14
|
hash = Hash.new
|
7
15
|
self.instance_variables.collect do |var|
|
@@ -10,6 +18,9 @@ module Crowdskout
|
|
10
18
|
hash
|
11
19
|
end
|
12
20
|
|
21
|
+
# Get the nested value as a hash
|
22
|
+
# @param [Object] an object to change into a hash
|
23
|
+
# @return [Hash] hash of the val
|
13
24
|
def self.to_hash_value(val)
|
14
25
|
if val.is_a? Crowdskout::Components::Component
|
15
26
|
return val.to_hash
|
@@ -22,12 +33,12 @@ module Crowdskout
|
|
22
33
|
end
|
23
34
|
end
|
24
35
|
|
36
|
+
# Object to a json string
|
37
|
+
# @return [String] the hash of the object to a json string
|
25
38
|
def to_json(val = nil)
|
26
39
|
self.to_hash.to_json
|
27
40
|
end
|
28
41
|
|
29
|
-
protected
|
30
|
-
|
31
42
|
# Get the requested value from a hash, or return the default
|
32
43
|
# @param [Hash] hsh - the hash to search for the provided hash key
|
33
44
|
# @param [String] key - hash key to look for
|
@@ -1,8 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# field_options.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Components
|
3
9
|
class FieldOptions < Component
|
4
10
|
attr_accessor :id, :collection, :options
|
5
11
|
|
12
|
+
# Factory method to create an FieldOptions object from a json string
|
13
|
+
# @param [Hash] props - properties to create object from
|
14
|
+
# @return [FieldOptions]
|
6
15
|
def self.create(props)
|
7
16
|
obj = FieldOptions.new
|
8
17
|
if props
|
@@ -22,6 +31,9 @@ module Crowdskout
|
|
22
31
|
obj
|
23
32
|
end
|
24
33
|
|
34
|
+
# Add an Option
|
35
|
+
# @param [Option] option
|
36
|
+
# @return [Array] the options array
|
25
37
|
def add_options(option)
|
26
38
|
@options = [] if @options.nil?
|
27
39
|
@options << option
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#
|
2
|
+
# collection.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
7
|
+
module Crowdskout
|
8
|
+
module Components
|
9
|
+
class Collection < Component
|
10
|
+
attr_accessor :key_name, :items
|
11
|
+
|
12
|
+
# Factory method to create an Collection object from a json string
|
13
|
+
# @param [String] key_name - name of the collection
|
14
|
+
# @param [Array] items - properties to create object from
|
15
|
+
# @return [Collection]
|
16
|
+
def self.create(key_name, items)
|
17
|
+
obj = Collection.new
|
18
|
+
obj.key_name = key_name
|
19
|
+
obj.items = []
|
20
|
+
if items
|
21
|
+
items.each do |item|
|
22
|
+
# item is a hash of fields
|
23
|
+
obj.items << Components::Item.create(item)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
obj
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#
|
2
|
+
# field.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
7
|
+
module Crowdskout
|
8
|
+
module Components
|
9
|
+
class Field < Component
|
10
|
+
# value can either be a string or a hash
|
11
|
+
attr_accessor :key_name, :value
|
12
|
+
|
13
|
+
# Factory method to create an Field object from a json string
|
14
|
+
# @param [String] key_name - name of the Field
|
15
|
+
# @param [Hash or String] value - properties to create object from
|
16
|
+
# @return [Field]
|
17
|
+
def self.create(key_name, value)
|
18
|
+
obj = Field.new
|
19
|
+
obj.key_name = key_name
|
20
|
+
if value.is_a?(Hash)
|
21
|
+
obj.value = Value.create(value)
|
22
|
+
else
|
23
|
+
obj.value = value.to_s
|
24
|
+
end
|
25
|
+
obj
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# item.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
7
|
+
module Crowdskout
|
8
|
+
module Components
|
9
|
+
class Item < Component
|
10
|
+
attr_accessor :id, :fields, :delete
|
11
|
+
|
12
|
+
# Factory method to create an Item object from a json string
|
13
|
+
# @param [Hash] props - properties to create object from
|
14
|
+
# @return [Item]
|
15
|
+
def self.create(props)
|
16
|
+
obj = Item.new
|
17
|
+
obj.id = 0
|
18
|
+
obj.fields = []
|
19
|
+
if props
|
20
|
+
props.each do |key, value|
|
21
|
+
if ['id'].include? key.downcase
|
22
|
+
obj.send("#{key}=", value) if obj.respond_to? key
|
23
|
+
else
|
24
|
+
# key is the name of the field
|
25
|
+
# value is the field's value
|
26
|
+
obj.fields << Components::Field.create(key, value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
obj
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,39 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# profile.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Components
|
3
9
|
class Profile < Component
|
4
|
-
attr_accessor :id, :
|
10
|
+
attr_accessor :id, :collections
|
5
11
|
|
12
|
+
# Factory method to create an Profile object from a json string
|
13
|
+
# @param [Hash] props - properties to create object from
|
14
|
+
# @return [Profile]
|
6
15
|
def self.create(props)
|
7
16
|
obj = Profile.new
|
17
|
+
obj.collections = []
|
8
18
|
if props
|
9
19
|
props.each do |key, value|
|
10
|
-
if key.downcase
|
11
|
-
if value
|
12
|
-
obj.names = []
|
13
|
-
value.each do |name|
|
14
|
-
obj.names << Components::Name.create(name)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
elsif key.downcase == 'genders'
|
18
|
-
if value
|
19
|
-
obj.genders = []
|
20
|
-
value.each do |gender|
|
21
|
-
obj.genders << Components::Gender.create(gender)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
else
|
20
|
+
if ['id'].include? key.downcase
|
25
21
|
obj.send("#{key}=", value) if obj.respond_to? key
|
22
|
+
else
|
23
|
+
# the key is the name of the collection
|
24
|
+
# the value is an array of items
|
25
|
+
obj.collections << Components::Collection.create(key, value)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
obj
|
30
30
|
end
|
31
31
|
|
32
|
+
# Add a Name
|
33
|
+
# @param [Name] name
|
34
|
+
# @return [Array] the names array
|
32
35
|
def add_names(name)
|
33
36
|
@names = [] if @names.nil?
|
34
37
|
@names << name
|
35
38
|
end
|
36
39
|
|
40
|
+
# Add a Gender
|
41
|
+
# @param [Gebder] gender
|
42
|
+
# @return [Array] the genders array
|
37
43
|
def add_genders(gender)
|
38
44
|
@genders = [] if @genders.nil?
|
39
45
|
@genders << gender
|
@@ -1,15 +1,19 @@
|
|
1
|
-
#
|
1
|
+
#
|
2
|
+
# value.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
2
6
|
|
3
7
|
module Crowdskout
|
4
8
|
module Components
|
5
|
-
class
|
6
|
-
attr_accessor :id, :
|
9
|
+
class Value < Component
|
10
|
+
attr_accessor :id, :value
|
7
11
|
|
8
|
-
# Factory method to create an
|
12
|
+
# Factory method to create an Value object from a json string
|
9
13
|
# @param [Hash] props - properties to create object from
|
10
|
-
# @return [
|
14
|
+
# @return [Value]
|
11
15
|
def self.create(props)
|
12
|
-
obj =
|
16
|
+
obj = Value.new
|
13
17
|
if props
|
14
18
|
props.each do |key, value|
|
15
19
|
obj.send("#{key}=", value) if obj.respond_to? key
|
@@ -1,14 +1,16 @@
|
|
1
1
|
#
|
2
2
|
# result_set.rb
|
3
|
+
# Crowdskout
|
3
4
|
#
|
4
5
|
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
5
6
|
|
6
7
|
module Crowdskout
|
7
8
|
module Components
|
8
9
|
class ResultSet
|
9
|
-
attr_accessor :results, :
|
10
|
-
def initialize(results,
|
10
|
+
attr_accessor :results, :messages
|
11
|
+
def initialize(results, messages)
|
11
12
|
@results = results
|
13
|
+
@messages = messages
|
12
14
|
end
|
13
15
|
end
|
14
16
|
end
|
@@ -1,12 +1,17 @@
|
|
1
|
+
#
|
2
|
+
# attribute_service.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Services
|
3
9
|
class AttributeService < BaseService
|
4
10
|
class << self
|
5
11
|
|
6
12
|
# More info - http://docs.crowdskout.com/api/#get-all-attributes
|
7
|
-
# @param params - query parameters
|
8
|
-
#
|
9
|
-
# - offset - the number of attributes to skip
|
13
|
+
# @param [Hash] params - query parameters
|
14
|
+
# @return [ResultSet] set of Components::Attributes
|
10
15
|
def get_attributes(params = {})
|
11
16
|
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.attributes')
|
12
17
|
url = build_url(url, params)
|
@@ -23,17 +28,21 @@ module Crowdskout
|
|
23
28
|
end
|
24
29
|
|
25
30
|
# more info - http://docs.crowdskout.com/api/#get-an-attribute-by-id
|
26
|
-
# @param [
|
27
|
-
|
31
|
+
# @param [Integer] attribute_id - the id of the attribute to fetch
|
32
|
+
# @param [Hash] params - query parameters
|
33
|
+
# @return [Attribute]
|
34
|
+
def get_attribute(attribute_id, params = {})
|
28
35
|
raise Exceptions::ServiceException, "Attribute ID is required." if attribute_id.nil?
|
29
36
|
url = Util::Config.get('endpoints.base_url') +
|
30
37
|
sprintf(Util::Config.get('endpoints.crud_attribute'), attribute_id)
|
31
|
-
url = build_url(url)
|
38
|
+
url = build_url(url, params)
|
32
39
|
response = RestClient.get(url, get_headers())
|
33
40
|
Components::Attribute.create(JSON.parse(response.body)["data"])
|
34
41
|
end
|
35
42
|
|
36
43
|
# more info - http://docs.crowdskout.com/api/#create-an-attribute
|
44
|
+
# @param [Attribute] attribute - attribute object to add to Crowdskout
|
45
|
+
# @return [Attribute]
|
37
46
|
def create_attribute(new_attribute)
|
38
47
|
raise Exceptions::ServiceException, "Attribute must not be nil" if new_attribute.nil?
|
39
48
|
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.attribute')
|
@@ -44,6 +53,9 @@ module Crowdskout
|
|
44
53
|
end
|
45
54
|
|
46
55
|
# more info - http://docs.crowdskout.com/api/#update-an-attribute
|
56
|
+
# @param [Integer] attribute_id - the id of the attribute to update
|
57
|
+
# @param [Hash] params - query parameters
|
58
|
+
# @return [Attribute]
|
47
59
|
def update_attribute(attribute_id, params = {})
|
48
60
|
raise Exceptions::ServiceException, "Attribute ID is required." if attribute_id.nil?
|
49
61
|
url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.crud_attribute'), attribute_id)
|
@@ -53,6 +65,8 @@ module Crowdskout
|
|
53
65
|
end
|
54
66
|
|
55
67
|
# more info - http://docs.crowdskout.com/api/#delete-an-attribute
|
68
|
+
# @param [Integer] attribute_id - the id of the attribute to update
|
69
|
+
# @return [boolean]
|
56
70
|
def delete_attribute(attribute_id)
|
57
71
|
raise Exceptions::ServiceException, "Attribute ID is required." if attribute_id.nil?
|
58
72
|
url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.crud_attribute'), attribute_id)
|
@@ -1,8 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# field_service.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Services
|
3
9
|
class FieldService < BaseService
|
4
10
|
class << self
|
11
|
+
|
5
12
|
# more info - http://docs.crowdskout.com/api/#get-the-options-for-a-field
|
13
|
+
# Get the options for a field
|
14
|
+
# @param [String] field_name - the name of the field
|
15
|
+
# @param [Hash] params - A hash with query parameters
|
16
|
+
# @return [FieldOptions] - the field options
|
6
17
|
def get_options_for_a_field(field_name, params = {})
|
7
18
|
raise Exceptions::ServiceException, "Field name is required." if field_name.nil?
|
8
19
|
url = Util::Config.get('endpoints.base_url') +
|
@@ -1,8 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# profile_service.rb
|
3
|
+
# Crowdskout
|
4
|
+
#
|
5
|
+
# Copyright (c) 2016 Kyle Schutt. All rights reserved.
|
6
|
+
|
1
7
|
module Crowdskout
|
2
8
|
module Services
|
3
9
|
class ProfileService < BaseService
|
4
10
|
class << self
|
11
|
+
|
5
12
|
# more info - http://docs.crowdskout.com/api/#get-a-profile-by-id
|
13
|
+
# Get a profile based on the collections provided
|
14
|
+
# @param [Integer] profile_id - the id of the profile
|
15
|
+
# @param [String] collections - A csv of the requested collections
|
16
|
+
# @return [Profile] - the profile object
|
6
17
|
def get_profile(profile_id, collections)
|
7
18
|
raise Exceptions::ServiceException, "Profile ID is required." if profile_id.nil?
|
8
19
|
raise Exceptions::ServiceException, "A comma-deliminted list of collections is required." if collections.nil?
|
@@ -18,16 +29,24 @@ module Crowdskout
|
|
18
29
|
end
|
19
30
|
|
20
31
|
# more info - http://docs.crowdskout.com/api/#create-a-profile
|
21
|
-
|
32
|
+
# Create a new profile
|
33
|
+
# @param [Profile] profile - the new profile object to add to Crowdskout
|
34
|
+
# @param [Hash] params - A hash with query parameters
|
35
|
+
# @return [Profile] - the profile object
|
36
|
+
def create_profile(profile)
|
22
37
|
raise Exceptions::ServiceException, "Profile object must not be nil." if profile.nil?
|
23
38
|
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.profile')
|
24
|
-
url = build_url(url
|
39
|
+
url = build_url(url)
|
25
40
|
payload = profile.to_json
|
26
41
|
response = RestClient.post(url, payload, get_headers())
|
27
42
|
Components::Profile.create(JSON.parse(response.body)["data"])
|
28
43
|
end
|
29
44
|
|
30
45
|
# more info - http://docs.crowdskout.com/api/#create-many-profiles
|
46
|
+
# Create a bunch of new profiles
|
47
|
+
# @param [Array<Profile>] profiles - an array of profile to bulk add
|
48
|
+
# @param [Hash] params - A hash with query parameters
|
49
|
+
# @return [ResultSet] - the results set as an enumeration with profiles
|
31
50
|
def create_profiles_bulk(profiles)
|
32
51
|
raise Exceptions::ServiceException, "Must be an array of profiles." if profiles.nil? || !profiles.is_a?(Array)
|
33
52
|
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.profile_bulk')
|
@@ -45,6 +64,9 @@ module Crowdskout
|
|
45
64
|
end
|
46
65
|
|
47
66
|
# more info - http://docs.crowdskout.com/api/#update-a-profile-by-id
|
67
|
+
# Update the given profile
|
68
|
+
# @param [Profile] profile - the profile to update
|
69
|
+
# @return [Profile] - the profile object
|
48
70
|
def update_profile(profile)
|
49
71
|
raise Exceptions::ServiceException, "Profile object must not be nil." if profile.nil?
|
50
72
|
url = Util::Config.get('endpoints.base_url') + sprintf(Util::Config.get('endpoints.crud_profile'), profile.id)
|
@@ -55,6 +77,9 @@ module Crowdskout
|
|
55
77
|
end
|
56
78
|
|
57
79
|
# more info - http://docs.crowdskout.com/api/#update-many-profiles
|
80
|
+
# Update a bunch of profiles
|
81
|
+
# @param [Array<Profile>] profiles - an array of profile to bulk add
|
82
|
+
# @return [ResultSet] - the results set as an enumeration with profiles
|
58
83
|
def update_profiles_bulk(profiles)
|
59
84
|
raise Exceptions::ServiceException, "Must be an array of profiles." if profiles.nil? || !profiles.is_a?(Array)
|
60
85
|
url = Util::Config.get('endpoints.base_url') + Util::Config.get('endpoints.profile_bulk')
|
data/lib/crowdskout/version.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#
|
2
2
|
# profile_service_spec.rb
|
3
|
+
# Crowdskout
|
3
4
|
#
|
4
5
|
# Copyright (c) 2016 Kyle Schutt. All rights reserved.require 'spec_helper'
|
5
6
|
|
@@ -20,11 +21,17 @@ describe Crowdskout::Services::ProfileService do
|
|
20
21
|
profile = Crowdskout::Services::ProfileService.get_profile(1, "Names,Genders")
|
21
22
|
|
22
23
|
profile.should be_kind_of(Crowdskout::Components::Profile)
|
23
|
-
profile.
|
24
|
-
profile.
|
25
|
-
profile.
|
26
|
-
profile.
|
27
|
-
profile.
|
24
|
+
profile.collections[1].should be_kind_of(Crowdskout::Components::Collection)
|
25
|
+
profile.collections[1].key_name.should eq 'Genders'
|
26
|
+
profile.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item)
|
27
|
+
profile.collections[1].items[0].id.should eq 1
|
28
|
+
profile.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field)
|
29
|
+
profile.collections[1].items[0].fields[0].key_name.should eq "Gender"
|
30
|
+
profile.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value)
|
31
|
+
profile.collections[1].items[0].fields[0].value.id.should eq 1
|
32
|
+
profile.collections[1].items[0].fields[0].value.value.should eq "Male"
|
33
|
+
profile.collections[1].items[0].fields[1].key_name.should eq "TestValue"
|
34
|
+
profile.collections[1].items[0].fields[1].value.should eq "value"
|
28
35
|
end
|
29
36
|
end
|
30
37
|
|
@@ -35,15 +42,21 @@ describe Crowdskout::Services::ProfileService do
|
|
35
42
|
|
36
43
|
response = RestClient::Response.create(json, net_http_resp, {}, @request)
|
37
44
|
RestClient.stub(:post).and_return(response)
|
38
|
-
new_profile = Crowdskout::Components::Profile.create(JSON.parse(json))
|
45
|
+
new_profile = Crowdskout::Components::Profile.create(JSON.parse(json)["data"])
|
39
46
|
profile = Crowdskout::Services::ProfileService.create_profile(new_profile)
|
40
47
|
|
41
48
|
profile.should be_kind_of(Crowdskout::Components::Profile)
|
42
|
-
profile.
|
43
|
-
profile.
|
44
|
-
profile.
|
45
|
-
profile.
|
46
|
-
profile.
|
49
|
+
profile.collections[1].should be_kind_of(Crowdskout::Components::Collection)
|
50
|
+
profile.collections[1].key_name.should eq 'Genders'
|
51
|
+
profile.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item)
|
52
|
+
profile.collections[1].items[0].id.should eq 1
|
53
|
+
profile.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field)
|
54
|
+
profile.collections[1].items[0].fields[0].key_name.should eq "Gender"
|
55
|
+
profile.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value)
|
56
|
+
profile.collections[1].items[0].fields[0].value.id.should eq 1
|
57
|
+
profile.collections[1].items[0].fields[0].value.value.should eq "Male"
|
58
|
+
profile.collections[1].items[0].fields[1].key_name.should eq "TestValue"
|
59
|
+
profile.collections[1].items[0].fields[1].value.should eq "value"
|
47
60
|
end
|
48
61
|
end
|
49
62
|
|
@@ -54,7 +67,6 @@ describe Crowdskout::Services::ProfileService do
|
|
54
67
|
|
55
68
|
response = RestClient::Response.create(json, net_http_resp, {}, @request)
|
56
69
|
RestClient.stub(:post).and_return(response)
|
57
|
-
new_profile = Crowdskout::Components::Profile.create(JSON.parse(json))
|
58
70
|
profiles = []
|
59
71
|
body = JSON.parse(json)
|
60
72
|
body['data'].each do |profile|
|
@@ -65,9 +77,15 @@ describe Crowdskout::Services::ProfileService do
|
|
65
77
|
|
66
78
|
profiles.should be_kind_of(Crowdskout::Components::ResultSet)
|
67
79
|
profile.should be_kind_of(Crowdskout::Components::Profile)
|
68
|
-
profile.
|
69
|
-
profile.
|
70
|
-
profile.
|
80
|
+
profile.collections[0].should be_kind_of(Crowdskout::Components::Collection)
|
81
|
+
profile.collections[0].key_name.should eq 'Genders'
|
82
|
+
profile.collections[0].items[0].should be_kind_of(Crowdskout::Components::Item)
|
83
|
+
profile.collections[0].items[0].id.should eq 1
|
84
|
+
profile.collections[0].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field)
|
85
|
+
profile.collections[0].items[0].fields[0].key_name.should eq "Gender"
|
86
|
+
profile.collections[0].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value)
|
87
|
+
profile.collections[0].items[0].fields[0].value.id.should eq 1
|
88
|
+
profile.collections[0].items[0].fields[0].value.value.should eq "Male"
|
71
89
|
end
|
72
90
|
end
|
73
91
|
|
@@ -78,15 +96,21 @@ describe Crowdskout::Services::ProfileService do
|
|
78
96
|
|
79
97
|
response = RestClient::Response.create(json, net_http_resp, {}, @request)
|
80
98
|
RestClient.stub(:put).and_return(response)
|
81
|
-
profile = Crowdskout::Components::Profile.create(JSON.parse(json))
|
99
|
+
profile = Crowdskout::Components::Profile.create(JSON.parse(json)["data"])
|
82
100
|
result = Crowdskout::Services::ProfileService.update_profile(profile)
|
83
101
|
|
84
102
|
result.should be_kind_of(Crowdskout::Components::Profile)
|
85
|
-
result.
|
86
|
-
result.
|
87
|
-
result.
|
88
|
-
result.
|
89
|
-
result.
|
103
|
+
result.collections[1].should be_kind_of(Crowdskout::Components::Collection)
|
104
|
+
result.collections[1].key_name.should eq 'Genders'
|
105
|
+
result.collections[1].items[0].should be_kind_of(Crowdskout::Components::Item)
|
106
|
+
result.collections[1].items[0].id.should eq 1
|
107
|
+
result.collections[1].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field)
|
108
|
+
result.collections[1].items[0].fields[0].key_name.should eq "Gender"
|
109
|
+
result.collections[1].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value)
|
110
|
+
result.collections[1].items[0].fields[0].value.id.should eq 1
|
111
|
+
result.collections[1].items[0].fields[0].value.value.should eq "Male"
|
112
|
+
result.collections[1].items[0].fields[1].key_name.should eq "TestValue"
|
113
|
+
result.collections[1].items[0].fields[1].value.should eq "value"
|
90
114
|
end
|
91
115
|
end
|
92
116
|
|
@@ -97,7 +121,6 @@ describe Crowdskout::Services::ProfileService do
|
|
97
121
|
|
98
122
|
response = RestClient::Response.create(json, net_http_resp, {}, @request)
|
99
123
|
RestClient.stub(:put).and_return(response)
|
100
|
-
new_profile = Crowdskout::Components::Profile.create(JSON.parse(json))
|
101
124
|
profiles = []
|
102
125
|
body = JSON.parse(json)
|
103
126
|
body['data'].each do |profile|
|
@@ -107,10 +130,15 @@ describe Crowdskout::Services::ProfileService do
|
|
107
130
|
profile = profiles.results[0]
|
108
131
|
|
109
132
|
profiles.should be_kind_of(Crowdskout::Components::ResultSet)
|
110
|
-
profile.should be_kind_of(Crowdskout::Components::
|
111
|
-
profile.
|
112
|
-
profile.
|
113
|
-
profile.
|
133
|
+
profile.collections[0].should be_kind_of(Crowdskout::Components::Collection)
|
134
|
+
profile.collections[0].key_name.should eq 'Genders'
|
135
|
+
profile.collections[0].items[0].should be_kind_of(Crowdskout::Components::Item)
|
136
|
+
profile.collections[0].items[0].id.should eq 1
|
137
|
+
profile.collections[0].items[0].fields[0].should be_kind_of(Crowdskout::Components::Field)
|
138
|
+
profile.collections[0].items[0].fields[0].key_name.should eq "Gender"
|
139
|
+
profile.collections[0].items[0].fields[0].value.should be_kind_of(Crowdskout::Components::Value)
|
140
|
+
profile.collections[0].items[0].fields[0].value.id.should eq 1
|
141
|
+
profile.collections[0].items[0].fields[0].value.value.should eq "Male"
|
114
142
|
end
|
115
143
|
end
|
116
144
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crowdskout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Crowdskout
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-05-
|
13
|
+
date: 2016-05-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
@@ -102,9 +102,11 @@ files:
|
|
102
102
|
- lib/crowdskout/components/attributes/option.rb
|
103
103
|
- lib/crowdskout/components/component.rb
|
104
104
|
- lib/crowdskout/components/fields/field_options.rb
|
105
|
-
- lib/crowdskout/components/profiles/
|
106
|
-
- lib/crowdskout/components/profiles/
|
105
|
+
- lib/crowdskout/components/profiles/collection.rb
|
106
|
+
- lib/crowdskout/components/profiles/field.rb
|
107
|
+
- lib/crowdskout/components/profiles/item.rb
|
107
108
|
- lib/crowdskout/components/profiles/profile.rb
|
109
|
+
- lib/crowdskout/components/profiles/value.rb
|
108
110
|
- lib/crowdskout/components/result_set.rb
|
109
111
|
- lib/crowdskout/exceptions/oauth2_exception.rb
|
110
112
|
- lib/crowdskout/exceptions/service_exception.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# Copyright (c) 2016 Kyle Schutt. All rights reserved.require
|
2
|
-
|
3
|
-
module Crowdskout
|
4
|
-
module Components
|
5
|
-
class Gender < Component
|
6
|
-
attr_accessor :id, :gender
|
7
|
-
|
8
|
-
# Factory method to create an Address object from a json string
|
9
|
-
# @param [Hash] props - properties to create object from
|
10
|
-
# @return [Address]
|
11
|
-
def self.create(props)
|
12
|
-
obj = Gender.new
|
13
|
-
if props
|
14
|
-
props.each do |key, value|
|
15
|
-
if key.downcase == 'gender'
|
16
|
-
obj.gender = GenderInfo.create(value)
|
17
|
-
else
|
18
|
-
obj.send("#{key}=", value) if obj.respond_to? key
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
obj
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# Detailed gender information
|
27
|
-
class GenderInfo
|
28
|
-
attr_accessor :id, :value
|
29
|
-
def self.create(props)
|
30
|
-
obj = GenderInfo.new
|
31
|
-
if props
|
32
|
-
props.each do |key, value|
|
33
|
-
obj.send("#{key}=", value) if obj.respond_to? key
|
34
|
-
end
|
35
|
-
end
|
36
|
-
obj
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|