cultome_player 2.0.0 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -79
  3. data/Rakefile +38 -4
  4. data/bin/cultome_player +16 -4
  5. data/config/environment.yml +4 -0
  6. data/cultome_player.gemspec +8 -1
  7. data/lib/cultome_player.rb +45 -19
  8. data/lib/cultome_player/command/language.rb +3 -4
  9. data/lib/cultome_player/command/processor.rb +9 -7
  10. data/lib/cultome_player/command/reader.rb +11 -2
  11. data/lib/cultome_player/environment.rb +21 -13
  12. data/lib/cultome_player/events.rb +7 -7
  13. data/lib/cultome_player/objects/album.rb +9 -2
  14. data/lib/cultome_player/objects/artist.rb +9 -2
  15. data/lib/cultome_player/objects/command.rb +10 -1
  16. data/lib/cultome_player/objects/drive.rb +4 -1
  17. data/lib/cultome_player/objects/genre.rb +4 -1
  18. data/lib/cultome_player/objects/parameter.rb +21 -1
  19. data/lib/cultome_player/objects/response.rb +5 -1
  20. data/lib/cultome_player/objects/song.rb +9 -4
  21. data/lib/cultome_player/player/adapter/mpg123.rb +3 -4
  22. data/lib/cultome_player/player/interactive.rb +67 -11
  23. data/lib/cultome_player/player/interface/basic.rb +13 -9
  24. data/lib/cultome_player/player/interface/extended.rb +26 -12
  25. data/lib/cultome_player/player/interface/helper.rb +73 -9
  26. data/lib/cultome_player/plugins.rb +44 -18
  27. data/lib/cultome_player/plugins/alias.rb +85 -0
  28. data/lib/cultome_player/plugins/gestures.rb +90 -0
  29. data/lib/cultome_player/plugins/help.rb +4 -4
  30. data/lib/cultome_player/plugins/keyboard_special_keys.rb +22 -0
  31. data/lib/cultome_player/plugins/points.rb +51 -0
  32. data/lib/cultome_player/utils.rb +117 -7
  33. data/lib/cultome_player/version.rb +1 -1
  34. data/xbindkeys/xbindkeysrc +12 -0
  35. metadata +37 -89
  36. data/.coveralls.yml +0 -1
  37. data/.gitignore +0 -24
  38. data/.rspec +0 -2
  39. data/.travis.yml +0 -7
  40. data/db/001_create_schema.rb +0 -58
  41. data/spec/config.yml +0 -0
  42. data/spec/cultome_player/command/processor_spec.rb +0 -168
  43. data/spec/cultome_player/command/reader_spec.rb +0 -45
  44. data/spec/cultome_player/cultome_player_spec.rb +0 -17
  45. data/spec/cultome_player/environment_spec.rb +0 -65
  46. data/spec/cultome_player/events_spec.rb +0 -22
  47. data/spec/cultome_player/media_spec.rb +0 -41
  48. data/spec/cultome_player/player/adapter/mpg123_spec.rb +0 -82
  49. data/spec/cultome_player/player/interface/basic_spec.rb +0 -168
  50. data/spec/cultome_player/player/interface/extended/connect_spec.rb +0 -117
  51. data/spec/cultome_player/player/interface/extended/search_spec.rb +0 -90
  52. data/spec/cultome_player/player/interface/extended/show_spec.rb +0 -36
  53. data/spec/cultome_player/player/interface/extended/shuffle_spec.rb +0 -26
  54. data/spec/cultome_player/player/interface/extended_spec.rb +0 -136
  55. data/spec/cultome_player/player/interface/helper_spec.rb +0 -63
  56. data/spec/cultome_player/player/interface_spec.rb +0 -17
  57. data/spec/cultome_player/player/playlist_spec.rb +0 -301
  58. data/spec/cultome_player/plugins/help_spec.rb +0 -21
  59. data/spec/cultome_player/plugins_spec.rb +0 -19
  60. data/spec/cultome_player/utils_spec.rb +0 -15
  61. data/spec/spec_helper.rb +0 -108
  62. data/spec/test/uno/dos/dos.mp3 +0 -0
  63. data/spec/test/uno/dos/tres/tres.mp3 +0 -0
  64. data/spec/test/uno/uno.mp3 +0 -0
  65. data/tasks/console.rake +0 -19
  66. data/tasks/db.rake +0 -19
  67. data/tasks/run.rake +0 -7
