sass-embedded 0.7.11 → 0.7.15

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
2
  SHA256:
3
- metadata.gz: 9f134ae1ed21b1641b3c781ed7dc7c901c059ce3a8c9ac7038f4ee5f2ae9d313
4
- data.tar.gz: 3c4758ba9de6440b17acca78d23d9b60ffd7b6683462168bd44f1aff0f466ded
3
+ metadata.gz: fe31a4373aa2146f0eee250178df2e35383141389699a7af4a7f4c0d672631fd
4
+ data.tar.gz: 821ce7306f41e0e037720df4bd048e248113461dcdcd7ec8c8bb99a05d72339a
5
5
  SHA512:
6
- metadata.gz: cbe0c28c51e406f51262ca10bffe6453caa73badc17cbfa61938030bbf94c9a1d9747dacde5471a28b9403409082da526815b5c23f37d0ade1844fd06cfd3ad2
7
- data.tar.gz: d57f31a01741d59aa49bbf74be30d41f0da85f26b9d555e8a60695f9490a74e5043e9c7e6e148e6bf9d7fe5a740ea7e9cd34725f52ec68d46998b9a9a0b3cf8b
6
+ metadata.gz: f1ba39e8ef36ab9b50c51eebded39ee7065fb3e51d93af224c66ef246ff76981a2eec2ea6f5572f0c1d90482c431f0a713a3e7424236bb3ed3af11aa36607cc9
7
+ data.tar.gz: 96c187418ea97fc784cdb5ade9a837aa2e5671d7bc8dd0a1c34e97f4612079d95c91dfbb0a358ebe7449a5db5a46d209183f3cc4fd0464ce9e243b62721df22f
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Embedded Sass Host for Ruby
2
2
 
