Skip to content

Commit b271ed2

Browse files
committed
Enhanced ruby_gem with many more options; updated README
1 parent ee1ffdf commit b271ed2

File tree

9 files changed

+352
-164
lines changed

9 files changed

+352
-164
lines changed

README.md

Lines changed: 316 additions & 114 deletions
Large diffs are not rendered by default.

examples/example_gem/BUILD.bazel

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ package(default_visibility = ["//:__subpackages__"])
77

88
ruby_gem(
99
name = "example_gem",
10+
srcs = [
11+
"//lib:example_gem",
12+
],
1013
gem_author_emails = [
1114
1215
@@ -15,10 +18,6 @@ ruby_gem(
1518
"Coinbase",
1619
"BazelRuby",
1720
],
18-
gem_dependencies = {
19-
"colored2": "",
20-
"hashie": "",
21-
},
2221
gem_description = "Example gem to demonstrate Bazel Gem packaging",
2322
gem_development_dependencies = {
2423
"rspec": "",
@@ -27,9 +26,10 @@ ruby_gem(
2726
},
2827
gem_homepage = "https://github.com/bazelruby/rules_ruby",
2928
gem_name = "example-gem",
29+
gem_runtime_dependencies = {
30+
"colored2": "",
31+
"hashie": "",
32+
},
3033
gem_summary = "Example gem to demonstrate Bazel Gem packaging",
3134
gem_version = "0.1.0",
32-
deps = [
33-
"//lib:example_gem",
34-
],
3535
)

ruby/private/bundle/def.bzl

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ load(
99
"SCRIPT_INSTALL_GEM",
1010
)
1111
load("//ruby/private:providers.bzl", "RubyRuntimeContext")
12-
load("//ruby/private/tools:deprecations.bzl", "deprecated_attribute")
1312

1413
# Runs bundler with arbitrary arguments
1514
# eg: run_bundler(runtime_ctx, [ "lock", " --gemfile", "Gemfile.rails5" ])
@@ -159,12 +158,7 @@ def _ruby_bundle_impl(ctx):
159158
ctx.symlink(ctx.attr._create_bundle_build_file, SCRIPT_BUILD_FILE_GENERATOR)
160159
ctx.symlink(ctx.attr._install_bundler, SCRIPT_INSTALL_GEM)
161160

162-
# version is too generic for this operation
163-
deprecated_attribute(ctx, "version", "bundler_version")
164-
if ctx.attr.bundler_version:
165-
bundler_version = ctx.attr.bundler_version
166-
else:
167-
bundler_version = ctx.attr.version
161+
bundler_version = ctx.attr.bundler_version
168162

169163
# Setup this provider that we pass around between functions for convenience
170164
runtime_ctx = RubyRuntimeContext(

ruby/private/constants.bzl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,9 @@ BUNDLE_ATTRS = {
7878
"gemfile_lock": attr.label(
7979
allow_single_file = True,
8080
),
81-
"version": attr.string(
82-
mandatory = False,
83-
),
8481
"bundler_version": attr.string(
8582
default = DEFAULT_BUNDLER_VERSION,
8683
),
87-
"gemspec": attr.label(
88-
allow_single_file = True,
89-
),
9084
"excludes": attr.string_list_dict(
9185
doc = "List of glob patterns per gem to be excluded from the library",
9286
),
@@ -115,7 +109,7 @@ GEMSPEC_ATTRS = {
115109
"gem_homepage": attr.string(),
116110
"gem_authors": attr.string_list(),
117111
"gem_author_emails": attr.string_list(),
118-
"gem_dependencies": attr.string_dict(
112+
"gem_runtime_dependencies": attr.string_dict(
119113
allow_empty = True,
120114
doc = "Key value pairs of gem dependencies (name, version) where version can be None",
121115
),
@@ -132,7 +126,9 @@ GEMSPEC_ATTRS = {
132126
allow_files = True,
133127
default = [],
134128
),
135-
"require_paths": attr.string_list(),
129+
"require_paths": attr.string_list(
130+
default = ["lib"],
131+
),
136132
"deps": attr.label_list(
137133
allow_files = True,
138134
),

ruby/private/gemspec/def.bzl

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def _unique_elems(list):
3333
# Converts gem name and optionally a version into a
3434
# gemspec line "spec.add_[development_]dependency 'gem-name', [ 'gem-version' ]"
3535
def _gem_dependency(name, version = "", development = False):
36-
dependency_type = "spec.add_development_dependency" if development else "spec.add_dependency"
36+
dependency_type = "spec.add_development_dependency" if development else "spec.add_runtime_dependency"
3737

3838
output = "%s '%s'" % (dependency_type, name)
3939
if version != "":
@@ -54,13 +54,13 @@ def _markdown_ul(list = []):
5454

5555
# Converts a dictionary (key = gem name, value = gem version or None)
5656
# to a string to be inserted into the gemspec.
57-
def _gem_dependencies(gem_dict = {}):
57+
def _gem_runtime_dependencies(gem_dict = {}):
5858
dependencies = [_gem_dependency(k, v) for k, v in gem_dict.items()]
5959
return ("\n " + "\n ".join(dependencies))
6060

6161
# Converts a dictionary (key = gem name, value = gem version or None)
6262
# to a string to be inserted into the gemspec.
63-
def _markdown_gem_dependencies(gem_dict = {}, type = "Runtime"):
63+
def _markdown_gem_runtime_dependencies(gem_dict = {}, type = "Runtime"):
6464
dependencies = [_markdown_gem_dependency(k, v) for k, v in gem_dict.items()]
6565
output = "\n### %s Dependencies\n\n" % type
6666
output += "\n " + "\n ".join(dependencies) + "\n\n"
@@ -93,9 +93,9 @@ def _gem_impl(ctx):
9393
substitutions = {
9494
"{gem_author_emails}": repr(ctx.attr.gem_author_emails),
9595
"{gem_authors}": repr(ctx.attr.gem_authors),
96-
"{gem_dependencies}": _gem_dependencies(ctx.attr.gem_dependencies),
96+
"{gem_runtime_dependencies}": _gem_runtime_dependencies(ctx.attr.gem_runtime_dependencies),
9797
"{gem_description}": ctx.attr.gem_description if ctx.attr.gem_description else ctx.attr.gem_summary,
98-
"{gem_development_dependencies}": _gem_dependencies(ctx.attr.gem_development_dependencies),
98+
"{gem_development_dependencies}": _gem_runtime_dependencies(ctx.attr.gem_development_dependencies),
9999
"{gem_homepage}": ctx.attr.gem_homepage,
100100
"{gem_name}": ctx.attr.gem_name,
101101
"{gem_require_paths}": repr(["lib"]),
@@ -105,19 +105,19 @@ def _gem_impl(ctx):
105105
},
106106
)
107107

108-
_dependencies = _markdown_gem_dependencies(ctx.attr.gem_dependencies, "Runtime")
109-
_dependencies += _markdown_gem_dependencies(ctx.attr.gem_development_dependencies, "Development")
108+
_dependencies = _markdown_gem_runtime_dependencies(ctx.attr.gem_runtime_dependencies, "Runtime")
109+
_dependencies += _markdown_gem_runtime_dependencies(ctx.attr.gem_development_dependencies, "Development")
110110

111111
ctx.actions.expand_template(
112112
template = ctx.file._readme_template,
113113
output = gem_readme,
114114
substitutions = {
115115
"{gem_authorship}": _markdown_ul(ctx.attr.gem_authors),
116-
"{gem_dependencies}": _dependencies,
116+
"{gem_runtime_dependencies}": _dependencies,
117117
"{gem_description}": ctx.attr.gem_description if ctx.attr.gem_description else ctx.attr.gem_summary,
118118
"{gem_name}": ctx.attr.gem_name,
119-
"{gem_title}": _gem_title,
120119
"{gem_summary}": ctx.attr.gem_summary,
120+
"{gem_title}": _gem_title,
121121
"{gem_version}": ctx.attr.gem_version,
122122
},
123123
)
@@ -130,7 +130,7 @@ def _gem_impl(ctx):
130130
ctx = ctx,
131131
gem_author_emails = ctx.attr.gem_author_emails,
132132
gem_authors = ctx.attr.gem_authors,
133-
gem_dependencies = ctx.attr.gem_dependencies,
133+
gem_runtime_dependencies = ctx.attr.gem_runtime_dependencies,
134134
gem_description = ctx.attr.gem_description,
135135
gem_development_dependencies = ctx.attr.gem_development_dependencies,
136136
gem_homepage = ctx.attr.gem_homepage,
@@ -146,14 +146,20 @@ gemspec = rule(
146146
provides = [DefaultInfo, RubyGem],
147147
)
148148

149-
def gem(name, gem_name, gem_version, srcs = [], **kwargs):
149+
def gem(
150+
name,
151+
gem_name,
152+
gem_version,
153+
srcs,
154+
**kwargs):
150155
_zip_name = "%s-%s" % (gem_name, gem_version)
151-
_gemspec_name = name + "_gemspec"
156+
_gemspec_name = name + ".gemspec"
152157

153158
gemspec(
154159
name = _gemspec_name,
155160
gem_name = gem_name,
156161
gem_version = gem_version,
162+
srcs = srcs,
157163
**kwargs
158164
)
159165

ruby/private/gemspec/gemspec_template.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
1919

2020
spec.required_ruby_version = '>= 2.3'
2121

22-
{gem_dependencies}
22+
{gem_runtime_dependencies}
2323

2424
{gem_development_dependencies}
2525
end

ruby/private/gemspec/readme_template.tpl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
# {gem_title} (Version: {gem_version})
1+
# {gem_title}
2+
3+
## Version {gem_version}
24

35
> NOTE: You are reading the auto-generated README for Gem {gem_name}.
46

@@ -12,7 +14,7 @@
1214

1315
## Dependencies
1416

15-
{gem_dependencies}
17+
{gem_runtime_dependencies}
1618

1719
## Author(s)
1820

ruby/private/providers.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ RubyGem = provider(
2121
"ctx",
2222
"gem_author_emails",
2323
"gem_authors",
24-
"gem_dependencies",
24+
"gem_runtime_dependencies",
2525
"gem_description",
2626
"gem_development_dependencies",
2727
"gem_homepage",

ruby/private/tools/deprecations.bzl

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)