driftrock-service 0.3.3 → 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.
- data/.rspec +1 -0
- data/lib/driftrock-service/api/data.rb +0 -8
- data/lib/driftrock-service/api/website.rb +1 -74
- data/lib/driftrock-service/api.rb +12 -3
- data/lib/driftrock-service/config.rb +51 -23
- data/lib/driftrock-service/connector.rb +1 -1
- data/lib/driftrock-service/driftrock_api.rb +55 -0
- data/lib/driftrock-service/driftrock_app.rb +9 -0
- data/lib/driftrock-service/driftrock_model/channel.rb +54 -0
- data/lib/driftrock-service/driftrock_model/channel_type.rb +24 -0
- data/lib/driftrock-service/driftrock_model/company.rb +16 -0
- data/lib/driftrock-service/driftrock_model/driftrock_app.rb +68 -0
- data/lib/driftrock-service/driftrock_model/user.rb +53 -0
- data/lib/driftrock-service/driftrock_model.rb +101 -0
- data/lib/driftrock-service/version.rb +1 -1
- data/lib/driftrock-service.rb +2 -29
- data/spec/models/channel_spec.rb +60 -0
- data/spec/models/channel_type_spec.rb +17 -0
- data/spec/models/company_spec.rb +33 -0
- data/spec/models/driftrock_app_spec.rb +16 -0
- data/spec/models/user_spec.rb +12 -0
- data/spec/spec_helper.rb +17 -6
- data/spec/website_spec_helper.rb +2 -0
- metadata +63 -50
- data/spec/administrative_api_spec.rb +0 -11
- data/spec/models/administrative_api_test.rb +0 -8
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
@@ -13,14 +13,6 @@ module Driftrock
|
|
13
13
|
get(ENDPOINT+'/query', {query: query}.merge(opts))
|
14
14
|
end
|
15
15
|
|
16
|
-
def driftrock_app_status
|
17
|
-
render text: "OK"
|
18
|
-
end
|
19
|
-
|
20
|
-
def driftrock_logout
|
21
|
-
reset_session
|
22
|
-
redirect_to Config.website_location+"/logout"
|
23
|
-
end
|
24
16
|
end
|
25
17
|
end
|
26
18
|
end
|
@@ -7,88 +7,15 @@ module Driftrock
|
|
7
7
|
module URLs
|
8
8
|
BASE = '/dashboard_api'
|
9
9
|
USERS = BASE+'/user'
|
10
|
+
COMPANIES= BASE+'/companies'
|
10
11
|
CHANNELS = BASE+'/channel'
|
11
12
|
APPS = BASE+'/driftrock_app'
|
12
13
|
end
|
13
14
|
|
14
|
-
def list_apps(opts = {})
|
15
|
-
get(URLs::APPS+"/", opts)
|
16
|
-
end
|
17
|
-
|
18
|
-
def get_app(app_id, opts ={})
|
19
|
-
get(URLs::APPS+"/#{app_id}", opts)
|
20
|
-
end
|
21
|
-
|
22
|
-
def get_app_by_string_app_id(app_id, opts ={})
|
23
|
-
get(URLs::APPS+"/#{app_id}/by_app_id", opts)
|
24
|
-
end
|
25
|
-
|
26
15
|
def add_twitter_details(username, password)
|
27
16
|
post(URLs::CHANNELS+"/temp/connect_twitter", {username: username, password: password})
|
28
17
|
end
|
29
18
|
|
30
|
-
def auth_token(app_id, timestamp, opts={})
|
31
|
-
response = post(URLs::APPS+"/#{app_id}/auth_token",
|
32
|
-
{timestamp: timestamp}.merge(opts))
|
33
|
-
response['token']
|
34
|
-
end
|
35
|
-
|
36
|
-
def activate_app(app_id, opts={})
|
37
|
-
post(URLs::APPS+"/#{app_id}/activate", opts)
|
38
|
-
end
|
39
|
-
|
40
|
-
def channel_types
|
41
|
-
get(URLs::CHANNELS+"/types")
|
42
|
-
end
|
43
|
-
|
44
|
-
def add_channel(channel_name, channel_data)
|
45
|
-
post(URLs::CHANNELS+"/#{channel_name}", channel_data)
|
46
|
-
end
|
47
|
-
|
48
|
-
def get_channel(channel_name)
|
49
|
-
get(URLs::CHANNELS+"/#{channel_name}")
|
50
|
-
end
|
51
|
-
|
52
|
-
def add_profile_for_channel(channel_name, profile_id)
|
53
|
-
post(URLs::CHANNELS+"/#{channel_name}/profile", {profile_id: profile_id})
|
54
|
-
end
|
55
|
-
|
56
|
-
def new_token_for_channel(channel_name, token)
|
57
|
-
put(URLs::CHANNELS+"/#{channel_name}/profile", token)
|
58
|
-
end
|
59
|
-
|
60
|
-
def driftrock_login(validation_data)
|
61
|
-
post(URLs::USERS+"/login", validation_data)
|
62
|
-
end
|
63
|
-
|
64
|
-
def new_account(user_data)
|
65
|
-
post(URLs::USERS+"/new", user_data)
|
66
|
-
end
|
67
|
-
|
68
|
-
def add_company(company_data)
|
69
|
-
post(URLs::USERS+"/company", company_data)
|
70
|
-
end
|
71
|
-
|
72
|
-
def get_user(user_session_id)
|
73
|
-
get(URLs::USERS+"/#{user_session_id}")
|
74
|
-
end
|
75
|
-
|
76
|
-
def get_company(company_id)
|
77
|
-
get(URLs::USERS+"/company/#{company_id}")
|
78
|
-
end
|
79
|
-
|
80
|
-
def get_companies
|
81
|
-
get(URLs::USERS+"/companies")
|
82
|
-
end
|
83
|
-
|
84
|
-
def user_admin?(user_session_id)
|
85
|
-
response = get(URLs::USERS+"/#{user_session_id}/is_admin")
|
86
|
-
response['is_admin'] =~ /true/
|
87
|
-
end
|
88
|
-
|
89
|
-
def new_company(company_data)
|
90
|
-
post(URLs::COMPANIES+"/new", company_data)
|
91
|
-
end
|
92
19
|
end
|
93
20
|
end
|
94
21
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Driftrock
|
2
2
|
module Service
|
3
3
|
module Api
|
4
|
+
|
5
|
+
|
4
6
|
def get(url, opts={})
|
5
7
|
api_request(opts) do |user_id, company_id|
|
6
8
|
Driftrock::Service::Connector.get_from_api(
|
@@ -25,12 +27,19 @@ module Driftrock
|
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
30
|
+
def symbolise_keys(hash)
|
31
|
+
hash.reduce({}) do |new_hash, (key, value)|
|
32
|
+
new_hash[key.to_sym] = value
|
33
|
+
new_hash
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
28
37
|
private
|
29
38
|
def api_request(opts)
|
30
39
|
user_id, company_id = nil
|
31
|
-
if
|
32
|
-
user_id =
|
33
|
-
company_id =
|
40
|
+
if DriftrockApi.instance
|
41
|
+
user_id = DriftrockApi.instance.current_user_id
|
42
|
+
company_id = DriftrockApi.instance.current_company_id
|
34
43
|
end
|
35
44
|
user_id = opts[:user_id] if opts[:user_id]
|
36
45
|
company_id = opts[:company_id] if opts[:company_id]
|
@@ -1,57 +1,85 @@
|
|
1
1
|
module Driftrock
|
2
2
|
module Service
|
3
|
-
class Config < Struct.new(:salt, :
|
3
|
+
class Config < Struct.new(:salt, :environment, :status_location,
|
4
4
|
:status_action,
|
5
|
-
:logout_action, :log_location,:log_level
|
5
|
+
:logout_action, :log_location,:log_level,
|
6
6
|
:app_id,:api_token)
|
7
7
|
private_class_method :new
|
8
8
|
|
9
|
-
def self.
|
10
|
-
|
9
|
+
def self.api_location
|
10
|
+
if config_properties.environment == :production
|
11
|
+
"https://driftrock-user-details-api.herokuapp.com"
|
12
|
+
else
|
13
|
+
"http://localhost:9393"
|
14
|
+
end
|
11
15
|
end
|
12
16
|
|
13
17
|
def self.salt
|
14
|
-
|
18
|
+
config_properties.salt
|
15
19
|
end
|
16
20
|
|
17
21
|
def self.api_token
|
18
|
-
|
22
|
+
config_properties.api_token
|
19
23
|
end
|
20
24
|
|
21
25
|
def self.app_id
|
22
|
-
|
26
|
+
config_properties.app_id
|
23
27
|
end
|
24
28
|
|
25
29
|
def self.log_level
|
26
|
-
|
30
|
+
config_properties.log_level
|
27
31
|
end
|
28
32
|
|
29
33
|
def self.log_location
|
30
|
-
|
34
|
+
config_properties.log_location
|
31
35
|
end
|
32
36
|
|
33
37
|
def self.website_location
|
34
|
-
|
38
|
+
if config_properties.environment == :production
|
39
|
+
"http://www.driftrock.com"
|
40
|
+
else
|
41
|
+
"http://localhost:3000"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.environment
|
46
|
+
config_properties.enviroment
|
35
47
|
end
|
36
48
|
|
37
49
|
def self.init
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
config.status_action = "application#driftrock_app_status"
|
43
|
-
config.logout_action = "application#driftrock_logout"
|
44
|
-
yield(config)
|
45
|
-
config.base_url.gsub(/\/$/, "") if config.base_url
|
46
|
-
if defined?(Rails) && config.app_id
|
50
|
+
yield(config_properties)
|
51
|
+
if defined?(Rails) && config_properties.app_id
|
52
|
+
status_action = config_properties.status_action
|
53
|
+
logout_action = config_properties.logout_action
|
47
54
|
Rails.application.routes.prepend do
|
48
|
-
get 'driftrock_app_status' =>
|
49
|
-
get 'driftrock_logout' =>
|
55
|
+
get 'driftrock_app_status' => status_action
|
56
|
+
get 'driftrock_logout' => logout_action
|
50
57
|
end
|
51
58
|
end
|
52
|
-
@config = config
|
53
59
|
end
|
54
|
-
|
60
|
+
|
61
|
+
private
|
62
|
+
def self.default
|
63
|
+
default = new
|
64
|
+
default.log_level = DriftrockLogger::Levels::ALL
|
65
|
+
default.log_location = STDOUT
|
66
|
+
default.status_action = "application#driftrock_app_status"
|
67
|
+
default.logout_action = "application#driftrock_logout"
|
68
|
+
default.environment = if ENV['RACK_ENV']
|
69
|
+
ENV['RACK_ENV'].to_sym
|
70
|
+
elsif ENV['RAILS_ENV']
|
71
|
+
ENV['RAILS_ENV'].to_sym
|
72
|
+
elsif defined?(Rails)
|
73
|
+
Rails.env
|
74
|
+
else
|
75
|
+
:test
|
76
|
+
end
|
77
|
+
default
|
78
|
+
end
|
79
|
+
def self.config_properties
|
80
|
+
@config ||= default
|
81
|
+
@config
|
82
|
+
end
|
55
83
|
end
|
56
84
|
end
|
57
85
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Driftrock::Service
|
2
|
+
class DriftrockApi
|
3
|
+
private_class_method :new
|
4
|
+
attr_reader :current_user_id, :current_company_id
|
5
|
+
|
6
|
+
def initialize(user=nil, company=nil)
|
7
|
+
@current_user_id = user if user
|
8
|
+
@current_company_id = company if company
|
9
|
+
DriftrockApi.set_instance(self)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.set_instance(instance)
|
13
|
+
@instance = instance
|
14
|
+
end
|
15
|
+
def self.instance
|
16
|
+
@instance
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.website_api(user, company)
|
20
|
+
api = new(user, company)
|
21
|
+
require_module_with_dir :driftrock_model
|
22
|
+
api.extend(Driftrock::Service::Api::Website)
|
23
|
+
api
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.data_api(user, company)
|
27
|
+
api = new(user, company)
|
28
|
+
api.extend(Driftrock::Service::Api::Data)
|
29
|
+
api
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.admin_api
|
33
|
+
api = new
|
34
|
+
api.extend(Driftrock::Service::Api::Admin)
|
35
|
+
api
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.puller_api
|
39
|
+
api = new
|
40
|
+
api.extend(Driftrock::Service::Api::Puller)
|
41
|
+
api
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def self.require_module_with_dir(module_name)
|
46
|
+
require "driftrock-service/#{module_name}"
|
47
|
+
folder_glob = File.join(
|
48
|
+
File.dirname(__FILE__), module_name.to_s, *%w[** *.rb])
|
49
|
+
Dir[folder_glob].each do |file|
|
50
|
+
require file
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -16,6 +16,15 @@ module Driftrock::Service
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def driftrock_app_status
|
20
|
+
render text: "OK"
|
21
|
+
end
|
22
|
+
|
23
|
+
def driftrock_logout
|
24
|
+
reset_session
|
25
|
+
redirect_to Config.website_location+"/logout"
|
26
|
+
end
|
27
|
+
|
19
28
|
def token_for(timestamp, company_id)
|
20
29
|
OpenSSL::Digest::SHA1.hexdigest(
|
21
30
|
[timestamp,Driftrock::Service::Config.salt,company_id].join(":")
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
class Channel
|
3
|
+
include Driftrock::Service::DriftrockModel
|
4
|
+
set_api_path '/dashboard_api/channel'
|
5
|
+
attr_reader :id, :profile_id, :company,
|
6
|
+
:token, :refresh_token, :token_expiry,
|
7
|
+
:expires_in, :channel_type, :next_step_action
|
8
|
+
attr_accessor :channel_type
|
9
|
+
|
10
|
+
def set_profile_id(profile_id)
|
11
|
+
response = post_to_api_method.call(
|
12
|
+
"/#{channel_type.name}/profile", {profile_id: profile_id}
|
13
|
+
)
|
14
|
+
success = response['status'] == 'success'
|
15
|
+
@profile_id = profile_id if success
|
16
|
+
success
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_token(token_data)
|
20
|
+
response = put_to_api_method.call(
|
21
|
+
"/#{channel_type.name}/profile", token_data
|
22
|
+
)
|
23
|
+
success = response['status'] == 'success'
|
24
|
+
if success
|
25
|
+
@token = token_data[:token]
|
26
|
+
@token_expiry = token_data[:token_expiry]
|
27
|
+
@expires_in = token_data[:expires_in]
|
28
|
+
end
|
29
|
+
success
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.create_by_channel_type(type_name, channel_data)
|
33
|
+
ChannelType.find_by_name(type_name).create_channel(channel_data)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.find_by_channel_type_name(name)
|
37
|
+
object_hsh = get_from_api_method.call(
|
38
|
+
"/#{name}"
|
39
|
+
)
|
40
|
+
channel = new(object_hsh)
|
41
|
+
channel.channel_type = ChannelType.find_by_name(name)
|
42
|
+
channel
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.channel_types
|
46
|
+
object_arr = get_from_api_method.call(
|
47
|
+
"/types"
|
48
|
+
)
|
49
|
+
object_arr.map do |object_hash|
|
50
|
+
ChannelType.new(object_hash)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
class ChannelType
|
3
|
+
include Driftrock::Service::DriftrockModel
|
4
|
+
set_api_path '/dashboard_api/channel'
|
5
|
+
attr_reader :id, :name, :channel_status, :next_step_action
|
6
|
+
|
7
|
+
def create_channel(channel_data)
|
8
|
+
response = post_to_api_method.call(
|
9
|
+
"/#{name}", channel_data
|
10
|
+
)
|
11
|
+
channel = Channel.new(channel_data)
|
12
|
+
channel.channel_type = self
|
13
|
+
channel
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find_by_name(name)
|
17
|
+
object_hash = get_from_api_method.call(
|
18
|
+
"/#{name}/by_name"
|
19
|
+
)
|
20
|
+
new(object_hash)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
class Company
|
3
|
+
include Driftrock::Service::DriftrockModel
|
4
|
+
set_api_path "/dashboard_api/company"
|
5
|
+
|
6
|
+
attr_reader :id, :name
|
7
|
+
|
8
|
+
def add_user(user)
|
9
|
+
response = post_to_api_method.call(
|
10
|
+
'/add_user', {user_to_add_id: user.id}
|
11
|
+
)
|
12
|
+
response['status'] == 'success'
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
class DriftrockApp
|
3
|
+
include Driftrock::Service::DriftrockModel
|
4
|
+
set_api_path "/dashboard_api/driftrock_app"
|
5
|
+
attr_reader :id, :name, :description, :long_description, :visible, :active,
|
6
|
+
:logo, :url, :salt, :app_id, :api_token, :requires_twitter_data,
|
7
|
+
:requires_facebook_data, :requires_adwords_data,
|
8
|
+
:requires_conversion_data, :requires_user_data, :user_has_activated
|
9
|
+
|
10
|
+
def activate
|
11
|
+
post_to_api_method.call("/#{id}/activate")
|
12
|
+
end
|
13
|
+
|
14
|
+
def auth_token(timestamp)
|
15
|
+
response = post_to_api_method.call(
|
16
|
+
"/#{id}/auth_token",
|
17
|
+
{timestamp: timestamp})
|
18
|
+
response['token']
|
19
|
+
end
|
20
|
+
|
21
|
+
def show_url
|
22
|
+
timestamp = DateTime.now
|
23
|
+
token = auth_token(timestamp)
|
24
|
+
query_str = {
|
25
|
+
timestamp: timestamp,
|
26
|
+
company_id: ::Driftrock::Service::DriftrockApi.instance.current_company_id,
|
27
|
+
token: token,
|
28
|
+
user_id: ::Driftrock::Service::DriftrockApi.instance.current_user_id
|
29
|
+
}.to_query
|
30
|
+
url+"?"+query_str
|
31
|
+
end
|
32
|
+
|
33
|
+
def logout_url
|
34
|
+
url+"/driftrock_logout"
|
35
|
+
end
|
36
|
+
|
37
|
+
def status_url
|
38
|
+
url+"/driftrock_app_status"
|
39
|
+
end
|
40
|
+
|
41
|
+
def status_check(http_method = HTTParty.public_method(:get))
|
42
|
+
status = :ok
|
43
|
+
begin
|
44
|
+
status_text = http_method.call(status_url)
|
45
|
+
status = :not_ok if status_text.strip != "OK"
|
46
|
+
rescue Errno::ECONNREFUSED => e
|
47
|
+
status = :not_available
|
48
|
+
end
|
49
|
+
status
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.find_by_app_id(app_id)
|
53
|
+
object_hash = get_from_api_method.call("/#{app_id}/by_app_id")
|
54
|
+
new(object_hash)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.all_apps
|
58
|
+
array_of_app_hashes = get_from_api_method.call("/apps", {},
|
59
|
+
'/dashboard_api/visitor')
|
60
|
+
array_of_app_hashes = array_of_app_hashes.symbolize_keys[:apps]
|
61
|
+
array_of_app_hashes.map do |app_hash|
|
62
|
+
app_hash.symbolize_keys!
|
63
|
+
new(app_hash)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
class User
|
3
|
+
include Driftrock::Service::DriftrockModel
|
4
|
+
set_api_path "/dashboard_api/user"
|
5
|
+
attr_reader :id, :session_id, :first_name, :last_name, :email
|
6
|
+
|
7
|
+
def admin?
|
8
|
+
@check_admin
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.login(validation_data)
|
12
|
+
post_to_api_method.call("/login", validation_data)
|
13
|
+
#Get session id
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.find_by_email(email)
|
17
|
+
object_hash = get_from_api_method.call("/#{email}/by_email")
|
18
|
+
new(object_hash)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.find_by_session_id(session_id)
|
22
|
+
object_hash = get_from_api_method.call("/#{session_id}")
|
23
|
+
new(object_hash)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
def user_admin?
|
28
|
+
response = get_from_api_method.call("/#{session_id}/is_admin")
|
29
|
+
response['is_admin'] =~ /true/
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_company(company_data)
|
33
|
+
post_to_api_method.call("/company", company_data.merge({
|
34
|
+
user_id: session_id
|
35
|
+
}))
|
36
|
+
end
|
37
|
+
|
38
|
+
def company(company_id)
|
39
|
+
company_hsh = get_from_api_method.call("/company/#{company_id}",
|
40
|
+
{user_id: session_id})
|
41
|
+
Company.new(company_hsh)
|
42
|
+
end
|
43
|
+
|
44
|
+
def companies
|
45
|
+
company_arr = get_from_api_method.call("/companies",
|
46
|
+
{user_id: session_id})
|
47
|
+
company_arr.map do |company_hash|
|
48
|
+
Company.new(company_hash)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module Driftrock::Service::DriftrockModel
|
2
|
+
module ClassMethods
|
3
|
+
def set_post_to_api_method(method)
|
4
|
+
@post_to_api_method = method
|
5
|
+
end
|
6
|
+
|
7
|
+
def set_put_to_api_method(method)
|
8
|
+
@put_to_api_method = method
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_get_from_api_method(method)
|
12
|
+
@get_from_api_method = method
|
13
|
+
end
|
14
|
+
|
15
|
+
def post_to_api_method
|
16
|
+
@post_to_api_method ||= self.public_method(:model_post)
|
17
|
+
@post_to_api_method
|
18
|
+
end
|
19
|
+
|
20
|
+
def put_to_api_method
|
21
|
+
@put_to_api_method ||= self.public_method(:model_put)
|
22
|
+
@put_to_api_method
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_from_api_method
|
26
|
+
@get_from_api_method ||= self.public_method(:model_get)
|
27
|
+
@get_from_api_method
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_api_path(path)
|
31
|
+
@api_path = path
|
32
|
+
end
|
33
|
+
|
34
|
+
def api_path
|
35
|
+
@api_path ||= "/"
|
36
|
+
@api_path
|
37
|
+
end
|
38
|
+
|
39
|
+
def find(id)
|
40
|
+
object_hash = get_from_api_method.call("/#{id}")
|
41
|
+
new(object_hash)
|
42
|
+
end
|
43
|
+
|
44
|
+
def all
|
45
|
+
object_arr = get_from_api_method.call("/")
|
46
|
+
object_arr.map do |object_hash|
|
47
|
+
new(object_hash)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def create(data)
|
52
|
+
post_to_api_method.call("/new", data)
|
53
|
+
end
|
54
|
+
|
55
|
+
def model_post(path, opts={}, root_path=api_path)
|
56
|
+
post(root_path+path, opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
def model_put(path, opts={}, root_path=api_path)
|
60
|
+
put(root_path+path, opts)
|
61
|
+
end
|
62
|
+
|
63
|
+
def model_get(path, opts={}, root_path=api_path)
|
64
|
+
get(root_path+path, opts)
|
65
|
+
end
|
66
|
+
|
67
|
+
def model_name
|
68
|
+
self.to_s.gsub(/.*\:\:/, "").downcase
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
def initialize(object_hash)
|
74
|
+
if object_hash.respond_to?(:symbolize_keys!)
|
75
|
+
object_hash.symbolize_keys!
|
76
|
+
else
|
77
|
+
symbolise_keys(object_hash)
|
78
|
+
end
|
79
|
+
object_hash.each do |(key, value)|
|
80
|
+
instance_variable_set(("@"+key.to_s).to_sym, value)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
def self.included(base)
|
86
|
+
base.extend ClassMethods
|
87
|
+
base.extend Driftrock::Service::Api
|
88
|
+
base.send(:include, Driftrock::Service::Api)
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_from_api_method
|
92
|
+
self.class.get_from_api_method
|
93
|
+
end
|
94
|
+
def post_to_api_method
|
95
|
+
self.class.post_to_api_method
|
96
|
+
end
|
97
|
+
def put_to_api_method
|
98
|
+
self.class.put_to_api_method
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
data/lib/driftrock-service.rb
CHANGED
@@ -10,46 +10,19 @@ require "driftrock-service/api/puller"
|
|
10
10
|
require "driftrock-service/errors/driftrock_error"
|
11
11
|
require "driftrock-service/driftrock_logger"
|
12
12
|
require "driftrock-service/driftrock_app"
|
13
|
+
require "driftrock-service/driftrock_api"
|
13
14
|
|
14
15
|
|
15
16
|
module Driftrock
|
16
17
|
module Service
|
17
18
|
|
18
19
|
module ClassMethods
|
19
|
-
def
|
20
|
+
def add_driftrock_app_rails_filters
|
20
21
|
if respond_to?(:before_filter)
|
21
22
|
include Driftrock::Service::DriftrockApp
|
22
23
|
before_filter :authorise, except: :driftrock_app_status
|
23
24
|
end
|
24
|
-
include Driftrock::Service::Api::Data
|
25
25
|
end
|
26
|
-
|
27
|
-
def acts_as_driftrock_app_model
|
28
|
-
include Driftrock::Service::Api::Data
|
29
|
-
extend Driftrock::Service::Api::Data
|
30
|
-
end
|
31
|
-
|
32
|
-
def acts_as_driftrock_website
|
33
|
-
include Driftrock::Service::Api::Website
|
34
|
-
end
|
35
|
-
|
36
|
-
def acts_as_driftrock_website_model
|
37
|
-
include Driftrock::Service::Api::Website
|
38
|
-
extend Driftrock::Service::Api::Website
|
39
|
-
end
|
40
|
-
|
41
|
-
def acts_as_driftrock_website_visitor_model
|
42
|
-
include Driftrock::Service::Api::Visitor
|
43
|
-
extend Driftrock::Service::Api::Visitor
|
44
|
-
end
|
45
|
-
|
46
|
-
def acts_as_driftrock_admin
|
47
|
-
include Driftrock::Service::Api::Admin
|
48
|
-
end
|
49
|
-
|
50
|
-
def acts_as_driftrock_puller
|
51
|
-
include Driftrock::Service::Api::Puller
|
52
|
-
end
|
53
26
|
end
|
54
27
|
|
55
28
|
def self.included(base)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'website_spec_helper'
|
2
|
+
describe DriftrockModel::Channel do
|
3
|
+
before do
|
4
|
+
@post_method = mock(:post)
|
5
|
+
@get_method = mock(:get)
|
6
|
+
@put_method = mock(:put)
|
7
|
+
DriftrockModel::Channel.set_post_to_api_method @post_method
|
8
|
+
DriftrockModel::Channel.set_put_to_api_method @put_method
|
9
|
+
DriftrockModel::Channel.set_get_from_api_method @get_method
|
10
|
+
@test_channel = DriftrockModel::Channel.new({
|
11
|
+
id: 1
|
12
|
+
})
|
13
|
+
@test_channel_type = DriftrockModel::ChannelType.new({
|
14
|
+
id: 1,
|
15
|
+
name: "google_analytics"
|
16
|
+
})
|
17
|
+
@test_channel.channel_type = @test_channel_type
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be able to add a profile id to a channel" do
|
21
|
+
@post_method.should_receive(:call).with(
|
22
|
+
"/#{@test_channel_type.name}/profile", {profile_id: "test"}).
|
23
|
+
and_return({'status' => 'success'})
|
24
|
+
@test_channel.set_profile_id("test")
|
25
|
+
@test_channel.profile_id.should == "test"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be able to get a channel by channel type name" do
|
29
|
+
@get_method.should_receive(:call).with(
|
30
|
+
"/#{@test_channel_type.name}"
|
31
|
+
).and_return({id: 1})
|
32
|
+
channel_type_get = mock(:channel_type_get)
|
33
|
+
channel_type_get.should_receive(:call).with(
|
34
|
+
"/#{@test_channel_type.name}/by_name"
|
35
|
+
).and_return({id:1, name: "google_analytics"})
|
36
|
+
DriftrockModel::ChannelType.set_get_from_api_method(channel_type_get)
|
37
|
+
channel =DriftrockModel::Channel.
|
38
|
+
find_by_channel_type_name(@test_channel_type.name)
|
39
|
+
channel.id.should == 1
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should be able to get all channel types" do
|
43
|
+
@get_method.should_receive(:call).with(
|
44
|
+
"/types"
|
45
|
+
).and_return([{id: 1, name: "google_analytics"}])
|
46
|
+
types = DriftrockModel::Channel.channel_types
|
47
|
+
types.size.should == 1
|
48
|
+
types.first.name.should == "google_analytics"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should be able to replace a channel token" do
|
52
|
+
tkn = {token: "hello", token_expiry: DateTime.now, expires_in: 3600}
|
53
|
+
@put_method.should_receive(:call).with(
|
54
|
+
"/#{@test_channel_type.name}/profile", tkn
|
55
|
+
).and_return("status" => "success")
|
56
|
+
@test_channel.update_token(tkn)
|
57
|
+
@test_channel.token.should == "hello"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'website_spec_helper'
|
2
|
+
describe DriftrockModel::ChannelType do
|
3
|
+
before do
|
4
|
+
@post_method = mock(:post)
|
5
|
+
@get_method = mock(:get)
|
6
|
+
DriftrockModel::Channel.set_post_to_api_method @post_method
|
7
|
+
DriftrockModel::Channel.set_get_from_api_method @get_method
|
8
|
+
@test_channel = DriftrockModel::Channel.new({
|
9
|
+
id: 1
|
10
|
+
})
|
11
|
+
@test_channel_type = DriftrockModel::ChannelType.new({
|
12
|
+
id: 1,
|
13
|
+
name: "google_analytics"
|
14
|
+
})
|
15
|
+
@test_channel.channel_type = @test_channel_type
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'website_spec_helper'
|
2
|
+
|
3
|
+
describe DriftrockModel::Company do
|
4
|
+
before do
|
5
|
+
@post_method = mock(:post)
|
6
|
+
@get_method = mock(:get)
|
7
|
+
DriftrockModel::Company.set_post_to_api_method @post_method
|
8
|
+
DriftrockModel::Company.set_get_from_api_method @get_method
|
9
|
+
@test_company = DriftrockModel::Company.new({id: 1, name: "test"})
|
10
|
+
@test_user = DriftrockModel::User.new({id: 1, first_name: "test_user"})
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
it "should allow the retrieval of a company by its id" do
|
15
|
+
@get_method.should_receive(:call).
|
16
|
+
with("/1").and_return({id: 1, name: "test"})
|
17
|
+
DriftrockModel::Company.find(1).name.should == "test"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should allow the retrieval of multiple companies" do
|
21
|
+
companies = [{id: 1, name: "test"},{id: 2, name: "test2"}]
|
22
|
+
@get_method.should_receive(:call).
|
23
|
+
with("/").and_return(companies)
|
24
|
+
DriftrockModel::Company.all.last.name.should == "test2"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should allow a user to be added to a company" do
|
28
|
+
@post_method.should_receive(:call).
|
29
|
+
with("/add_user", {:user_to_add_id=>1}).and_return({'status' => 'success'})
|
30
|
+
@test_company.add_user(@test_user).should be_true
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'website_spec_helper'
|
2
|
+
describe DriftrockModel::DriftrockApp do
|
3
|
+
before do
|
4
|
+
@post_method = mock(:post)
|
5
|
+
@get_method = mock(:get)
|
6
|
+
DriftrockModel::DriftrockApp.set_post_to_api_method @post_method
|
7
|
+
DriftrockModel::DriftrockApp.set_get_from_api_method @get_method
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be able to get an app by its app_id" do
|
11
|
+
@get_method.should_receive(:call).with("/string-app-id/by_app_id").
|
12
|
+
and_return({id: 1, name: "test-app"})
|
13
|
+
DriftrockModel::DriftrockApp.find_by_app_id("string-app-id").id.should == 1
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'website_spec_helper'
|
2
|
+
|
3
|
+
describe DriftrockModel::User do
|
4
|
+
before do
|
5
|
+
@post_method = mock(:post)
|
6
|
+
@get_method = mock(:get)
|
7
|
+
DriftrockModel::User.set_post_to_api_method @post_method
|
8
|
+
DriftrockModel::User.set_get_from_api_method @get_method
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
require 'driftrock-service'
|
2
|
-
require
|
2
|
+
require 'rspec/autorun'
|
3
|
+
Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each {|file| require file }
|
4
|
+
Dir[File.dirname(__FILE__) + '/builders/*.rb'].each {|file| require file }
|
3
5
|
|
4
|
-
Driftrock::Service
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
config.
|
6
|
+
include Driftrock::Service
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
|
10
|
+
config.before(:suite) do
|
11
|
+
end
|
12
|
+
|
13
|
+
config.before(:each) do
|
14
|
+
end
|
15
|
+
|
16
|
+
config.after(:each) do
|
17
|
+
end
|
18
|
+
|
19
|
+
config.order = "random"
|
9
20
|
end
|
metadata
CHANGED
@@ -1,56 +1,51 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: driftrock-service
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.3
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Max
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2013-06-04 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: httparty
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
17
|
prerelease: false
|
24
|
-
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
31
27
|
name: rspec
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
38
|
-
type: :development
|
39
28
|
prerelease: false
|
40
|
-
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
30
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: "0"
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id002
|
46
37
|
description: Gem for talking to the driftrock api
|
47
|
-
email:
|
38
|
+
email:
|
48
39
|
- max.dupenois@forward.co.uk
|
49
40
|
executables: []
|
41
|
+
|
50
42
|
extensions: []
|
43
|
+
|
51
44
|
extra_rdoc_files: []
|
52
|
-
|
45
|
+
|
46
|
+
files:
|
53
47
|
- .gitignore
|
48
|
+
- .rspec
|
54
49
|
- Gemfile
|
55
50
|
- LICENSE.txt
|
56
51
|
- README.md
|
@@ -65,38 +60,56 @@ files:
|
|
65
60
|
- lib/driftrock-service/api/website.rb
|
66
61
|
- lib/driftrock-service/config.rb
|
67
62
|
- lib/driftrock-service/connector.rb
|
63
|
+
- lib/driftrock-service/driftrock_api.rb
|
68
64
|
- lib/driftrock-service/driftrock_app.rb
|
69
65
|
- lib/driftrock-service/driftrock_logger.rb
|
66
|
+
- lib/driftrock-service/driftrock_model.rb
|
67
|
+
- lib/driftrock-service/driftrock_model/channel.rb
|
68
|
+
- lib/driftrock-service/driftrock_model/channel_type.rb
|
69
|
+
- lib/driftrock-service/driftrock_model/company.rb
|
70
|
+
- lib/driftrock-service/driftrock_model/driftrock_app.rb
|
71
|
+
- lib/driftrock-service/driftrock_model/user.rb
|
70
72
|
- lib/driftrock-service/errors/driftrock_error.rb
|
71
73
|
- lib/driftrock-service/version.rb
|
72
|
-
- spec/
|
73
|
-
- spec/models/
|
74
|
+
- spec/models/channel_spec.rb
|
75
|
+
- spec/models/channel_type_spec.rb
|
76
|
+
- spec/models/company_spec.rb
|
77
|
+
- spec/models/driftrock_app_spec.rb
|
78
|
+
- spec/models/user_spec.rb
|
74
79
|
- spec/spec_helper.rb
|
80
|
+
- spec/website_spec_helper.rb
|
75
81
|
homepage: https://github.com/forward/driftrock-service
|
76
82
|
licenses: []
|
83
|
+
|
77
84
|
post_install_message:
|
78
85
|
rdoc_options: []
|
79
|
-
|
86
|
+
|
87
|
+
require_paths:
|
80
88
|
- lib
|
81
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
90
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version:
|
87
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
96
|
none: false
|
89
|
-
requirements:
|
90
|
-
- -
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version:
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: "0"
|
93
101
|
requirements: []
|
102
|
+
|
94
103
|
rubyforge_project:
|
95
104
|
rubygems_version: 1.8.24
|
96
105
|
signing_key:
|
97
106
|
specification_version: 3
|
98
107
|
summary: Maintains the api endpoints and the calls to them with authorisation, etc.
|
99
|
-
test_files:
|
100
|
-
- spec/
|
101
|
-
- spec/models/
|
108
|
+
test_files:
|
109
|
+
- spec/models/channel_spec.rb
|
110
|
+
- spec/models/channel_type_spec.rb
|
111
|
+
- spec/models/company_spec.rb
|
112
|
+
- spec/models/driftrock_app_spec.rb
|
113
|
+
- spec/models/user_spec.rb
|
102
114
|
- spec/spec_helper.rb
|
115
|
+
- spec/website_spec_helper.rb
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe AdministrativeApiTest do
|
4
|
-
it "should error without a user and session id" do
|
5
|
-
#Assume for the sake of testing there's at least one app
|
6
|
-
lambda{
|
7
|
-
AdministrativeApiTest.new.list_apps
|
8
|
-
}.should raise_error(Driftrock::Errors::DriftrockError)
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|