3
3
  [![build](https://github.com/ntkme/embedded-host-ruby/actions/workflows/build.yml/badge.svg)](https://github.com/ntkme/embedded-host-ruby/actions/workflows/build.yml)
4
+ [![gem](https://badge.fury.io/rb/sass-embedded.svg)](https://rubygems.org/gems/sass-embedded)
4
5
 
5
6
  This is a Ruby library that implements the host side of the [Embedded Sass protocol](https://github.com/sass/sass-embedded-protocol).
6
7
 
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sass
4
+ module Dependencies
5
+ REQUIREMENTS = {
6
+ 'protocolbuffers/protobuf' => '~> 3.17',
7
+ 'sass/embedded-protocol' => '~> 1.0.0-beta.12',
8
+ 'sass/dart-sass-embedded' => '~> 1.0.0-beta.10'
9
+ }.freeze
10
+ end
11
+ end
data/ext/extconf.rb CHANGED
@@ -5,13 +5,14 @@ require 'mkmf'
5
5
  require 'json'
6
6
  require 'open-uri'
7
7
  require 'fileutils'
8
+ require_relative './dependencies'
8
9
  require_relative '../lib/sass/platform'
9
10
 
10
11
  module Sass
11
12
  # The dependency downloader. This downloads all the dependencies during gem
12
13
  # installation. The companion Makefile then unpacks all downloaded
13
- # dependencies. By default it downloads the latest release of each
14
- # dependency from GitHub releases.
14
+ # dependencies. By default it downloads the release of each dependency
15
+ # from GitHub releases.
15
16
  #
16
17
  # It is possible to specify an alternative source or version of each
17
18
  # dependency. Local sources can be used for offline installation.
@@ -23,9 +24,9 @@ module Sass
23
24
  # --with-sass-embedded-protocol=file:///path/to/embedded_sass.proto
24
25
  class Extconf
25
26
  def initialize
26
- get_with_config('protoc', true) { latest_protoc }
27
- get_with_config('sass-embedded', true) { latest_sass_embedded }
28
- get_with_config('sass-embedded-protocol', true) { latest_sass_embedded_protocol }
27
+ get_with_config('protoc', true) { default_protoc }
28
+ get_with_config('sass-embedded', true) { default_sass_embedded }
29
+ get_with_config('sass-embedded-protocol', true) { default_sass_embedded_protocol }
29
30
  end
30
31
 
31
32
  private
@@ -62,34 +63,42 @@ module Sass
62
63
  raise
63
64
  end
64
65
  rescue StandardError
65
- raise "Failed to get: #{uri}"
66
+ raise "Failed to get: #{uri_s}"
66
67
  end
67
68
 
68
- def latest_release(repo, prerelease: false, tag: false)
69
- if prerelease || tag
70
- headers = {}
71
- headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
72
- if tag
73
- URI.parse("https://api.github.com/repos/#{repo}/tags").open(headers) do |file|
74
- JSON.parse(file.read)[0]['name']
75
- end
76
- else
77
- URI.parse("https://api.github.com/repos/#{repo}/releases").open(headers) do |file|
78
- JSON.parse(file.read)[0]['tag_name']
79
- end
80
- end
81
- else
69
+ def resolve_tag_name(repo, *requirements, gh_release: true)
70
+ requirements = Gem::Requirement.create(*requirements)
71
+
72
+ if requirements == Gem::Requirement.default && gh_release
82
73
  URI.parse("https://github.com/#{repo}/releases/latest").open do |file|
83
74
  File.basename file.base_uri.to_s
84
75
  end
76
+ else
77
+ begin
78
+ headers = {}
79
+ headers['Authorization'] = "token #{ENV['GITHUB_TOKEN']}" if ENV['GITHUB_TOKEN']
80
+ if gh_release
81
+ URI.parse("https://api.github.com/repos/#{repo}/releases?per_page=100").open(headers) do |file|
82
+ JSON.parse(file.read).map { |release| release['tag_name'] }
83
+ end
84
+ else
85
+ URI.parse("https://api.github.com/repos/#{repo}/tags?per_page=100").open(headers) do |file|
86
+ JSON.parse(file.read).map { |tag| tag['name'] }
87
+ end
88
+ end
89
+ rescue OpenURI::HTTPError
90
+ requirements.requirements
91
+ .map { |requirement| requirement.last.to_s.gsub('.pre.', '-') }
92
+ end
93
+ .find { |version| Gem::Version.correct?(version) && requirements.satisfied_by?(Gem::Version.new(version)) }
94
+ &.to_s
85
95
  end
86
96
  end
87
97
 
88
- def latest_sass_embedded
98
+ def default_sass_embedded
89
99
  repo = 'sass/dart-sass-embedded'
90
100
 
91
- # TODO: don't use prerelease once a release is available
92
- tag_name = latest_release repo, prerelease: true
101
+ tag_name = resolve_tag_name(repo, Sass::Dependencies::REQUIREMENTS[repo])
93
102
 
94
103
  os = case Platform::OS
95
104
  when 'darwin'
@@ -125,10 +134,12 @@ module Sass
125
134
  "https://github.com/#{repo}/releases/download/#{tag_name}/sass_embedded-#{tag_name}-#{os}-#{arch}.#{ext}"
126
135
  end
127
136
 
128
- def latest_protoc
137
+ def default_protoc
129
138
  repo = 'protocolbuffers/protobuf'
130
139
 
131
- tag_name = latest_release repo
140
+ spec = Gem::Dependency.new('google-protobuf', Sass::Dependencies::REQUIREMENTS[repo]).to_spec
141
+
142
+ tag_name = "v#{spec.version}"
132
143
 
133
144
  os = case Platform::OS
134
145
  when 'darwin'
@@ -172,11 +183,10 @@ module Sass
172
183
  "https://github.com/#{repo}/releases/download/#{tag_name}/protoc-#{tag_name[1..]}-#{os_arch}.#{ext}"
173
184
  end
174
185
 
175
- def latest_sass_embedded_protocol
186
+ def default_sass_embedded_protocol
176
187
  repo = 'sass/embedded-protocol'
177
188
 
178
- # TODO: don't use tag once a release is available
179
- tag_name = latest_release repo, tag: true
189
+ tag_name = resolve_tag_name(repo, Sass::Dependencies::REQUIREMENTS[repo], gh_release: false)
180
190
 
181
191
  "https://raw.githubusercontent.com/#{repo}/#{tag_name}/embedded_sass.proto"
182
192
  end
data/lib/sass/compile.rb CHANGED
@@ -161,9 +161,13 @@ module Sass
161
161
  end
162
162
 
163
163
  def function_call_response(function_call_request)
164
+ # TODO: convert argument_list to **kwargs
164
165
  EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
165
166
  id: function_call_request.id,
166
- success: @functions[function_call_request.name].call(*function_call_request.arguments)
167
+ success: @functions[function_call_request.name].call(*function_call_request.arguments),
168
+ accessed_argument_lists: function_call_request.arguments
169
+ .filter { |argument| argument.value == :argument_list }
170
+ .map { |argument| argument.argument_list.id }
167
171
  )
168
172
  rescue StandardError => e
169
173
  EmbeddedProtocol::InboundMessage::FunctionCallResponse.new(
@@ -107,21 +107,24 @@ module Sass
107
107
  end
108
108
 
109
109
  def read_varint(readable)
110
- varint = bits = 0
110
+ value = bits = 0
111
111
  loop do
112
112
  byte = readable.readbyte
113
- varint += (byte & 0x7f) << bits
113
+ value |= (byte & 0x7f) << bits
114
114
  bits += 7
115
- break if byte <= 0x7f
115
+ break if byte < 0x80
116
116
  end
117
- varint
117
+ value
118
118
  end
119
119
 
120
- def write_varint(writeable, varint)
121
- while varint.positive?
122
- writeable.write ((varint > 0x7f ? 0x80 : 0) | (varint & 0x7f)).chr
123
- varint >>= 7
120
+ def write_varint(writeable, value)
121
+ bytes = []
122
+ until value < 0x80
123
+ bytes << (0x80 | (value & 0x7f))
124
+ value >>= 7
124
125
  end
126
+ bytes << value
127
+ writeable.write bytes.pack('C*')
125
128
  end
126
129
  end
127
130
  end
data/lib/sass/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sass
4
- VERSION = '0.7.11'
4
+ VERSION = '0.7.15'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.11
4
+ version: 0.7.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-06 00:00:00.000000000 Z
11
+ date: 2021-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.17.0
19
+ version: '3.17'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.17.0
26
+ version: '3.17'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -148,6 +148,7 @@ files:
148
148
  - LICENSE
149
149
  - README.md
150
150
  - ext/Makefile
151
+ - ext/dependencies.rb
151
152
  - ext/extconf.rb
152
153
  - lib/sass.rb
153
154
  - lib/sass/compile.rb
@@ -165,8 +166,8 @@ homepage: https://github.com/ntkme/sass-embedded-host-ruby
165
166
  licenses:
166
167
  - MIT
167
168
  metadata:
168
- source_code_uri: https://github.com/ntkme/sass-embedded-host-ruby/tree/v0.7.11
169
- post_install_message:
169
+ source_code_uri: https://github.com/ntkme/sass-embedded-host-ruby/tree/v0.7.15
170
+ post_install_message:
170
171
  rdoc_options: []
171
172
  require_paths:
172
173
  - lib
@@ -181,8 +182,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  - !ruby/object:Gem::Version
182
183
  version: '0'
183
184
  requirements: []
184
- rubygems_version: 3.2.22
185
- signing_key:
185
+ rubygems_version: 3.2.26
186
+ signing_key:
186
187
  specification_version: 4
187
188
  summary: Use dart-sass with Ruby!
188
189
  test_files: []