maestrano-connector-rails 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|