govuk_content_models 34.0.0 → 35.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/app/models/artefact.rb +15 -13
- data/app/models/business_support/business_size.rb +1 -1
- data/app/models/business_support/business_type.rb +1 -1
- data/app/models/business_support/location.rb +1 -1
- data/app/models/business_support/purpose.rb +1 -1
- data/app/models/business_support/sector.rb +1 -1
- data/app/models/business_support/stage.rb +1 -1
- data/app/models/business_support/support_type.rb +1 -1
- data/app/models/business_support_edition.rb +1 -4
- data/app/models/curated_list.rb +1 -1
- data/app/models/edition.rb +14 -15
- data/app/models/licence_edition.rb +5 -2
- data/app/models/local_authority.rb +1 -1
- data/app/models/overview_dashboard.rb +1 -1
- data/app/models/part.rb +2 -2
- data/app/models/parted.rb +1 -1
- data/app/models/rendered_manual.rb +1 -1
- data/app/models/simple_smart_answer_edition/node/option.rb +1 -1
- data/app/models/simple_smart_answer_edition/node.rb +1 -1
- data/app/models/simple_smart_answer_edition.rb +2 -2
- data/app/models/tag.rb +4 -6
- data/app/models/travel_advice_edition.rb +18 -17
- data/app/models/user.rb +8 -10
- data/app/models/workflow.rb +4 -4
- data/app/traits/taggable.rb +1 -2
- data/config/mongoid.yml +8 -5
- data/govuk_content_models.gemspec +12 -10
- data/jenkins.sh +3 -0
- data/lib/govuk_content_models/action_processors/assign_processor.rb +1 -1
- data/lib/govuk_content_models/action_processors/new_version_processor.rb +2 -0
- data/lib/govuk_content_models/presentation_toggles.rb +48 -3
- data/lib/govuk_content_models/require_all.rb +3 -2
- data/lib/govuk_content_models/test_helpers/factories.rb +8 -3
- data/lib/govuk_content_models/version.rb +1 -1
- data/test/models/artefact_test.rb +9 -9
- data/test/models/business_support_edition_test.rb +19 -22
- data/test/models/campaign_edition_test.rb +12 -11
- data/test/models/completed_transaction_edition_test.rb +79 -0
- data/test/models/downtime_test.rb +1 -1
- data/test/models/edition_test.rb +23 -9
- data/test/models/help_page_edition_test.rb +17 -12
- data/test/models/licence_edition_test.rb +9 -8
- data/test/models/local_transaction_edition_test.rb +11 -7
- data/test/models/parted_test.rb +8 -0
- data/test/models/prerendered_entity_tests.rb +4 -4
- data/test/models/tag_test.rb +1 -8
- data/test/models/travel_advice_edition_test.rb +3 -1
- data/test/models/user_test.rb +1 -1
- data/test/models/video_edition_test.rb +1 -1
- data/test/models/workflow_test.rb +26 -26
- data/test/test_helper.rb +4 -1
- metadata +66 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 92694115f4161b92997ef39dda8faf21ffe830fa
|
|
4
|
+
data.tar.gz: 16a4fc4c0c45804fe4d34ed799958f98e88d18ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dfae23fecd0faa01072c0ba78e24206d747fa9a2d0823b6cdd5de88c42798d973242651058209d4cd903ecc31dfae8b356c037284349a8974516e11d7487902f
|
|
7
|
+
data.tar.gz: 304f70288d4261f7c5cd3ec21ecb2383c5dc6880b896df083df5e2df45a47bbb1286e8aa6d95c1e1c27445b6792d90a29d52bf0a0a17f77add414bb8ea88df09
|
data/CHANGELOG.md
CHANGED
data/app/models/artefact.rb
CHANGED
|
@@ -49,17 +49,17 @@ class Artefact
|
|
|
49
49
|
# - every future artefact will be created with a content id
|
|
50
50
|
field "content_id", type: String
|
|
51
51
|
|
|
52
|
-
index
|
|
52
|
+
index({ slug: 1 }, unique: true)
|
|
53
53
|
|
|
54
54
|
# This index allows the `relatable_artefacts` method to use an index-covered
|
|
55
55
|
# query, so it doesn't have to load each of the artefacts.
|
|
56
|
-
index
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
index name: 1,
|
|
57
|
+
state: 1,
|
|
58
|
+
kind: 1,
|
|
59
|
+
_type: 1,
|
|
60
|
+
_id: 1
|
|
61
61
|
|
|
62
|
-
scope :not_archived, where(:state.nin => ["archived"])
|
|
62
|
+
scope :not_archived, lambda { where(:state.nin => ["archived"]) }
|
|
63
63
|
|
|
64
64
|
MAXIMUM_RELATED_ITEMS = 8
|
|
65
65
|
|
|
@@ -143,7 +143,7 @@ class Artefact
|
|
|
143
143
|
}.tap { |h| h.default_proc = -> _, k { k } }.freeze
|
|
144
144
|
|
|
145
145
|
has_and_belongs_to_many :related_artefacts, class_name: "Artefact"
|
|
146
|
-
embeds_many :actions, class_name: "ArtefactAction", order: :
|
|
146
|
+
embeds_many :actions, class_name: "ArtefactAction", order: { created_at: :asc }
|
|
147
147
|
|
|
148
148
|
embeds_many :external_links, class_name: "ArtefactExternalLink"
|
|
149
149
|
accepts_nested_attributes_for :external_links, :allow_destroy => true,
|
|
@@ -168,11 +168,11 @@ class Artefact
|
|
|
168
168
|
|
|
169
169
|
scope :relatable_items, proc {
|
|
170
170
|
where(:kind.ne => "completed_transaction", :state.ne => "archived")
|
|
171
|
-
.order_by(
|
|
171
|
+
.order_by(name: :asc)
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
def self.in_alphabetical_order
|
|
175
|
-
order_by(
|
|
175
|
+
order_by(name: :asc)
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
def self.find_by_slug(s)
|
|
@@ -302,8 +302,6 @@ class Artefact
|
|
|
302
302
|
|
|
303
303
|
def self.from_param(slug_or_id)
|
|
304
304
|
find_by_slug(slug_or_id) || find(slug_or_id)
|
|
305
|
-
rescue BSON::InvalidObjectId
|
|
306
|
-
raise Mongoid::Errors::DocumentNotFound.new(self, slug_or_id)
|
|
307
305
|
end
|
|
308
306
|
|
|
309
307
|
def update_attributes_as(user, *args)
|
|
@@ -371,7 +369,11 @@ class Artefact
|
|
|
371
369
|
end
|
|
372
370
|
|
|
373
371
|
def snapshot
|
|
374
|
-
attributes
|
|
372
|
+
attributes
|
|
373
|
+
.except("_id", "created_at", "updated_at", "actions")
|
|
374
|
+
.merge(
|
|
375
|
+
"related_artefact_ids" => self.related_artefact_ids
|
|
376
|
+
)
|
|
375
377
|
end
|
|
376
378
|
|
|
377
379
|
def need_id=(new_need_id)
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
require "edition"
|
|
3
3
|
|
|
4
4
|
class BusinessSupportEdition < Edition
|
|
5
|
-
|
|
6
|
-
include Mongoid::MultiParameterAttributes
|
|
7
|
-
|
|
8
5
|
field :short_description, type: String
|
|
9
6
|
field :body, type: String
|
|
10
7
|
field :min_value, type: Integer
|
|
@@ -40,7 +37,7 @@ class BusinessSupportEdition < Edition
|
|
|
40
37
|
validates :min_value, :max_value, :max_employees, :numericality => {:allow_nil => true, :only_integer => true}
|
|
41
38
|
|
|
42
39
|
scope :for_facets, lambda { |facets|
|
|
43
|
-
where(
|
|
40
|
+
where("$and" => facets_criteria(facets)).order_by(priority: :desc, title: :asc)
|
|
44
41
|
}
|
|
45
42
|
|
|
46
43
|
|
data/app/models/curated_list.rb
CHANGED
data/app/models/edition.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require "traits/recordable_actions"
|
|
2
1
|
require "workflow"
|
|
3
2
|
|
|
4
3
|
class Edition
|
|
@@ -36,10 +35,10 @@ class Edition
|
|
|
36
35
|
|
|
37
36
|
# state_machine comes from Workflow
|
|
38
37
|
state_machine.states.map(&:name).each do |state|
|
|
39
|
-
scope state, where(state: state)
|
|
38
|
+
scope state, lambda { where(state: state) }
|
|
40
39
|
end
|
|
41
|
-
scope :archived_or_published, where(:state.in =>
|
|
42
|
-
scope :in_progress, where(:state.nin =>
|
|
40
|
+
scope :archived_or_published, lambda { where(:state.in => %w(archived published)) }
|
|
41
|
+
scope :in_progress, lambda { where(:state.nin => %w(archived published)) }
|
|
43
42
|
scope :assigned_to, lambda { |user|
|
|
44
43
|
if user
|
|
45
44
|
where(assigned_to_id: user.id)
|
|
@@ -50,7 +49,7 @@ class Edition
|
|
|
50
49
|
scope :major_updates, lambda { where(major_change: true) }
|
|
51
50
|
|
|
52
51
|
validates :title, presence: true
|
|
53
|
-
validates :version_number, presence: true, uniqueness: {scope: :panopticon_id}
|
|
52
|
+
validates :version_number, presence: true, uniqueness: { scope: :panopticon_id }
|
|
54
53
|
validates :panopticon_id, presence: true
|
|
55
54
|
validates_with SafeHtml
|
|
56
55
|
validates_with LinkValidator, on: :update, unless: :archived?
|
|
@@ -60,11 +59,11 @@ class Edition
|
|
|
60
59
|
before_save :check_for_archived_artefact
|
|
61
60
|
before_destroy :destroy_artefact
|
|
62
61
|
|
|
63
|
-
index
|
|
64
|
-
index
|
|
65
|
-
index
|
|
66
|
-
index
|
|
67
|
-
index
|
|
62
|
+
index assigned_to_id: 1
|
|
63
|
+
index({ panopticon_id: 1, version_number: 1 }, unique: true)
|
|
64
|
+
index state: 1
|
|
65
|
+
index created_at: 1
|
|
66
|
+
index updated_at: 1
|
|
68
67
|
|
|
69
68
|
alias_method :admin_list_title, :title
|
|
70
69
|
|
|
@@ -81,11 +80,11 @@ class Edition
|
|
|
81
80
|
end
|
|
82
81
|
|
|
83
82
|
def previous_siblings
|
|
84
|
-
siblings.where(:version_number.lt => version_number)
|
|
83
|
+
siblings.where(:version_number.lt => version_number).order(version_number: "asc")
|
|
85
84
|
end
|
|
86
85
|
|
|
87
86
|
def subsequent_siblings
|
|
88
|
-
siblings.where(:version_number.gt => version_number)
|
|
87
|
+
siblings.where(:version_number.gt => version_number).order(version_number: "asc")
|
|
89
88
|
end
|
|
90
89
|
|
|
91
90
|
def latest_edition?
|
|
@@ -230,7 +229,7 @@ class Edition
|
|
|
230
229
|
|
|
231
230
|
def self.find_or_create_from_panopticon_data(panopticon_id, importing_user)
|
|
232
231
|
existing_publication = Edition.where(panopticon_id: panopticon_id)
|
|
233
|
-
|
|
232
|
+
.order_by(version_number: :desc).first
|
|
234
233
|
return existing_publication if existing_publication
|
|
235
234
|
|
|
236
235
|
raise "Artefact not found" unless metadata = Artefact.find(panopticon_id)
|
|
@@ -245,11 +244,11 @@ class Edition
|
|
|
245
244
|
scope = where(slug: slug)
|
|
246
245
|
|
|
247
246
|
if edition.present? and edition == "latest"
|
|
248
|
-
scope.order_by(:
|
|
247
|
+
scope.order_by(version_number: :asc).last
|
|
249
248
|
elsif edition.present?
|
|
250
249
|
scope.where(version_number: edition).first
|
|
251
250
|
else
|
|
252
|
-
scope.where(state: "published").order(version_number:
|
|
251
|
+
scope.where(state: "published").order(version_number: :desc).first
|
|
253
252
|
end
|
|
254
253
|
end
|
|
255
254
|
|
|
@@ -24,8 +24,11 @@ class LicenceEdition < Edition
|
|
|
24
24
|
|
|
25
25
|
private
|
|
26
26
|
def licence_identifier_unique
|
|
27
|
-
if self.class.
|
|
28
|
-
|
|
27
|
+
if self.class.where(
|
|
28
|
+
:state.ne => 'archived',
|
|
29
|
+
:licence_identifier => licence_identifier,
|
|
30
|
+
:panopticon_id.ne => panopticon_id
|
|
31
|
+
).any?
|
|
29
32
|
errors.add(:licence_identifier, :taken)
|
|
30
33
|
end
|
|
31
34
|
end
|
|
@@ -46,7 +46,7 @@ class LocalAuthority
|
|
|
46
46
|
else
|
|
47
47
|
interactions.excludes(
|
|
48
48
|
lgil_code: LocalInteraction::LGIL_CODE_PROVIDING_INFORMATION
|
|
49
|
-
).order_by(
|
|
49
|
+
).order_by(lgil_code: :asc).first ||
|
|
50
50
|
interactions.where(
|
|
51
51
|
lgil_code: LocalInteraction::LGIL_CODE_PROVIDING_INFORMATION
|
|
52
52
|
).first
|
|
@@ -7,7 +7,7 @@ class OverviewDashboard
|
|
|
7
7
|
UNASSIGNED_KEY = "**UNASSIGNED**"
|
|
8
8
|
|
|
9
9
|
field :dashboard_type, type: String
|
|
10
|
-
field :result_group, type:
|
|
10
|
+
field :result_group, type: String
|
|
11
11
|
field :count, type: Integer
|
|
12
12
|
field :draft, type: Integer
|
|
13
13
|
field :amends_needed, type: Integer
|
data/app/models/part.rb
CHANGED
|
@@ -7,7 +7,7 @@ class Part
|
|
|
7
7
|
embedded_in :programme_edition
|
|
8
8
|
embedded_in :business_support_edition
|
|
9
9
|
|
|
10
|
-
scope :in_order, order_by(:
|
|
10
|
+
scope :in_order, lambda { order_by(order: :asc) }
|
|
11
11
|
|
|
12
12
|
field :order, type: Integer
|
|
13
13
|
field :title, type: String
|
|
@@ -20,7 +20,7 @@ class Part
|
|
|
20
20
|
validates_presence_of :title
|
|
21
21
|
validates_presence_of :slug
|
|
22
22
|
validates_exclusion_of :slug, in: ["video"], message: "Can not be video"
|
|
23
|
-
validates_format_of :slug, with:
|
|
23
|
+
validates_format_of :slug, with: /\A[a-z0-9\-]+\Z/i
|
|
24
24
|
validates_with SafeHtml
|
|
25
25
|
validates_with LinkValidator
|
|
26
26
|
end
|
data/app/models/parted.rb
CHANGED
|
@@ -12,7 +12,7 @@ class SimpleSmartAnswerEdition < Edition
|
|
|
12
12
|
field :next_node, type: String
|
|
13
13
|
field :order, type: Integer
|
|
14
14
|
|
|
15
|
-
default_scope order_by(
|
|
15
|
+
default_scope lambda { order_by(order: :asc) }
|
|
16
16
|
|
|
17
17
|
validates :label, :next_node, presence: true
|
|
18
18
|
validates :slug, :format => {:with => /\A[a-z0-9-]+\z/}
|
|
@@ -33,7 +33,7 @@ class SimpleSmartAnswerEdition < Edition
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
# Workaround mongoid conflicting mods error
|
|
36
|
-
# See https://
|
|
36
|
+
# See https://jira.mongodb.org/browse/MONGOID-1220
|
|
37
37
|
# Override update_attributes so that nested nodes are updated individually.
|
|
38
38
|
# This get around the problem of mongoid issuing a query with conflicting modifications
|
|
39
39
|
# to the same document.
|
|
@@ -63,6 +63,6 @@ class SimpleSmartAnswerEdition < Edition
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
def destroy_in_attrs?(attrs)
|
|
66
|
-
attrs
|
|
66
|
+
attrs.delete('_destroy') == '1'
|
|
67
67
|
end
|
|
68
68
|
end
|
data/app/models/tag.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "safe_html"
|
|
2
2
|
require 'tag_id_validator'
|
|
3
|
-
require '
|
|
3
|
+
require 'state_machines-mongoid'
|
|
4
4
|
|
|
5
5
|
class Tag
|
|
6
6
|
include Mongoid::Document
|
|
@@ -16,16 +16,14 @@ class Tag
|
|
|
16
16
|
|
|
17
17
|
STATES = ['draft', 'live']
|
|
18
18
|
|
|
19
|
-
index :
|
|
20
|
-
index
|
|
21
|
-
index :
|
|
19
|
+
index tag_id: 1
|
|
20
|
+
index({ tag_id: 1, tag_type: 1 }, unique: true)
|
|
21
|
+
index tag_type: 1
|
|
22
22
|
|
|
23
23
|
validates_presence_of :tag_id, :title, :tag_type
|
|
24
24
|
validates_uniqueness_of :tag_id, scope: :tag_type
|
|
25
25
|
validates_with TagIdValidator
|
|
26
26
|
|
|
27
|
-
attr_protected :state
|
|
28
|
-
|
|
29
27
|
validates :state, inclusion: { in: STATES }
|
|
30
28
|
|
|
31
29
|
class MissingTags < RuntimeError
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'attachable'
|
|
2
2
|
require 'parted'
|
|
3
|
-
require '
|
|
3
|
+
require 'state_machines-mongoid'
|
|
4
4
|
require 'safe_html'
|
|
5
5
|
|
|
6
6
|
class TravelAdviceEdition
|
|
@@ -25,7 +25,7 @@ class TravelAdviceEdition
|
|
|
25
25
|
|
|
26
26
|
embeds_many :actions
|
|
27
27
|
|
|
28
|
-
index
|
|
28
|
+
index({ country_slug: 1, version_number: -1 }, unique: true)
|
|
29
29
|
|
|
30
30
|
attaches :image, :document
|
|
31
31
|
|
|
@@ -37,23 +37,23 @@ class TravelAdviceEdition
|
|
|
37
37
|
"avoid_all_travel_to_whole_country",
|
|
38
38
|
]
|
|
39
39
|
|
|
40
|
-
before_validation :populate_version_number, :
|
|
40
|
+
before_validation :populate_version_number, on: :create
|
|
41
41
|
|
|
42
42
|
validates_presence_of :country_slug, :title
|
|
43
43
|
validate :state_for_slug_unique
|
|
44
|
-
validates :version_number, :
|
|
44
|
+
validates :version_number, presence: true, uniqueness: { scope: :country_slug }
|
|
45
45
|
validate :alert_status_contains_valid_values
|
|
46
46
|
validate :first_version_cant_be_minor_update
|
|
47
47
|
validates_with SafeHtml
|
|
48
48
|
validates_with LinkValidator
|
|
49
49
|
|
|
50
|
-
scope :published, where(:
|
|
50
|
+
scope :published, lambda { where(state: "published") }
|
|
51
51
|
|
|
52
52
|
class << self; attr_accessor :fields_to_clone end
|
|
53
53
|
@fields_to_clone = [:title, :country_slug, :overview, :alert_status, :summary, :image_id, :document_id, :synonyms]
|
|
54
54
|
|
|
55
55
|
state_machine initial: :draft do
|
|
56
|
-
before_transition :
|
|
56
|
+
before_transition draft: :published do |edition, _|
|
|
57
57
|
if edition.minor_update
|
|
58
58
|
previous = edition.previous_version
|
|
59
59
|
edition.published_at = previous.published_at
|
|
@@ -73,12 +73,12 @@ class TravelAdviceEdition
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
event :archive do
|
|
76
|
-
transition all => :archived, :
|
|
76
|
+
transition all => :archived, unless: :archived?
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
state :published do
|
|
80
80
|
validate :cannot_edit_published
|
|
81
|
-
validates_presence_of :change_description, :
|
|
81
|
+
validates_presence_of :change_description, unless: :minor_update, message: "can't be blank on publish"
|
|
82
82
|
end
|
|
83
83
|
state :archived do
|
|
84
84
|
validate :cannot_edit_archived
|
|
@@ -104,7 +104,7 @@ class TravelAdviceEdition
|
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def build_action_as(user, action_type, comment = nil)
|
|
107
|
-
actions.build(:
|
|
107
|
+
actions.build(requester: user, request_type: action_type, comment: comment)
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
def publish_as(user)
|
|
@@ -113,7 +113,7 @@ class TravelAdviceEdition
|
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def previous_version
|
|
116
|
-
self.class.where(:
|
|
116
|
+
self.class.where(country_slug: self.country_slug, :version_number.lt => self.version_number).order_by(version_number: :desc).first
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
private
|
|
@@ -121,19 +121,20 @@ class TravelAdviceEdition
|
|
|
121
121
|
def state_for_slug_unique
|
|
122
122
|
if %w(published draft).include?(self.state) and
|
|
123
123
|
self.class.where(:_id.ne => id,
|
|
124
|
-
:
|
|
125
|
-
:
|
|
124
|
+
country_slug: country_slug,
|
|
125
|
+
state: state).any?
|
|
126
126
|
errors.add(:state, :taken)
|
|
127
127
|
end
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
def populate_version_number
|
|
131
131
|
if self.version_number.nil? and ! self.country_slug.nil? and ! self.country_slug.empty?
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
latest_edition = self.class.where(country_slug: self.country_slug).order_by(version_number: :desc).first
|
|
133
|
+
self.version_number = if latest_edition
|
|
134
|
+
latest_edition.version_number + 1
|
|
135
|
+
else
|
|
136
|
+
1
|
|
137
|
+
end
|
|
137
138
|
end
|
|
138
139
|
end
|
|
139
140
|
|
data/app/models/user.rb
CHANGED
|
@@ -24,16 +24,14 @@ class User
|
|
|
24
24
|
field "disabled", type: Boolean, default: false
|
|
25
25
|
field "organisation_content_id", type: String
|
|
26
26
|
|
|
27
|
-
index
|
|
28
|
-
index
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
scope :enabled, any_of({ :disabled.exists => false },
|
|
36
|
-
{ :disabled.in => [false, nil] })
|
|
27
|
+
index({ uid: 1 }, unique: true)
|
|
28
|
+
index disabled: 1
|
|
29
|
+
|
|
30
|
+
scope :alphabetized, lambda { order_by(name: :asc) }
|
|
31
|
+
scope :enabled, lambda {
|
|
32
|
+
any_of({ :disabled.exists => false },
|
|
33
|
+
{ :disabled.in => [false, nil] }) # rubocop:disable Style/BracesAroundHashParameters
|
|
34
|
+
}
|
|
37
35
|
|
|
38
36
|
def to_s
|
|
39
37
|
name || email || ""
|
data/app/models/workflow.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require "
|
|
1
|
+
require "state_machines-mongoid"
|
|
2
2
|
|
|
3
3
|
module Workflow
|
|
4
4
|
class CannotDeletePublishedPublication < RuntimeError; end
|
|
@@ -117,7 +117,7 @@ module Workflow
|
|
|
117
117
|
|
|
118
118
|
def denormalise_users!
|
|
119
119
|
new_assignee = assigned_to.try(:name)
|
|
120
|
-
set(:
|
|
120
|
+
set(assignee: new_assignee) unless new_assignee == assignee
|
|
121
121
|
update_user_action("creator", [Action::CREATE, Action::NEW_VERSION])
|
|
122
122
|
update_user_action("publisher", [Action::PUBLISH])
|
|
123
123
|
update_user_action("archiver", [Action::ARCHIVE])
|
|
@@ -133,7 +133,7 @@ module Workflow
|
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
def mark_as_rejected
|
|
136
|
-
self.inc(:
|
|
136
|
+
self.inc(rejected_count: 1)
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
def previous_edition
|
|
@@ -185,7 +185,7 @@ module Workflow
|
|
|
185
185
|
# collections, but share a model and relationships with eg actions.
|
|
186
186
|
# Therefore, Panopticon might not find a user for an action.
|
|
187
187
|
if action.requester
|
|
188
|
-
set(property
|
|
188
|
+
set(property => action.requester.name)
|
|
189
189
|
end
|
|
190
190
|
end
|
|
191
191
|
end
|
data/app/traits/taggable.rb
CHANGED
data/config/mongoid.yml
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
test:
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
clients:
|
|
3
|
+
default:
|
|
4
|
+
database: govuk_content_shared_test
|
|
5
|
+
hosts:
|
|
6
|
+
- localhost
|
|
7
|
+
options:
|
|
8
|
+
use_activesupport_time_zone: true
|
|
9
|
+
log_level: :error
|
|
@@ -20,22 +20,24 @@ Gem::Specification.new do |gem|
|
|
|
20
20
|
|
|
21
21
|
gem.add_dependency "gds-sso", "~> 11.2"
|
|
22
22
|
gem.add_dependency "govspeak", "~> 3.1"
|
|
23
|
-
|
|
24
|
-
gem.add_dependency "
|
|
23
|
+
gem.add_dependency "mongoid", "~> 5.1"
|
|
24
|
+
gem.add_dependency "state_machines", "~> 0.4"
|
|
25
|
+
gem.add_dependency "state_machines-mongoid", "~> 0.1"
|
|
25
26
|
gem.add_dependency "plek"
|
|
26
|
-
gem.add_dependency "state_machine"
|
|
27
27
|
|
|
28
|
-
gem.add_development_dependency "database_cleaner", "
|
|
29
|
-
gem.add_development_dependency "factory_girl", "
|
|
28
|
+
gem.add_development_dependency "database_cleaner", "1.5.1"
|
|
29
|
+
gem.add_development_dependency "factory_girl", "4.5.0"
|
|
30
30
|
gem.add_development_dependency "gem_publisher", "1.2.0"
|
|
31
|
-
gem.add_development_dependency "mocha", "
|
|
31
|
+
gem.add_development_dependency "mocha", "1.1.0"
|
|
32
32
|
gem.add_development_dependency "multi_json"
|
|
33
33
|
gem.add_development_dependency "rake", "0.9.2.2"
|
|
34
|
-
gem.add_development_dependency "webmock", "1.
|
|
35
|
-
gem.add_development_dependency "shoulda-context", "1.
|
|
34
|
+
gem.add_development_dependency "webmock", "1.22.6"
|
|
35
|
+
gem.add_development_dependency "shoulda-context", "1.2.1"
|
|
36
36
|
gem.add_development_dependency "timecop", "0.5.9.2"
|
|
37
|
+
gem.add_development_dependency 'govuk-lint', '~> 0.5.1'
|
|
38
|
+
gem.add_development_dependency 'pry-byebug'
|
|
37
39
|
|
|
38
40
|
# The following are added to help bundler resolve dependencies
|
|
39
|
-
gem.add_development_dependency "rack", "~> 1.
|
|
40
|
-
gem.add_development_dependency "rails", "=
|
|
41
|
+
gem.add_development_dependency "rack", "~> 1.6.4"
|
|
42
|
+
gem.add_development_dependency "rails", "= 4.2.5.1"
|
|
41
43
|
end
|
data/jenkins.sh
CHANGED
|
@@ -4,6 +4,9 @@ rm -f Gemfile.lock
|
|
|
4
4
|
bundle install --path "${HOME}/bundles/${JOB_NAME}"
|
|
5
5
|
export GOVUK_APP_DOMAIN=dev.gov.uk
|
|
6
6
|
bundle exec rake
|
|
7
|
+
|
|
8
|
+
bundle exec govuk-lint-ruby --diff --cached --format clang app config lib test
|
|
9
|
+
|
|
7
10
|
if [[ -n "$PUBLISH_GEM" ]]; then
|
|
8
11
|
bundle exec rake publish_gem
|
|
9
12
|
fi
|