openstax_utilities 1.2.0 → 1.3.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 +8 -8
- data/lib/openstax/utilities/roar.rb +126 -0
- data/lib/openstax/utilities/version.rb +1 -1
- data/lib/openstax_utilities.rb +1 -0
- metadata +3 -3
- data/lib/openstax/utilities/development.rb +0 -8
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjA4NWY1YWY4YjIyMDBkYjAxODE0MDU4YjlmODE0ZTJjNjE5ZjkyMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWQyYzJkYzYxZjczNTcwYTY2MzYxMmM3NzU0NzQ1ZjU4MWQ0YWQwOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjQ3YWU0MzlhMmQzZjg1OWQwMDhiZTk0MzJmYmU3MDkxN2EzMmZmNjFiMTBl
|
10
|
+
ODA2ZGFjMDMzNjQ0NTRkYTM0NzZmMjIxNDkzNWNmNzIxMTFlMTQ0ZGRmZWE2
|
11
|
+
MDY3NTQ2ZjAzZGUwNzU0NTk0MDAwNGJmMjI4YTAwNjdkN2YxODE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTVkNDM3MGE5MGI2Y2M2YmU1NTVhMGE4MTU1MmFkNjQ1ZDRmN2Q5OGYwMTFh
|
14
|
+
ZmU1NjA0OTg4YzdiMmMwMGMwMTVkNDkwNWM0MGE3ZjMwMjJhZDJkZjdkMzEy
|
15
|
+
NjFjYjhjMjQ2YTNmNGQ1NDQxNGI0MDgzNDdiYjIyMGIyN2U0OTA=
|
@@ -0,0 +1,126 @@
|
|
1
|
+
# Copyright 2011-2014 Rice University. Licensed under the Affero General Public
|
2
|
+
# License version 3 or later. See the COPYRIGHT file for details.
|
3
|
+
|
4
|
+
module OpenStax
|
5
|
+
module Utilities
|
6
|
+
|
7
|
+
module Roar
|
8
|
+
|
9
|
+
def self.included(base)
|
10
|
+
base.send :extend, ClassMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_representer(represent_with, model=nil)
|
14
|
+
return nil if represent_with.nil?
|
15
|
+
if represent_with.is_a? Proc
|
16
|
+
represent_with.call(model)
|
17
|
+
else
|
18
|
+
represent_with
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def rest_get(model_klass, id, represent_with=nil)
|
23
|
+
@model = model_klass.find(id)
|
24
|
+
raise SecurityTransgression unless current_user.can_read?(@model)
|
25
|
+
respond_with @model, represent_with: get_representer(represent_with, @model)
|
26
|
+
end
|
27
|
+
|
28
|
+
def rest_update(model_klass, id, represent_with=nil)
|
29
|
+
@model = model_klass.find(id)
|
30
|
+
raise SecurityTransgression unless current_user.can_update?(@model)
|
31
|
+
consume!(@model, represent_with: get_representer(represent_with, @model))
|
32
|
+
|
33
|
+
if @model.save
|
34
|
+
head :no_content
|
35
|
+
else
|
36
|
+
render json: @model.errors, status: :unprocessable_entity
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def rest_create(model_klass)
|
41
|
+
@model = model_klass.new()
|
42
|
+
|
43
|
+
# Unlike the implications of the representable README, "consume!" can
|
44
|
+
# actually make changes to the database. See http://goo.gl/WVLBqA.
|
45
|
+
# We do want to consume before checking the permissions so we can know
|
46
|
+
# what we're dealing with, but if user doesn't have permission we don't
|
47
|
+
# want to have changed the DB. Wrap in a transaction to protect ourselves.
|
48
|
+
|
49
|
+
model_klass.transaction do
|
50
|
+
consume!(@model)
|
51
|
+
raise SecurityTransgression unless current_user.can_create?(@model)
|
52
|
+
end
|
53
|
+
|
54
|
+
if @model.save
|
55
|
+
respond_with @model
|
56
|
+
else
|
57
|
+
render json: @model.errors, status: :unprocessable_entity
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def rest_destroy(model_klass, id)
|
62
|
+
@model = model_klass.find(id)
|
63
|
+
raise SecurityTransgression unless current_user.can_destroy?(@model)
|
64
|
+
|
65
|
+
if @model.destroy
|
66
|
+
head :no_content
|
67
|
+
else
|
68
|
+
render json: @model.errors, status: :unprocessable_entity
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def standard_sort(model_klass)
|
73
|
+
# take array of all IDs or hash of id => position,
|
74
|
+
# regardless build up an array of all IDs in the right order and pass those to sort
|
75
|
+
|
76
|
+
new_positions = params['newPositions']
|
77
|
+
return head :no_content if new_positions.length == 0
|
78
|
+
|
79
|
+
# Can't have duplicate positions or IDs
|
80
|
+
unique_ids = new_positions.collect{|np| np['id']}.uniq
|
81
|
+
unique_positions = new_positions.collect{|np| np['position']}.uniq
|
82
|
+
|
83
|
+
return head :bad_request if unique_ids.length != new_positions.length
|
84
|
+
return head :bad_request if unique_positions.length != new_positions.length
|
85
|
+
|
86
|
+
first = model_klass.where(:id => new_positions[0]['id']).first
|
87
|
+
|
88
|
+
return head :not_found if first.blank?
|
89
|
+
|
90
|
+
originalOrdered = first.me_and_peers.ordered.all
|
91
|
+
|
92
|
+
originalOrdered.each do |item|
|
93
|
+
raise SecurityTransgression unless item.send(:container_column) == originalOrdered[0].send(:container_column) \
|
94
|
+
if item.respond_to?(:container_column)
|
95
|
+
raise SecurityTransgression unless current_user.can_sort?(item)
|
96
|
+
end
|
97
|
+
|
98
|
+
originalOrderedIds = originalOrdered.collect{|sc| sc.id}
|
99
|
+
|
100
|
+
newOrderedIds = Array.new(originalOrderedIds.size)
|
101
|
+
|
102
|
+
new_positions.each do |newPosition|
|
103
|
+
id = newPosition['id'].to_i
|
104
|
+
newOrderedIds[newPosition['position']] = id
|
105
|
+
originalOrderedIds.delete(id)
|
106
|
+
end
|
107
|
+
|
108
|
+
ptr = 0
|
109
|
+
for oldId in originalOrderedIds
|
110
|
+
while !newOrderedIds[ptr].nil?; ptr += 1; end
|
111
|
+
newOrderedIds[ptr] = oldId
|
112
|
+
end
|
113
|
+
|
114
|
+
begin
|
115
|
+
model_klass.sort!(newOrderedIds)
|
116
|
+
rescue Exception => e
|
117
|
+
return head :internal_server_error
|
118
|
+
end
|
119
|
+
|
120
|
+
head :no_content
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
data/lib/openstax_utilities.rb
CHANGED
@@ -18,6 +18,7 @@ require "openstax/utilities/network"
|
|
18
18
|
require "openstax/utilities/action_list"
|
19
19
|
require "openstax/utilities/acts_as_numberable"
|
20
20
|
require "openstax/utilities/delegate_access_control"
|
21
|
+
require "openstax/utilities/roar"
|
21
22
|
|
22
23
|
require "openstax/utilities/classy_helper"
|
23
24
|
require "openstax/utilities/helpers/misc"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstax_utilities
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JP Slavinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -67,7 +67,6 @@ files:
|
|
67
67
|
- lib/openstax/utilities/blocks/table_row_block.rb
|
68
68
|
- lib/openstax/utilities/classy_helper.rb
|
69
69
|
- lib/openstax/utilities/delegate_access_control.rb
|
70
|
-
- lib/openstax/utilities/development.rb
|
71
70
|
- lib/openstax/utilities/engine.rb
|
72
71
|
- lib/openstax/utilities/enum.rb
|
73
72
|
- lib/openstax/utilities/exceptions.rb
|
@@ -77,6 +76,7 @@ files:
|
|
77
76
|
- lib/openstax/utilities/helpers/misc.rb
|
78
77
|
- lib/openstax/utilities/helpers/partials.rb
|
79
78
|
- lib/openstax/utilities/network.rb
|
79
|
+
- lib/openstax/utilities/roar.rb
|
80
80
|
- lib/openstax/utilities/ruby.rb
|
81
81
|
- lib/openstax/utilities/settings.rb
|
82
82
|
- lib/openstax/utilities/text.rb
|