locomotivecms_steam 1.4.0.rc2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c449da4bdd9dbb3aff106e8559b14d668a8ab5bea684e250673d07fef9fc8778
4
- data.tar.gz: afb9c2b211dff1c79dcbc44b307e69c86b82ec4b363454bc93bef28a869419a8
3
+ metadata.gz: 779a3a79f45335e0789fc5e4dcbaf304e4714124685133d3ca091544f7f81ed5
4
+ data.tar.gz: f65d74a99bdfaafcc518ab31f6286758992658c8bd2bf62b6362aa55299227c5
5
5
  SHA512:
6
- metadata.gz: 65c84944ce32f47836c455b81b51823a0095dde95eefe4d4f1762a11de79ffacddcfb5149286642136201aa7cb69d50a5050be08d63215e2057477e40a73b9a8
7
- data.tar.gz: 1c8ffe885fa13483009f12ee5e415f2ea6d2f5e0129475a1985690a172760e1f531873aeab69535c46703159e2ac5948301cfe7d3c6b95bb9447886319193302
6
+ metadata.gz: c2cd44c90cad565c44407a9eb2e4d75dfe345041745c44d58dc7fad5ff4c0cb4511c1edac3b010244ac0a50af44d4781fced848f4c33a3ceb89161c73d763dae
7
+ data.tar.gz: b4320719a670a06715f403ae55fc022d597f428e03647e796ddbd732522f28907c13f1e9d4dbdb329f09cb5a99d5948f3e4714b8ab3aef2e03c9e3e97e93f41d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- locomotivecms_steam (1.4.0.rc2)
4
+ locomotivecms_steam (1.4.0)
5
5
  RedCloth (~> 4.3.2)
6
6
  autoprefixer-rails (~> 8.0.0)
7
7
  bcrypt (~> 3.1.11)
@@ -42,7 +42,7 @@ GEM
42
42
  attr_extras (5.2.0)
43
43
  autoprefixer-rails (8.0.0)
44
44
  execjs
45
- bcrypt (3.1.11)
45
+ bcrypt (3.1.12)
46
46
  bson (4.3.0)
47
47
  chronic (0.10.2)
48
48
  chunky_png (1.3.10)
@@ -81,7 +81,7 @@ GEM
81
81
  rack (>= 1.3)
82
82
  duktape (1.6.1.0)
83
83
  execjs (2.7.0)
84
- ffi (1.9.23)
84
+ ffi (1.9.25)
85
85
  flamegraph (0.9.5)
86
86
  haml (5.0.4)
87
87
  temple (>= 0.8.0)
@@ -112,9 +112,9 @@ GEM
112
112
  memory_profiler (0.9.10)
113
113
  mime-types (3.1)
114
114
  mime-types-data (~> 3.2015)
115
- mime-types-data (3.2016.0521)
115
+ mime-types-data (3.2018.0812)
116
116
  mimetype-fu (0.1.2)
117
- mini_mime (1.0.0)
117
+ mini_mime (1.0.1)
118
118
  mini_portile2 (2.3.0)
119
119
  minitest (5.11.3)
120
120
  moneta (1.0.0)
@@ -123,17 +123,17 @@ GEM
123
123
  morphine (0.1.1)
124
124
  multi_json (1.13.1)
125
125
  multi_xml (0.6.0)
126
- nokogiri (1.8.2)
126
+ nokogiri (1.8.4)
127
127
  mini_portile2 (~> 2.3.0)
128
128
  nokogumbo (1.5.0)
129
129
  nokogiri
130
130
  origin (2.3.1)
131
131
  pony (1.12)
132
132
  mail (>= 2.0)
133
- public_suffix (3.0.2)
133
+ public_suffix (3.0.3)
134
134
  puma (3.11.3)
135
135
  rack (2.0.4)
136
- rack-cache (1.7.1)
136
+ rack-cache (1.7.2)
137
137
  rack (>= 0.4)
138
138
  rack-mini-profiler (0.10.7)
139
139
  rack (>= 1.2.0)
@@ -159,7 +159,7 @@ GEM
159
159
  diff-lcs (>= 1.2.0, < 2.0)
160
160
  rspec-support (~> 3.7.0)
