----- Original Message -----
> From: "Vít Ondruch" <vondr...@redhat.com>
> To: ruby-sig@lists.fedoraproject.org
> Sent: Thursday, September 15, 2016 2:00:59 PM
> Subject: Re: Macros to modify gem dependencies
> 
> 
> 
> Dne 15.9.2016 v 10:06 Vít Ondruch napsal(a):
> > BTW this is first draft of the macros. I am going to try second
> > implementation, which will probably need to use a bit different syntax
> > for macro calls, but it might replace the 3 lines usage example above
> > with 2 lines version:
> >
> >
> > ```
> >
> > %gemspec_remove_runtime_dependency -n fog-dynect
> > %gemspec_add_runtime_dependency -n fog-dynect ['~> 10.0', '>= 10.1']
> >
> > ```

The above gives me strange result in gemspec

```
s.add_runtime_dependency(%q<fog-dynect>, [">= 10.1", ">= 10.1", "~> 10.0"])

```

However, 

```
%gemspec_add_dep -n fog-dynect '~> 10.0'

```

results in

```
s.add_dependency(%q<fog-dynect>, [">= 10.1", "~> 10.0"])

```

Which I consider correct for the first example.


Also, using the notation below does not produce expected result

```
%gemspec_remove_dep fog-dynect
%gemspec_add_dep -n fog-dynect '~> 10.0' 
%gemspec_add_dep -n fog-dynect '>= 10.1'

```

=>

```
s.add_dependency(%q<fog-dynect>, ["~> 10.0"])

```

FTR, in case of the non-named-variable-macro version (without '-n') the result 
is correct.


> >
> >
> 
> As I promised, this is implementation with the '-n' parameter:
> 
> ```
> %define gemspec_add_runtime_dependency(n:) \
> read -d '' add_runtime_dependency_script << 'EOR' || : \
>   name = '%{-n*}' \
>   version = %{*} \
>   spec = Gem::Specification.load('.%{gem_spec}') \
>   dep = spec.dependencies.detect { |d| d.type == :runtime && d.name ==
> name } \
>   if dep \
>     dep.requirement.concat version \
>   else \
>     spec.add_runtime_dependency name, version \
>   end \
>   File.write '.%{gem_spec}', spec.to_ruby \
> EOR\
> echo "$add_runtime_dependency_script" | ruby \
> %{nil}
> 
> ```

The above can be also written as

```
%define gemspec_add_dep(n:) \
echo ' \
  name = %q<%{-n*}> \
  version = %{*} \
  spec = Gem::Specification.load(%q<.%{gem_spec}>) \
  dep = spec.dependencies.detect { |d| d.type == :runtime && d.name == name } \
  if dep \
    dep.requirement.concat version \
  else \
    spec.add_runtime_dependency name, version \
  end \
  File.write %q<.%{gem_spec}>, spec.to_ruby \
' | ruby
%{nil}

```

I was not sure whether I could use double quotes instead of single ones

```
echo " \

 ...

" | ruby

```

therefore I have used the %q< ... > notation in the ruby code instead.

> 
> It is a bit more flexible, since what is following behind the name of
> the dependency is pasted directly into Ruby code, so either ```['~>
> 10.0', '>= 10.1']``` or '~> 10.0' are viable options. IOW, it must be
> valid ruby code, otherwise the script bails out with error. E.g. for
> 
> ```
> %gemspec_add_runtime_dependency -n fog-dynect ~> 10.0
> ```
> 
> the following error is reported:
> 
> ```
> + read -d '' add_runtime_dependency_script
> + :
> + echo 'name = '\''fog-dynect'\''
>   version = ~> 10.0
>   spec =
> Gem::Specification.load('\''./usr/share/gems/specifications/fog-1.38.0.gemspec'\'')
> 
>   dep = spec.dependencies.detect { |d| d.type == :runtime && d.name ==
> name }
>   if dep
>     dep.requirement.concat version
>   else
>     spec.add_runtime_dependency name, version
>   end
>   File.write '\''./usr/share/gems/specifications/fog-1.38.0.gemspec'\'',
> spec.to_ruby'
> + ruby
> -:2: syntax error, unexpected '>'
>   version = ~> 10.0
>               ^
> ```
> 
> 
> Vít
> _______________________________________________
> ruby-sig mailing list
> ruby-sig@lists.fedoraproject.org
> https://lists.fedoraproject.org/admin/lists/ruby-sig@lists.fedoraproject.org
> 

Pavel Valena
Associate Software Engineer
Brno, Czech Republic

RED HAT | TRIED. TESTED. TRUSTED.
All of the airlines in the Fortune Global 500 rely on Red Hat.
Find out why at Trusted | Red Hat

<http://www.redhat.com/en/about/trusted>
_______________________________________________
ruby-sig mailing list
ruby-sig@lists.fedoraproject.org
https://lists.fedoraproject.org/admin/lists/ruby-sig@lists.fedoraproject.org

Reply via email to