ipfs 0.0.4 → 0.2.0

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
  SHA1:
3
- metadata.gz: 69aa1d54ba5bb91e6a22401083d53b8d04908b42
4
- data.tar.gz: c31d8f77f7ad335e4fbd24eaf98d576f07951b49
3
+ metadata.gz: 9b8e46e448a734cedb238ad0f2bc34bef85aa9ea
4
+ data.tar.gz: 7f9c352411166b441f5837473df07a1cff62caa5
5
5
  SHA512:
6
- metadata.gz: 447a358ab84de2bb2f33112a5d1576e047968cc446789c6861c66fd1192a2dc9b45bf0a305edf35aad740f39070a26fff7c71599ffbf5e0f76595243116f2cd0
7
- data.tar.gz: 76592d96da61e8ca99535937e99d183965c504ef0a1f98e8d247df25718199d522ada5b766179ec1d22531827df87c3aa2003ce407d317967c77d3e844d4c908
6
+ metadata.gz: 38e528fa12618cdd253c4f81536c677835eeab19b5ae98b6b8463f6c098a905f22ca4e50ead4347e6345612b3690ccc2066561419761be38960e1c4f466915d2
7
+ data.tar.gz: 93998f7fbdaa22e5ecf10de7298295ae85665b0e3b550af06ede9f0c12ccea3ad2cb67614e5f152c3a1fe8d211bb36e4216d6a175b1add97115b920169cbd739
data/README.md CHANGED
@@ -1,7 +1,10 @@
1
1
  # IPFS API Bindings for Ruby