@@ -1 +0,0 @@
1
- service_name: travis-ci
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.swp
19
- tester.rb
20
- *.tmp
21
- TODO
22
- checklist
23
- spec/db.dat
24
- spec/db.log
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --format progress
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0
4
- script: rspec spec
5
-
6
- before_install:
7
- - sudo apt-get install libtag1-dev
@@ -1,58 +0,0 @@
1
-
2
- class CreateSchema < ActiveRecord::Migration
3
- def self.up
4
- create_table :songs do |t|
5
- t.string :name # If I Had A Gun
6
- t.integer :artist_id, default: 0 # Noel Gallagher
7
- t.integer :album_id, default: 0 # High Flying Birds
8
- t.integer :year # 2011
9
- t.integer :track # 3
10
- t.integer :duration # 210 sec
11
- t.integer :drive_id
12
- t.string :relative_path
13
- t.integer :points, default: 0
14
- t.integer :plays, default: 0
15
- t.datetime :last_played_at
16
- t.timestamps
17
- end
18
-
19
- create_table :albums do |t|
20
- t.string :name
21
- t.integer :points
22
- t.timestamps
23
- end
24
-
25
- create_table :artists do |t|
26
- t.string :name
27
- t.integer :points
28
- t.timestamps
29
- end
30
-
31
- create_table :genres do |t|
32
- t.integer :points
33
- t.string :name
34
- end
35
-
36
- create_table :genres_songs, id: false do |t|
37
- t.integer :song_id
38
- t.integer :genre_id
39
- end
40
-
41
- create_table :drives do |t|
42
- t.string :name
43
- t.string :path
44
- t.boolean :connected, default: true
45
- t.timestamps
46
- end
47
- end
48
-
49
- def self.down
50
- drop_table :songs
51
- drop_table :albums
52
- drop_table :artists
53
- drop_table :genres
54
- drop_table :genres_songs
55
- drop_table :drives
56
- end
57
- end
58
-
File without changes
@@ -1,168 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer::Command::Processor do
4
- let(:t){ TestClass.new }
5
-
6
- context '#read_command' do
7
- end
8
-
9
- context '#get_tokens' do
10
- it 'respond to get_tokens method' do
11
- t.should respond_to :get_tokens
12
- end
13
-
14
- it 'split literals' do
15
- t.get_tokens("uno dos").should eq ["uno", "dos"]
16
- end
17
-
18
- it 'split strings' do
19
- t.get_tokens("'uno dos' 'tres cuatro'").should eq ["uno dos", "tres cuatro"]
20
- end
21
-
22
- it 'split numbers' do
23
- t.get_tokens("1 2 3").should eq ["1", "2", "3"]
24
- end
25
-
26
- it 'split objects' do
27
- t.get_tokens("@uno @dos").should eq ["@uno", "@dos"]
28
- end
29
-
30
- it 'split paths' do
31
- t.get_tokens("/home/mio '/home/tuyo/con espacio'").should eq ["/home/mio", "/home/tuyo/con espacio"]
32
- end
33
-
34
- it 'split criteria' do
35
- t.get_tokens("uno:dos tres:'cuatro cinco'").should eq ["uno:dos", "tres:cuatro cinco"]
36
- end
37
-
38
- it 'raise an error if unclosed string is present' do
39
- expect { t.get_tokens("uno 'dos") }.to raise_error
40
- end
41
- end
42
-
43
- context '#identify_tokens' do
44
- it 'identify object' do
45
- t.identify_tokens(["@uno"]).should eq [{type: :object, value: "uno"}]
46
- end
47
-
48
- it 'identify criteria' do
49
- t.identify_tokens(["uno:dos"]).should eq [{type: :criteria, criteria: "uno", value: "dos"}]
50
- end
51
-
52
- it 'identify path' do
53
- t.identify_tokens(["/home/mio"]).should eq [{type: :path, value: "/home/mio"}]
54
- t.identify_tokens(["~/music"]).should eq [{type: :path, value: "~/music"}]
55
- end
56
-
57
- it 'identify number' do
58
- t.identify_tokens(["1"]).should eq [{type: :number, value: "1"}]
59
- end
60
-
61
- it 'identify literal' do
62
- t.identify_tokens(["uno"]).should eq [{type: :literal, value: "uno"}]
63
- end
64
-
65
- it 'identify as unknown token that dont recognize' do
66
- t.identify_tokens(["@uno dos"]).should eq [{type: :unknown, value: "@uno dos"}]
67
- t.identify_tokens(["uno dos:tres"]).should eq [{type: :unknown, value: "uno dos:tres"}]
68
- t.identify_tokens(["uno/dos"]).should eq [{type: :unknown, value: "uno/dos"}]
69
- end
70
- end
71
-
72
- context '#validate_command' do
73
- it 'validate a command without parameters' do
74
- t.validate_command(:command, [{type: :literal, value: "stop"}]).should be_true
75
- end
76
-
77
- it 'validate a command with one parameter' do
78
- t.validate_command(:command, [{type: :literal, value: "play"}, {type: :literal, value: "uno"}]).should be_true
79
- end
80
-
81
- it 'validate a command with more than one parameter' do
82
- t.validate_command(:command, [{type: :literal, value: "play"}, {type: :number, value: "1"}, {type: :object, value: "dos"}, {type: :criteria, criteria: "tres", value: "cuatro"}]).should be_true
83
- end
84
-
85
- it 'detect invalid command' do
86
- expect{
87
- t.validate_command(:command, [{type: :unknown, value: "uno1"}])
88
- }.to raise_error("invalid command:invalid command")
89
- end
90
-
91
- it 'detect invalid command format' do
92
- expect{
93
- t.validate_command(:command, [{type: :number, value: "1"}])
94
- }.to raise_error("invalid command:invalid command")
95
- end
96
- end
97
-
98
- context 'parse user command' do
99
- it 'respond to parse method' do
100
- t.should respond_to :parse
101
- end
102
-
103
- it 'returns a command object' do
104
- t.parse("next").should be_instance_of CultomePlayer::Objects::Command
105
- end
106
-
107
- it 'returns a command even when defined as plugin' do
108
- t.parse("help").should be_instance_of CultomePlayer::Objects::Command
109
- end
110
-
111
- it 'set the action and parameter' do
112
- cmd = t.parse("enqueue uno 'dos' tres:cuatro")
113
-
114
- cmd.action.should eq "enqueue"
115
- cmd.parameters.should have(3).items
116
- end
117
-
118
- it 'basic command' do
119
- cmd = t.parse("prev")
120
- cmd.action.should eq "prev"
121
- cmd.should have(0).parameters
122
- end
123
-
124
- it 'with one parameter' do
125
- cmd = t.parse("shuffle on")
126
- cmd.action.should eq "shuffle"
127
- cmd.should have(1).parameters
128
- end
129
-
130
- it 'with many parameter' do
131
- cmd = t.parse("play uno @dos tes:cuatro")
132
- cmd.action.should eq "play"
133
- cmd.should have(3).parameters
134
- end
135
-
136
- context 'detect parameter type' do
137
- it 'type literal' do
138
- cmd = t.parse("search uno")
139
- cmd.should have(1).parameters
140
- cmd.params(:literal).should have(1).item
141
- end
142
-
143
- it 'type number' do
144
- cmd = t.parse("enqueue 1 2")
145
- cmd.should have(2).parameters
146
- cmd.params(:number).should have(2).item
147
- end
148
-
149
- it 'type object' do
150
- cmd = t.parse("show @uno")
151
- cmd.should have(1).parameters
152
- cmd.params(:object).should have(1).item
153
- end
154
-
155
- it 'type path' do
156
- cmd = t.parse("connect /home/mio/music => main")
157
- cmd.should have(3).parameters
158
- cmd.params(:path).should have(1).item
159
- end
160
-
161
- it 'type criteria' do
162
- cmd = t.parse("play uno:dos")
163
- cmd.should have(1).parameters
164
- cmd.params(:criteria).should have(1).item
165
- end
166
- end
167
- end
168
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer::Command::Reader do
4
- let(:t){ TestClass.new }
5
-
6
- context 'autocomplete' do
7
- it 'actions' do
8
- Readline.stub(:line_buffer){ "pl" }
9
- t.send(:completion_proc).call("pl").should eq ["play "]
10
- end
11
-
12
- it 'path parameters' do
13
- Readline.stub(:line_buffer){ "play /hom" }
14
- t.send(:completion_proc).call("/hom").should eq ["/home/"]
15
- end
16
-
17
- it 'object parameters' do
18
- Readline.stub(:line_buffer){ "play @art" }
19
- t.send(:completion_proc).call("@art").should eq ["@artist"]
20
- end
21
- end
22
-
23
- context 'show probable' do
24
- it 'actions' do
25
- Readline.stub(:line_buffer){ "p" }
26
- t.send(:completion_proc).call("p").should eq ["play ", "pause ", "prev "]
27
- end
28
-
29
- it 'parameter types' do
30
- Readline.stub(:line_buffer){ "play " }
31
- t.send(:completion_proc).call("").should eq ["<literal>", "<number>", "<criteria>", "<object>", " "]
32
- end
33
-
34
- it 'paths' do
35
- Readline.stub(:line_buffer){ "play /home/" }
36
- opcs = t.send(:completion_proc).call("/home/")
37
- opcs.each{|opc| opc.should start_with "/home/" }
38
- end
39
-
40
- it 'objects' do
41
- Readline.stub(:line_buffer){ "play @a" }
42
- t.send(:completion_proc).call("@a").should eq ["@artist", "@album"]
43
- end
44
- end
45
- end
@@ -1,17 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer do
4
- let(:t){ TestClass.new(:rspec) }
5
-
6
- it 'executes built int commands' do
7
- t.execute('search way').should_not be_nil
8
- end
9
-
10
- it 'executes plugins' do
11
- t.execute('help').should_not be_nil
12
- end
13
-
14
- it 'contains usage instrucctions' do
15
- t.should respond_to(:usage_cultome_player)
16
- end
17
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer::Environment do
4
- let(:t){ TestClass.new(nil) }
5
-
6
- it 'prepare environment' do
7
- t.prepare_environment(:rspec)
8
- t.env_config.should_not be_empty
9
- end
10
-
11
- context 'with no environment loaded' do
12
- it 'raise exception when using mplayer_pipe' do
13
- expect{ t.mplayer_pipe }.to raise_error('environment problem:environment information not loaded')
14
- end
15
-
16
- it 'raise exception when using db_adapter' do
17
- expect{ t.db_adapter }.to raise_error('environment problem:environment information not loaded')
18
- end
19
-
20
- it 'raise exception when using db_file' do
21
- expect{ t.db_file }.to raise_error('environment problem:environment information not loaded')
22
- end
23
- it 'raise exception when using db_log_file' do
24
- expect{ t.db_log_file }.to raise_error('environment problem:environment information not loaded')
25
- end
26
-
27
- it 'raise exception when using file_types' do
28
- expect{ t.file_types }.to raise_error('environment problem:environment information not loaded')
29
- end
30
-
31
- it 'raise exception when using config_file' do
32
- expect{ t.config_file }.to raise_error('environment problem:environment information not loaded')
33
- end
34
- end
35
-
36
- context 'with environment loaded' do
37
- before :each do
38
- t.prepare_environment(:rspec)
39
- end
40
-
41
- it 'load the db_adapter' do
42
- t.db_adapter.should eq 'sqlite3'
43
- end
44
-
45
- it 'load the mplayer_pipe' do
46
- t.mplayer_pipe.should end_with 'spec/mpctr'
47
- end
48
-
49
- it 'load the db_file' do
50
- t.db_file.should end_with 'spec/db.dat'
51
- end
52
-
53
- it 'load the db_log_file' do
54
- t.db_log_file.should end_with 'spec/db.log'
55
- end
56
-
57
- it 'load the file_types' do
58
- t.file_types.should eq 'mp3'
59
- end
60
-
61
- it 'load the config_file' do
62
- t.config_file.should end_with 'spec/config.yml'
63
- end
64
- end
65
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer::Events do
4
- let(:t){ TestClass.new }
5
- let(:l1){ double(:listener1, :on_my_event => "OK 1!" ) }
6
- let(:l2){ double(:listener2, :on_my_event => "OK 2!" ) }
7
-
8
- it 'register event listeners' do
9
- t.listeners.should be_empty
10
- t.register_listener(:my_event, l1)
11
- t.listeners.should have(1).item
12
- end
13
-
14
- it 'callback listeners on event' do
15
- l1.should_receive(:on_my_event).with("DATA")
16
- l2.should_receive(:on_my_event).with("DATA")
17
- t.register_listener(:my_event, l1)
18
- t.register_listener(:my_event, l2)
19
- r = t.emit_event(:my_event, "DATA")
20
- r.should eq ["OK 1!", "OK 2!"]
21
- end
22
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CultomePlayer::Media do
4
- let(:t){ TestClass.new }
5
-
6
- describe 'parse mp3 information' do
7
- before :each do
8
- @info = t.extract_from_mp3("#{test_folder}/uno/uno.mp3")
9
- end
10
-
11
- it 'read name' do
12
- @info[:name].should_not be_nil
13
- @info[:name].should_not be_empty
14
- end
15
-
16
- it 'read album' do
17
- @info[:album].should_not be_nil
18
- @info[:album].should_not be_empty
19
- end
20
-
21
- it 'read genre' do
22
- @info[:genre].should_not be_nil
23
- @info[:genre].should_not be_empty
24
- end
25
-
26
- it 'read track' do
27
- @info[:track].should_not be_nil
28
- @info[:track].should > 0
29
- end
30
-
31
- it 'read year' do
32
- @info[:year].should_not be_nil
33
- @info[:year].should > 0
34
- end
35
-
36
- it 'read duration' do
37
- @info[:duration].should_not be_nil
38
- @info[:duration].should > 0
39
- end
40
- end
41
- end