ruby-libstorj 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +23 -0
  6. data/Gemfile.lock +111 -0
  7. data/Guardfile +21 -0
  8. data/LICENSE +502 -0
  9. data/README.md +262 -0
  10. data/Rakefile +76 -0
  11. data/ext/libstorj/.gitignore +47 -0
  12. data/ext/libstorj/.travis.yml +27 -0
  13. data/ext/libstorj/Doxyfile +2427 -0
  14. data/ext/libstorj/LICENSE +502 -0
  15. data/ext/libstorj/Makefile.am +6 -0
  16. data/ext/libstorj/README.md +198 -0
  17. data/ext/libstorj/autogen.sh +3 -0
  18. data/ext/libstorj/configure.ac +64 -0
  19. data/ext/libstorj/depends/Makefile +153 -0
  20. data/ext/libstorj/depends/config.guess +1462 -0
  21. data/ext/libstorj/depends/config.sub +1823 -0
  22. data/ext/libstorj/depends/extract-osx-sdk.sh +33 -0
  23. data/ext/libstorj/depends/packages/cctools.mk +7 -0
  24. data/ext/libstorj/depends/packages/clang.mk +7 -0
  25. data/ext/libstorj/depends/packages/gmp.mk +23 -0
  26. data/ext/libstorj/depends/packages/gnutls.mk +25 -0
  27. data/ext/libstorj/depends/packages/json-c.mk +7 -0
  28. data/ext/libstorj/depends/packages/libcurl.mk +39 -0
  29. data/ext/libstorj/depends/packages/libmicrohttpd.mk +7 -0
  30. data/ext/libstorj/depends/packages/libuv.mk +7 -0
  31. data/ext/libstorj/depends/packages/nettle.mk +30 -0
  32. data/ext/libstorj/libstorj.pc.in +11 -0
  33. data/ext/libstorj/src/Makefile.am +23 -0
  34. data/ext/libstorj/src/bip39.c +233 -0
  35. data/ext/libstorj/src/bip39.h +64 -0
  36. data/ext/libstorj/src/bip39_english.h +2074 -0
  37. data/ext/libstorj/src/cli.c +1494 -0
  38. data/ext/libstorj/src/crypto.c +525 -0
  39. data/ext/libstorj/src/crypto.h +178 -0
  40. data/ext/libstorj/src/downloader.c +1923 -0
  41. data/ext/libstorj/src/downloader.h +163 -0
  42. data/ext/libstorj/src/http.c +688 -0
  43. data/ext/libstorj/src/http.h +175 -0
  44. data/ext/libstorj/src/rs.c +962 -0
  45. data/ext/libstorj/src/rs.h +99 -0
  46. data/ext/libstorj/src/storj.c +1523 -0
  47. data/ext/libstorj/src/storj.h +1014 -0
  48. data/ext/libstorj/src/uploader.c +2736 -0
  49. data/ext/libstorj/src/uploader.h +181 -0
  50. data/ext/libstorj/src/utils.c +336 -0
  51. data/ext/libstorj/src/utils.h +65 -0
  52. data/ext/libstorj/test/Makefile.am +27 -0
  53. data/ext/libstorj/test/mockbridge.c +260 -0
  54. data/ext/libstorj/test/mockbridge.json +687 -0
  55. data/ext/libstorj/test/mockbridgeinfo.json +1836 -0
  56. data/ext/libstorj/test/mockfarmer.c +358 -0
  57. data/ext/libstorj/test/storjtests.h +41 -0
  58. data/ext/libstorj/test/tests.c +1617 -0
  59. data/ext/libstorj/test/tests_rs.c +869 -0
  60. data/ext/ruby-libstorj/extconf.rb +8 -0
  61. data/ext/ruby-libstorj/ruby-libstorj.cc +17 -0
  62. data/lib/ruby-libstorj.rb +1 -0
  63. data/lib/ruby-libstorj/arg_forwarding_task.rb +58 -0
  64. data/lib/ruby-libstorj/env.rb +178 -0
  65. data/lib/ruby-libstorj/ext/bucket.rb +71 -0
  66. data/lib/ruby-libstorj/ext/create_bucket_request.rb +53 -0
  67. data/lib/ruby-libstorj/ext/curl_code.rb +139 -0
  68. data/lib/ruby-libstorj/ext/ext.rb +71 -0
  69. data/lib/ruby-libstorj/ext/file.rb +84 -0
  70. data/lib/ruby-libstorj/ext/get_bucket_request.rb +45 -0
  71. data/lib/ruby-libstorj/ext/json_request.rb +51 -0
  72. data/lib/ruby-libstorj/ext/list_files_request.rb +63 -0
  73. data/lib/ruby-libstorj/ext/types.rb +226 -0
  74. data/lib/ruby-libstorj/ext/upload_options.rb +38 -0
  75. data/lib/ruby-libstorj/libstorj.rb +22 -0
  76. data/lib/ruby-libstorj/mixins/storj.rb +27 -0
  77. data/lib/ruby-libstorj/struct.rb +42 -0
  78. data/ruby-libstorj.gemspec +57 -0
  79. data/spec/helpers/options.yml.example +22 -0
  80. data/spec/helpers/shared_rake_examples.rb +132 -0
  81. data/spec/helpers/storj_options.rb +96 -0
  82. data/spec/helpers/upload.data +3 -0
  83. data/spec/helpers/upload.data.sha256 +1 -0
  84. data/spec/libstorj_spec.rb +0 -0
  85. data/spec/ruby-libstorj/arg_forwarding_task_spec.rb +311 -0
  86. data/spec/ruby-libstorj/env_spec.rb +353 -0
  87. data/spec/ruby-libstorj/ext_spec.rb +75 -0
  88. data/spec/ruby-libstorj/json_request_spec.rb +13 -0
  89. data/spec/ruby-libstorj/libstorj_spec.rb +81 -0
  90. data/spec/ruby-libstorj/struct_spec.rb +64 -0
  91. data/spec/spec_helper.rb +113 -0
  92. metadata +136 -0
