shamu 0.0.21 → 0.0.24
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/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/Gemfile +3 -1
- data/Gemfile.lock +70 -69
- data/app/README +1 -0
- data/config/environment.rb +1 -0
- data/lib/shamu/attributes.rb +26 -0
- data/lib/shamu/attributes/equality.rb +10 -1
- data/lib/shamu/entities/entity.rb +11 -0
- data/lib/shamu/entities/list_scope.rb +3 -0
- data/lib/shamu/entities/list_scope/sorting.rb +6 -1
- data/lib/shamu/entities/list_scope/window_paging.rb +1 -1
- data/lib/shamu/entities/null_entity.rb +18 -12
- data/lib/shamu/entities/opaque_id.rb +9 -8
- data/lib/shamu/error.rb +24 -3
- data/lib/shamu/events/active_record/migration.rb +0 -2
- data/lib/shamu/events/active_record/service.rb +3 -1
- data/lib/shamu/events/events_service.rb +2 -2
- data/lib/shamu/events/in_memory/async_service.rb +4 -2
- data/lib/shamu/events/in_memory/service.rb +3 -1
- data/lib/shamu/features/features_service.rb +3 -1
- data/lib/shamu/features/support.rb +1 -1
- data/lib/shamu/json_api/rails/controller.rb +1 -1
- data/lib/shamu/locale/en.yml +14 -2
- data/lib/shamu/security/active_record_policy.rb +2 -1
- data/lib/shamu/security/error.rb +1 -1
- data/lib/shamu/security/policy.rb +14 -4
- data/lib/shamu/security/principal.rb +22 -2
- data/lib/shamu/security/roles.rb +4 -3
- data/lib/shamu/services.rb +3 -1
- data/lib/shamu/services/active_record.rb +2 -1
- data/lib/shamu/services/active_record_crud.rb +43 -19
- data/lib/shamu/services/lazy_association.rb +50 -18
- data/lib/shamu/services/observable_support.rb +73 -0
- data/lib/shamu/services/observed_request.rb +76 -0
- data/lib/shamu/services/request.rb +12 -0
- data/lib/shamu/services/request_support.rb +24 -2
- data/lib/shamu/services/result.rb +62 -1
- data/lib/shamu/services/service.rb +58 -33
- data/lib/shamu/sessions/cookie_store.rb +3 -1
- data/lib/shamu/sessions/session_store.rb +2 -2
- data/lib/shamu/version.rb +1 -1
- data/shamu.gemspec +1 -1
- data/spec/lib/shamu/entities/entity_lookup_service_spec.rb +1 -1
- data/spec/lib/shamu/entities/list_scope/sorting_spec.rb +1 -1
- data/spec/lib/shamu/entities/null_entity_spec.rb +6 -1
- data/spec/lib/shamu/entities/opaque_id_spec.rb +13 -6
- data/spec/lib/shamu/entities/static_repository_spec.rb +2 -2
- data/spec/lib/shamu/rails/entity_spec.rb +1 -1
- data/spec/lib/shamu/rails/features_spec.rb +1 -1
- data/spec/lib/shamu/security/principal_spec.rb +25 -0
- data/spec/lib/shamu/services/active_record_crud_spec.rb +39 -4
- data/spec/lib/shamu/services/lazy_association_spec.rb +19 -6
- data/spec/lib/shamu/services/observable_support_spec.rb +55 -0
- data/spec/lib/shamu/services/observed_request_spec.rb +46 -0
- data/spec/lib/shamu/services/request_support_spec.rb +54 -3
- data/spec/lib/shamu/services/service_spec.rb +16 -27
- metadata +15 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7021878c4a969d4191c47a51fd5833c4dbfac2ef
|
4
|
+
data.tar.gz: d1856e4d896fd0798bc297b3d2fc2647cff14492
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5dd78cd63aac4c2547bc5d7c467a968ee0543f66eabfcb1025308c1d95cdce9b9e23c482d9ae7f2a180cabde51427fcf2429825fbe0e921a475f9098eeae673b
|
7
|
+
data.tar.gz: 97e94eafab8cf431c311b2feb9252e590b6af9b6f276e97a2ac034259f75d7de3b26a81309ba9fef648c17f4c30cc8c8851be5c385ebb4734fe98c21da236360
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.4.
|
1
|
+
2.4.1
|
data/Gemfile
CHANGED
@@ -11,7 +11,7 @@ group :test do
|
|
11
11
|
gem "responders", "~> 2.1.2"
|
12
12
|
gem "kaminari", "~> 0.16.3", require: false
|
13
13
|
|
14
|
-
gem "byebug"
|
14
|
+
gem "byebug", "9.0.6"
|
15
15
|
gem "pry-byebug"
|
16
16
|
|
17
17
|
gem "sqlite3", "~> 1.3.11"
|
@@ -30,6 +30,8 @@ group :test do
|
|
30
30
|
gem "ruby_gntp", "~> 0.3.4"
|
31
31
|
gem "awesome_print"
|
32
32
|
|
33
|
+
gem "nokogiri", "1.8.0"
|
34
|
+
|
33
35
|
gem "codeclimate-test-reporter", "~> 1.0 ", group: :test, require: nil
|
34
36
|
gem "rspec_junit_formatter", "~> 0.2.2", platforms: :mri
|
35
37
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shamu (0.0.
|
4
|
+
shamu (0.0.24)
|
5
5
|
activemodel (>= 5.0)
|
6
6
|
activesupport (>= 5.0)
|
7
7
|
crc32 (~> 1)
|
@@ -9,61 +9,62 @@ PATH
|
|
9
9
|
loofah (~> 2)
|
10
10
|
multi_json (~> 1.11)
|
11
11
|
rack (>= 1)
|
12
|
-
scorpion-ioc (~> 0.
|
12
|
+
scorpion-ioc (~> 1.0.1)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: https://rubygems.org/
|
16
16
|
specs:
|
17
|
-
actioncable (5.0.
|
18
|
-
actionpack (= 5.0.
|
17
|
+
actioncable (5.0.6)
|
18
|
+
actionpack (= 5.0.6)
|
19
19
|
nio4r (>= 1.2, < 3.0)
|
20
20
|
websocket-driver (~> 0.6.1)
|
21
|
-
actionmailer (5.0.
|
22
|
-
actionpack (= 5.0.
|
23
|
-
actionview (= 5.0.
|
24
|
-
activejob (= 5.0.
|
21
|
+
actionmailer (5.0.6)
|
22
|
+
actionpack (= 5.0.6)
|
23
|
+
actionview (= 5.0.6)
|
24
|
+
activejob (= 5.0.6)
|
25
25
|
mail (~> 2.5, >= 2.5.4)
|
26
26
|
rails-dom-testing (~> 2.0)
|
27
|
-
actionpack (5.0.
|
28
|
-
actionview (= 5.0.
|
29
|
-
activesupport (= 5.0.
|
27
|
+
actionpack (5.0.6)
|
28
|
+
actionview (= 5.0.6)
|
29
|
+
activesupport (= 5.0.6)
|
30
30
|
rack (~> 2.0)
|
31
31
|
rack-test (~> 0.6.3)
|
32
32
|
rails-dom-testing (~> 2.0)
|
33
33
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
34
|
-
actionview (5.0.
|
35
|
-
activesupport (= 5.0.
|
34
|
+
actionview (5.0.6)
|
35
|
+
activesupport (= 5.0.6)
|
36
36
|
builder (~> 3.1)
|
37
37
|
erubis (~> 2.7.0)
|
38
38
|
rails-dom-testing (~> 2.0)
|
39
39
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
40
|
-
activejob (5.0.
|
41
|
-
activesupport (= 5.0.
|
40
|
+
activejob (5.0.6)
|
41
|
+
activesupport (= 5.0.6)
|
42
42
|
globalid (>= 0.3.6)
|
43
|
-
activemodel (5.0.
|
44
|
-
activesupport (= 5.0.
|
45
|
-
activerecord (5.0.
|
46
|
-
activemodel (= 5.0.
|
47
|
-
activesupport (= 5.0.
|
43
|
+
activemodel (5.0.6)
|
44
|
+
activesupport (= 5.0.6)
|
45
|
+
activerecord (5.0.6)
|
46
|
+
activemodel (= 5.0.6)
|
47
|
+
activesupport (= 5.0.6)
|
48
48
|
arel (~> 7.0)
|
49
|
-
activesupport (5.0.
|
49
|
+
activesupport (5.0.6)
|
50
50
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
51
51
|
i18n (~> 0.7)
|
52
52
|
minitest (~> 5.1)
|
53
53
|
tzinfo (~> 1.1)
|
54
54
|
arel (7.1.4)
|
55
55
|
ast (2.3.0)
|
56
|
-
awesome_print (1.
|
56
|
+
awesome_print (1.8.0)
|
57
57
|
builder (3.2.3)
|
58
58
|
byebug (9.0.6)
|
59
59
|
codeclimate-test-reporter (1.0.7)
|
60
60
|
simplecov
|
61
|
-
coderay (1.1.
|
62
|
-
combustion (0.
|
61
|
+
coderay (1.1.2)
|
62
|
+
combustion (0.7.0)
|
63
63
|
activesupport (>= 3.0.0)
|
64
64
|
railties (>= 3.0.0)
|
65
65
|
thor (>= 0.14.6)
|
66
66
|
concurrent-ruby (1.0.5)
|
67
|
+
crass (1.0.2)
|
67
68
|
crc32 (1.0.1)
|
68
69
|
diff-lcs (1.3)
|
69
70
|
docile (1.1.5)
|
@@ -89,10 +90,10 @@ GEM
|
|
89
90
|
guard (~> 2.1)
|
90
91
|
guard-compat (~> 1.1)
|
91
92
|
rspec (>= 2.99.0, < 4.0)
|
92
|
-
guard-rubocop (1.
|
93
|
+
guard-rubocop (1.3.0)
|
93
94
|
guard (~> 2.0)
|
94
95
|
rubocop (~> 0.20)
|
95
|
-
i18n (0.8.
|
96
|
+
i18n (0.8.6)
|
96
97
|
json (2.1.0)
|
97
98
|
kaminari (0.16.3)
|
98
99
|
actionpack (>= 3.0.0)
|
@@ -101,68 +102,68 @@ GEM
|
|
101
102
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
102
103
|
rb-inotify (~> 0.9, >= 0.9.7)
|
103
104
|
ruby_dep (~> 1.2)
|
104
|
-
loofah (2.
|
105
|
+
loofah (2.1.1)
|
106
|
+
crass (~> 1.0.2)
|
105
107
|
nokogiri (>= 1.5.9)
|
106
108
|
lumberjack (1.0.12)
|
107
109
|
mail (2.6.6)
|
108
110
|
mime-types (>= 1.16, < 4)
|
109
|
-
method_source (0.
|
111
|
+
method_source (0.9.0)
|
110
112
|
mime-types (3.1)
|
111
113
|
mime-types-data (~> 3.2015)
|
112
114
|
mime-types-data (3.2016.0521)
|
113
|
-
mini_portile2 (2.
|
114
|
-
minitest (5.10.
|
115
|
-
multi_json (1.12.
|
115
|
+
mini_portile2 (2.2.0)
|
116
|
+
minitest (5.10.3)
|
117
|
+
multi_json (1.12.2)
|
116
118
|
nenv (0.3.0)
|
117
119
|
nio4r (2.1.0)
|
118
|
-
nokogiri (1.
|
119
|
-
mini_portile2 (~> 2.
|
120
|
+
nokogiri (1.8.0)
|
121
|
+
mini_portile2 (~> 2.2.0)
|
120
122
|
notiffany (0.1.1)
|
121
123
|
nenv (~> 0.1)
|
122
124
|
shellany (~> 0.0)
|
123
|
-
parallel (1.
|
125
|
+
parallel (1.12.0)
|
124
126
|
parser (2.4.0.0)
|
125
127
|
ast (~> 2.2)
|
126
128
|
powerpack (0.1.1)
|
127
|
-
pry (0.
|
129
|
+
pry (0.11.1)
|
128
130
|
coderay (~> 1.1.0)
|
129
|
-
method_source (~> 0.
|
130
|
-
|
131
|
-
|
132
|
-
byebug (~> 9.0)
|
131
|
+
method_source (~> 0.9.0)
|
132
|
+
pry-byebug (3.4.3)
|
133
|
+
byebug (>= 9.0, < 9.1)
|
133
134
|
pry (~> 0.10)
|
134
135
|
rack (2.0.3)
|
135
136
|
rack-test (0.6.3)
|
136
137
|
rack (>= 1.0)
|
137
|
-
rails (5.0.
|
138
|
-
actioncable (= 5.0.
|
139
|
-
actionmailer (= 5.0.
|
140
|
-
actionpack (= 5.0.
|
141
|
-
actionview (= 5.0.
|
142
|
-
activejob (= 5.0.
|
143
|
-
activemodel (= 5.0.
|
144
|
-
activerecord (= 5.0.
|
145
|
-
activesupport (= 5.0.
|
146
|
-
bundler (>= 1.3.0
|
147
|
-
railties (= 5.0.
|
138
|
+
rails (5.0.6)
|
139
|
+
actioncable (= 5.0.6)
|
140
|
+
actionmailer (= 5.0.6)
|
141
|
+
actionpack (= 5.0.6)
|
142
|
+
actionview (= 5.0.6)
|
143
|
+
activejob (= 5.0.6)
|
144
|
+
activemodel (= 5.0.6)
|
145
|
+
activerecord (= 5.0.6)
|
146
|
+
activesupport (= 5.0.6)
|
147
|
+
bundler (>= 1.3.0)
|
148
|
+
railties (= 5.0.6)
|
148
149
|
sprockets-rails (>= 2.0.0)
|
149
150
|
rails-dom-testing (2.0.3)
|
150
151
|
activesupport (>= 4.2.0)
|
151
152
|
nokogiri (>= 1.6)
|
152
153
|
rails-html-sanitizer (1.0.3)
|
153
154
|
loofah (~> 2.0)
|
154
|
-
railties (5.0.
|
155
|
-
actionpack (= 5.0.
|
156
|
-
activesupport (= 5.0.
|
155
|
+
railties (5.0.6)
|
156
|
+
actionpack (= 5.0.6)
|
157
|
+
activesupport (= 5.0.6)
|
157
158
|
method_source
|
158
159
|
rake (>= 0.8.7)
|
159
160
|
thor (>= 0.18.1, < 2.0)
|
160
161
|
rainbow (2.2.2)
|
161
162
|
rake
|
162
|
-
rake (12.
|
163
|
-
rb-fsevent (0.
|
164
|
-
rb-inotify (0.9.
|
165
|
-
ffi (>= 0.5.0)
|
163
|
+
rake (12.1.0)
|
164
|
+
rb-fsevent (0.10.2)
|
165
|
+
rb-inotify (0.9.10)
|
166
|
+
ffi (>= 0.5.0, < 2)
|
166
167
|
responders (2.1.2)
|
167
168
|
railties (>= 4.2.0, < 5.1)
|
168
169
|
rspec (3.6.0)
|
@@ -180,7 +181,7 @@ GEM
|
|
180
181
|
rspec-mocks (3.6.0)
|
181
182
|
diff-lcs (>= 1.2.0, < 2.0)
|
182
183
|
rspec-support (~> 3.6.0)
|
183
|
-
rspec-rails (3.6.
|
184
|
+
rspec-rails (3.6.1)
|
184
185
|
actionpack (>= 3.0)
|
185
186
|
activesupport (>= 3.0)
|
186
187
|
railties (>= 3.0)
|
@@ -201,33 +202,32 @@ GEM
|
|
201
202
|
rainbow (>= 1.99.1, < 3.0)
|
202
203
|
ruby-progressbar (~> 1.7)
|
203
204
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
204
|
-
ruby-progressbar (1.
|
205
|
+
ruby-progressbar (1.9.0)
|
205
206
|
ruby_dep (1.5.0)
|
206
207
|
ruby_gntp (0.3.4)
|
207
|
-
scorpion-ioc (0.
|
208
|
+
scorpion-ioc (1.0.1)
|
208
209
|
rails (>= 4.0)
|
209
210
|
shellany (0.0.1)
|
210
|
-
simplecov (0.
|
211
|
+
simplecov (0.15.1)
|
211
212
|
docile (~> 1.1.0)
|
212
213
|
json (>= 1.8, < 3)
|
213
214
|
simplecov-html (~> 0.10.0)
|
214
|
-
simplecov-html (0.10.
|
215
|
-
|
216
|
-
spring (2.0.1)
|
215
|
+
simplecov-html (0.10.2)
|
216
|
+
spring (2.0.2)
|
217
217
|
activesupport (>= 4.2)
|
218
218
|
sprockets (3.7.1)
|
219
219
|
concurrent-ruby (~> 1.0)
|
220
220
|
rack (> 1, < 3)
|
221
|
-
sprockets-rails (3.2.
|
221
|
+
sprockets-rails (3.2.1)
|
222
222
|
actionpack (>= 4.0)
|
223
223
|
activesupport (>= 4.0)
|
224
224
|
sprockets (>= 3.0.0)
|
225
225
|
sqlite3 (1.3.13)
|
226
|
-
thor (0.
|
226
|
+
thor (0.20.0)
|
227
227
|
thread_safe (0.3.6)
|
228
228
|
tzinfo (1.2.3)
|
229
229
|
thread_safe (~> 0.1)
|
230
|
-
unicode-display_width (1.
|
230
|
+
unicode-display_width (1.3.0)
|
231
231
|
websocket-driver (0.6.5)
|
232
232
|
websocket-extensions (>= 0.1.0)
|
233
233
|
websocket-extensions (0.1.2)
|
@@ -243,7 +243,7 @@ DEPENDENCIES
|
|
243
243
|
activerecord (~> 5.0)
|
244
244
|
awesome_print
|
245
245
|
bundler (~> 1.6)
|
246
|
-
byebug
|
246
|
+
byebug (= 9.0.6)
|
247
247
|
codeclimate-test-reporter (~> 1.0)
|
248
248
|
combustion (~> 0.5)
|
249
249
|
fuubar
|
@@ -252,6 +252,7 @@ DEPENDENCIES
|
|
252
252
|
guard-rubocop
|
253
253
|
i18n (~> 0.7)
|
254
254
|
kaminari (~> 0.16.3)
|
255
|
+
nokogiri (= 1.8.0)
|
255
256
|
pry-byebug
|
256
257
|
rake
|
257
258
|
responders (~> 2.1.2)
|
@@ -270,4 +271,4 @@ DEPENDENCIES
|
|
270
271
|
yard-activesupport-concern
|
271
272
|
|
272
273
|
BUNDLED WITH
|
273
|
-
1.
|
274
|
+
1.15.3
|
data/app/README
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Here to make vim-rails work
|
@@ -0,0 +1 @@
|
|
1
|
+
# Dummy file to make vim-rails work
|
data/lib/shamu/attributes.rb
CHANGED
@@ -76,6 +76,32 @@ module Shamu
|
|
76
76
|
instance_variable_defined? :"@#{ attribute }"
|
77
77
|
end
|
78
78
|
|
79
|
+
# @return [Hash] the assigned attributes as a hash for JSON serialization.
|
80
|
+
def as_json( options = {} ) # rubocop:disable Styles/OptionHash
|
81
|
+
to_attributes( options.slice( :only, :except ) ).as_json
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [String] JSON encoded version of the assigned attributes.
|
85
|
+
def to_json( options = {} ) # rubocop:disable Styles/OptionHash
|
86
|
+
as_json( options ).to_json
|
87
|
+
end
|
88
|
+
|
89
|
+
def pretty_print( pp )
|
90
|
+
attributes = to_attributes
|
91
|
+
|
92
|
+
pp.object_address_group( self ) do
|
93
|
+
pp.seplist( attributes.keys, -> { pp.text "," } ) do |name|
|
94
|
+
pp.breakable " "
|
95
|
+
pp.group( 1 ) do
|
96
|
+
pp.text name.to_s
|
97
|
+
pp.text ":"
|
98
|
+
pp.breakable " "
|
99
|
+
pp.pp attributes[ name ]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
79
105
|
private
|
80
106
|
|
81
107
|
def match_attribute?( pattern, name )
|
@@ -12,6 +12,7 @@ module Shamu
|
|
12
12
|
# @return [Boolean] true if the two objects are of the same type and
|
13
13
|
# attributes are all eql? to each other.
|
14
14
|
def ==( other )
|
15
|
+
return true if other.object_id == object_id
|
15
16
|
return false unless other.is_a?( self.class ) || is_a?( other.class )
|
16
17
|
attributes_eql?( other )
|
17
18
|
end
|
@@ -31,10 +32,18 @@ module Shamu
|
|
31
32
|
def attributes_eql?( other )
|
32
33
|
self.class.attributes.all? do |key, attr|
|
33
34
|
next true if attr[:ignore_equality]
|
34
|
-
|
35
|
+
attribute_eql?( other, key )
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
# @param [Object] other the other object.
|
40
|
+
# @param [Symbol] attr the name of the other attribute.
|
41
|
+
# @return [Boolean] true if the value of the given attribute is equal
|
42
|
+
# on the current object and the other object.
|
43
|
+
def attribute_eql?( other, attr )
|
44
|
+
send( attr ).eql?( other.send( attr ) )
|
45
|
+
end
|
46
|
+
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
@@ -143,6 +143,17 @@ module Shamu
|
|
143
143
|
super && !options[:model]
|
144
144
|
end
|
145
145
|
|
146
|
+
def attribute_eql?( other, name )
|
147
|
+
value = send( name )
|
148
|
+
other_value = other.send( name )
|
149
|
+
|
150
|
+
if value.is_a?( Entity ) || other_value.is_a?( Entity )
|
151
|
+
return value.id.eql?( other_value.id )
|
152
|
+
else
|
153
|
+
value.eql?( other_value )
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
146
157
|
class << self
|
147
158
|
|
148
159
|
# @return [ActiveModel::Name] used by url_helpers etc when generating
|
@@ -87,6 +87,9 @@ module Shamu
|
|
87
87
|
name = base_name.sub /(Entity)?$/, "ListScope"
|
88
88
|
begin
|
89
89
|
return name.constantize
|
90
|
+
|
91
|
+
# Rescuing instead of using const_defined? so that active record can
|
92
|
+
# do it's auto-loading magic.
|
90
93
|
rescue NameError # rubocop:disable Lint/HandleExceptions
|
91
94
|
end
|
92
95
|
|
@@ -42,7 +42,12 @@ module Shamu
|
|
42
42
|
def self.included( base )
|
43
43
|
super
|
44
44
|
|
45
|
-
base.attribute :
|
45
|
+
base.attribute :default_sort_by, as: :default_order,
|
46
|
+
coerce: ->( *values ) { parse_sort_by( values ) }
|
47
|
+
|
48
|
+
base.attribute :sort_by, as: :order,
|
49
|
+
coerce: ->( *values ) { parse_sort_by( values ) },
|
50
|
+
default: ->() { default_sort_by }
|
46
51
|
end
|
47
52
|
|
48
53
|
# @return [Boolean] true if the scope is paged.
|
@@ -50,15 +50,21 @@ module Shamu
|
|
50
50
|
AUTO_FORMATTED_ATTRIBUTES.each do |attr|
|
51
51
|
next unless base.attributes.key?( attr )
|
52
52
|
|
53
|
-
base_name ||=
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
base_name ||=
|
54
|
+
begin
|
55
|
+
name = base.superclass.name || "Resource"
|
56
|
+
name.split( "::" )
|
57
|
+
.last
|
58
|
+
.sub( /Entity/, "" )
|
59
|
+
.gsub( /(.)([[:upper:]])/, '\1 \2' )
|
60
|
+
end
|
60
61
|
base.attribute attr, default: "Unknown #{ base_name }"
|
61
62
|
end
|
63
|
+
|
64
|
+
# Make sure the null version has the model name.
|
65
|
+
def base.model_name
|
66
|
+
superclass.model_name
|
67
|
+
end
|
62
68
|
end
|
63
69
|
|
64
70
|
# Dynamically generate a new null entity class.
|
@@ -73,11 +79,11 @@ module Shamu
|
|
73
79
|
end
|
74
80
|
|
75
81
|
unless null_klass
|
76
|
-
null_klass = Class.new( entity_class )
|
77
|
-
include ::Shamu::Entities::NullEntity
|
78
|
-
end
|
79
|
-
|
82
|
+
null_klass = Class.new( entity_class )
|
80
83
|
entity_class.const_set :NullEntity, null_klass
|
84
|
+
|
85
|
+
# After const_set so we have name and inheritance
|
86
|
+
null_klass.include ::Shamu::Entities::NullEntity
|
81
87
|
end
|
82
88
|
|
83
89
|
null_klass
|
@@ -85,4 +91,4 @@ module Shamu
|
|
85
91
|
|
86
92
|
end
|
87
93
|
end
|
88
|
-
end
|
94
|
+
end
|