161
161
  rspec-support (3.7.1)
162
- sanitize (4.6.4)
162
+ sanitize (4.6.6)
163
163
  crass (~> 1.0.2)
164
164
  nokogiri (>= 1.4.4)
165
165
  nokogumbo (~> 1.4)
@@ -169,7 +169,7 @@ GEM
169
169
  json (>= 1.8, < 3)
170
170
  simplecov-html (~> 0.10.0)
171
171
  simplecov-html (0.10.2)
172
- sprockets (3.7.1)
172
+ sprockets (3.7.2)
173
173
  concurrent-ruby (~> 1.0)
174
174
  rack (> 1, < 3)
175
175
  stackprof (0.2.11)
@@ -184,7 +184,7 @@ GEM
184
184
  tins (1.16.3)
185
185
  tzinfo (1.2.5)
186
186
  thread_safe (~> 0.1)
187
- uglifier (4.1.10)
187
+ uglifier (4.1.19)
188
188
  execjs (>= 0.3.0, < 3)
189
189
 
190
190
  PLATFORMS
@@ -22,16 +22,17 @@ module Locomotive::Steam
22
22
  entry_value = entry_value(entry)
23
23
 
24
24
  adapt_operator!(entry_value)
25
+
25
26
  case @operator
26
27
  when :== then entry_value == @value
27
28
  when :eq then entry_value == @value
28
29
  when :ne then entry_value != @value
29
30
  when :neq then entry_value != @value
30
31
  when :matches then @value =~ entry_value
31
- when :gt then entry_value > @value
32
- when :gte then entry_value >= @value
33
- when :lt then entry_value < @value
34
- when :lte then entry_value <= @value
32
+ when :gt then entry_value && entry_value > @value
33
+ when :gte then entry_value && entry_value >= @value
34
+ when :lt then entry_value && entry_value < @value
35
+ when :lte then entry_value && entry_value <= @value
35
36
  when :size then entry_value.size == @value
36
37
  when :all then array_contains?([*@value], entry_value)
37
38
  when :in, :nin then value_is_in_entry_value?(entry_value)
@@ -4,7 +4,7 @@ module Locomotive
4
4
  module Drops
5
5
  class Site < I18nBase
6
6
 
7
- delegate :name, :domains, :seo_title, :meta_keywords, :meta_description, :asset_host, to: :@_source
7
+ delegate :name, :handle, :domains, :seo_title, :meta_keywords, :meta_description, :asset_host, to: :@_source
8
8
 
9
9
  def index
10
10
  @index ||= repository.root.to_liquid
@@ -3,6 +3,74 @@ module Locomotive::Steam
3
3
 
4
4
  module Helpers
5
5
 
6
+ #= Shortcuts =
7
+
8
+ def services
9
+ @services ||= env.fetch('steam.services')
10
+ end
11
+
12
+ def repositories
13
+ @repositories ||= services.repositories
14
+ end
15
+
16
+ def request
17
+ @request ||= env.fetch('steam.request')
18
+ end
19
+
20
+ def site
21
+ @site ||= env.fetch('steam.site')
22
+ end
23
+
24
+ def page
25
+ @page ||= env.fetch('steam.page')
26
+ end
27
+
28
+ def path
29
+ @path ||= env.fetch('steam.path')
30
+ end
31
+
32
+ def locale
33
+ @locale ||= env.fetch('steam.locale')
34
+ end
35
+
36
+ def liquid_assigns
37
+ @liquid_assigns ||= env.fetch('steam.liquid_assigns')
38
+ end
39
+
40
+ def locales
41
+ site.locales
42
+ end
43
+
44
+ def default_locale
45
+ site.default_locale
46
+ end
47
+
48
+ def live_editing?
49
+ !!env['steam.live_editing']
50
+ end
51
+
52
+ def mounted_on
53
+ env['steam.mounted_on']
54
+ end
55
+
56
+ # if this is a JSON request with a JSON body, try to parse it
57
+ # if we are unable to parse it, fallback to the original params
58
+ def params
59
+ @params = env['steam.params']
60
+
61
+ return @params if @params.present?
62
+
63
+ if json? && (request.post? || request.put?)
64
+ @params = JSON.parse(request.body.read) rescue nil
65
+
66
+ request.body.rewind # leave the body as it was before we touched it
67
+ end
68
+
69
+ @params = env['steam.params'] = (@params || request.params).with_indifferent_access
70
+ end
71
+
72
+ #= Useful getters =
73
+
6
74
  def html?
7
75
  ['text/html', 'application/x-www-form-urlencoded', 'multipart/form-data'].include?(self.request.media_type) &&
8
76
  !self.request.xhr? &&
@@ -13,6 +81,8 @@ module Locomotive::Steam
13
81
  self.request.content_type == 'application/json' || File.extname(self.request.path) == '.json'
14
82
  end
15
83
 
84
+ #= Helper methods
85
+
16
86
  def render_response(content, code = 200, type = nil)
17
87
  @next_response = [code, { 'Content-Type' => type || 'text/html' }, [content]]
18
88
  end
@@ -45,8 +115,19 @@ module Locomotive::Steam
45
115
  location.gsub(Regexp.new('^' + mounted_on), '')
46
116
  end
47
117
 
48
- def mounted_on
49
- request.env['steam.mounted_on']
118
+ def decorate_entry(entry)
119
+ return nil if entry.nil?
120
+ Locomotive::Steam::Decorators::I18nDecorator.new(entry, locale, default_locale)
121
+ end
122
+
123
+ def default_liquid_context
124
+ ::Liquid::Context.new({ 'site' => site.to_liquid }, {}, {
125
+ request: request,
126
+ locale: locale,
127
+ site: site,
128
+ services: services,
129
+ repositories: services.repositories
130
+ }, true)
50
131
  end
51
132
 
52
133
  def log(msg, offset = 2)
@@ -6,14 +6,10 @@ module Locomotive::Steam::Middlewares
6
6
  attr_accessor :env
7
7
 
8
8
  def call(env)
9
- threadsafed = dup
9
+ threadsafed = dup
10
10
  threadsafed.env = env
11
11
 
12
- # time = Benchmark.realtime do
13
- threadsafed._call # thread-safe purpose
14
- # end
15
-
16
- # puts "[Benchmark][#{self.class.name}] Time elapsed #{time*1000} milliseconds"
12
+ threadsafed._call
17
13
 
18
14
  threadsafed.next
19
15
  end
@@ -23,71 +19,6 @@ module Locomotive::Steam::Middlewares
23
19
  @next_response || (@next_response = app.call(env))
24
20
  end
25
21
 
26
- #= Shortcuts =
27
-
28
- def services
29
- @services ||= env.fetch('steam.services')
30
- end
31
-
32
- def repositories
33
- @repositories ||= services.repositories
34
- end
35
-
36
- def request
37
- @request ||= env.fetch('steam.request')
38
- end
39
-
40
- def site
41
- @site ||= env.fetch('steam.site')
42
- end
43
-
44
- def page
45
- @page ||= env.fetch('steam.page')
46
- end
47
-
48
- def path
49
- @path ||= env.fetch('steam.path')
50
- end
51
-
52
- def locale
53
- @locale ||= env.fetch('steam.locale')
54
- end
55
-
56
- def liquid_assigns
57
- @liquid_assigns ||= env.fetch('steam.liquid_assigns')
58
- end
59
-
60
- def locales
61
- site.locales
62
- end
63
-
64
- def default_locale
65
- site.default_locale
66
- end
67
-
68
- def params
69
- @params ||= self.request.params.with_indifferent_access
70
- end
71
-
72
- def live_editing?
73
- !!env['steam.live_editing']
74
- end
75
-
76
- def decorate_entry(entry)
77
- return nil if entry.nil?
78
- Locomotive::Steam::Decorators::I18nDecorator.new(entry, locale, default_locale)
79
- end
80
-
81
- def default_liquid_context
82
- ::Liquid::Context.new({ 'site' => site.to_liquid }, {}, {
83
- request: request,
84
- locale: locale,
85
- site: site,
86
- services: services,
87
- repositories: services.repositories
88
- }, true)
89
- end
90
-
91
22
  end
92
23
 
93
24
  end
@@ -287,7 +287,7 @@ module Locomotive
287
287
  else
288
288
  value
289
289
  end
