beats-client 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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