@@ -0,0 +1,75 @@
1
+ RSpec.describe ::LibStorj::Ext::JsonC do
2
+ describe '.stringify' do
3
+ # TODO: find a way to prevent segfaults
4
+ xcontext 'with a invalid argument' do
5
+ let(:random_arg) {'index\'m random'}
6
+
7
+ it 'raises an exception' do
8
+ expect do
9
+ described_class.stringify random_arg
10
+ end.to raise_error(ArgumentError)
11
+ end
12
+ end
13
+
14
+ context 'with a null pointer' do
15
+ let(:json_pointer) {FFI::MemoryPointer::NULL}
16
+
17
+ it 'returns the string "null"' do
18
+ expect(described_class.stringify json_pointer).to eq('null')
19
+ end
20
+ end
21
+
22
+ context 'with a pointer to a JsonC object' do
23
+ let(:expected_hash) {JSON.parse json_string}
24
+ let(:json_string) {'{"frist_prop": "first-value", "second_prop": ["second", "values"]}'}
25
+ let(:json_pointer) do
26
+ ::LibStorj::Ext::JsonC.parse json_string
27
+ end
28
+
29
+ let(:actual_string) do
30
+ described_class.stringify json_pointer
31
+ end
32
+
33
+ let(:actual_hash) do
34
+ begin
35
+ JSON.parse(json_string)
36
+ rescue RuntimeError => error
37
+ fail error
38
+ end
39
+ end
40
+
41
+ it 'returns a valid json string' do
42
+ expect(actual_string).to be_an_instance_of(String)
43
+ expect(actual_hash).to eq(expected_hash)
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ RSpec.describe ::LibStorj::Ext::Curl do
50
+ describe '.curl_code_to_string' do
51
+ let(:curl_codes) {[0, 1, 2, 3, 6]}
52
+ let(:curl_error_messages) do
53
+ [
54
+ '',
55
+ 'unsupported protocol',
56
+ 'failed initialization',
57
+ 'url using bad/illegal format or missing url',
58
+ %q(couldn't resolve host name)
59
+ ]
60
+ end
61
+
62
+ it 'returns the correct error string for all curl error code' do
63
+ curl_codes.each_with_index do |curl_code, index|
64
+ # exclude element at index 1
65
+ next if index == 2
66
+
67
+ # account for index offset
68
+ index -= 1 if index > 1
69
+
70
+ error_message = described_class.curl_code_to_string index
71
+ expect(error_message).to match(Regexp.new curl_error_messages[index], 'i')
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,13 @@
1
+ RSpec.describe ::LibStorj::Ext::Storj::JsonRequest do
2
+ describe '.ruby_handle' do
3
+ context 'with json parse error' do
4
+ let(:invalid_json_string) {'{invalid_prop: "first-value", "second_prop": ["second", "values"]}'}
5
+
6
+ it 'yields the json parse error and a nil response' do
7
+ expect do |block|
8
+ described_class.ruby_handle(&block).call '', invalid_json_string
9
+ end.to yield_with_args(JSON::ParserError, nil)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,81 @@
1
+ RSpec.describe LibStorj do
2
+ describe '.util_timestamp' do
3
+ let(:actual) {LibStorj.util_timestamp}
4
+ let(:expected) {Time.new.to_f}
5
+
6
+ it 'returns the current unix timestamp' do
7
+ # / 1000 to convert from int of milliseconds to a float of seconds
8
+ expect(actual / 1000).to eq(expected.floor)
9
+ end
10
+ end
11
+
12
+ describe '.util_datetime' do
13
+ let(:util_datetime) do
14
+ LibStorj.util_datetime
15
+ end
16
+
17
+ let(:current_timestamp) do
18
+ DateTime.now.to_time.to_i
19
+ end
20
+
21
+ def to_timestamp(datetime)
22
+ datetime.to_time.to_i
23
+ end
24
+
25
+ it 'returns a `DateTime` object with the correct current time' do
26
+ expect(util_datetime).to be_an_instance_of(DateTime)
27
+ expect(to_timestamp(util_datetime)).to eq(current_timestamp)
28
+ end
29
+ end
30
+
31
+ describe '.mnemonic_check' do
32
+ let(:invalid_mnemonic) {'nope'}
33
+ let(:valid_mnemonic) do
34
+ 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'
35
+ end
36
+
37
+ context 'with a valid mnenonic' do
38
+ let(:mnemonic_check) do
39
+ described_class.mnemonic_check valid_mnemonic
40
+ end
41
+
42
+ it 'returns true' do
43
+ expect(mnemonic_check).to be(true)
44
+ end
45
+ end
46
+
47
+ context 'with an invalid mnenonic' do
48
+ let(:mnemonic_check) do
49
+ described_class.mnemonic_check invalid_mnemonic
50
+ end
51
+
52
+ it 'returns false' do
53
+ expect(mnemonic_check).to be(false)
54
+ end
55
+ end
56
+ end
57
+
58
+ describe '.mnemonic_generate' do
59
+ let(:mnemonic) do
60
+ described_class.mnemonic_generate strength
61
+ end
62
+
63
+ context 'with minimum strength' do
64
+ let(:strength) {128}
65
+
66
+ it 'returns a new mnemonic longer than 50 characters' do
67
+ actual = mnemonic
68
+ expect(actual.length).to be > 50
69
+ end
70
+ end
71
+
72
+ context 'with maximum strength' do
73
+ let(:strength) {256}
74
+
75
+ it 'returns a new mnemonic longer than 100 characters' do
76
+ actual = mnemonic
77
+ expect(actual.length).to be > 100
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,64 @@
1
+ RSpec.describe FFI::Struct do
2
+ before :all do
3
+ class SimpleStruct < FFI::Struct
4
+ layout :first_string, :pointer,
5
+ :second_string, :pointer,
6
+ :third_string, :pointer
7
+ end
8
+
9
+ class ComplexStruct < FFI::Struct
10
+ layout :simple_struct_1, SimpleStruct.by_ref,
11
+ :simple_struct_2, SimpleStruct.by_ref,
12
+ :another_string, :pointer,
13
+ :null_member, :pointer
14
+ end
15
+ end
16
+
17
+ let(:simple_values) {%w[first-value second-value third-value]}
18
+ let(:simple_hash) do
19
+ Hash[SimpleStruct.members.zip(simple_values)]
20
+ end
21
+
22
+ let(:another_string) {'another string'}
23
+ let(:complex_hash) do
24
+ {
25
+ simple_struct_1: simple_hash,
26
+ simple_struct_2: simple_hash,
27
+ another_string: another_string,
28
+ null_member: nil
29
+ }
30
+ end
31
+
32
+ let(:simple_struct) do
33
+ struct = SimpleStruct.new
34
+ struct.members.each_with_index do |member_name, i|
35
+ string = simple_values[i]
36
+ struct[member_name] = FFI::MemoryPointer.from_string string
37
+ end
38
+ struct
39
+ end
40
+
41
+ let(:complex_struct) do
42
+ complex_struct = ComplexStruct.new
43
+ 2.times do |i|
44
+ complex_struct[:"simple_struct_#{i + 1}"] = simple_struct
45
+ end
46
+ complex_struct[:another_string] = FFI::MemoryPointer.from_string(another_string)
47
+ complex_struct[:null_member] = FFI::MemoryPointer::NULL
48
+ complex_struct
49
+ end
50
+
51
+ describe '.values_at' do
52
+ it 'returns the values of the members whose names are passed, in the same order' do
53
+ struct = simple_struct
54
+ values = struct.values_at(struct.members).map(&:read_string)
55
+ expect(values).to eq(simple_values)
56
+ end
57
+ end
58
+
59
+ describe '.map_layout' do
60
+ it 'returns a hash representing the nested struct layout' do
61
+ expect(complex_struct.map_layout).to eq(complex_hash)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,113 @@
1
+ require 'rspec/wait'
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter %r{spec/.+}
5
+ end
6
+
7
+ # This file was generated by the `rspec --init` command. Conventionally, all
8
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
9
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
10
+ # this file to always be loaded, without a need to explicitly require it in any
11
+ # files.
12
+ #
13
+ # Given that it is always loaded, you are encouraged to keep this file as
14
+ # light-weight as possible. Requiring heavyweight dependencies from this file
15
+ # will add to the boot time of your test suite on EVERY test run, even for an
16
+ # individual file that may not need all of that loaded. Instead, consider making
17
+ # a separate helper file that requires the additional dependencies and performs
18
+ # the additional setup, and require it from the spec files that actually need
19
+ # it.
20
+
21
+ # use local file rather than require gem to test local code
22
+ # i.e. `require 'ruby-libstorj'`
23
+ require_relative '../lib/ruby-libstorj/libstorj'
24
+
25
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
26
+ RSpec.configure do |config|
27
+ # rspec-expectations config goes here. You can use an alternate
28
+ # assertion/expectation library such as wrong or the stdlib/minitest
29
+ # assertions if you prefer.
30
+ config.expect_with :rspec do |expectations|
31
+ # This option will default to `true` in RSpec 4. It makes the `description`
32
+ # and `failure_message` of custom matchers include text for helper methods
33
+ # defined using `chain`, e.g.:
34
+ # be_bigger_than(2).and_smaller_than(4).description
35
+ # # => "be bigger than 2 and smaller than 4"
36
+ # ...rather than:
37
+ # # => "be bigger than 2"
38
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
39
+
40
+ # uncomment to switch to :should instead of :expect
41
+ # expectations.syntax = :should
42
+ end
43
+
44
+ # rspec-mocks config goes here. You can use an alternate test double
45
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
46
+ config.mock_with :rspec do |mocks|
47
+ # Prevents you from mocking or stubbing a method that does not exist on
48
+ # a real object. This is generally recommended, and will default to
49
+ # `true` in RSpec 4.
50
+ mocks.verify_partial_doubles = true
51
+ end
52
+
53
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
54
+ # have no way to turn it off -- the option exists only for backwards
55
+ # compatibility in RSpec 3). It causes shared context metadata to be
56
+ # inherited by the metadata hash of host groups and examples, rather than
57
+ # triggering implicit auto-inclusion in groups with matching metadata.
58
+ config.shared_context_metadata_behavior = :apply_to_host_groups
59
+
60
+ # The settings below are suggested to provide a good initial experience
61
+ # with RSpec, but feel free to customize to your heart's content.
62
+ =begin
63
+ # This allows you to limit a spec run to individual examples or groups
64
+ # you care about by tagging them with `:focus` metadata. When nothing
65
+ # is tagged with `:focus`, all examples get run. RSpec also provides
66
+ # aliases for `it`, `describe`, and `context` that include `:focus`
67
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
68
+ config.filter_run_when_matching :focus
69
+
70
+ # Allows RSpec to persist some state between runs in order to support
71
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
72
+ # you configure your source control system to ignore this file.
73
+ config.example_status_persistence_file_path = "spec/examples.txt"
74
+
75
+ # Limits the available syntax to the non-monkey patched syntax that is
76
+ # recommended. For more details, see:
77
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
78
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
79
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
80
+ config.disable_monkey_patching!
81
+
82
+ # This setting enables warnings. It's recommended, but in some cases may
83
+ # be too noisy due to issues in dependencies.
84
+ config.warnings = true
85
+
86
+ # Many RSpec users commonly either run the entire suite or an individual
87
+ # file, and it's useful to allow more verbose output when running an
88
+ # individual spec file.
89
+ if config.files_to_run.one?
90
+ # Use the documentation formatter for detailed output,
91
+ # unless a formatter has already been configured
92
+ # (e.g. via a command-line flag).
93
+ config.default_formatter = "doc"
94
+ end
95
+
96
+ # Print the 10 slowest examples and example groups at the
97
+ # end of the spec run, to help surface which specs are running
98
+ # particularly slow.
99
+ config.profile_examples = 10
100
+
101
+ # Run specs in random order to surface order dependencies. If you find an
102
+ # order dependency and want to debug it, you can fix the order by providing
103
+ # the seed, which is printed after each run.
104
+ # --seed 1234
105
+ config.order = :random
106
+
107
+ # Seed global randomization in this process using the `--seed` CLI option.
108
+ # Setting this allows you to use `--seed` to deterministically reproduce
109
+ # test failures related to randomization by passing the same `--seed` value
110
+ # as the one that triggered the failure.
111
+ Kernel.srand config.seed
112
+ =end
113
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-libstorj
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bryan White
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-19 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby bindings to the libstorj C Storj API library
14
+ email:
15
+ - bryanchriswhite@gmail.com
16
+ - bryan@storj.io
17
+ executables: []
18
+ extensions:
19
+ - ext/ruby-libstorj/extconf.rb
20
+ extra_rdoc_files: []
21
+ files:
22
+ - ".gitignore"
23
+ - ".gitmodules"
24
+ - ".rspec"
25
+ - Gemfile
26
+ - Gemfile.lock
27
+ - Guardfile
28
+ - LICENSE
29
+ - README.md
30
+ - Rakefile
31
+ - ext/libstorj/.gitignore
32
+ - ext/libstorj/.travis.yml
33
+ - ext/libstorj/Doxyfile
34
+ - ext/libstorj/LICENSE
35
+ - ext/libstorj/Makefile.am
36
+ - ext/libstorj/README.md
37
+ - ext/libstorj/autogen.sh
38
+ - ext/libstorj/configure.ac
39
+ - ext/libstorj/depends/Makefile
40
+ - ext/libstorj/depends/config.guess
41
+ - ext/libstorj/depends/config.sub
42
+ - ext/libstorj/depends/extract-osx-sdk.sh
43
+ - ext/libstorj/depends/packages/cctools.mk
44
+ - ext/libstorj/depends/packages/clang.mk
45
+ - ext/libstorj/depends/packages/gmp.mk
46
+ - ext/libstorj/depends/packages/gnutls.mk
47
+ - ext/libstorj/depends/packages/json-c.mk
48
+ - ext/libstorj/depends/packages/libcurl.mk
49
+ - ext/libstorj/depends/packages/libmicrohttpd.mk
50
+ - ext/libstorj/depends/packages/libuv.mk
51
+ - ext/libstorj/depends/packages/nettle.mk
52
+ - ext/libstorj/libstorj.pc.in
53
+ - ext/libstorj/src/Makefile.am
54
+ - ext/libstorj/src/bip39.c
55
+ - ext/libstorj/src/bip39.h
56
+ - ext/libstorj/src/bip39_english.h
57
+ - ext/libstorj/src/cli.c
58
+ - ext/libstorj/src/crypto.c
59
+ - ext/libstorj/src/crypto.h
60
+ - ext/libstorj/src/downloader.c
61
+ - ext/libstorj/src/downloader.h
62
+ - ext/libstorj/src/http.c
63
+ - ext/libstorj/src/http.h
64
+ - ext/libstorj/src/rs.c
65
+ - ext/libstorj/src/rs.h
66
+ - ext/libstorj/src/storj.c
67
+ - ext/libstorj/src/storj.h
68
+ - ext/libstorj/src/uploader.c
69
+ - ext/libstorj/src/uploader.h
70
+ - ext/libstorj/src/utils.c
71
+ - ext/libstorj/src/utils.h
72
+ - ext/libstorj/test/Makefile.am
73
+ - ext/libstorj/test/mockbridge.c
74
+ - ext/libstorj/test/mockbridge.json
75
+ - ext/libstorj/test/mockbridgeinfo.json
76
+ - ext/libstorj/test/mockfarmer.c
77
+ - ext/libstorj/test/storjtests.h
78
+ - ext/libstorj/test/tests.c
79
+ - ext/libstorj/test/tests_rs.c
80
+ - ext/ruby-libstorj/extconf.rb
81
+ - ext/ruby-libstorj/ruby-libstorj.cc
82
+ - lib/ruby-libstorj.rb
83
+ - lib/ruby-libstorj/arg_forwarding_task.rb
84
+ - lib/ruby-libstorj/env.rb
85
+ - lib/ruby-libstorj/ext/bucket.rb
86
+ - lib/ruby-libstorj/ext/create_bucket_request.rb
87
+ - lib/ruby-libstorj/ext/curl_code.rb
88
+ - lib/ruby-libstorj/ext/ext.rb
89
+ - lib/ruby-libstorj/ext/file.rb
90
+ - lib/ruby-libstorj/ext/get_bucket_request.rb
91
+ - lib/ruby-libstorj/ext/json_request.rb
92
+ - lib/ruby-libstorj/ext/list_files_request.rb
93
+ - lib/ruby-libstorj/ext/types.rb
94
+ - lib/ruby-libstorj/ext/upload_options.rb
95
+ - lib/ruby-libstorj/libstorj.rb
96
+ - lib/ruby-libstorj/mixins/storj.rb
97
+ - lib/ruby-libstorj/struct.rb
98
+ - ruby-libstorj.gemspec
99
+ - spec/helpers/options.yml.example
100
+ - spec/helpers/shared_rake_examples.rb
101
+ - spec/helpers/storj_options.rb
102
+ - spec/helpers/upload.data
103
+ - spec/helpers/upload.data.sha256
104
+ - spec/libstorj_spec.rb
105
+ - spec/ruby-libstorj/arg_forwarding_task_spec.rb
106
+ - spec/ruby-libstorj/env_spec.rb
107
+ - spec/ruby-libstorj/ext_spec.rb
108
+ - spec/ruby-libstorj/json_request_spec.rb
109
+ - spec/ruby-libstorj/libstorj_spec.rb
110
+ - spec/ruby-libstorj/struct_spec.rb
111
+ - spec/spec_helper.rb
112
+ homepage: https://github.com/storj/ruby-libstorj
113
+ licenses:
114
+ - AGPL-3.0
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 2.0.0
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.6.14
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: libstorj bindings for Ruby
136
+ test_files: []