govuk_content_models 8.1.0 → 8.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/models/action.rb +13 -11
- data/app/models/artefact.rb +0 -1
- data/app/models/curated_list.rb +0 -1
- data/app/models/edition.rb +14 -10
- data/app/models/workflow.rb +47 -22
- data/app/models/workflow_actor.rb +36 -12
- data/lib/govuk_content_models/require_all.rb +6 -7
- data/lib/govuk_content_models/test_helpers/factories.rb +5 -0
- data/lib/govuk_content_models/version.rb +1 -1
- data/test/models/edition_scheduled_for_publishing_test.rb +84 -0
- data/test/models/edition_test.rb +18 -0
- data/test/models/workflow_actor_test.rb +28 -0
- data/test/models/workflow_test.rb +29 -0
- metadata +6 -4
data/app/models/action.rb
CHANGED
@@ -4,17 +4,19 @@ class Action
|
|
4
4
|
include Mongoid::Document
|
5
5
|
|
6
6
|
STATUS_ACTIONS = [
|
7
|
-
CREATE
|
8
|
-
REQUEST_REVIEW
|
9
|
-
APPROVE_REVIEW
|
10
|
-
APPROVE_FACT_CHECK
|
11
|
-
REQUEST_AMENDMENTS
|
12
|
-
SEND_FACT_CHECK
|
13
|
-
RECEIVE_FACT_CHECK
|
14
|
-
SKIP_FACT_CHECK
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
CREATE = "create",
|
8
|
+
REQUEST_REVIEW = "request_review",
|
9
|
+
APPROVE_REVIEW = "approve_review",
|
10
|
+
APPROVE_FACT_CHECK = "approve_fact_check",
|
11
|
+
REQUEST_AMENDMENTS = "request_amendments",
|
12
|
+
SEND_FACT_CHECK = "send_fact_check",
|
13
|
+
RECEIVE_FACT_CHECK = "receive_fact_check",
|
14
|
+
SKIP_FACT_CHECK = "skip_fact_check",
|
15
|
+
SCHEDULE_FOR_PUBLISHING = "schedule_for_publishing",
|
16
|
+
CANCEL_SCHEDULED_PUBLISHING = "cancel_scheduled_publishing",
|
17
|
+
PUBLISH = "publish",
|
18
|
+
ARCHIVE = "archive",
|
19
|
+
NEW_VERSION = "new_version",
|
18
20
|
]
|
19
21
|
|
20
22
|
NON_STATUS_ACTIONS = [
|
data/app/models/artefact.rb
CHANGED
data/app/models/curated_list.rb
CHANGED
data/app/models/edition.rb
CHANGED
@@ -13,6 +13,7 @@ class Edition
|
|
13
13
|
|
14
14
|
field :title, type: String
|
15
15
|
field :created_at, type: DateTime, default: lambda { Time.zone.now }
|
16
|
+
field :publish_at, type: DateTime
|
16
17
|
field :overview, type: String
|
17
18
|
field :alternative_title, type: String
|
18
19
|
field :slug, type: String
|
@@ -30,16 +31,12 @@ class Edition
|
|
30
31
|
|
31
32
|
belongs_to :assigned_to, class_name: "User"
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
scope :
|
38
|
-
scope :
|
39
|
-
scope :published, where(state: "published")
|
40
|
-
scope :archived, where(state: "archived")
|
41
|
-
scope :in_progress, where(:state.nin => ["archived", "published"])
|
42
|
-
scope :assigned_to, lambda { |user|
|
34
|
+
# state_machine comes from Workflow
|
35
|
+
state_machine.states.map(&:name).each do |state|
|
36
|
+
scope state, where(state: state)
|
37
|
+
end
|
38
|
+
scope :in_progress, where(:state.nin => ["archived", "published"])
|
39
|
+
scope :assigned_to, lambda { |user|
|
43
40
|
if user
|
44
41
|
where(assigned_to_id: user.id)
|
45
42
|
else
|
@@ -50,6 +47,7 @@ class Edition
|
|
50
47
|
validates :title, presence: true
|
51
48
|
validates :version_number, presence: true
|
52
49
|
validates :panopticon_id, presence: true
|
50
|
+
validate :publish_at_is_in_the_future
|
53
51
|
validates_with SafeHtml
|
54
52
|
|
55
53
|
before_save :check_for_archived_artefact
|
@@ -286,4 +284,10 @@ class Edition
|
|
286
284
|
Artefact.find(self.panopticon_id).destroy
|
287
285
|
end
|
288
286
|
end
|
287
|
+
|
288
|
+
private
|
289
|
+
|
290
|
+
def publish_at_is_in_the_future
|
291
|
+
errors.add(:publish_at, "can't be a time in the past") if publish_at.present? && publish_at < Time.zone.now
|
292
|
+
end
|
289
293
|
end
|
data/app/models/workflow.rb
CHANGED
@@ -22,6 +22,14 @@ module Workflow
|
|
22
22
|
edition.mark_as_rejected
|
23
23
|
end
|
24
24
|
|
25
|
+
before_transition on: :schedule_for_publishing do |edition, transition|
|
26
|
+
edition.publish_at = transition.args.first
|
27
|
+
end
|
28
|
+
|
29
|
+
before_transition on: [:publish, :cancel_scheduled_publishing] do |edition, transition|
|
30
|
+
edition.publish_at = nil
|
31
|
+
end
|
32
|
+
|
25
33
|
after_transition on: :publish do |edition, transition|
|
26
34
|
edition.was_published
|
27
35
|
end
|
@@ -60,8 +68,16 @@ module Workflow
|
|
60
68
|
transition fact_check: :fact_check_received
|
61
69
|
end
|
62
70
|
|
71
|
+
event :schedule_for_publishing do
|
72
|
+
transition ready: :scheduled_for_publishing
|
73
|
+
end
|
74
|
+
|
75
|
+
event :cancel_scheduled_publishing do
|
76
|
+
transition scheduled_for_publishing: :ready
|
77
|
+
end
|
78
|
+
|
63
79
|
event :publish do
|
64
|
-
transition ready: :published
|
80
|
+
transition [:ready, :scheduled_for_publishing] => :published
|
65
81
|
end
|
66
82
|
|
67
83
|
event :emergency_publish do
|
@@ -71,6 +87,10 @@ module Workflow
|
|
71
87
|
event :archive do
|
72
88
|
transition all => :archived, :unless => :archived?
|
73
89
|
end
|
90
|
+
|
91
|
+
state :scheduled_for_publishing do
|
92
|
+
validates_presence_of :publish_at
|
93
|
+
end
|
74
94
|
end
|
75
95
|
end
|
76
96
|
|
@@ -78,8 +98,10 @@ module Workflow
|
|
78
98
|
(self.actions.where(request_type: Action::APPROVE_FACT_CHECK).count > 0)
|
79
99
|
end
|
80
100
|
|
81
|
-
def
|
82
|
-
|
101
|
+
def status_text
|
102
|
+
text = human_state_name.capitalize
|
103
|
+
text += ' on ' + publish_at.strftime("%d/%m/%Y %H:%M") if scheduled_for_publishing?
|
104
|
+
text
|
83
105
|
end
|
84
106
|
|
85
107
|
def update_user_action(property, statuses)
|
@@ -146,26 +168,8 @@ module Workflow
|
|
146
168
|
self.actions.sort_by(&:created_at).reverse.find(&blk)
|
147
169
|
end
|
148
170
|
|
149
|
-
def not_editing_published_item
|
150
|
-
if changed? and ! state_changed?
|
151
|
-
if archived?
|
152
|
-
errors.add(:base, "Archived editions can't be edited")
|
153
|
-
end
|
154
|
-
if published?
|
155
|
-
changes_allowed_when_published = ["slug", "section",
|
156
|
-
"department", "business_proposition"]
|
157
|
-
illegal_changes = changes.keys - changes_allowed_when_published
|
158
|
-
if illegal_changes.empty?
|
159
|
-
# Allow it
|
160
|
-
else
|
161
|
-
errors.add(:base, "Published editions can't be edited")
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
171
|
def can_destroy?
|
168
|
-
! published?
|
172
|
+
! scheduled_for_publishing? && ! published? && ! archived?
|
169
173
|
end
|
170
174
|
|
171
175
|
def check_can_delete_and_notify
|
@@ -206,4 +210,25 @@ module Workflow
|
|
206
210
|
def in_progress?
|
207
211
|
! ["archived", "published"].include? self.state
|
208
212
|
end
|
213
|
+
|
214
|
+
private
|
215
|
+
|
216
|
+
def not_editing_published_item
|
217
|
+
if changed? and ! state_changed?
|
218
|
+
if archived?
|
219
|
+
errors.add(:base, "Archived editions can't be edited")
|
220
|
+
end
|
221
|
+
if scheduled_for_publishing? || published?
|
222
|
+
changes_allowed_when_published = ["slug", "section",
|
223
|
+
"department", "business_proposition"]
|
224
|
+
illegal_changes = changes.keys - changes_allowed_when_published
|
225
|
+
if illegal_changes.empty?
|
226
|
+
# Allow it
|
227
|
+
else
|
228
|
+
edition_description = published? ? 'Published editions' : 'Editions scheduled for publishing'
|
229
|
+
errors.add(:base, "#{edition_description} can't be edited")
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
209
234
|
end
|
@@ -6,8 +6,14 @@ require "programme_edition"
|
|
6
6
|
require "transaction_edition"
|
7
7
|
|
8
8
|
module WorkflowActor
|
9
|
-
SIMPLE_WORKFLOW_ACTIONS = %
|
10
|
-
|
9
|
+
SIMPLE_WORKFLOW_ACTIONS = %w(
|
10
|
+
request_review
|
11
|
+
request_amendments
|
12
|
+
approve_review
|
13
|
+
approve_fact_check
|
14
|
+
archive
|
15
|
+
cancel_scheduled_publishing
|
16
|
+
)
|
11
17
|
|
12
18
|
def record_action(edition, type, options={})
|
13
19
|
type = Action.const_get(type.to_s.upcase)
|
@@ -27,8 +33,8 @@ module WorkflowActor
|
|
27
33
|
respond_to?(:"can_#{action}?") ? __send__(:"can_#{action}?", edition) : true
|
28
34
|
end
|
29
35
|
|
30
|
-
def take_action(edition, action, details = {})
|
31
|
-
if can_take_action(action, edition)
|
36
|
+
def take_action(edition, action, details = {}, action_parameters = [])
|
37
|
+
if can_take_action(action, edition) && edition.send(action, *action_parameters)
|
32
38
|
record_action(edition, action, details)
|
33
39
|
edition
|
34
40
|
else
|
@@ -36,8 +42,8 @@ module WorkflowActor
|
|
36
42
|
end
|
37
43
|
end
|
38
44
|
|
39
|
-
def take_action!(edition, action, details = {})
|
40
|
-
edition = take_action(edition, action, details)
|
45
|
+
def take_action!(edition, action, details = {}, action_parameters = [])
|
46
|
+
edition = take_action(edition, action, details, action_parameters)
|
41
47
|
edition.save if edition
|
42
48
|
end
|
43
49
|
|
@@ -109,6 +115,11 @@ module WorkflowActor
|
|
109
115
|
end
|
110
116
|
end
|
111
117
|
|
118
|
+
def schedule_for_publishing(edition, details)
|
119
|
+
publish_at = details.delete(:publish_at)
|
120
|
+
take_action(edition, __method__, details, [publish_at])
|
121
|
+
end
|
122
|
+
|
112
123
|
def publish(edition, details)
|
113
124
|
if edition.published_edition
|
114
125
|
details.merge!({ diff: edition.edition_changes })
|
@@ -118,16 +129,16 @@ module WorkflowActor
|
|
118
129
|
end
|
119
130
|
|
120
131
|
def can_approve_review?(edition)
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
132
|
+
requester_different?(edition)
|
133
|
+
end
|
134
|
+
|
135
|
+
def can_request_amendments?(edition)
|
136
|
+
if edition.in_review?
|
137
|
+
requester_different?(edition)
|
126
138
|
else
|
127
139
|
true
|
128
140
|
end
|
129
141
|
end
|
130
|
-
alias :can_request_amendments? :can_approve_review?
|
131
142
|
|
132
143
|
def assign(edition, recipient)
|
133
144
|
edition.assigned_to_id = recipient.id
|
@@ -138,4 +149,17 @@ module WorkflowActor
|
|
138
149
|
edition.save! and edition.reload
|
139
150
|
record_action edition, __method__, recipient: recipient
|
140
151
|
end
|
152
|
+
|
153
|
+
private
|
154
|
+
|
155
|
+
def requester_different?(edition)
|
156
|
+
# To accommodate latest_status_action being nil, we'll always return true in
|
157
|
+
# those cases
|
158
|
+
# This is intended as a v.temporary fix until we can remedy the root cause
|
159
|
+
if edition.latest_status_action
|
160
|
+
edition.latest_status_action.requester_id != self.id
|
161
|
+
else
|
162
|
+
true
|
163
|
+
end
|
164
|
+
end
|
141
165
|
end
|
@@ -3,13 +3,12 @@ require "active_model"
|
|
3
3
|
require "mongoid"
|
4
4
|
require "govuk_content_models"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
root_path = "#{File.dirname(__FILE__)}/../.."
|
7
|
+
%w[ app/models app/validators app/traits lib ].each do |path|
|
8
|
+
full_path = File.expand_path("#{root_path}/#{path}")
|
9
9
|
$LOAD_PATH.unshift full_path unless $LOAD_PATH.include?(full_path)
|
10
10
|
end
|
11
11
|
|
12
|
-
# Require
|
13
|
-
Dir.glob("#{
|
14
|
-
|
15
|
-
end
|
12
|
+
# Require validators first, then other files in app
|
13
|
+
Dir.glob("#{root_path}/app/validators/*.rb").each {|f| require f }
|
14
|
+
Dir.glob("#{root_path}/app/**/*.rb").each {|f| require f }
|
@@ -81,6 +81,11 @@ FactoryGirl.define do
|
|
81
81
|
section "test:subsection test"
|
82
82
|
|
83
83
|
association :assigned_to, factory: :user
|
84
|
+
|
85
|
+
trait :scheduled_for_publishing do
|
86
|
+
state 'scheduled_for_publishing'
|
87
|
+
publish_at 1.day.from_now
|
88
|
+
end
|
84
89
|
end
|
85
90
|
factory :answer_edition, parent: :edition do
|
86
91
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class EditionScheduledForPublishingTest < ActiveSupport::TestCase
|
4
|
+
context "#schedule_for_publishing" do
|
5
|
+
context "when publish_at is not specified" do
|
6
|
+
setup do
|
7
|
+
@edition = FactoryGirl.create(:edition, state: 'ready')
|
8
|
+
@edition.schedule_for_publishing
|
9
|
+
@edition.reload
|
10
|
+
end
|
11
|
+
|
12
|
+
should "return an error" do
|
13
|
+
assert_includes @edition.errors[:publish_at], "can't be blank"
|
14
|
+
end
|
15
|
+
|
16
|
+
should "not complete the transition to scheduled_for_publishing" do
|
17
|
+
assert_equal 'ready', @edition.state
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when publish_at is specified" do
|
22
|
+
setup do
|
23
|
+
@edition = FactoryGirl.create(:edition, state: 'ready')
|
24
|
+
@publish_when = 1.day.from_now
|
25
|
+
@edition.schedule_for_publishing(@publish_when)
|
26
|
+
@edition.reload
|
27
|
+
end
|
28
|
+
|
29
|
+
should "save publish_at against the edition" do
|
30
|
+
assert_equal @publish_when.to_i, @edition.publish_at.to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
should "complete the transition to scheduled_for_publishing" do
|
34
|
+
assert_equal 'scheduled_for_publishing', @edition.state
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when scheduled_for_publishing" do
|
40
|
+
should "not allow editing fields like title" do
|
41
|
+
edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
42
|
+
|
43
|
+
edition.title = 'a new title'
|
44
|
+
|
45
|
+
refute edition.valid?
|
46
|
+
assert_includes edition.errors.full_messages, "Editions scheduled for publishing can't be edited"
|
47
|
+
end
|
48
|
+
|
49
|
+
should "allow editing fields like section" do
|
50
|
+
edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
51
|
+
|
52
|
+
edition.section = 'new section'
|
53
|
+
|
54
|
+
assert edition.save
|
55
|
+
assert_equal edition.reload.section, 'new section'
|
56
|
+
end
|
57
|
+
|
58
|
+
should "return false for #can_destroy?" do
|
59
|
+
edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
60
|
+
refute edition.can_destroy?
|
61
|
+
end
|
62
|
+
|
63
|
+
should "allow transition to published state" do
|
64
|
+
edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
65
|
+
assert edition.can_publish?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "#cancel_scheduled_publishing" do
|
70
|
+
setup do
|
71
|
+
@edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
72
|
+
@edition.cancel_scheduled_publishing
|
73
|
+
@edition.reload
|
74
|
+
end
|
75
|
+
|
76
|
+
should "remove the publish_at stored against the edition" do
|
77
|
+
assert_nil @edition.publish_at
|
78
|
+
end
|
79
|
+
|
80
|
+
should "complete the transition back to ready" do
|
81
|
+
assert_equal 'ready', @edition.state
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/test/models/edition_test.rb
CHANGED
@@ -46,6 +46,15 @@ class EditionTest < ActiveSupport::TestCase
|
|
46
46
|
assert a.errors[:title].any?
|
47
47
|
end
|
48
48
|
|
49
|
+
context "#publish_at" do
|
50
|
+
should "not be a time in the past" do
|
51
|
+
edition = FactoryGirl.build(:edition, publish_at: 1.minute.ago)
|
52
|
+
|
53
|
+
refute edition.valid?
|
54
|
+
assert_includes edition.errors[:publish_at], "can't be a time in the past"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
49
58
|
test "it should give a friendly (legacy supporting) description of its format" do
|
50
59
|
a = LocalTransactionEdition.new
|
51
60
|
assert_equal "LocalTransaction", a.format
|
@@ -629,6 +638,15 @@ class EditionTest < ActiveSupport::TestCase
|
|
629
638
|
assert_equal 2, GuideEdition.where(panopticon_id: edition.panopticon_id, state: "archived").count
|
630
639
|
end
|
631
640
|
|
641
|
+
test "when an edition is published, publish_at is cleared" do
|
642
|
+
user = FactoryGirl.create(:user)
|
643
|
+
edition = FactoryGirl.create(:edition, :scheduled_for_publishing)
|
644
|
+
|
645
|
+
user.publish edition, comment: "First publication"
|
646
|
+
|
647
|
+
assert_nil edition.reload.publish_at
|
648
|
+
end
|
649
|
+
|
632
650
|
test "edition can return latest status action of a specified request type" do
|
633
651
|
edition = FactoryGirl.create(:guide_edition, panopticon_id: @artefact.id, state: "draft")
|
634
652
|
user = User.create(name: "George")
|
@@ -58,4 +58,32 @@ class WorkflowActorTest < ActiveSupport::TestCase
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
context "#schedule_for_publishing" do
|
62
|
+
setup do
|
63
|
+
@user = FactoryGirl.build(:user)
|
64
|
+
@publish_at = 1.day.from_now
|
65
|
+
@activity_details = { publish_at: @publish_at, comment: "Go schedule !" }
|
66
|
+
end
|
67
|
+
|
68
|
+
should "return false when scheduling an already published edition" do
|
69
|
+
edition = FactoryGirl.create(:edition, state: 'published')
|
70
|
+
refute @user.schedule_for_publishing(edition, @activity_details)
|
71
|
+
end
|
72
|
+
|
73
|
+
should "schedule an edition for publishing if it is ready" do
|
74
|
+
edition = FactoryGirl.create(:edition, state: 'ready')
|
75
|
+
|
76
|
+
edition = @user.schedule_for_publishing(edition, @activity_details)
|
77
|
+
|
78
|
+
assert edition.scheduled_for_publishing?
|
79
|
+
assert_equal @publish_at.to_i, edition.publish_at.to_i
|
80
|
+
end
|
81
|
+
|
82
|
+
should "record the action" do
|
83
|
+
edition = FactoryGirl.create(:edition, state: 'ready')
|
84
|
+
@user.expects(:record_action).with(edition, :schedule_for_publishing, { comment: "Go schedule !" })
|
85
|
+
|
86
|
+
@user.schedule_for_publishing(edition, @activity_details)
|
87
|
+
end
|
88
|
+
end
|
61
89
|
end
|
@@ -56,6 +56,19 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
56
56
|
return user, transaction
|
57
57
|
end
|
58
58
|
|
59
|
+
context "#status_text" do
|
60
|
+
should "return a capitalized text representation of the state" do
|
61
|
+
assert_equal 'Ready', FactoryGirl.build(:edition, state: 'ready').status_text
|
62
|
+
end
|
63
|
+
|
64
|
+
should "also return scheduled publishing time when the state is scheduled for publishing" do
|
65
|
+
edition = FactoryGirl.build(:edition, :scheduled_for_publishing)
|
66
|
+
expected_status_text = 'Scheduled for publishing on ' + edition.publish_at.strftime("%d/%m/%Y %H:%M")
|
67
|
+
|
68
|
+
assert_equal expected_status_text, edition.status_text
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
59
72
|
test "permits the creation of new editions" do
|
60
73
|
user, transaction = template_user_and_published_transaction
|
61
74
|
assert transaction.persisted?
|
@@ -219,6 +232,7 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
219
232
|
assert edition.can_request_review?
|
220
233
|
user.request_review(edition,{comment: "Review this guide please."})
|
221
234
|
refute user.request_amendments(edition, {comment: "Well Done, but work harder"})
|
235
|
+
refute user.can_request_amendments?(edition)
|
222
236
|
end
|
223
237
|
|
224
238
|
test "user should not be able to okay a guide they requested review for" do
|
@@ -347,4 +361,19 @@ class WorkflowTest < ActiveSupport::TestCase
|
|
347
361
|
bs.valid?
|
348
362
|
assert_equal "Published editions can't be edited", bs.errors[:base].first
|
349
363
|
end
|
364
|
+
|
365
|
+
test "User can request amendments for an edition they just approved" do
|
366
|
+
user_1, user_2 = template_users
|
367
|
+
edition = user_1.create_edition(:answer, panopticon_id: @artefact.id, title: "Answer foo", slug: "answer-foo")
|
368
|
+
edition.body = "body content"
|
369
|
+
user_1.assign(edition, user_2)
|
370
|
+
user_1.request_review(edition,{comment: "Review this guide please."})
|
371
|
+
assert edition.in_review?
|
372
|
+
|
373
|
+
user_2.approve_review(edition, {comment: "Looks good just now"})
|
374
|
+
assert edition.ready?
|
375
|
+
|
376
|
+
user_2.request_amendments(edition, {comment: "More work needed"})
|
377
|
+
assert edition.amends_needed?
|
378
|
+
end
|
350
379
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_content_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.
|
4
|
+
version: 8.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bson_ext
|
@@ -417,6 +417,7 @@ files:
|
|
417
417
|
- test/models/business_support_edition_test.rb
|
418
418
|
- test/models/campaign_edition_test.rb
|
419
419
|
- test/models/curated_list_test.rb
|
420
|
+
- test/models/edition_scheduled_for_publishing_test.rb
|
420
421
|
- test/models/edition_test.rb
|
421
422
|
- test/models/fact_check_address_test.rb
|
422
423
|
- test/models/help_page_edition_test.rb
|
@@ -457,7 +458,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
457
458
|
version: '0'
|
458
459
|
segments:
|
459
460
|
- 0
|
460
|
-
hash:
|
461
|
+
hash: 4108751101128219238
|
461
462
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
462
463
|
none: false
|
463
464
|
requirements:
|
@@ -466,7 +467,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
466
467
|
version: '0'
|
467
468
|
segments:
|
468
469
|
- 0
|
469
|
-
hash:
|
470
|
+
hash: 4108751101128219238
|
470
471
|
requirements: []
|
471
472
|
rubyforge_project:
|
472
473
|
rubygems_version: 1.8.23
|
@@ -490,6 +491,7 @@ test_files:
|
|
490
491
|
- test/models/business_support_edition_test.rb
|
491
492
|
- test/models/campaign_edition_test.rb
|
492
493
|
- test/models/curated_list_test.rb
|
494
|
+
- test/models/edition_scheduled_for_publishing_test.rb
|
493
495
|
- test/models/edition_test.rb
|
494
496
|
- test/models/fact_check_address_test.rb
|
495
497
|
- test/models/help_page_edition_test.rb
|