2
- This gem provides IPFS API bindings for Ruby, see [https://ipfs.io](https://ipfs.io).
3
2
 
4
- Work in progress.
3
+ ![](https://ipfs.io/ipfs/QmQJ68PFMDdAsgCZvA1UVzzn18asVcf7HVvCDgpjiSCAse)
4
+
5
+ > This gem provides IPFS API bindings for Ruby, see [https://ipfs.io](https://ipfs.io).
6
+
7
+ **Work in progress.**
5
8
 
6
9
  ## Installation
7
10
  Requires Ruby >= 2.1, since it uses the new required keyword arguments syntax.
@@ -55,6 +58,13 @@ nodes.each do |node|
55
58
  end
56
59
  ```
57
60
 
61
+ ### add
62
+ ```ruby
63
+ link = client.add 'myExampleFile.txt'
64
+ puts link.hashcode
65
+ # => QmaVwjMgqjBD25apiuVVnaDqU8SsiiREAAy3Amb1Bs2XHs
66
+ ```
67
+
58
68
  ### cat
59
69
  ```ruby
60
70
  client.cat 'QmaVwjMgqjBD25apiuVVnaDqU8SsiiREAAy3Amb1Bs2XHs'
@@ -4,27 +4,27 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'ipfs/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "ipfs"
7
+ spec.name = 'ipfs'
8
8
  spec.version = IPFS::VERSION
9
- spec.authors = ["Pierpaolo Frasa"]
10
- spec.email = ["pfrasa@gmail.com"]
9
+ spec.authors = ['Pierpaolo Frasa']
10
+ spec.email = ['pfrasa@gmail.com']
11
11
  spec.license = 'MIT'
12
12
 
13
- spec.summary = %q{IPFS API bindings}
14
- spec.description = %q{API bindings for the Interplanetary File System}
15
- spec.homepage = "https://ipfs.io"
13
+ spec.summary = 'IPFS API bindings'
14
+ spec.description = 'API bindings for the Interplanetary File System'
15
+ spec.homepage = 'https://ipfs.io'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_dependency "http", "~> 0.9.6"
22
+ spec.add_dependency 'http', '~> 2.2'
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.10"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "byebug"
27
- spec.add_development_dependency "rspec"
28
- spec.add_development_dependency "webmock"
29
- spec.add_development_dependency "sinatra"
24
+ spec.add_development_dependency 'bundler', '~> 1.10'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'byebug'
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'webmock'
29
+ spec.add_development_dependency 'sinatra'
30
30
  end
@@ -1,11 +1,12 @@
1
1
  require 'ipfs/commands/ls'
2
2
  require 'ipfs/commands/cat'
3
+ require 'ipfs/commands/add'
3
4
 
4
5
  module IPFS
5
6
  class Client
6
- DEFAULT_HOST = 'http://localhost'
7
+ DEFAULT_HOST = 'http://localhost'.freeze
7
8
  DEFAULT_PORT = 5001
8
- API_VERSION = 'v0'
9
+ API_VERSION = 'v0'.freeze
9
10
 
10
11
  attr_reader :host, :port
11
12
 
@@ -14,7 +15,8 @@ module IPFS
14
15
  end
15
16
 
16
17
  def initialize(host:, port:)
17
- @host, @port = host, port
18
+ @host = host
19
+ @port = port
18
20
  end
19
21
 
20
22
  def api_url
@@ -28,5 +30,9 @@ module IPFS
28
30
  def cat(node)
29
31
  Commands::Cat.call self, node
30
32
  end
33
+
34
+ def add(file)
35
+ Commands::Add.call self, file
36
+ end
31
37
  end
32
38
  end
@@ -0,0 +1,31 @@
1
+ require 'http'
2
+ require 'http/form_data'
3
+ require 'json'
4
+ require 'ipfs/content/link'
5
+
6
+ module IPFS
7
+ module Commands
8
+ class Add
9
+ def self.call(client, file)
10
+ parse query(client, file)
11
+ end
12
+
13
+ private
14
+
15
+ def self.query(client, file)
16
+ form = multiform(file)
17
+ HTTP.get("#{client.api_url}/add?stream-channels=true",
18
+ body: form.to_s,
19
+ headers: { 'Content-Type' => form.content_type }).to_s
20
+ end
21
+
22
+ def self.multiform(file)
23
+ HTTP::FormData.create(file: HTTP::FormData::File.new(file))
24
+ end
25
+
26
+ def self.parse(response)
27
+ Content::Link.parse_single JSON.parse(response)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -5,12 +5,12 @@ require 'ipfs/content/node'
5
5
  module IPFS
6
6
  module Commands
7
7
  class LS
8
-
9
8
  def self.call(client, node)
10
9
  parse query(client, node)
11
10
  end
12
11
 
13
12
  private
13
+
14
14
  def self.query(client, node)
15
15
  HTTP.get("#{client.api_url}/ls?arg=#{node}&stream-channels=true").to_s
16
16
  end
@@ -18,7 +18,6 @@ module IPFS
18
18
  def self.parse(response)
19
19
  Content::Node.parse_array JSON.parse(response)['Objects']
20
20
  end
21
-
22
21
  end
23
22
  end
24
23
  end
@@ -4,14 +4,20 @@ module IPFS
4
4
  attr_reader :name, :hashcode, :size
5
5
 
6
6
  def initialize(name:, hashcode:, size:)
7
- @name, @hashcode, @size = name, hashcode, size
7
+ @name = name
8
+ @hashcode = hashcode
9
+ @size = size
8
10
  end
9
11
 
10
12
  def self.parse_array(array)
11
13
  array.map do |item|
12
- new name: item['Name'], hashcode: item['Hash'], size: item['Size']
14
+ parse_single(item)
13
15
  end
14
16
  end
17
+
18
+ def self.parse_single(item)
19
+ new name: item['Name'], hashcode: item['Hash'], size: item['Size']
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -6,7 +6,8 @@ module IPFS
6
6
  attr_reader :hashcode, :links
7
7
 
8
8
  def initialize(hashcode:, links:)
9
- @hashcode, @links = hashcode, links
9
+ @hashcode = hashcode
10
+ @links = links
10
11
  end
11
12
 
12
13
  def self.parse_array(array)
@@ -14,7 +15,6 @@ module IPFS
14
15
  new(hashcode: item['Hash'], links: Link.parse_array(item['Links']))
15
16
  end
16
17
  end
17
-
18
18
  end
19
19
  end
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module IPFS
2
- VERSION = "0.0.4"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierpaolo Frasa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-19 00:00:00.000000000 Z
11
+ date: 2017-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.6
19
+ version: '2.2'
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: 0.9.6
26
+ version: '2.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -127,6 +127,7 @@ files:
127
127
  - ipfs.gemspec
128
128
  - lib/ipfs.rb
129
129
  - lib/ipfs/client.rb
130
+ - lib/ipfs/commands/add.rb
130
131
  - lib/ipfs/commands/cat.rb
131
132
  - lib/ipfs/commands/ls.rb
132
133
  - lib/ipfs/content/link.rb
@@ -152,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
153
  version: '0'
153
154
  requirements: []
154
155
  rubyforge_project:
155
- rubygems_version: 2.4.5.1
156
+ rubygems_version: 2.6.8
156
157
  signing_key:
157
158
  specification_version: 4
158
159
  summary: IPFS API bindings