locomotivecms_steam 1.0.0.pre.beta.2 → 1.0.0.pre.beta.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -1
- data/Gemfile.lock +22 -12
- data/bin/steam.rb +21 -7
- data/lib/locomotive/steam/adapters/mongodb.rb +1 -1
- data/lib/locomotive/steam/adapters/mongodb/query.rb +6 -0
- data/lib/locomotive/steam/configuration.rb +9 -0
- data/lib/locomotive/steam/errors.rb +3 -0
- data/lib/locomotive/steam/liquid/drops/content_types.rb +20 -2
- data/lib/locomotive/steam/liquid/filters/json.rb +42 -0
- data/lib/locomotive/steam/liquid/filters/misc.rb +4 -0
- data/lib/locomotive/steam/liquid/filters/number.rb +51 -0
- data/lib/locomotive/steam/liquid/tags/concerns/i18n_page.rb +0 -9
- data/lib/locomotive/steam/liquid/tags/concerns/path.rb +1 -1
- data/lib/locomotive/steam/liquid/tags/editable.rb +1 -0
- data/lib/locomotive/steam/liquid/tags/editable/base.rb +3 -1
- data/lib/locomotive/steam/liquid/tags/editable/model.rb +19 -0
- data/lib/locomotive/steam/liquid/tags/inherited_block.rb +25 -1
- data/lib/locomotive/steam/middlewares/site.rb +9 -5
- data/lib/locomotive/steam/models/entity.rb +9 -8
- data/lib/locomotive/steam/models/mapper.rb +22 -6
- data/lib/locomotive/steam/repositories/content_entry_repository.rb +15 -1
- data/lib/locomotive/steam/repositories/content_type_field_select_option_repository.rb +4 -0
- data/lib/locomotive/steam/repositories/page_repository.rb +7 -0
- data/lib/locomotive/steam/repositories/site_repository.rb +1 -2
- data/lib/locomotive/steam/server.rb +7 -0
- data/lib/locomotive/steam/services.rb +10 -11
- data/lib/locomotive/steam/services/page_finder_service.rb +21 -0
- data/lib/locomotive/steam/version.rb +1 -1
- data/spec/integration/repositories/content_entry_repository_spec.rb +5 -0
- data/spec/integration/repositories/page_repository_spec.rb +5 -0
- data/spec/support/liquid.rb +11 -0
- data/spec/unit/liquid/filters/json_spec.rb +57 -0
- data/spec/unit/liquid/filters/misc_spec.rb +14 -0
- data/spec/unit/liquid/filters/number_spec.rb +100 -0
- data/spec/unit/liquid/tags/editable/model_spec.rb +84 -0
- data/spec/unit/liquid/tags/inherited_block_spec.rb +13 -0
- data/spec/unit/liquid/tags/link_to_spec.rb +2 -2
- data/spec/unit/liquid/tags/path_to_spec.rb +3 -3
- data/spec/unit/middlewares/site_spec.rb +43 -0
- data/spec/unit/repositories/content_entry_repository_spec.rb +13 -12
- data/spec/unit/services_spec.rb +23 -1
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afc4338f5582de4d66788ef18ebb8d1d8d3d024d
|
4
|
+
data.tar.gz: 457d04823de496fc46c507f64d3b1e1313c7a6dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38071d83a98a7e53dd81591d58f7a3b035ac244b563e2077b115ba939cddbb4b55a54ee77e60f361dde5352fe5fd14cf8547229a95116416b43189999cb9619d
|
7
|
+
data.tar.gz: 7378ea6a8eeda23d69bac0991d430dcaa4abed935598aca30294ba5f6a60097058b7e8f0e20a727f18c61814447a47f426278b68c249c0525e20b3c71cb204e1
|
data/Gemfile
CHANGED
@@ -7,9 +7,15 @@ group :development do
|
|
7
7
|
# gem 'locomotivecms_models', '~> 0.0.1', path: '../models'
|
8
8
|
# gem 'locomotivecms_models', '0.0.1.pre.alpha'
|
9
9
|
# gem 'locomotivecms-liquid', path: '/Users/didier/Documents/LocomotiveCMS/gems/liquid'
|
10
|
-
gem 'thin'
|
10
|
+
# gem 'thin'
|
11
|
+
gem 'puma'
|
11
12
|
# gem 'sprockets-sass', '~> 1.2.0'
|
12
13
|
gem 'yui-compressor', '~> 0.12.0'
|
14
|
+
|
15
|
+
gem 'rack-mini-profiler'
|
16
|
+
gem 'flamegraph'
|
17
|
+
gem 'stackprof' # ruby 2.1+ only
|
18
|
+
gem 'memory_profiler'
|
13
19
|
end
|
14
20
|
|
15
21
|
group :test do
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
locomotivecms_steam (1.0.0.pre.beta.
|
4
|
+
locomotivecms_steam (1.0.0.pre.beta.3)
|
5
5
|
RedCloth (~> 4.2.9)
|
6
6
|
chronic (~> 0.10.2)
|
7
7
|
coffee-script (~> 2.4.1)
|
@@ -28,7 +28,7 @@ GEM
|
|
28
28
|
remote: https://rubygems.org/
|
29
29
|
specs:
|
30
30
|
RedCloth (4.2.9)
|
31
|
-
activesupport (4.2.
|
31
|
+
activesupport (4.2.4)
|
32
32
|
i18n (~> 0.7)
|
33
33
|
json (~> 1.7, >= 1.7.7)
|
34
34
|
minitest (~> 5.1)
|
@@ -70,7 +70,6 @@ GEM
|
|
70
70
|
term-ansicolor (~> 1.3)
|
71
71
|
thor (~> 0.19.1)
|
72
72
|
crass (1.0.2)
|
73
|
-
daemons (1.2.2)
|
74
73
|
diff-lcs (1.2.5)
|
75
74
|
docile (1.1.5)
|
76
75
|
domain_name (0.5.24)
|
@@ -79,9 +78,13 @@ GEM
|
|
79
78
|
addressable (~> 2.3)
|
80
79
|
multi_json (~> 1.0)
|
81
80
|
rack (>= 1.3.0)
|
82
|
-
|
83
|
-
|
81
|
+
execjs (2.6.0)
|
82
|
+
fast_stack (0.1.0)
|
83
|
+
rake
|
84
|
+
rake-compiler
|
84
85
|
ffi (1.9.10)
|
86
|
+
flamegraph (0.1.0)
|
87
|
+
fast_stack
|
85
88
|
haml (4.0.7)
|
86
89
|
tilt
|
87
90
|
hike (1.2.3)
|
@@ -109,11 +112,12 @@ GEM
|
|
109
112
|
activesupport (~> 4.2.1)
|
110
113
|
colorize
|
111
114
|
stringex (~> 2.5.2)
|
115
|
+
memory_profiler (0.9.4)
|
112
116
|
method_source (0.8.2)
|
113
117
|
mime-types (2.6.1)
|
114
118
|
mimetype-fu (0.1.2)
|
115
119
|
mini_portile (0.6.2)
|
116
|
-
minitest (5.
|
120
|
+
minitest (5.8.0)
|
117
121
|
moneta (0.8.0)
|
118
122
|
moped (2.0.6)
|
119
123
|
bson (~> 3.0)
|
@@ -136,15 +140,20 @@ GEM
|
|
136
140
|
pry-byebug (3.1.0)
|
137
141
|
byebug (~> 4.0)
|
138
142
|
pry (~> 0.10)
|
143
|
+
puma (2.12.3)
|
139
144
|
rack (1.6.1)
|
140
145
|
rack-cache (1.2)
|
141
146
|
rack (>= 0.4)
|
147
|
+
rack-mini-profiler (0.9.7)
|
148
|
+
rack (>= 1.1.3)
|
142
149
|
rack-rewrite (1.5.1)
|
143
150
|
rack-test (0.6.3)
|
144
151
|
rack (>= 1.0)
|
145
152
|
rack_csrf (2.5.0)
|
146
153
|
rack (>= 1.1.0)
|
147
154
|
rake (10.4.2)
|
155
|
+
rake-compiler (0.9.5)
|
156
|
+
rake
|
148
157
|
rb-fsevent (0.9.5)
|
149
158
|
rb-inotify (0.9.5)
|
150
159
|
ffi (>= 0.5.0)
|
@@ -169,7 +178,7 @@ GEM
|
|
169
178
|
crass (~> 1.0.2)
|
170
179
|
nokogiri (>= 1.4.4)
|
171
180
|
nokogumbo (= 1.4.1)
|
172
|
-
sass (3.4.
|
181
|
+
sass (3.4.18)
|
173
182
|
simplecov (0.10.0)
|
174
183
|
docile (~> 1.1.0)
|
175
184
|
json (~> 1.8)
|
@@ -187,13 +196,10 @@ GEM
|
|
187
196
|
sprockets-sass (1.3.1)
|
188
197
|
sprockets (~> 2.0)
|
189
198
|
tilt (~> 1.1)
|
199
|
+
stackprof (0.2.7)
|
190
200
|
stringex (2.5.2)
|
191
201
|
term-ansicolor (1.3.0)
|
192
202
|
tins (~> 1.0)
|
193
|
-
thin (1.6.3)
|
194
|
-
daemons (~> 1.0, >= 1.0.9)
|
195
|
-
eventmachine (~> 1.0)
|
196
|
-
rack (~> 1.0)
|
197
203
|
thor (0.19.1)
|
198
204
|
thread_safe (0.3.5)
|
199
205
|
tilt (1.4.1)
|
@@ -213,15 +219,19 @@ DEPENDENCIES
|
|
213
219
|
bundler (~> 1.7)
|
214
220
|
codeclimate-test-reporter (~> 0.4.7)
|
215
221
|
coveralls (~> 0.8.1)
|
222
|
+
flamegraph
|
216
223
|
i18n-spec (~> 0.6.0)
|
217
224
|
json_spec (~> 1.1.4)
|
218
225
|
locomotivecms_steam!
|
226
|
+
memory_profiler
|
219
227
|
moped (~> 2.0.6)
|
220
228
|
origin (~> 2.1.1)
|
221
229
|
pry-byebug (~> 3.1.0)
|
230
|
+
puma
|
231
|
+
rack-mini-profiler
|
222
232
|
rack-test (~> 0.6.3)
|
223
233
|
rake (~> 10.4.2)
|
224
234
|
rspec (~> 3.3.0)
|
225
|
-
|
235
|
+
stackprof
|
226
236
|
timecop (~> 0.7.4)
|
227
237
|
yui-compressor (~> 0.12.0)
|
data/bin/steam.rb
CHANGED
@@ -5,10 +5,9 @@ require 'bundler/setup'
|
|
5
5
|
|
6
6
|
Bundler.require
|
7
7
|
|
8
|
-
require 'thin'
|
9
8
|
require 'optparse'
|
10
9
|
|
11
|
-
server_options = { address: '
|
10
|
+
server_options = { address: '0.0.0.0', port: 8080 }
|
12
11
|
|
13
12
|
options = {
|
14
13
|
adapter: {
|
@@ -85,13 +84,28 @@ end
|
|
85
84
|
|
86
85
|
app = Locomotive::Steam::Server.to_app
|
87
86
|
|
87
|
+
# Thin rack handler
|
88
88
|
# Note: alt thin settings (Threaded)
|
89
|
-
|
90
|
-
server
|
91
|
-
server.
|
89
|
+
# require 'thin'
|
90
|
+
# server = Thin::Server.new(server_options[:address], server_options[:port], app)
|
91
|
+
# server.threaded = true
|
92
|
+
# server.start
|
93
|
+
# Locomotive::Common::Logger.info 'Server started...'
|
92
94
|
# FIXME: Rack::Handler::Thin.run app (not threaded)
|
93
95
|
|
94
96
|
# WEBRick rack handler
|
95
97
|
# Rack::Handler::WEBrick.run app
|
96
|
-
|
97
|
-
|
98
|
+
# Locomotive::Common::Logger.info 'Server started...'
|
99
|
+
|
100
|
+
# Puma rack handler
|
101
|
+
require 'puma'
|
102
|
+
server = ::Puma::Server.new(app)
|
103
|
+
server.add_tcp_listener server_options[:address], server_options[:port]
|
104
|
+
server.min_threads = 4
|
105
|
+
server.max_threads = 16
|
106
|
+
begin
|
107
|
+
Locomotive::Common::Logger.info 'Server started...'
|
108
|
+
server.run.join
|
109
|
+
rescue Interrupt
|
110
|
+
server.stop(true)
|
111
|
+
end
|
@@ -93,6 +93,15 @@ module Locomotive
|
|
93
93
|
attr_accessor :moneta
|
94
94
|
def moneta; @moneta.nil? ? { store: Moneta.new(:Memory, expires: true) } : @moneta; end
|
95
95
|
|
96
|
+
# Render a 404 page if no site has been found.
|
97
|
+
# If Steam is embedded in another app, it's better to let the app handle
|
98
|
+
# the no site case.
|
99
|
+
#
|
100
|
+
# default: true
|
101
|
+
#
|
102
|
+
attr_accessor :render_404_if_no_site
|
103
|
+
def render_404_if_no_site; @render_404_if_no_site.nil? ? true : @render_404_if_no_site; end
|
104
|
+
|
96
105
|
# Lambda called once a Services instance has been built.
|
97
106
|
# It is used when we want to change one of the services
|
98
107
|
#
|
@@ -5,9 +5,27 @@ module Locomotive
|
|
5
5
|
class ContentTypes < ::Liquid::Drop
|
6
6
|
|
7
7
|
def before_method(meth)
|
8
|
-
|
8
|
+
fetch_content_type(meth.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def repository
|
14
|
+
@context.registers[:services].repositories.content_type
|
15
|
+
end
|
16
|
+
|
17
|
+
def fetch_content_type(slug)
|
18
|
+
@content_type_map ||= {}
|
19
|
+
|
20
|
+
if !@content_type_map.include?(slug)
|
21
|
+
@content_type_map[slug] = _fetch_content_type(slug)
|
22
|
+
end
|
23
|
+
|
24
|
+
@content_type_map[slug]
|
25
|
+
end
|
9
26
|
|
10
|
-
|
27
|
+
def _fetch_content_type(slug)
|
28
|
+
if content_type = repository.by_slug(slug)
|
11
29
|
ContentEntryCollection.new(content_type)
|
12
30
|
else
|
13
31
|
nil
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Locomotive
|
2
|
+
module Steam
|
3
|
+
module Liquid
|
4
|
+
module Filters
|
5
|
+
module Json
|
6
|
+
|
7
|
+
def json(input, fields = nil)
|
8
|
+
if fields && fields.is_a?(String)
|
9
|
+
fields = fields.split(',').map(&:strip)
|
10
|
+
end
|
11
|
+
|
12
|
+
if fields.blank?
|
13
|
+
input.to_json
|
14
|
+
elsif input.respond_to?(:each)
|
15
|
+
if fields.size == 1
|
16
|
+
input.map { |object| object[fields.first].to_json }.join(',')
|
17
|
+
else
|
18
|
+
input.map { |object| "{" + object_to_json(object, fields) + "}" }.join(',')
|
19
|
+
end
|
20
|
+
else
|
21
|
+
object_to_json(input, fields)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def object_to_json(input, fields)
|
28
|
+
[].tap do |output|
|
29
|
+
fields.each do |field|
|
30
|
+
output << %("#{field}":#{input[field].to_json})
|
31
|
+
end
|
32
|
+
end.join(',')
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
::Liquid::Template.register_filter(Json)
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Locomotive
|
2
|
+
module Steam
|
3
|
+
module Liquid
|
4
|
+
module Filters
|
5
|
+
module Number
|
6
|
+
|
7
|
+
def money(input, *options)
|
8
|
+
NumberProxyHelper.new(:currency, @context).invoke(input, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def percentage(input, *options)
|
12
|
+
NumberProxyHelper.new(:percentage, @context).invoke(input, options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def mod(input, modulus)
|
16
|
+
input.to_i % modulus.to_i
|
17
|
+
end
|
18
|
+
|
19
|
+
class NumberProxyHelper
|
20
|
+
|
21
|
+
include ActiveSupport::NumberHelper
|
22
|
+
|
23
|
+
def initialize(name, context)
|
24
|
+
@name = name
|
25
|
+
@context = context
|
26
|
+
end
|
27
|
+
|
28
|
+
def invoke(input, options)
|
29
|
+
_options = parse_and_interpolate_options(options)
|
30
|
+
send :"number_to_#{@name}", input, _options
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse_and_interpolate_options(string_or_array)
|
34
|
+
return {} if string_or_array.empty?
|
35
|
+
|
36
|
+
string = [*string_or_array].flatten.join(', ')
|
37
|
+
arguments = Solid::Arguments.parse(string)
|
38
|
+
|
39
|
+
(arguments.interpolate(@context).first || {})
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
::Liquid::Template.register_filter(Number)
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -18,15 +18,6 @@ module Locomotive
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
# def build_fullpath(page)
|
22
|
-
# services.url_builder.url_for(page, locale).tap do |fullpath|
|
23
|
-
# if page.templatized?
|
24
|
-
# entry = page.send(:_source).content_entry
|
25
|
-
# fullpath.gsub!('content_type_template', entry._slug)
|
26
|
-
# end
|
27
|
-
# end
|
28
|
-
# end
|
29
|
-
|
30
21
|
end
|
31
22
|
|
32
23
|
end
|
@@ -27,10 +27,12 @@ module Locomotive
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
alias :default_render :render
|
31
|
+
|
30
32
|
def render(context)
|
31
33
|
service = context.registers[:services].editable_element
|
32
34
|
page = context.registers[:page]
|
33
|
-
block = context['block'].try(:name)
|
35
|
+
block = @element_options[:block] || context['block'].try(:name)
|
34
36
|
|
35
37
|
if element = service.find(page, block, @slug)
|
36
38
|
render_element(context, element)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Locomotive
|
2
|
+
module Steam
|
3
|
+
module Liquid
|
4
|
+
module Tags
|
5
|
+
module Editable
|
6
|
+
class Model < Base
|
7
|
+
|
8
|
+
def render(context)
|
9
|
+
default_render(context)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
::Liquid::Template.register_tag('editable_model'.freeze, Model)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|