paggio 0.2.6 → 0.3.0

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 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: