motion-html-pipeline 0.3 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/lib/motion-html-pipeline.rb +3 -5
- data/lib/motion-html-pipeline/document_fragment.rb +1 -1
- data/lib/motion-html-pipeline/pipeline.rb +6 -4
- data/lib/motion-html-pipeline/pipeline/absolute_source_filter.rb +2 -0
- data/lib/motion-html-pipeline/pipeline/disabled/@mention_filter.rb +1 -1
- data/lib/motion-html-pipeline/pipeline/disabled/autolink_filter.rb +1 -1
- data/lib/motion-html-pipeline/pipeline/filter.rb +1 -0
- data/lib/motion-html-pipeline/pipeline/image_filter.rb +1 -1
- data/lib/motion-html-pipeline/pipeline/text_filter.rb +1 -0
- data/lib/motion-html-pipeline/pipeline/version.rb +1 -1
- data/spec/motion-html-pipeline/_helpers/mock_instumentation_service.rb +1 -0
- data/spec/motion-html-pipeline/pipeline/absolute_source_filter_spec.rb +4 -4
- data/spec/motion-html-pipeline/pipeline/https_filter_spec.rb +1 -1
- data/spec/spec_helper.rb +9 -5
- metadata +6 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bcdb20531f70a01428ccebf296156c2983b173e336aaf2d91e13a7140c08058
|
4
|
+
data.tar.gz: b1910202c610ebcc89770226462a00fd80f3d1703cdc02291beab303dba3993a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5c1e1b85ebdf611e50e033c5190f901f5ced19972aa97a83cfd9ac3683dbb2dbc749a4beeea307a5d956118e5fd1121709c4ef59796eb21b0df559978deadd5
|
7
|
+
data.tar.gz: a011de5dac1c3d11f8c9dcdaa3506e63083f3037556350ff194bf03c2dc6a5a504560c0746af305af81c73de5ab900cac96e4d0c73d208257833dd8dc0ce7cf7
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/motion-html-pipeline.svg)](http://badge.fury.io/rb/motion-html-pipeline)
|
4
4
|
[![Build Status](https://travis-ci.org/digitalmoksha/motion-html-pipeline.svg?branch=master)](https://travis-ci.org/digitalmoksha/motion-html-pipeline)
|
5
|
+
[![Platform](https://img.shields.io/badge/platform-macos%20|%20ios-lightgrey.svg)](https://shields.io/)
|
6
|
+
[![Language](https://img.shields.io/badge/language-RubyMotion-red.svg)](http://www.rubymotion.com)
|
5
7
|
|
6
8
|
_This gem is a port of the [`html-pipeline` gem](https://github.com/jch/html-pipeline) to RubyMotion, for use on iOS and macOS. Currently synced with `html-pipeline` release [`v.2.12.3`](https://github.com/jch/html-pipeline/releases/tag/v2.12.3)_
|
7
9
|
|
@@ -64,7 +66,7 @@ would output
|
|
64
66
|
|
65
67
|
Filters can be combined into a pipeline which causes each filter to hand its
|
66
68
|
output to the next filter's input. So if you wanted to have content be
|
67
|
-
filtered through the `ImageFilter` and then wrap it in an `<a>` tag with
|
69
|
+
filtered through the `ImageFilter` and then wrap it in an `<a>` tag with
|
68
70
|
a max-width inline style:
|
69
71
|
|
70
72
|
```ruby
|
@@ -243,7 +245,7 @@ Here are some extensions people have built:
|
|
243
245
|
|
244
246
|
## Instrumenting
|
245
247
|
|
246
|
-
_Although instrumenting was ported, it has not been used real-world, and may not work
|
248
|
+
_Although instrumenting was ported, it has not been used real-world, and may not work
|
247
249
|
properly at this time._
|
248
250
|
|
249
251
|
Filters and Pipelines can be set up to be instrumented when called. The pipeline
|
data/lib/motion-html-pipeline.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
unless defined?(Motion::Project::Config)
|
4
|
-
raise "This file must be required within a RubyMotion project Rakefile."
|
5
|
-
end
|
3
|
+
raise 'This file must be required within a RubyMotion project Rakefile.' unless defined?(Motion::Project::Config)
|
6
4
|
|
7
5
|
require 'motion-cocoapods'
|
8
6
|
|
9
7
|
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
10
8
|
Motion::Project::App.setup do |app|
|
11
|
-
app.files.unshift(Dir.glob(File.join(lib_dir_path,
|
9
|
+
app.files.unshift(Dir.glob(File.join(lib_dir_path, 'motion-html-pipeline/**/*.rb')))
|
12
10
|
|
13
11
|
app.pods do
|
14
|
-
pod 'HTMLKit', '~>
|
12
|
+
pod 'HTMLKit', '~> 4.2'
|
15
13
|
end
|
16
14
|
end
|
@@ -42,8 +42,10 @@ module MotionHTMLPipeline
|
|
42
42
|
|
43
43
|
# Public: String name for this Pipeline. Defaults to Class name.
|
44
44
|
attr_writer :instrumentation_name
|
45
|
+
|
45
46
|
def instrumentation_name
|
46
47
|
return @instrumentation_name if defined?(@instrumentation_name)
|
48
|
+
|
47
49
|
@instrumentation_name = self.class.name
|
48
50
|
end
|
49
51
|
|
@@ -54,6 +56,7 @@ module MotionHTMLPipeline
|
|
54
56
|
|
55
57
|
def initialize(filters, default_context = {}, result_class = nil)
|
56
58
|
raise ArgumentError, 'default_context cannot be nil' if default_context.nil?
|
59
|
+
|
57
60
|
@filters = filters.flatten.freeze
|
58
61
|
@default_context = default_context.freeze
|
59
62
|
@result_class = result_class || Hash
|
@@ -132,12 +135,11 @@ module MotionHTMLPipeline
|
|
132
135
|
# block, otherwise the block is ran without instrumentation.
|
133
136
|
#
|
134
137
|
# Returns the result of the provided block.
|
135
|
-
def instrument(event, payload = nil)
|
138
|
+
def instrument(event, payload = nil, &block)
|
136
139
|
payload ||= default_payload
|
137
140
|
return yield(payload) unless instrumentation_service
|
138
|
-
|
139
|
-
|
140
|
-
end
|
141
|
+
|
142
|
+
instrumentation_service.instrument event, payload, &block
|
141
143
|
end
|
142
144
|
|
143
145
|
# Internal: Default payload for instrumentation.
|
@@ -19,8 +19,10 @@ module MotionHTMLPipeline
|
|
19
19
|
def call
|
20
20
|
doc.css('img').each do |element|
|
21
21
|
next if element['src'].nil? || element['src'].empty?
|
22
|
+
|
22
23
|
src = element['src'].strip
|
23
24
|
next if src.start_with? 'http'
|
25
|
+
|
24
26
|
base = if src.start_with? '/'
|
25
27
|
image_base_url
|
26
28
|
else
|
@@ -10,7 +10,7 @@ module MotionHTMLPipeline
|
|
10
10
|
|
11
11
|
class ImageFilter < TextFilter
|
12
12
|
def call
|
13
|
-
@text.gsub(
|
13
|
+
@text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
|
14
14
|
%(<img src="#{match}" alt=""/>)
|
15
15
|
end
|
16
16
|
end
|
@@ -7,6 +7,7 @@ module MotionHTMLPipeline
|
|
7
7
|
|
8
8
|
def initialize(text, context = nil, result = nil)
|
9
9
|
raise TypeError, 'text cannot be HTML' if text.is_a?(DocumentFragment)
|
10
|
+
|
10
11
|
# Ensure that this is always a string
|
11
12
|
@text = text.respond_to?(:to_str) ? text.to_str : text.to_s
|
12
13
|
super nil, context, result
|
@@ -35,15 +35,15 @@ describe 'MotionHTMLPipeline::Pipeline::AbsoluteSourceFilterTest' do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'test_fails_when_context_is_missing' do
|
38
|
-
expect{ AbsoluteSourceFilter.call('<img src="img.png">', {}) }.to raise_error(RuntimeError)
|
39
|
-
expect{ AbsoluteSourceFilter.call('<img src="/img.png">', {}) }.to raise_error(RuntimeError)
|
38
|
+
expect { AbsoluteSourceFilter.call('<img src="img.png">', {}) }.to raise_error(RuntimeError)
|
39
|
+
expect { AbsoluteSourceFilter.call('<img src="/img.png">', {}) }.to raise_error(RuntimeError)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'test_tells_you_where_context_is_required' do
|
43
|
-
expect{ AbsoluteSourceFilter.call('<img src="img.png">', {}) }
|
43
|
+
expect { AbsoluteSourceFilter.call('<img src="img.png">', {}) }
|
44
44
|
.to raise_error(RuntimeError, 'MotionHTMLPipeline::Pipeline::AbsoluteSourceFilter')
|
45
45
|
|
46
|
-
expect{ AbsoluteSourceFilter.call('<img src="/img.png">', {}) }
|
46
|
+
expect { AbsoluteSourceFilter.call('<img src="/img.png">', {}) }
|
47
47
|
.to raise_error(RuntimeError, 'MotionHTMLPipeline::Pipeline::AbsoluteSourceFilter')
|
48
48
|
end
|
49
49
|
end
|
@@ -48,7 +48,7 @@ describe 'MotionHTMLPipeline::Pipeline::HttpsFilter' do
|
|
48
48
|
it 'test_validates_http_url' do
|
49
49
|
@options.clear
|
50
50
|
|
51
|
-
expect{ filter('') }
|
51
|
+
expect { filter('') }
|
52
52
|
.to raise_error(ArgumentError, 'MotionHTMLPipeline::Pipeline::HttpsFilter: :http_url')
|
53
53
|
end
|
54
54
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
#
|
5
5
|
# rake spec filter="name of spec" # To filter by spec name
|
6
6
|
# rake spec files=foo_spec filter="name of spec"
|
7
|
-
# rake spec filter_context="this doesn't work yet" # To filter by context name (doesn't work
|
7
|
+
# rake spec filter_context="this doesn't work yet" # To filter by context name (doesn't work
|
8
|
+
# until MacBacon implements it)
|
8
9
|
# rake spec hide_backtraces=yes # Hide backtraces
|
9
10
|
|
10
|
-
|
11
11
|
# From http://chen.do/blog/2013/06/03/running-individual-specs-with-rubymotion/
|
12
12
|
#------------------------------------------------------------------------------
|
13
13
|
def silence_warnings(&block)
|
@@ -24,12 +24,12 @@ end
|
|
24
24
|
silence_warnings do
|
25
25
|
module Bacon
|
26
26
|
if ENV['filter']
|
27
|
-
|
27
|
+
warn "Filtering specs that match: #{ENV['filter']}"
|
28
28
|
RestrictName = Regexp.new(ENV['filter'])
|
29
29
|
end
|
30
30
|
|
31
31
|
if ENV['filter_context']
|
32
|
-
|
32
|
+
warn "Filtering contexts that match: #{ENV['filter_context']}"
|
33
33
|
RestrictContext = Regexp.new(ENV['filter_context'])
|
34
34
|
end
|
35
35
|
|
@@ -40,11 +40,15 @@ end
|
|
40
40
|
#------------------------------------------------------------------------------
|
41
41
|
# TODO total hack - without this, the `bacon-expect` gem doesn't get used, and
|
42
42
|
# on iOS I get errors like
|
43
|
-
# *** Terminating app due to uncaught exception 'NameError',
|
43
|
+
# *** Terminating app due to uncaught exception 'NameError',
|
44
|
+
# reason: '.../bacon-expect/lib/bacon-expect/matchers/eql.rb:2:in `<main>:
|
45
|
+
# uninitialized constant BaconExpect::Matcher::SingleMethod (NameError)
|
44
46
|
# and on macOS it only show up as `*nil description*`
|
47
|
+
# rubocop: disable Lint/EmptyClass
|
45
48
|
module BaconExpect
|
46
49
|
module Matcher
|
47
50
|
class SingleMethod
|
48
51
|
end
|
49
52
|
end
|
50
53
|
end
|
54
|
+
# rubocop: enable Lint/EmptyClass
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-html-pipeline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Tomayko
|
8
8
|
- Jerry Cheung
|
9
9
|
- Garen J. Torikian
|
10
10
|
- Brett Walker
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: motion-cocoapods
|
@@ -27,20 +27,6 @@ dependencies:
|
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: rake
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
requirements:
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '0'
|
37
|
-
type: :development
|
38
|
-
prerelease: false
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
30
|
- !ruby/object:Gem::Dependency
|
45
31
|
name: motion-expect
|
46
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,7 +96,7 @@ homepage: https://github.com/digitalmoksha/motion-html-pipeline
|
|
110
96
|
licenses:
|
111
97
|
- MIT
|
112
98
|
metadata: {}
|
113
|
-
post_install_message:
|
99
|
+
post_install_message:
|
114
100
|
rdoc_options: []
|
115
101
|
require_paths:
|
116
102
|
- lib
|
@@ -125,8 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
111
|
- !ruby/object:Gem::Version
|
126
112
|
version: '0'
|
127
113
|
requirements: []
|
128
|
-
rubygems_version: 3.
|
129
|
-
signing_key:
|
114
|
+
rubygems_version: 3.1.4
|
115
|
+
signing_key:
|
130
116
|
specification_version: 4
|
131
117
|
summary: Helpers for processing content through a chain of filters (RubyMotion version,
|
132
118
|
ported from https://github.com/jch/html-pipeline)
|