maestrano-connector-rails 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/models/maestrano/connector/rails/concerns/entity.rb +11 -3
- data/lib/generators/connector/install_generator.rb +0 -1
- data/lib/generators/connector/templates/home_controller.rb +12 -12
- data/lib/generators/connector/templates/home_controller_spec.rb +30 -31
- data/lib/generators/connector/templates/home_index.haml +39 -67
- data/lib/generators/connector/templates/layouts.haml +4 -3
- data/lib/generators/connector/templates/oauth_controller.rb +1 -0
- data/lib/generators/connector/templates/shared_entities_index.haml +5 -5
- data/lib/generators/connector/templates/stylesheets/application.sass +0 -1
- data/lib/generators/connector/templates/stylesheets/home.sass +16 -2
- data/lib/generators/connector/templates/stylesheets/layout.sass +30 -92
- data/lib/generators/connector/templates/stylesheets/variables.sass +25 -28
- data/maestrano-connector-rails.gemspec +3 -4
- data/spec/models/entity_spec.rb +25 -5
- data/template/routes.rb +0 -1
- metadata +2 -3
- data/lib/generators/connector/templates/stylesheets/banners.sass +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fbcf23f810c8f8163bffe839d39ef0d36531fde
|
4
|
+
data.tar.gz: 1ef445f37a5a3dc44bd737e966a65ca5a03ef73b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20f2202b8094a5c43fe5066f9b918fa4307b527531228d1d5f21e37de581e7c292d90a5984134231f6d40fc585417b4c7eabc4d8b812109eeea65aab5a49a986
|
7
|
+
data.tar.gz: 14d8ba996bb7c9e11525d12d17086126035a882d2b7fe532ff8c6b22ff8ee9377555b5a3580d91a0e615eac7cd8c5b24dad8b09e88837ed7f017d8cdf6e7079a
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.7
|
@@ -167,22 +167,30 @@ module Maestrano::Connector::Rails::Concerns::Entity
|
|
167
167
|
# ----------------------------------------------
|
168
168
|
# Connec! methods
|
169
169
|
# ----------------------------------------------
|
170
|
+
# Supported options:
|
171
|
+
# * full_sync
|
172
|
+
# * $filter (see Connec! documentation)
|
173
|
+
# * $orderby (see Connec! documentation)
|
170
174
|
def get_connec_entities(client, last_synchronization, organization, opts={})
|
171
175
|
return [] unless self.class.can_read_connec?
|
172
176
|
|
173
177
|
Maestrano::Connector::Rails::ConnectorLogger.log('info', organization, "Fetching Connec! #{self.class.connec_entity_name}")
|
174
178
|
|
175
179
|
entities = []
|
180
|
+
query_params = {}
|
181
|
+
query_params[:$orderby] = opts[:$orderby] if opts[:$orderby]
|
176
182
|
|
177
183
|
# Fetch first page
|
178
184
|
if last_synchronization.blank? || opts[:full_sync]
|
179
185
|
Maestrano::Connector::Rails::ConnectorLogger.log('debug', organization, "entity=#{self.class.connec_entity_name}, fetching all data")
|
180
|
-
|
186
|
+
query_params[:$filter] = opts[:$filter] if opts[:$filter]
|
181
187
|
else
|
182
188
|
Maestrano::Connector::Rails::ConnectorLogger.log('debug', organization, "entity=#{self.class.connec_entity_name}, fetching data since #{last_synchronization.updated_at.iso8601}")
|
183
|
-
|
184
|
-
|
189
|
+
filter = "updated_at gt '#{last_synchronization.updated_at.iso8601}'"
|
190
|
+
filter += " and #{opts[:$filter]}" if opts[:$filter]
|
191
|
+
query_params[:$filter] = filter
|
185
192
|
end
|
193
|
+
response = client.get("/#{self.class.normalized_connec_entity_name}?#{query_params.to_query}")
|
186
194
|
raise "No data received from Connec! when trying to fetch #{self.class.connec_entity_name.pluralize}" unless response
|
187
195
|
|
188
196
|
response_hash = JSON.parse(response.body)
|
@@ -51,7 +51,6 @@ module Connector
|
|
51
51
|
|
52
52
|
def copy_stylesheets
|
53
53
|
copy_file 'stylesheets/application.sass', 'app/assets/stylesheets/application.sass'
|
54
|
-
copy_file 'stylesheets/banners.sass', 'app/assets/stylesheets/banners.sass'
|
55
54
|
copy_file 'stylesheets/home.sass', 'app/assets/stylesheets/home.sass'
|
56
55
|
copy_file 'stylesheets/layout.sass', 'app/assets/stylesheets/layout.sass'
|
57
56
|
copy_file 'stylesheets/spacers.sass', 'app/assets/stylesheets/spacers.sass'
|
@@ -7,14 +7,18 @@ class HomeController < ApplicationController
|
|
7
7
|
organization = Maestrano::Connector::Rails::Organization.find_by_id(params[:id])
|
8
8
|
|
9
9
|
if organization && is_admin?(current_user, organization)
|
10
|
+
old_sync_state = organization.sync_enabled
|
11
|
+
|
10
12
|
organization.synchronized_entities.keys.each do |entity|
|
11
|
-
|
12
|
-
organization.synchronized_entities[entity] = true
|
13
|
-
else
|
14
|
-
organization.synchronized_entities[entity] = false
|
15
|
-
end
|
13
|
+
organization.synchronized_entities[entity] = !!params["#{entity}"]
|
16
14
|
end
|
15
|
+
organization.sync_enabled = organization.synchronized_entities.values.any?
|
17
16
|
organization.save
|
17
|
+
|
18
|
+
if !old_sync_state
|
19
|
+
Maestrano::Connector::Rails::SynchronizationJob.perform_later(organization, {})
|
20
|
+
flash[:info] = 'Congrats, you\'re all set up! Your data are now being synced'
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
24
|
redirect_to(:back)
|
@@ -29,12 +33,8 @@ class HomeController < ApplicationController
|
|
29
33
|
redirect_to(:back)
|
30
34
|
end
|
31
35
|
|
32
|
-
def
|
33
|
-
|
34
|
-
current_organization.update(sync_enabled: !current_organization.sync_enabled)
|
35
|
-
flash[:info] = current_organization.sync_enabled ? 'Synchronization enabled' : 'Synchronization disabled'
|
36
|
-
end
|
37
|
-
|
38
|
-
redirect_to(:back)
|
36
|
+
def redirect_to_external
|
37
|
+
redirect_to 'https://path/to/external/app'
|
39
38
|
end
|
39
|
+
|
40
40
|
end
|
@@ -32,11 +32,28 @@ describe HomeController, :type => :controller do
|
|
32
32
|
|
33
33
|
it { expect(subject).to redirect_to back_path }
|
34
34
|
|
35
|
-
it 'updates organization' do
|
35
|
+
it 'updates organization synchronized_entities' do
|
36
36
|
subject
|
37
37
|
organization.reload
|
38
38
|
expect(organization.synchronized_entities).to eq({'people' => true, 'item' => false})
|
39
39
|
end
|
40
|
+
|
41
|
+
it 'updates organization sync_enabled' do
|
42
|
+
subject
|
43
|
+
organization.reload
|
44
|
+
expect(organization.sync_enabled).to eq true
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when removing all entities' do
|
48
|
+
subject { put :update, id: organization.id, 'people' => false, 'item' => false }
|
49
|
+
before { organization.update(sync_enabled: true) }
|
50
|
+
|
51
|
+
it 'set sync_enabled to false' do
|
52
|
+
subject
|
53
|
+
organization.reload
|
54
|
+
expect(organization.sync_enabled).to eq false
|
55
|
+
end
|
56
|
+
end
|
40
57
|
end
|
41
58
|
end
|
42
59
|
|
@@ -49,7 +66,7 @@ describe HomeController, :type => :controller do
|
|
49
66
|
|
50
67
|
context 'when user is not admin' do
|
51
68
|
before {
|
52
|
-
allow_any_instance_of(
|
69
|
+
allow_any_instance_of(ApplicationHelper).to receive(:is_admin).and_return(false)
|
53
70
|
}
|
54
71
|
|
55
72
|
it { expect(subject).to redirect_to back_path }
|
@@ -62,7 +79,7 @@ describe HomeController, :type => :controller do
|
|
62
79
|
|
63
80
|
context 'when user is admin' do
|
64
81
|
before {
|
65
|
-
allow_any_instance_of(
|
82
|
+
allow_any_instance_of(ApplicationHelper).to receive(:is_admin).and_return(true)
|
66
83
|
}
|
67
84
|
|
68
85
|
it { expect(subject).to redirect_to back_path }
|
@@ -85,40 +102,22 @@ describe HomeController, :type => :controller do
|
|
85
102
|
end
|
86
103
|
end
|
87
104
|
end
|
105
|
+
end
|
88
106
|
|
89
|
-
|
90
|
-
|
91
|
-
|
107
|
+
describe 'redirect_to_external' do
|
108
|
+
subject { get :redirect_to_external }
|
109
|
+
|
110
|
+
context 'when organization has a redirect url' do
|
111
|
+
let(:organization) { create(:organization, instance_url: 'url') }
|
92
112
|
before {
|
93
113
|
allow_any_instance_of(Maestrano::Connector::Rails::SessionHelper).to receive(:current_organization).and_return(organization)
|
94
114
|
}
|
95
115
|
|
96
|
-
|
97
|
-
|
98
|
-
allow_any_instance_of(Maestrano::Connector::Rails::SessionHelper).to receive(:is_admin).and_return(false)
|
99
|
-
}
|
100
|
-
it { expect(subject).to redirect_to back_path }
|
101
|
-
|
102
|
-
it 'does nothing' do
|
103
|
-
expect{ subject }.to_not change{ organization.sync_enabled }
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'when user is admin' do
|
108
|
-
before {
|
109
|
-
allow_any_instance_of(Maestrano::Connector::Rails::SessionHelper).to receive(:is_admin).and_return(true)
|
110
|
-
}
|
111
|
-
it { expect(subject).to redirect_to back_path }
|
112
|
-
|
113
|
-
it 'change sync_enabled from true to false' do
|
114
|
-
expect{ subject }.to change{ organization.sync_enabled }.from(true).to(false)
|
115
|
-
end
|
116
|
+
it {expect(subject).to redirect_to('url')}
|
117
|
+
end
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
-
expect{ subject }.to change{ organization.sync_enabled }.from(false).to(true)
|
120
|
-
end
|
121
|
-
end
|
119
|
+
context 'otherwise' do
|
120
|
+
it {expect(subject).to redirect_to('https://login.salesforce.com')}
|
122
121
|
end
|
123
122
|
end
|
124
123
|
end
|
@@ -6,7 +6,10 @@
|
|
6
6
|
.col-md-10.col-md-offset-2
|
7
7
|
%h2 ApplicationName Connector
|
8
8
|
%p
|
9
|
-
|
9
|
+
-if @organization
|
10
|
+
Link your company <strong>#{@organization.name} (#{@organization.uid})</strong> to ApplicationName to get your business in synch. Check the status of your connection on this screen.
|
11
|
+
-else
|
12
|
+
Link your account to ApplicationName to get your business in synch. Check the status of your connection on this screen.
|
10
13
|
|
11
14
|
.container
|
12
15
|
- if current_user
|
@@ -15,89 +18,58 @@
|
|
15
18
|
.col-md-12.alert.alert-warning
|
16
19
|
Only administrators can modify the application settings
|
17
20
|
|
18
|
-
.row.link-step
|
21
|
+
.row.link-step{class: "#{@organization.oauth_uid ? 'done' : 'todo'}"}
|
19
22
|
.col-md-1.text-center.link-step-number
|
20
23
|
%span.badge.link-step-badge
|
21
24
|
1
|
22
|
-
.col-md-3.text-center
|
23
|
-
=image_tag "logos/default-white.png", class: 'logo'
|
24
|
-
.col-md-6.link-step-description
|
25
|
-
%h
|
26
|
-
Your Maestrano company <strong>#{@organization.name} (#{@organization.uid})</strong> is currently linked
|
27
|
-
.col-md-2.text-center.link-step-action
|
28
|
-
= link_to "Disconnect", Maestrano::Connector::Rails::Engine.routes.url_helpers.maestrano_signout_path, class: "btn btn-warning btn-lg #{is_admin ? '' : 'disabled'}"
|
29
|
-
|
30
|
-
.spacer1
|
31
|
-
|
32
|
-
.row.link-step
|
33
|
-
.col-md-1.text-center.link-step-number
|
34
|
-
%span.badge.link-step-badge
|
35
|
-
2
|
36
|
-
.col-md-3.text-center
|
37
|
-
=image_tag "logos/external.png", class: 'logo'
|
38
25
|
.col-md-6.link-step-description
|
39
26
|
%h
|
40
27
|
- if @organization.oauth_uid
|
41
28
|
Your ApplicationName account <strong>#{@organization.oauth_name} (#{@organization.oauth_uid})</strong> is currently linked
|
42
29
|
- else
|
43
30
|
Your ApplicationName account is not linked
|
44
|
-
.col-md-2.text-center.link-step-action
|
31
|
+
.col-md-2.col-md-offset-3.text-center.link-step-action
|
45
32
|
- if @organization.oauth_uid
|
46
|
-
|
47
|
-
= link_to "Disconnect", root_path, class: "btn btn-warning btn-lg #{is_admin ? '' : 'disabled'}"
|
33
|
+
= link_to "Disconnect", signout_omniauth_path(organization_id: @organization.id), class: "btn btn-warning btn-lg #{is_admin ? '' : 'disabled'}"
|
48
34
|
- else
|
49
|
-
/
|
50
|
-
= link_to "Link to ApplicationName", root_path, class: "btn btn-warning btn-lg #{is_admin ? '' : 'disabled'}"
|
35
|
+
= link_to "Link to ApplicationName", "/auth/ApplicationName/request?org_uid=#{@organization.uid}", class: "btn btn-warning btn-lg" if is_admin
|
51
36
|
|
52
37
|
.spacer1
|
53
38
|
|
54
|
-
.row.link-step
|
55
|
-
.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
39
|
+
.row.link-step{class: "#{(@organization.sync_enabled && @organization.synchronized_entities.values.any?) ? 'done' : 'todo'}"}
|
40
|
+
= form_tag home_update_path(id: @organization.id), method: :put do
|
41
|
+
.col-md-1.text-center.link-step-number
|
42
|
+
%span.badge.link-step-badge
|
43
|
+
2
|
44
|
+
.col-md-9.link-step-description
|
45
|
+
%h
|
46
|
+
You can customize which entities are synchronized by the connector:
|
47
|
+
.spacer1
|
48
|
+
.row
|
49
|
+
.col-md-11.col-md-offset-1
|
50
|
+
- @organization.synchronized_entities.each do |k, v|
|
51
|
+
.row.sync-entity
|
52
|
+
.col-md-1.link-step-action
|
53
|
+
%input{type: "checkbox", id: "#{k}", name: "#{k}", checked: v}
|
54
|
+
.col-md-6{style: 'padding-top: 5px;'}
|
55
|
+
%label{:for => "#{k}"} #{k.to_s.humanize.pluralize}
|
56
|
+
-if is_admin
|
57
|
+
.col-md-5.text-right
|
58
|
+
- if v && @organization.oauth_uid && @organization.sync_enabled
|
59
|
+
= link_to "Force a synchronization for #{k.to_s.humanize.pluralize} only", home_synchronize_path(opts: {only_entities: [k.to_s]}), method: :post, class: "btn btn-warning btn-sm"
|
60
|
+
.spacer1
|
61
|
+
.row
|
62
|
+
.col-md-2.col-md-offset-10.text-center.link-step-action
|
63
|
+
=submit_tag "#{@organization.sync_enabled ? 'Update' : 'Start synchronizing!'}", class: "btn btn-lg btn-warning #{@organization.oauth_uid ? '' : 'disabled'} text-sm"
|
64
|
+
|
65
|
+
-if @organization.oauth_uid && @organization.sync_enabled
|
66
|
+
.spacer2
|
67
|
+
.row
|
68
|
+
.col-md-4.col-md-offset-4.text-center
|
69
|
+
= link_to 'Go to ApplicationName', home_redirect_to_external_path, class: 'btn btn-lg btn-primary'
|
68
70
|
|
69
71
|
- else
|
70
72
|
.row
|
71
73
|
.col-md-4.col-md-offset-4.center
|
72
74
|
= link_to "Link your Maestrano account", Maestrano::Connector::Rails::Engine.routes.url_helpers.default_maestrano_auth_saml_index_path(tenant: :default), class: 'btn btn-warning'
|
73
75
|
|
74
|
-
- if @organization
|
75
|
-
.spacer2
|
76
|
-
.row
|
77
|
-
.col-md-12
|
78
|
-
%h1
|
79
|
-
Synchronized entities
|
80
|
-
%small You can customize which entities are synchronized by the connector
|
81
|
-
|
82
|
-
.spacer1
|
83
|
-
.row
|
84
|
-
.col-md-10.col-md-offset-1
|
85
|
-
= form_tag home_update_path(id: @organization.id), method: :put do
|
86
|
-
- @organization.synchronized_entities.each do |k, v|
|
87
|
-
.row.sync-entity
|
88
|
-
.col-md-1.link-step-action
|
89
|
-
%input{type: "checkbox", id: "#{k}", name: "#{k}", checked: v}
|
90
|
-
.col-md-7{style: 'padding-top: 5px;'}
|
91
|
-
%label{:for => "#{k}"} #{k.to_s.humanize}
|
92
|
-
-if is_admin
|
93
|
-
.col-md-4.text-right
|
94
|
-
- if v && @organization.oauth_uid
|
95
|
-
- if @organization.sync_enabled
|
96
|
-
= link_to "Force a synchronization for #{k.to_s.humanize.pluralize} only", home_synchronize_path(opts: {only_entities: [k.to_s]}), method: :post, class: "btn btn-warning btn-sm #{is_admin && @organization.sync_enabled ? '' : 'disabled'}"
|
97
|
-
- else
|
98
|
-
.btn.btn-warning.btn-sm.disabled= "Force a synchronization for #{k.to_s.humanize.pluralize} only"
|
99
|
-
-if is_admin
|
100
|
-
.spacer1
|
101
|
-
.row
|
102
|
-
.col-md-4.col-md-offset-8.text-right
|
103
|
-
=submit_tag :Save, class: "btn btn-primary"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
!!!
|
4
4
|
%html
|
5
5
|
%head
|
6
|
-
%title
|
6
|
+
%title SalesForce Connector
|
7
7
|
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
|
8
8
|
= javascript_include_tag 'application', 'data-turbolinks-track' => true
|
9
9
|
= csrf_meta_tags
|
@@ -16,7 +16,9 @@
|
|
16
16
|
|
17
17
|
%ul.nav.navbar-nav
|
18
18
|
%li=link_to "Status", root_path
|
19
|
+
|
19
20
|
%li=link_to "History", synchronizations_index_path
|
21
|
+
|
20
22
|
-if is_admin
|
21
23
|
%li=link_to "Mapping", shared_entities_index_path
|
22
24
|
|
@@ -41,5 +43,4 @@
|
|
41
43
|
.row
|
42
44
|
.col-xs-12
|
43
45
|
.copyright
|
44
|
-
© Copyright #{Time.now.year}
|
45
|
-
All rights reserved. Various trademarks held by their respective owners.
|
46
|
+
© Copyright #{Time.now.year}. All rights reserved. Various trademarks held by their respective owners.
|
@@ -7,15 +7,15 @@
|
|
7
7
|
.row
|
8
8
|
.col-md-10
|
9
9
|
%h3 Data Shared
|
10
|
-
%small Equivalence between
|
10
|
+
%small Equivalence between the internal id and ApplicationName id for each of your entities
|
11
11
|
|
12
12
|
- if @idmaps
|
13
13
|
%table.table.table-condensed
|
14
14
|
%th Entity name
|
15
|
-
%th
|
16
|
-
%th
|
17
|
-
%th
|
18
|
-
%th
|
15
|
+
%th Internal entity
|
16
|
+
%th Internal id
|
17
|
+
%th ApplicationName entity
|
18
|
+
%th ApplicationName id
|
19
19
|
%th Message
|
20
20
|
|
21
21
|
- @idmaps.each do |idmap|
|
@@ -10,7 +10,6 @@
|
|
10
10
|
.link-step-badge
|
11
11
|
padding: 10px
|
12
12
|
font-size: 20px
|
13
|
-
background-color: cornflowerblue
|
14
13
|
border-radius: 20px
|
15
14
|
|
16
15
|
.link-step-description
|
@@ -19,7 +18,22 @@
|
|
19
18
|
.link-step-action
|
20
19
|
padding-top: 3px
|
21
20
|
|
21
|
+
&.done
|
22
|
+
background-color: $done-step-bg-color
|
23
|
+
border-color: $done-step-border-color
|
24
|
+
.link-step-badge
|
25
|
+
background-color: $done-step-badge-color
|
26
|
+
|
27
|
+
&.todo
|
28
|
+
background-color: $todo-step-bg-color
|
29
|
+
border-color: $todo-step-border-color
|
30
|
+
.link-step-badge
|
31
|
+
background-color: $todo-step-badge-color
|
32
|
+
|
22
33
|
.sync-entity
|
23
34
|
padding-bottom: 8px
|
24
35
|
margin-bottom: 8px
|
25
|
-
border-bottom: dashed 1px silver
|
36
|
+
border-bottom: dashed 1px silver
|
37
|
+
|
38
|
+
.btn.btn-lg.text-sm
|
39
|
+
font-size: 16px
|
@@ -1,59 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
.logo
|
7
|
-
height: 51px
|
8
|
-
|
9
|
-
.navbar
|
10
|
-
&.navbar-dashboard
|
11
|
-
top: 0px
|
12
|
-
|
13
|
-
.container-fluid
|
14
|
-
.navbar-brand
|
15
|
-
position: absolute
|
16
|
-
margin-top: -44px
|
17
|
-
|
18
|
-
.navbar-submenu
|
19
|
-
background-color: $purple
|
20
|
-
padding: 15px
|
21
|
-
margin-top: 14px
|
22
|
-
margin-bottom: -1px
|
23
|
-
width: 100%
|
24
|
-
|
25
|
-
ul
|
26
|
-
margin: auto
|
27
|
-
list-style-type: none
|
28
|
-
|
29
|
-
li
|
30
|
-
display: inline
|
31
|
-
margin: 0px 13px
|
1
|
+
html, body
|
2
|
+
height: 100%
|
3
|
+
background-color: $bg-color
|
4
|
+
color: $text-color
|
32
5
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
font-weight: 300
|
6
|
+
.wrapper
|
7
|
+
min-height: 100%
|
8
|
+
margin-bottom: -$footer-height
|
37
9
|
|
38
|
-
|
39
|
-
|
40
|
-
|
10
|
+
&:after
|
11
|
+
content: ""
|
12
|
+
display: block
|
41
13
|
|
42
|
-
|
43
|
-
|
44
|
-
|
14
|
+
.footer
|
15
|
+
padding-top: $navbar-padding
|
16
|
+
height: $footer-height
|
17
|
+
border-top: 1px solid darken($navbar-bg-color, 10%)
|
18
|
+
border-bottom: 1px solid darken($navbar-bg-color, 10%)
|
19
|
+
background-color: $navbar-bg-color
|
45
20
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
height: 0
|
52
|
-
border-left: 27px solid transparent
|
53
|
-
border-right: 27px solid transparent
|
54
|
-
margin-left: calc(50% - 27px)
|
55
|
-
border-bottom: 20px solid $purple
|
21
|
+
.copyright
|
22
|
+
text-align: center
|
23
|
+
font-size: 10px
|
24
|
+
color: $copyright-color
|
25
|
+
margin-top: 20px
|
56
26
|
|
27
|
+
.navbar
|
57
28
|
.container-fluid
|
58
29
|
.navbar-brand
|
59
30
|
margin-left: 20px
|
@@ -69,17 +40,6 @@
|
|
69
40
|
a
|
70
41
|
font-size: $normal
|
71
42
|
|
72
|
-
ul.nav.navbar-nav.navbar-right
|
73
|
-
button
|
74
|
-
margin-top: (($navbar-height - $line-height-computed) / 2) - 18
|
75
|
-
|
76
|
-
a
|
77
|
-
text-transform: none
|
78
|
-
|
79
|
-
.padding-navbar
|
80
|
-
margin-top: $navbar-height
|
81
|
-
|
82
|
-
|
83
43
|
// Reduce the height of the navbar if on mobile device
|
84
44
|
@media(min-width: 768px)
|
85
45
|
.navbar-fixed-top
|
@@ -89,37 +49,15 @@
|
|
89
49
|
.padding-navbar
|
90
50
|
margin-top: $navbar-desktop-height
|
91
51
|
|
52
|
+
.banners
|
53
|
+
width: 100%
|
54
|
+
padding: 58px 0 58px 0
|
55
|
+
|
56
|
+
.logo
|
57
|
+
height: 51px
|
58
|
+
|
92
59
|
.center
|
93
60
|
text-align: center
|
94
61
|
|
95
62
|
.align-right
|
96
|
-
text-align: right
|
97
|
-
|
98
|
-
html, body
|
99
|
-
height: 100%
|
100
|
-
|
101
|
-
.wrapper
|
102
|
-
min-height: 100%
|
103
|
-
margin-bottom: -$footer-height
|
104
|
-
|
105
|
-
&:after
|
106
|
-
content: ""
|
107
|
-
display: block
|
108
|
-
|
109
|
-
.footer
|
110
|
-
padding-top: $navbar-padding
|
111
|
-
height: $footer-height
|
112
|
-
border-top: 1px solid darken(#e5e5e5, 10%)
|
113
|
-
border-bottom: 1px solid darken(#e5e5e5, 10%)
|
114
|
-
background-color: $darkblue
|
115
|
-
|
116
|
-
.copyright
|
117
|
-
text-align: center
|
118
|
-
font-size: 10px
|
119
|
-
color: #f4f4f4
|
120
|
-
margin-top: 20px
|
121
|
-
|
122
|
-
|
123
|
-
.banners
|
124
|
-
&.sticky-top
|
125
|
-
padding-top: 10px
|
63
|
+
text-align: right
|
@@ -11,30 +11,23 @@ $font-family-base: $font-family-sans-serif
|
|
11
11
|
/*-----------------------------------------------------------------------*/
|
12
12
|
/* Color palette */
|
13
13
|
/*-----------------------------------------------------------------------*/
|
14
|
-
$
|
15
|
-
$
|
16
|
-
|
17
|
-
$
|
18
|
-
$
|
19
|
-
|
20
|
-
$
|
21
|
-
|
22
|
-
$
|
23
|
-
$
|
24
|
-
|
25
|
-
$
|
26
|
-
$
|
27
|
-
$
|
28
|
-
$
|
29
|
-
$
|
30
|
-
$
|
31
|
-
$bluegray2: #35464c
|
32
|
-
|
33
|
-
$brand-success: $fluroblue
|
34
|
-
$brand-warning: $purple
|
35
|
-
$brand-info: $fluroblue
|
36
|
-
$brand-danger: $fluropink
|
37
|
-
$brand-primary: $fluroblue
|
14
|
+
$bg-color: #fff
|
15
|
+
$text-color: #000
|
16
|
+
|
17
|
+
$navbar-bg-color: #aaa
|
18
|
+
$navbar-text-color: #fff
|
19
|
+
|
20
|
+
$copyright-color: $navbar-text-color
|
21
|
+
|
22
|
+
$primary-button-color: blue
|
23
|
+
$warning-button-color: red
|
24
|
+
|
25
|
+
$done-step-bg-color: #dff0d8
|
26
|
+
$done-step-border-color: #d6e9c6
|
27
|
+
$done-step-badge-color: darken($done-step-border-color, 20%)
|
28
|
+
$todo-step-bg-color: #fcf8e3
|
29
|
+
$todo-step-border-color: #faebcc
|
30
|
+
$todo-step-badge-color: darken($todo-step-border-color, 20%)
|
38
31
|
|
39
32
|
/*-----------------------------------------------------------------------*/
|
40
33
|
/* Text Size */
|
@@ -45,13 +38,17 @@ $normal: 13px
|
|
45
38
|
/*-----------------------------------------------------------------------*/
|
46
39
|
/* Nav bar */
|
47
40
|
/*-----------------------------------------------------------------------*/
|
48
|
-
$navbar-inverse-bg: $
|
41
|
+
$navbar-inverse-bg: $navbar-bg-color
|
49
42
|
$navbar-height: 40px
|
50
|
-
$navbar-inverse-link-color: $
|
43
|
+
$navbar-inverse-link-color: $navbar-text-color
|
51
44
|
$navbar-border-radius: 0px
|
52
|
-
$navbar-inverse-border: $
|
45
|
+
$navbar-inverse-border: $navbar-bg-color
|
53
46
|
$navbar-desktop-height: 80px
|
54
47
|
$navbar-inverse-link-active-bg: $navbar-inverse-bg
|
55
48
|
|
56
49
|
$navbar-padding: 10px
|
57
|
-
$footer-height: 50px
|
50
|
+
$footer-height: 50px
|
51
|
+
|
52
|
+
$brand-success: $primary-button-color
|
53
|
+
$brand-primary: $primary-button-color
|
54
|
+
$brand-warning: $warning-button-color
|
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: maestrano-connector-rails 0.3.
|
5
|
+
# stub: maestrano-connector-rails 0.3.7 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "maestrano-connector-rails"
|
9
|
-
s.version = "0.3.
|
9
|
+
s.version = "0.3.7"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Pierre Berard"]
|
14
|
-
s.date = "2016-03-
|
14
|
+
s.date = "2016-03-31"
|
15
15
|
s.description = "Maestrano is the next generation marketplace for SME applications. See https://maestrano.com for details."
|
16
16
|
s.email = "pierre.berard@maestrano.com"
|
17
17
|
s.executables = ["rails"]
|
@@ -83,7 +83,6 @@ Gem::Specification.new do |s|
|
|
83
83
|
"lib/generators/connector/templates/shared_entities_controller_spec.rb",
|
84
84
|
"lib/generators/connector/templates/shared_entities_index.haml",
|
85
85
|
"lib/generators/connector/templates/stylesheets/application.sass",
|
86
|
-
"lib/generators/connector/templates/stylesheets/banners.sass",
|
87
86
|
"lib/generators/connector/templates/stylesheets/home.sass",
|
88
87
|
"lib/generators/connector/templates/stylesheets/layout.sass",
|
89
88
|
"lib/generators/connector/templates/stylesheets/spacers.sass",
|
data/spec/models/entity_spec.rb
CHANGED
@@ -203,7 +203,7 @@ describe Maestrano::Connector::Rails::Entity do
|
|
203
203
|
}
|
204
204
|
|
205
205
|
it 'calls get with a singularize url' do
|
206
|
-
expect(client).to receive(:get).with("/#{connec_name.downcase}")
|
206
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase}?")
|
207
207
|
subject.get_connec_entities(client, nil, organization)
|
208
208
|
end
|
209
209
|
end
|
@@ -215,26 +215,46 @@ describe Maestrano::Connector::Rails::Entity do
|
|
215
215
|
|
216
216
|
context 'when opts[:full_sync] is true' do
|
217
217
|
it 'performs a full get' do
|
218
|
-
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}")
|
219
|
-
subject.get_connec_entities(client,
|
218
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?")
|
219
|
+
subject.get_connec_entities(client, sync, organization, {full_sync: true})
|
220
220
|
end
|
221
221
|
end
|
222
222
|
|
223
223
|
context 'when there is no last sync' do
|
224
224
|
it 'performs a full get' do
|
225
|
-
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}")
|
225
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?")
|
226
226
|
subject.get_connec_entities(client, nil, organization)
|
227
227
|
end
|
228
228
|
end
|
229
229
|
|
230
230
|
context 'when there is a last sync' do
|
231
231
|
it 'performs a time limited get' do
|
232
|
-
uri_param =
|
232
|
+
uri_param = {"$filter" => "updated_at gt '#{sync.updated_at.iso8601}'"}.to_query
|
233
233
|
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?#{uri_param}")
|
234
234
|
subject.get_connec_entities(client, sync, organization)
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
238
|
+
context 'with options' do
|
239
|
+
it 'support filter option for full sync' do
|
240
|
+
uri_param = {'$filter'=>'code eq \'PEO12\''}.to_query
|
241
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?#{uri_param}")
|
242
|
+
subject.get_connec_entities(client, sync, organization, {full_sync: true, :$filter => "code eq 'PEO12'"})
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'support filter option for time limited sync' do
|
246
|
+
uri_param = {"$filter"=>"updated_at gt '#{sync.updated_at.iso8601}' and code eq 'PEO12'"}.to_query
|
247
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?#{uri_param}")
|
248
|
+
subject.get_connec_entities(client, sync, organization, {:$filter => "code eq 'PEO12'"})
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'support orderby option for time limited sync' do
|
252
|
+
uri_param = {"$orderby"=>"name asc", "$filter"=>"updated_at gt '#{sync.updated_at.iso8601}'"}.to_query
|
253
|
+
expect(client).to receive(:get).with("/#{connec_name.downcase.pluralize}?#{uri_param}")
|
254
|
+
subject.get_connec_entities(client, sync, organization, {:$orderby => "name asc"})
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
238
258
|
context 'with pagination' do
|
239
259
|
before {
|
240
260
|
allow(client).to receive(:get).and_return(ActionDispatch::Response.new(200, {}, {people: [], pagination: {next: "https://api-connec.maestrano.com/api/v2/cld-dkg601/people?%24skip=10&%24top=10"}}.to_json, {}), ActionDispatch::Response.new(200, {}, {people: []}.to_json, {}))
|
data/template/routes.rb
CHANGED
@@ -7,7 +7,6 @@ Rails.application.routes.draw do
|
|
7
7
|
get 'home/index' => 'home#index'
|
8
8
|
put 'home/update' => 'home#update'
|
9
9
|
post 'home/synchronize' => 'home#synchronize'
|
10
|
-
put 'home/toggle_sync' => 'home#toggle_sync'
|
11
10
|
|
12
11
|
get 'synchronizations/index' => 'synchronizations#index'
|
13
12
|
get 'shared_entities/index' => 'shared_entities#index'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maestrano-connector-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Berard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maestrano-rails
|
@@ -293,7 +293,6 @@ files:
|
|
293
293
|
- lib/generators/connector/templates/shared_entities_controller_spec.rb
|
294
294
|
- lib/generators/connector/templates/shared_entities_index.haml
|
295
295
|
- lib/generators/connector/templates/stylesheets/application.sass
|
296
|
-
- lib/generators/connector/templates/stylesheets/banners.sass
|
297
296
|
- lib/generators/connector/templates/stylesheets/home.sass
|
298
297
|
- lib/generators/connector/templates/stylesheets/layout.sass
|
299
298
|
- lib/generators/connector/templates/stylesheets/spacers.sass
|
@@ -1,59 +0,0 @@
|
|
1
|
-
.banners
|
2
|
-
width: 100%
|
3
|
-
padding: 58px 0 58px 0
|
4
|
-
|
5
|
-
&.small-padding
|
6
|
-
padding: 10px 0px 10px 0px
|
7
|
-
|
8
|
-
&.lightgray
|
9
|
-
background-color: $lightgray
|
10
|
-
|
11
|
-
&.purple
|
12
|
-
background-color: $purple
|
13
|
-
|
14
|
-
&.darkblue
|
15
|
-
background-color: $darkblue
|
16
|
-
p
|
17
|
-
color: $lightgray
|
18
|
-
font-size: 1.1em
|
19
|
-
font-weight: 300
|
20
|
-
|
21
|
-
h2
|
22
|
-
font-weight: 700
|
23
|
-
font-size: 40px
|
24
|
-
color: $darkblue
|
25
|
-
|
26
|
-
h4
|
27
|
-
font-weight: 900
|
28
|
-
font-size: 14px
|
29
|
-
color: $darkblue
|
30
|
-
|
31
|
-
p
|
32
|
-
color: $mediumblue
|
33
|
-
font-weight: 300
|
34
|
-
font-size: 16px
|
35
|
-
|
36
|
-
&.promo
|
37
|
-
h2
|
38
|
-
font-weight: 700
|
39
|
-
font-size: 40px
|
40
|
-
text-align: center
|
41
|
-
color: $darkblue
|
42
|
-
|
43
|
-
h3
|
44
|
-
font-weight: 300
|
45
|
-
font-size: 18px
|
46
|
-
text-align: center
|
47
|
-
color: $darkblue
|
48
|
-
|
49
|
-
h4
|
50
|
-
font-size: 24px
|
51
|
-
font-weight: 400
|
52
|
-
|
53
|
-
h5
|
54
|
-
text-align: center
|
55
|
-
font-size: 14px
|
56
|
-
font-weight: 300
|
57
|
-
|
58
|
-
&.sticky
|
59
|
-
padding: 5px 0
|