290
- type == :date ? _value.to_date : _value.to_datetime
290
+ type == :date ? _value&.to_date : _value&.to_datetime
291
291
  end
292
292
 
293
293
  end
@@ -3,6 +3,6 @@
3
3
  # 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0
4
4
  module Locomotive
5
5
  module Steam
6
- VERSION = '1.4.0.rc2'
6
+ VERSION = '1.4.0'
7
7
  end
8
8
  end
@@ -4,13 +4,14 @@ describe Locomotive::Steam::Liquid::Drops::Site do
4
4
 
5
5
  let(:services) { Locomotive::Steam::Services.build_instance }
6
6
  let(:context) { ::Liquid::Context.new({}, {}, { services: services }) }
7
- let(:site) { instance_double('Site', name: 'Locomotive', domains: ['acme.org'], seo_title: 'seo title', meta_keywords: 'keywords', meta_description: 'description', localized_attributes: {}, asset_host: 'http://asset.dev') }
7
+ let(:site) { instance_double('Site', handle: 'locomotive', name: 'Locomotive', domains: ['acme.org'], seo_title: 'seo title', meta_keywords: 'keywords', meta_description: 'description', localized_attributes: {}, asset_host: 'http://asset.dev') }
8
8
  let(:drop) { described_class.new(site).tap { |d| d.context = context } }
9
9
 
10
10
  subject { drop }
11
11
 
12
12
  it 'gives access to general attributes' do
13
13
  expect(subject.name).to eq 'Locomotive'
14
+ expect(subject.handle).to eq 'locomotive'
14
15
  expect(subject.seo_title).to eq 'seo title'
15
16
  expect(subject.meta_keywords).to eq 'keywords'
16
17
  expect(subject.meta_description).to eq 'description'
@@ -58,4 +58,65 @@ describe Locomotive::Steam::Middlewares::Helpers do
58
58
 
59
59
  end
60
60
 
61
+ describe '#params' do
62
+
63
+ let(:url) { 'http://models.example.com' }
64
+ let(:app) { ->(env) { [200, env, 'app'] } }
65
+ let(:options) { {} }
66
+
67
+ before do
68
+ env = env_for(url, options)
69
+ env['steam.request'] = Rack::Request.new(env)
70
+ allow(instance).to receive(:app).and_return(app)
71
+ allow(instance).to receive(:env).and_return(env)
72
+ end
73
+
74
+ subject { instance.params }
75
+
76
+ context 'from a GET' do
77
+
78
+ let(:url) { 'http://models.example.com?foo=bar' }
79
+
80
+ it { is_expected.to eq('foo' => 'bar') }
81
+
82
+ end
83
+
84
+ context 'from a GET (JSON)' do
85
+
86
+ let(:url) { 'http://models.example.com/api.json?foo=bar' }
87
+
88
+ it { is_expected.to eq('foo' => 'bar') }
89
+
90
+ end
91
+
92
+ context 'from the body of JSON POST request' do
93
+
94
+ let(:input) { '{"foo": { "bar": 42 } }' }
95
+
96
+ let(:options) { {
97
+ method: 'POST',
98
+ input: input,
99
+ 'CONTENT_TYPE' => 'application/json'
100
+ } }
101
+
102
+ it { is_expected.to eq('foo' => { 'bar' => 42 }) }
103
+
104
+ it 'builds a hash with indifferent access' do
105
+ expect(subject[:foo][:bar]).to eq 42
106
+ end
107
+
108
+ context 'the JSON is invalid' do
109
+
110
+ let(:input) { '{ a: 2 }' }
111
+
112
+ it 'returns an empty hash' do
113
+ is_expected.to eq({})
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+
61
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locomotivecms_steam
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.rc2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Didier Lafforgue
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-04-30 00:00:00.000000000 Z
14
+ date: 2018-09-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -895,9 +895,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
895
895
  version: '2.0'
896
896
  required_rubygems_version: !ruby/object:Gem::Requirement
897
897
  requirements:
898
- - - ">"
898
+ - - ">="
899
899
  - !ruby/object:Gem::Version
900
- version: 1.3.1
900
+ version: '0'
901
901
  requirements: []
902
902
  rubyforge_project:
903
903
  rubygems_version: 2.7.3