beats-client 0.2.1 → 0.3.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.
data/.gitignore CHANGED
@@ -4,3 +4,5 @@ Gemfile.lock
4
4
  pkg/*
5
5
  .yardoc/
6
6
  doc/
7
+ *~
8
+ *#
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm 1.9.2@beats-ruby-client --create
1
+ rvm 1.9.3@beats-ruby-client --create
data/HISTORY.md CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ ### 0.3.0 (2012-02-29)
3
+
4
+ * Added an "ingest" command
5
+ * Support for adapter plug-ins
6
+
2
7
  ### 0.2.1 (2012-02-09)
3
8
 
4
9
  * Much improved documentation (using YARD)
data/beats-client.gemspec CHANGED
@@ -5,8 +5,8 @@ require "beats/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "beats-client"
7
7
  s.version = Beats::VERSION
8
- s.authors = ["Niklas Holmgren"]
9
- s.email = ["niklas@sutajio.se"]
8
+ s.authors = ["Niklas Holmgren", "Sebastian Falk"]
9
+ s.email = ["niklas@sutajio.se", "sebastian.falk@netlight.se"]
10
10
  s.homepage = "https://github.com/ProjectDaisy/beats-ruby-client"
11
11
  s.summary = %q{A CLI client and SDK for Beats API}
12
12
  s.description = %q{A CLI client and SDK for Beats API}
data/lib/beats/client.rb CHANGED
@@ -70,6 +70,12 @@ module Beats
70
70
  def sentence
71
71
  decode_json(get(resolve_uri(@base_url, href(:sentence))))
72
72
  end
73
+
74
+ def add_resource(resource)
75
+ decode_json(post(resolve_uri(@base_url, ""),
76
+ MultiJson.encode(resource),
77
+ 'Content-Type' => 'application/json'))
78
+ end
73
79
 
74
80
  private
75
81
 
data/lib/beats/command.rb CHANGED
@@ -10,20 +10,22 @@ module Beats
10
10
  DEFAULT_COMMAND = 'help'
11
11
 
12
12
  class << self
13
- def parse(command)
13
+ def parse(command, *args)
14
14
  command = DEFAULT_COMMAND if command == ''
15
15
  parts = command.split(':')
16
16
  klass = command_class(parts.first)
17
17
  if klass.has_command?(parts.last)
18
- [klass, parts.last.to_sym]
18
+ [klass.new(*args.flatten), parts.last.to_sym]
19
+ elsif klass.has_command?('gem_execute')
20
+ [klass.new(*args.flatten << parts.last), 'gem_execute'.to_sym]
19
21
  else
20
22
  raise InvalidCommand, command
21
23
  end
22
24
  end
23
25
 
24
26
  def run(command, *args)
25
- klass, method = parse(command)
26
- klass.new(*args.flatten).send(method)
27
+ object, method = parse(command, *args)
28
+ object.send(method)
27
29
  rescue RestClient::Unauthorized => e
28
30
  puts '!!! AUTHENTICATION REQUIRED !!!'
29
31
  run 'auth:login'
@@ -36,6 +38,8 @@ module Beats
36
38
  error "Unable to connect to server. Your internet connection might be down."
37
39
  rescue InvalidCommand => e
38
40
  error "Unknown command: #{e.to_s}"
41
+ rescue LoadError => e
42
+ error "Load error: #{e.to_s}"
39
43
  rescue CommandFailed => e
40
44
  error e.message
41
45
  rescue Interrupt => e
@@ -54,6 +54,12 @@ module Beats
54
54
  end
55
55
  end
56
56
 
57
+ def load_adapter(adapter)
58
+ require "beats-adapter-#{adapter}"
59
+ rescue LoadError
60
+ raise InvalidCommand, "ingest:#{adapter}"
61
+ end
62
+
57
63
  end
58
64
  end
59
65
  end
@@ -23,6 +23,9 @@ module Beats
23
23
  command_group('The sentence:') do
24
24
  command 'sentence', 'show the sentence'
25
25
  end
26
+ command_group('Ingest commands:') do
27
+ command 'ingest:<adapter>', 'ingest using an adapter plugin, e.g. ingest:discogs'
28
+ end
26
29
  end
27
30
 
28
31
  private
@@ -0,0 +1,22 @@
1
+ module Beats
2
+ module Command
3
+ class Ingest < Base
4
+
5
+ def ingest
6
+ display 'Usage: beats ingest:<adapter> [options]'
7
+ end
8
+
9
+ def gem_execute
10
+ adapter = args.pop
11
+ load_adapter(adapter)
12
+ # TODO: Add a general solution to CamelCase the adapter?
13
+ handler = Beats.const_get('Adapter').const_get(adapter.capitalize!).const_get('Handler').new(args)
14
+ handler.each_release do |release|
15
+ display YAML.dump(release)
16
+ client.add_resource(release)
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+ end
data/lib/beats/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Beats
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/test/client_test.rb CHANGED
@@ -58,5 +58,20 @@ class ClientTest < Test::Unit::TestCase
58
58
  end
59
59
  end
60
60
  end
61
+ def test_can_add_resource
62
+ @client.add_resource(
63
+ {"type"=>"Album",
64
+ "name"=>"Dwight Live",
65
+ "artist"=>"Dwight Yoakam",
66
+ "tracks"=>
67
+ [{"type"=>"Track",
68
+ "artist"=>"Dwight Yoakam",
69
+ "name"=>"Little Sister",
70
+ "album"=>"Dwight Live"},
71
+ {"type"=>"Track",
72
+ "artist"=>"Dwight Yoakam",
73
+ "name"=>"It Only Hurts When I Cry",
74
+ "album"=>"Dwight Live"}]})
75
+ end
61
76
 
62
77
  end
data/test/command_test.rb CHANGED
@@ -9,11 +9,18 @@ end
9
9
  class CommandTest < Test::Unit::TestCase
10
10
 
11
11
  def test_should_resolve_commands
12
- assert_equal [Beats::Command::Help, :help], Beats::Command.parse('')
13
- assert_equal [Beats::Command::Test, :test], Beats::Command.parse('test')
14
- assert_equal [Beats::Command::Test, :foo], Beats::Command.parse('test:foo')
12
+ Beats::Command::Help.new.to_s
13
+ Beats::Command.parse('').to_s
14
+ assert command_answer_ok?(Beats::Command.parse(''), Beats::Command::Help, :help)
15
+ assert command_answer_ok?(Beats::Command.parse('test'), Beats::Command::Test, :test)
16
+ assert command_answer_ok?(Beats::Command.parse('test:foo'), Beats::Command::Test, :foo)
17
+ assert command_answer_ok?(Beats::Command.parse('ingest:discogs'), Beats::Command::Ingest, :gem_execute)
15
18
  end
16
19
 
20
+ def command_answer_ok?(arr, klass, sym)
21
+ arr[0].instance_of?(klass) && arr[1] == sym
22
+ end
23
+
17
24
  def test_should_raise_exeption_if_command_could_not_be_resolved
18
25
  assert_raises Beats::Command::InvalidCommand do
19
26
  Beats::Command.parse('foo')
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beats-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Niklas Holmgren
9
+ - Sebastian Falk
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-02-21 00:00:00.000000000Z
13
+ date: 2012-02-29 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rest-client
16
- requirement: &70303674723960 !ruby/object:Gem::Requirement
17
+ requirement: &70232077106980 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,10 @@ dependencies:
21
22
  version: '0'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70303674723960
25
+ version_requirements: *70232077106980
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: multi_json
27
- requirement: &70303674723540 !ruby/object:Gem::Requirement
28
+ requirement: &70232077106080 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ! '>='
@@ -32,10 +33,10 @@ dependencies:
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70303674723540
36
+ version_requirements: *70232077106080
36
37
  - !ruby/object:Gem::Dependency
37
38
  name: json_pure
38
- requirement: &70303674723120 !ruby/object:Gem::Requirement
39
+ requirement: &70232077105200 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ! '>='
@@ -43,10 +44,10 @@ dependencies:
43
44
  version: '0'
44
45
  type: :runtime
45
46
  prerelease: false
46
- version_requirements: *70303674723120
47
+ version_requirements: *70232077105200
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: rake
49
- requirement: &70303674722700 !ruby/object:Gem::Requirement
50
+ requirement: &70232077104540 !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - ! '>='
@@ -54,10 +55,10 @@ dependencies:
54
55
  version: '0'
55
56
  type: :development
56
57
  prerelease: false
57
- version_requirements: *70303674722700
58
+ version_requirements: *70232077104540
58
59
  - !ruby/object:Gem::Dependency
59
60
  name: yard
60
- requirement: &70303674722280 !ruby/object:Gem::Requirement
61
+ requirement: &70232077103880 !ruby/object:Gem::Requirement
61
62
  none: false
62
63
  requirements:
63
64
  - - ! '>='
@@ -65,10 +66,10 @@ dependencies:
65
66
  version: '0'
66
67
  type: :development
67
68
  prerelease: false
68
- version_requirements: *70303674722280
69
+ version_requirements: *70232077103880
69
70
  - !ruby/object:Gem::Dependency
70
71
  name: redcarpet
71
- requirement: &70303674721860 !ruby/object:Gem::Requirement
72
+ requirement: &70232077103380 !ruby/object:Gem::Requirement
72
73
  none: false
73
74
  requirements:
74
75
  - - ! '>='
@@ -76,10 +77,10 @@ dependencies:
76
77
  version: '0'
77
78
  type: :development
78
79
  prerelease: false
79
- version_requirements: *70303674721860
80
+ version_requirements: *70232077103380
80
81
  - !ruby/object:Gem::Dependency
81
82
  name: github-markup
82
- requirement: &70303674721440 !ruby/object:Gem::Requirement
83
+ requirement: &70232077102180 !ruby/object:Gem::Requirement
83
84
  none: false
84
85
  requirements:
85
86
  - - ! '>='
@@ -87,10 +88,11 @@ dependencies:
87
88
  version: '0'
88
89
  type: :development
89
90
  prerelease: false
90
- version_requirements: *70303674721440
91
+ version_requirements: *70232077102180
91
92
  description: A CLI client and SDK for Beats API
92
93
  email:
93
94
  - niklas@sutajio.se
95
+ - sebastian.falk@netlight.se
94
96
  executables:
95
97
  - beats
96
98
  extensions: []
@@ -114,6 +116,7 @@ files:
114
116
  - lib/beats/commands/auth.rb
115
117
  - lib/beats/commands/base.rb
116
118
  - lib/beats/commands/help.rb
119
+ - lib/beats/commands/ingest.rb
117
120
  - lib/beats/commands/sentence.rb
118
121
  - lib/beats/commands/version.rb
119
122
  - lib/beats/version.rb