paggio 0.2.6 → 0.3.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
- SHA1:
3
- metadata.gz: a57e0c3e895231586ffd119912bceb966fdd204a
4
- data.tar.gz: 2817df913b3d2d25e758b8a3ccbf07fda21d4a8c
2
+ SHA256:
3
+ metadata.gz: 2fefeb82ee3a488498bd68beb67ff153d799ed90d0048ab6431548af06bae9b3
4
+ data.tar.gz: b4dad7ad19b3976bb1b92fab92cde617338e4d6e02a777891ed04199bb7a5695
5
5
  SHA512:
6
- metadata.gz: 587e96e5761f616374af3e0173a32369f4a60f6506105fc20aa44badd896a2e087040ecad9cd236ca5a06cf663aa99934e8a93fa04fa4dd994fbc582adc63e05
7
- data.tar.gz: 3a9484f1d58634751a49b812a519a0a29f15f89474d5053e4d8d9d81e0d1498d6fca8354e68997e93248fe021359578fa550627d3101a39a3f02d05095c07aaa
6
+ metadata.gz: 8e8004f7ba60ad66eae1d64f1be17766f544459aa87b0876bffe3cef9c17997b6dfb16ae96192c33ead174efb146f9b2827245aa3f144b188296bfbb1f95f81a
7
+ data.tar.gz: f37fab29e7fa8404c2f6adec4b711b3a4b644b691fe40065711501e28b12e9369e7e8a370f6174d45bef8cc233c3ab7683cf2b571b55a92220f53f277120b20f
@@ -0,0 +1,29 @@
1
+ name: Tests
2
+ on:
3
+ push:
4
+ branches:
5
+ - master
6
+ - "*-stable"
7
+ - "*/ci-check"
8
+ pull_request:
9
+
10
+ jobs:
11
+ tests:
12
+ name: Tests
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [2.6, 2.7, 3.0]
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: Checkout code
20
+ uses: actions/checkout@v2
21
+
22
+ - name: Setup Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ bundler-cache: true
27
+
28
+ - name: Run tests
29
+ run: bundle exec rake
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- paggio (0.2.4)
4
+ paggio (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -24,3 +24,6 @@ DEPENDENCIES
24
24
  paggio!
25
25
  rake
26
26
  rspec
27
+
28
+ BUNDLED WITH
29
+ 2.1.4
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
1
  #! /usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'bundler/gem_tasks'
2
5
  require 'rake'
3
6
 
4
- task :default => :test
7
+ require "rspec/core/rake_task"
8
+ RSpec::Core::RakeTask.new(:rspec)
5
9
 
6
- task :test do
7
- FileUtils.cd 'spec' do
8
- sh 'rspec css_spec.rb html_spec.rb --backtrace --color --format doc'
9
- end
10
- end
10
+ task :default => :rspec
@@ -39,7 +39,7 @@ class Definition < BasicObject
39
39
  "url(#{value.to_s.inspect})"
40
40
  end
41
41
 
42
- %w[url blur brightness rotate contrast grayscale invert opacity saturate sepia].each {|name|
42
+ %w[blur brightness rotate contrast grayscale invert opacity saturate sepia].each {|name|
43
43
  define_method name do |value|
44
44
  "#{name}(#{value})"
45
45
  end
data/lib/paggio/css.rb CHANGED
@@ -38,7 +38,7 @@ class CSS < BasicObject
38
38
 
39
39
  attr_reader :rules, :media, :fonts, :animations
40
40
 
41
- def initialize(&block)
41
+ def initialize(defer: false, &block)
42
42
  ::Kernel.raise ::ArgumentError, 'no block given' unless block
43
43
 
44
44
  @selector = []
@@ -46,12 +46,19 @@ class CSS < BasicObject
46
46
  @rules = []
47
47
  @fonts = []
48
48
  @animations = []
49
+
50
+ @block = block
49
51
 
50
- if block.arity == 0
51
- instance_exec(&block)
52
+ build! unless defer
53
+ end
54
+
55
+ def build!(force_call: false)
56
+ if !force_call && @block.arity == 0
57
+ instance_exec(&@block)
52
58
  else
53
- block.call(self)
59
+ @block.call(self)
54
60
  end
61
+ @block = nil
55
62
  end
56
63
 
57
64
  def rule(*names, &block)
@@ -31,7 +31,7 @@ class Element < BasicObject
31
31
 
32
32
  const = name.capitalize
33
33
 
34
- if const_defined?(const)
34
+ if !const.to_s.include?('-') && const_defined?(const)
35
35
  const_get(const).new(owner, name, attributes)
36
36
  else
37
37
  super
data/lib/paggio/html.rb CHANGED
@@ -16,24 +16,31 @@ class Paggio
16
16
  class HTML < BasicObject
17
17
  attr_reader :version
18
18
 
19
- def initialize(version = 5, &block)
19
+ def initialize(version = 5, defer: false, &block)
20
20
  ::Kernel.raise ::ArgumentError, 'no block given' unless block
21
21
 
22
22
  @version = version
23
23
  @roots = []
24
24
  @current = nil
25
25
 
26
- if block.arity == 0
27
- instance_exec(&block)
28
- else
29
- block.call(self)
30
- end
26
+ @block = block
27
+
28
+ build! unless defer
31
29
  end
32
30
 
33
31
  def <<(what)
34
32
  (@current || @roots) << what
35
33
  end
36
34
 
35
+ def build!(force_call: false)
36
+ if !force_call && @block.arity == 0
37
+ instance_exec(&@block)
38
+ else
39
+ @block.call(self)
40
+ end
41
+ @block = nil
42
+ end
43
+
37
44
  def root!
38
45
  @roots.first
39
46
  end
@@ -64,6 +71,11 @@ class HTML < BasicObject
64
71
  @roots.each(&block)
65
72
  end
66
73
 
74
+ def text(*fragments, &block)
75
+ fragments << yield if block
76
+ fragments.each { |fragment| self << fragment }
77
+ end
78
+
67
79
  def method_missing(name, *args, &block)
68
80
  if name.to_s.end_with? ?!
69
81
  return super
@@ -92,6 +104,9 @@ class HTML < BasicObject
92
104
  element
93
105
  end
94
106
 
107
+ # Support for custom elements
108
+ alias e method_missing
109
+
95
110
  def inspect
96
111
  if @roots.empty?
97
112
  "#<HTML(#@version)>"
data/paggio.gemspec CHANGED
@@ -1,12 +1,12 @@
1
1
  Gem::Specification.new {|s|
2
2
  s.name = 'paggio'
3
- s.version = '0.2.6'
3
+ s.version = '0.3.0'
4
4
  s.author = 'meh.'
5
5
  s.email = 'meh@schizofreni.co'
6
- s.homepage = 'http://github.com/meh/paggio'
6
+ s.homepage = 'http://github.com/opal/paggio'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.summary = 'Ruby, HTML and CSS at war.'
9
- s.license = 'WTFPL'
9
+ s.license = 'WTFPL'
10
10
 
11
11
  s.files = `git ls-files`.split("\n")
12
12
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
data/spec/html_spec.rb CHANGED
@@ -150,4 +150,36 @@ describe Paggio::HTML do
150
150
 
151
151
  expect(html.to_s).to eq("<i class=\"illegal icon-legal\">\n</i>\n")
152
152
  end
153
+
154
+ it 'allows for defered build' do
155
+ html = Paggio::HTML.new(defer: true) do
156
+ div
157
+ end
158
+ expect(html.roots!.length).to eq(0)
159
+
160
+ html.build!
161
+ expect(html.roots!.length).to eq(1)
162
+ end
163
+
164
+ it 'allows for custom elements' do
165
+ html = Paggio.html! do
166
+ e('custom-element').test.test!
167
+ end
168
+
169
+ expect(html.to_s).to eq("<custom-element id=\"test\" class=\"test\">\n</custom-element>\n")
170
+ end
171
+
172
+ it 'supports text nodes' do
173
+ html = Paggio.html! do
174
+ div {
175
+ text "test"
176
+ text { "test" }
177
+ text "test"
178
+ div
179
+ text "test"
180
+ }
181
+ end
182
+
183
+ expect(html.to_s).to eq("<div>\n\ttest\n\ttest\n\ttest\n\t<div>\n\t</div>\n\ttest\n</div>\n")
184
+ end
153
185
  end
metadata CHANGED
@@ -1,21 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paggio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - meh.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2021-11-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description:
13
+ description:
14
14
  email: meh@schizofreni.co
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - ".github/workflows/build.yml"
20
+ - ".rspec"
19
21
  - ".travis.yml"
20
22
  - Gemfile
21
23
  - Gemfile.lock
@@ -54,11 +56,11 @@ files:
54
56
  - paggio.gemspec
55
57
  - spec/css_spec.rb
56
58
  - spec/html_spec.rb
57
- homepage: http://github.com/meh/paggio
59
+ homepage: http://github.com/opal/paggio
58
60
  licenses:
59
61
  - WTFPL
60
62
  metadata: {}
61
- post_install_message:
63
+ post_install_message:
62
64
  rdoc_options: []
63
65
  require_paths:
64
66
  - lib
@@ -73,9 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
75
  - !ruby/object:Gem::Version
74
76
  version: '0'
75
77
  requirements: []
76
- rubyforge_project:
77
- rubygems_version: 2.4.5.1
78
- signing_key:
78
+ rubygems_version: 3.2.22
79
+ signing_key:
79
80
  specification_version: 4
80
81
  summary: Ruby, HTML and CSS at war.
81
82
  test_files: