rspec-openhab-scripting 0.0.1-java

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.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rspec/bundler/inline.rb +12 -0
  3. data/lib/rspec/openhab/api.rb +34 -0
  4. data/lib/rspec/openhab/core/cron_scheduler.rb +13 -0
  5. data/lib/rspec/openhab/core/load_path.rb +13 -0
  6. data/lib/rspec/openhab/core/logger.rb +24 -0
  7. data/lib/rspec/openhab/core/openhab_setup.rb +11 -0
  8. data/lib/rspec/openhab/core/osgi.rb +19 -0
  9. data/lib/rspec/openhab/core/script_handling.rb +21 -0
  10. data/lib/rspec/openhab/dsl/imports.rb +231 -0
  11. data/lib/rspec/openhab/dsl/timers/timer.rb +86 -0
  12. data/lib/rspec/openhab/version.rb +7 -0
  13. data/lib/rspec-openhab-scripting.rb +115 -0
  14. data/lib/rspec-openhab-scripting_jars.rb +14 -0
  15. data/vendor/gems/jar-dependencies-1.0.0/lib/jar-dependencies.rb +24 -0
  16. data/vendor/gems/jar-dependencies-1.0.0/lib/jar_dependencies.rb +397 -0
  17. data/vendor/gems/jar-dependencies-1.0.0/lib/jar_install_post_install_hook.rb +29 -0
  18. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/attach_jars_pom.rb +35 -0
  19. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/classpath.rb +92 -0
  20. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/gemspec_artifacts.rb +220 -0
  21. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/gemspec_pom.rb +11 -0
  22. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/installer.rb +221 -0
  23. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/lock.rb +75 -0
  24. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/lock_down.rb +102 -0
  25. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/lock_down_pom.rb +35 -0
  26. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/maven_exec.rb +88 -0
  27. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/maven_factory.rb +138 -0
  28. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/maven_require.rb +48 -0
  29. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/maven_settings.rb +124 -0
  30. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/output_jars_pom.rb +16 -0
  31. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/post_install_hook.rb +33 -0
  32. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/setup.rb +9 -0
  33. data/vendor/gems/jar-dependencies-1.0.0/lib/jars/version.rb +7 -0
  34. data/vendor/gems/jar-dependencies-1.0.0/lib/rubygems_plugin.rb +24 -0
  35. metadata +217 -0
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jar_dependencies"
4
+ require "jars/maven_factory"
5
+
6
+ module Jars
7
+ class MavenExec
8
+ def find_spec(allow_no_file)
9
+ specs = Dir["*.gemspec"]
10
+ case specs.size
11
+ when 0
12
+ raise "no gemspec found" unless allow_no_file
13
+ when 1
14
+ specs.first
15
+ else
16
+ raise "more then one gemspec found. please specify a specfile" unless allow_no_file
17
+ end
18
+ end
19
+ private :find_spec
20
+
21
+ attr_reader :basedir, :spec, :specfile
22
+
23
+ def initialize(spec = nil)
24
+ @options = {}
25
+ setup(spec)
26
+ rescue StandardError, LoadError => e
27
+ # If spec load fails, skip looking for jar-dependencies
28
+ warn "jar-dependencies: #{e}"
29
+ warn e.backtrace.join("\n") if Jars.verbose?
30
+ end
31
+
32
+ def setup(spec = nil, allow_no_file: false)
33
+ spec ||= find_spec(allow_no_file)
34
+
35
+ case spec
36
+ when String
37
+ @specfile = File.expand_path(spec)
38
+ @basedir = File.dirname(@specfile)
39
+ Dir.chdir(@basedir) do
40
+ spec = eval(File.read(@specfile), TOPLEVEL_BINDING, @specfile) # rubocop:disable Security/Eval
41
+ end
42
+ when Gem::Specification
43
+ if File.exist?(spec.loaded_from)
44
+ @basedir = spec.gem_dir
45
+ @specfile = spec.loaded_from
46
+ else
47
+ # this happens with bundle and local gems
48
+ # there the spec_file is "not installed" but inside
49
+ # the gem_dir directory
50
+ Dir.chdir(spec.gem_dir) do
51
+ setup(nil, allow_no_file: true)
52
+ end
53
+ end
54
+ when MavenRequireDSL
55
+ @specfile = @basedir = Dir.pwd
56
+ when nil
57
+ # ignore
58
+ else
59
+ Jars.debug("spec must be either String or Gem::Specification. " \
60
+ "File an issue on github if you need it.")
61
+ end
62
+ @spec = spec
63
+ end
64
+
65
+ def ruby_maven_install_options=(options)
66
+ @options = options
67
+ end
68
+
69
+ def resolve_dependencies_list(file)
70
+ factory = MavenFactory.new(@options)
71
+ maven = factory.maven_new(File.expand_path("gemspec_pom.rb", __dir__))
72
+
73
+ is_local_file = File.expand_path(File.dirname(@specfile)) == File.expand_path(Dir.pwd)
74
+ maven.attach_repos
75
+ maven.attach_jars(@spec, all_dependencies: is_local_file)
76
+
77
+ maven["jars.specfile"] = @specfile.to_s
78
+ maven["outputAbsoluteArtifactFilename"] = "true"
79
+ maven["includeTypes"] = "jar"
80
+ maven["outputScope"] = "true"
81
+ maven["useRepositoryLayout"] = "true"
82
+ maven["outputDirectory"] = Jars.home.to_s
83
+ maven["outputFile"] = file.to_s
84
+
85
+ maven.exec("dependency:copy-dependencies", "dependency:list")
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jar_dependencies"
4
+ require "jars/gemspec_artifacts"
5
+
6
+ module Jars
7
+ class MavenFactory
8
+ module AttachJars
9
+ def attach_jars(spec, all_dependencies: false)
10
+ @index ||= 0
11
+ @done ||= []
12
+
13
+ deps = GemspecArtifacts.new(spec)
14
+ deps.artifacts.each do |a|
15
+ # for this gemspec we want to include all artifacts but
16
+ # for all others we want to exclude provided and test artifacts
17
+ next unless !@done.include?(a.key) && (all_dependencies || ((a.scope != "provided") && (a.scope != "test")))
18
+
19
+ # ruby dsl is not working reliably for classifier
20
+ self["jars.#{@index}"] = a.to_coord_no_classifier
21
+ if a.exclusions
22
+ jndex = 0
23
+ a.exclusions.each do |ex|
24
+ self["jars.#{@index}.exclusions.#{jndex}"] = ex.to_s
25
+ jndex += 1
26
+ end
27
+ end
28
+ self["jars.#{@index}.scope"] = a.scope if a.scope
29
+ self["jars.#{@index}.classifier"] = a.classifier if a.classifier
30
+ @index += 1
31
+ @done << a.key
32
+ end
33
+ end
34
+
35
+ def attach_repos
36
+ Jars.additional_maven_repos.each_with_index do |repo, index|
37
+ self["jars.repos.#{index}"] = repo
38
+ end
39
+ end
40
+ end
41
+
42
+ attr_reader :debug, :verbose
43
+
44
+ def initialize(options = nil, debug = Jars.debug?, verbose = Jars.verbose?)
45
+ @options = (options || {}).dup
46
+ @options.delete(:ignore_dependencies)
47
+ @debug = debug
48
+ @verbose = verbose
49
+ @installed_maven = false
50
+ end
51
+
52
+ def maven_new(pom)
53
+ lazy_load_maven
54
+ maven = setup(Maven::Ruby::Maven.new)
55
+
56
+ maven.extend AttachJars
57
+ # TODO: copy pom to tmp dir in case it is not a real file
58
+ maven.options["-f"] = pom
59
+ maven
60
+ end
61
+
62
+ private
63
+
64
+ def setup(maven)
65
+ maven.verbose = @verbose
66
+ maven.options["-X"] = nil if @debug
67
+ if @verbose
68
+ maven.options["-e"] = nil
69
+ elsif !@debug
70
+ maven.options["--quiet"] = nil
71
+ end
72
+ maven["verbose"] = (@debug || @verbose) == true
73
+
74
+ maven.options["-s"] = Jars::MavenSettings.effective_settings if Jars.maven_settings
75
+
76
+ maven["maven.repo.local"] = java.io.File.new(Jars.local_maven_repo).absolute_path.to_s
77
+
78
+ maven
79
+ end
80
+
81
+ def lazy_load_maven
82
+ add_gem_to_load_path("ruby-maven")
83
+ add_gem_to_load_path("ruby-maven-libs")
84
+ if @installed_maven
85
+ puts
86
+ puts "using maven for the first time results in maven"
87
+ puts "downloading all its default plugin and can take time."
88
+ puts "as those plugins get cached on disk and further execution"
89
+ puts "of maven is much faster then the first time."
90
+ puts
91
+ end
92
+ require "maven/ruby/maven"
93
+ end
94
+
95
+ def find_spec_via_rubygems(name, req)
96
+ require "rubygems/dependency"
97
+ dep = Gem::Dependency.new(name, req)
98
+ dep.matching_specs(true).last
99
+ end
100
+
101
+ def add_gem_to_load_path(name)
102
+ # if the gem is already activated => good
103
+ return if Gem.loaded_specs[name]
104
+
105
+ # just install gem if needed and add it to the load_path
106
+ # and leave activated gems as they are
107
+ req = requirement(name)
108
+ unless (spec = find_spec_via_rubygems(name, req))
109
+ spec = install_gem(name, req)
110
+ end
111
+ raise "failed to resolve gem '#{name}' if you're using Bundler add it as a dependency" unless spec
112
+
113
+ path = File.join(spec.full_gem_path, spec.require_path)
114
+ $LOAD_PATH << path unless $LOAD_PATH.include?(path)
115
+ end
116
+
117
+ def requirement(name)
118
+ jars = Gem.loaded_specs["jar-dependencies"]
119
+ dep = jars.nil? ? nil : jars.dependencies.detect { |d| d.name == name }
120
+ dep.nil? ? Gem::Requirement.create(">0") : dep.requirement
121
+ end
122
+
123
+ def install_gem(name, req)
124
+ @installed_maven = true
125
+ puts "Installing gem '#{name}' . . ."
126
+ require "rubygems/dependency_installer"
127
+ inst = Gem::DependencyInstaller.new(@options ||= {})
128
+ inst.install(name, req).first
129
+ rescue => e
130
+ if Jars.verbose?
131
+ warn e.inspect.to_s
132
+ warn e.backtrace.join("\n")
133
+ end
134
+ raise "there was an error installing '#{name} (#{req})' " \
135
+ "#{@options[:domain]}. please install it manually: #{e.inspect}"
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jars
4
+ class MavenRequireDSL
5
+ attr_reader :requirements
6
+
7
+ def initialize
8
+ @requirements = []
9
+ end
10
+
11
+ def require(args)
12
+ @requirements << args
13
+ end
14
+
15
+ def resolve_dependencies_list(deps_lst)
16
+ mvn = Jars::MavenExec.new(self)
17
+ require "jars/maven_exec"
18
+ mvn.resolve_dependencies_list(deps_lst)
19
+ end
20
+ end
21
+ end
22
+
23
+ def maven_require(&block)
24
+ require "jars/installer"
25
+ require "tempfile"
26
+
27
+ dsl = Jars::MavenRequireDSL.new
28
+ dsl.instance_eval(&block)
29
+
30
+ deps_lst = File.join(Dir.pwd, "deps.lst")
31
+ attempts = 1
32
+
33
+ dsl.resolve_dependencies_list(deps_lst) unless File.exist?(deps_lst)
34
+ begin
35
+ deps = Jars::Installer.load_from_maven(deps_lst)
36
+
37
+ deps.each do |dep|
38
+ require_jar(*dep.gav.split(":"))
39
+ end
40
+ rescue LoadError
41
+ raise unless attempts == 1
42
+
43
+ attempts += 1
44
+
45
+ File.unlink(deps_lst)
46
+ retry
47
+ end
48
+ end
@@ -0,0 +1,124 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems/uri_formatter"
4
+ module Jars
5
+ class MavenSettings
6
+ LINE_SEPARATOR = ENV_JAVA["line.separator"]
7
+
8
+ class << self
9
+ def local_settings
10
+ @_jars_maven_local_settings_ = nil unless instance_variable_defined?(:@_jars_maven_local_settings_)
11
+ if @_jars_maven_local_settings_.nil? && (settings = Jars.absolute("settings.xml")) && File.exist?(settings)
12
+ @_jars_maven_local_settings_ = settings
13
+ end
14
+ @_jars_maven_local_settings_ || nil
15
+ end
16
+
17
+ def user_settings
18
+ @_jars_maven_user_settings_ = nil unless instance_variable_defined?(:@_jars_maven_user_settings_)
19
+ if @_jars_maven_user_settings_.nil?
20
+ if (settings = Jars.absolute(Jars.to_prop(MAVEN_SETTINGS)))
21
+ unless File.exist?(settings)
22
+ Jars.warn { "configured ENV['#{MAVEN_SETTINGS}'] = '#{settings}' not found" }
23
+ settings = false
24
+ end
25
+ else # use maven default (user) settings
26
+ settings = File.join(Jars.user_home, ".m2", "settings.xml")
27
+ settings = false unless File.exist?(settings)
28
+ end
29
+ @_jars_maven_user_settings_ = settings
30
+ end
31
+ @_jars_maven_user_settings_ || nil
32
+ end
33
+
34
+ def effective_settings
35
+ @_jars_effective_maven_settings_ = nil unless instance_variable_defined?(:@_jars_effective_maven_settings_)
36
+ if @_jars_effective_maven_settings_.nil?
37
+ begin
38
+ require "rubygems/request"
39
+
40
+ http = Gem::Request.proxy_uri(Gem.configuration[:http_proxy] || Gem::Request.get_proxy_from_env("http"))
41
+ https = Gem::Request.proxy_uri(Gem.configuration[:https_proxy] || Gem::Request.get_proxy_from_env("https"))
42
+ rescue
43
+ Jars.debug("ignore rubygems proxy configuration as rubygems is too old")
44
+ end
45
+ @_jars_effective_maven_settings_ = if http.nil? && https.nil?
46
+ settings
47
+ else
48
+ setup_interpolated_settings(http, https) || settings
49
+ end
50
+ end
51
+ @_jars_effective_maven_settings_
52
+ end
53
+
54
+ def cleanup
55
+ File.unlink(effective_settings) if effective_settings != settings
56
+ ensure
57
+ reset
58
+ end
59
+
60
+ def reset
61
+ instance_variables.each { |var| instance_variable_set(var, nil) }
62
+ end
63
+
64
+ def settings
65
+ @_jars_maven_settings_ = nil unless instance_variable_defined?(:@_jars_maven_settings_)
66
+ local_settings || user_settings if @_jars_maven_settings_.nil?
67
+ end
68
+
69
+ def global_settings
70
+ @_jars_maven_global_settings_ = nil unless instance_variable_defined?(:@_jars_maven_global_settings_)
71
+ if @_jars_maven_global_settings_.nil?
72
+ if (mvn_home = ENV["M2_HOME"] || ENV["MAVEN_HOME"])
73
+ settings = File.join(mvn_home, "conf/settings.xml")
74
+ settings = false unless File.exist?(settings)
75
+ else
76
+ settings = false
77
+ end
78
+ @_jars_maven_global_settings_ = settings
79
+ end
80
+ @_jars_maven_global_settings_ || nil
81
+ end
82
+
83
+ private
84
+
85
+ def setup_interpolated_settings(http, https)
86
+ proxy = raw_proxy_settings_xml(http, https).gsub("\n", LINE_SEPARATOR)
87
+ if settings.nil?
88
+ raw = "<settings>#{LINE_SEPARATOR}#{proxy}</settings>"
89
+ else
90
+ raw = File.read(settings)
91
+ if raw.include?("<proxy>")
92
+ Jars.warn("can not interpolated proxy info for #{settings}")
93
+ return
94
+ else
95
+ raw.sub!("<settings>", "<settings>#{LINE_SEPARATOR}#{proxy}")
96
+ end
97
+ end
98
+ tempfile = java.io.File.create_temp_file("settings", ".xml")
99
+ tempfile.delete_on_exit
100
+ File.write(tempfile.path, raw)
101
+ tempfile.path
102
+ end
103
+
104
+ def raw_proxy_settings_xml(http, https)
105
+ raw = File.read(File.join(File.dirname(__FILE__), "settings.xml"))
106
+ if http
107
+ raw.sub!("__HTTP_ACTIVE__", "true")
108
+ raw.sub!("__HTTP_SERVER__", http.host)
109
+ raw.sub!("__HTTP_PORT__", http.port.to_s)
110
+ else
111
+ raw.sub!("__HTTP_ACTIVE__", "false")
112
+ end
113
+ if https
114
+ raw.sub!("__HTTPS_ACTIVE__", "true")
115
+ raw.sub!("__HTTPS_SERVER__", https.host)
116
+ raw.sub!("__HTTPS_PORT__", https.port.to_s)
117
+ else
118
+ raw.sub!("__HTTPS_ACTIVE__", "false")
119
+ end
120
+ raw
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # this file is maven DSL
4
+
5
+ if ENV_JAVA["jars.quiet"] != "true"
6
+ model.dependencies.each do |d|
7
+ puts " #{d.group_id}:#{d.artifact_id}" \
8
+ "#{d.classifier ? ":#{d.classifier}" : ""}" \
9
+ ":#{d.version}:#{d.scope || "compile"}"
10
+ next if d.exclusions.empty?
11
+
12
+ puts " exclusions: #{d.exclusions.collect do |e|
13
+ "#{e.group_id}:#{e.artifact_id}"
14
+ end.join}"
15
+ end
16
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (C) 2014 Christian Meier
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ # this software and associated documentation files (the "Software"), to deal in
8
+ # the Software without restriction, including without limitation the rights to
9
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10
+ # the Software, and to permit persons to whom the Software is furnished to do so,
11
+ # subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+
24
+ module Jars
25
+ def self.post_install_hook(gem_installer)
26
+ unless (ENV["JARS_SKIP"] || ENV_JAVA["jars.skip"]) == "true"
27
+ require "jars/installer"
28
+ jars = Jars::Installer.new(gem_installer.spec)
29
+ jars.ruby_maven_install_options = gem_installer.options || {}
30
+ jars.vendor_jars
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # to do as bundler does and allow to load Jars.lock via
4
+ # require 'jars/setup'. can be useful via commandline -rjars/setup
5
+ # or tell bundler autorequire to load it
6
+
7
+ require "jar_dependencies"
8
+
9
+ Jars.setup
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jars
4
+ VERSION = "1.0.0"
5
+ JRUBY_PLUGINS_VERSION = "1.1.3"
6
+ DEPENDENCY_PLUGIN_VERSION = "2.8"
7
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Copyright (C) 2014 Christian Meier
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ # this software and associated documentation files (the "Software"), to deal in
8
+ # the Software without restriction, including without limitation the rights to
9
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10
+ # the Software, and to permit persons to whom the Software is furnished to do so,
11
+ # subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+
24
+ require "jar_install_post_install_hook"