dinabaztag 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .rvmrc
4
+ .bundle
5
+ .config
6
+ coverage
7
+ InstalledFiles
8
+ lib/bundler/man
9
+ pkg
10
+ rdoc
11
+ spec/reports
12
+ test/tmp
13
+ test/version_tmp
14
+ tmp
15
+
16
+ # YARD artifacts
17
+ .yardoc
18
+ _yardoc
19
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,16 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dinabaztag (0.0.1)
5
+ curb (>= 0.8.1)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ curb (0.8.3)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ dinabaztag!
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ dinabaztag
2
+ ==========
3
+
4
+ dinabaztag
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "dinabaztag/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'dinabaztag'
7
+ s.version = Dinabaztag::VERSION
8
+ s.date = '2012-11-28'
9
+ s.summary = "Dinabaztag is a Ruby Wrapper for Nabaztag API!"
10
+ s.description = "Dinabaztag is a Ruby Wrapper for Nabaztag API!"
11
+ s.authors = ["Miklós Beöthy"]
12
+ s.email = 'beothy.miklos@digitalnatives.hu'
13
+ s.homepage = 'https://github.com/digitalnatives/dinabaztag'
14
+ s.files = `git ls-files`.split("\n").sort
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+ end
@@ -0,0 +1,39 @@
1
+ module Dinabaztag
2
+ module Action
3
+ class EarMovement
4
+
5
+ attr_accessor :ear, :angle, :direction
6
+
7
+ def initialize( attrs = {} )
8
+ default_attributes = {
9
+ :ear => 'both',
10
+ :direction => 'forward',
11
+ :angle => 0
12
+ }
13
+ attrs = default_attributes.merge( attrs )
14
+
15
+ self.ear = attrs[:ear]
16
+ self.angle = attrs[:angle]
17
+ self.direction = attrs[:direction]
18
+ end
19
+
20
+ def chor_type
21
+ 'motor'
22
+ end
23
+
24
+ def chor_datas( message_ear = self.ear )
25
+ if message_ear.to_s == 'both'
26
+ return [ chor_datas('left').first, chor_datas('right').first ]
27
+ else
28
+ return [ [
29
+ self.chor_type,
30
+ message_ear.to_s == 'right' ? 0 : 1,
31
+ self.angle,
32
+ 0,
33
+ self.direction.to_s == 'forward' ? 0 : 1
34
+ ].map{ |p| p.to_s }.join( "," ) ]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,57 @@
1
+ module Dinabaztag
2
+ module Action
3
+ class LedLight
4
+
5
+ attr_accessor :led, :color
6
+
7
+ COLORS = {
8
+ :black => [ 0, 0, 0 ],
9
+ :red => [ 255, 0, 0 ],
10
+ :green => [ 0, 255, 0 ],
11
+ :blue => [ 0, 0, 255 ],
12
+ :yellow => [ 255, 255, 0 ]
13
+ }
14
+
15
+ def initialize( attrs = {} )
16
+ default_attributes = {
17
+ :color => 'green',
18
+ :led => 'middle'
19
+ }
20
+ attrs = default_attributes.merge( attrs )
21
+ attrs[:color] = COLORS[attrs[:color].to_sym] unless attrs[:color].is_a?(Array)
22
+ raise "undefined color" unless attrs[:color].is_a?(Array) && attrs[:color].size == 3
23
+
24
+ self.color = attrs[:color]
25
+ self.led = attrs[:led]
26
+ end
27
+
28
+ def led_value
29
+ if led.is_a?( Fixnum )
30
+ return led
31
+ else
32
+ case self.led.to_s
33
+ when 'bottom'
34
+ 0
35
+ when 'left'
36
+ 1
37
+ when 'middle'
38
+ 2
39
+ when 'right'
40
+ 3
41
+ when 'top'
42
+ 4
43
+ end
44
+ end
45
+ end
46
+
47
+ def chor_type
48
+ 'led'
49
+ end
50
+
51
+ def chor_datas
52
+ [ ( [ self.chor_type, self.led_value ] + self.color ).flatten.join(",") ]
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,26 @@
1
+ module Dinabaztag
2
+ class Choreography
3
+
4
+ attr_accessor :actions, :tempo
5
+
6
+ def initialize( tempo = 10)
7
+ self.actions = Hash.new { |hash, key| hash[key] = [] }
8
+ self.tempo = tempo
9
+ end
10
+
11
+ def add_action( action_time, action )
12
+ self.actions[action_time] << action
13
+ end
14
+
15
+ def data
16
+ action_data = self.actions.map do |action_time,actions_at_time|
17
+ actions_at_time.map do |action|
18
+ action.chor_datas.map{ |chor_data| "#{action_time},#{chor_data}" }
19
+ end.join(",")
20
+ end.join(",")
21
+
22
+ "#{tempo},#{action_data}"
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,58 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'cgi'
4
+
5
+ module Dinabaztag
6
+
7
+ class Message
8
+
9
+ attr_accessor :exec_commands, :api_key, :language
10
+
11
+ def initialize( api_key, config = {} )
12
+ self.api_key = api_key
13
+ self.language = config[:language] || "hu"
14
+ reset
15
+ end
16
+
17
+ def reset
18
+ self.exec_commands = []
19
+ end
20
+
21
+ def exec_choreography( choreography )
22
+ chor_api_url = "http://www.nabaztag.com/api/chor?data=#{choreography.data}"
23
+
24
+ exec_commands << "CH #{chor_api_url}"
25
+ end
26
+
27
+ def play_sound( url )
28
+ exec_commands << "MU #{URI.encode(url)}"
29
+ end
30
+
31
+ def say_message( message )
32
+ url = "http://translate.google.com/translate_tts?ie=UTF-8&q=#{message}&tl=#{self.language}"
33
+
34
+ play_sound(url)
35
+ end
36
+
37
+ def wait_for_previous_commands
38
+ exec_commands << "MW"
39
+ end
40
+
41
+ def perform
42
+ begin
43
+ exec_string = CGI.escape( exec_commands.join("\n") )
44
+
45
+ url = "http://www.nabaztag.com/nabaztags/#{self.api_key}/exec?command=#{exec_string}"
46
+
47
+ puts url
48
+
49
+ Net::HTTP.get( URI(url) )
50
+
51
+ reset
52
+ rescue => e
53
+ puts "Exception happened while calling api url: #{e.message}"
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module Dinabaztag
2
+ VERSION = '0.0.2'
3
+ end
data/lib/dinabaztag.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'uri'
2
+ require 'cgi'
3
+
4
+ require File.expand_path('../dinabaztag/version', __FILE__)
5
+ require File.expand_path('../dinabaztag/message', __FILE__)
6
+ require File.expand_path('../dinabaztag/choreography', __FILE__)
7
+ require File.expand_path('../dinabaztag/action/ear_movement', __FILE__)
8
+ require File.expand_path('../dinabaztag/action/led_light', __FILE__)
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dinabaztag
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Miklós Beöthy
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-28 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Dinabaztag is a Ruby Wrapper for Nabaztag API!
15
+ email: beothy.miklos@digitalnatives.hu
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - Gemfile
22
+ - Gemfile.lock
23
+ - README.md
24
+ - dinabaztag.gemspec
25
+ - lib/dinabaztag.rb
26
+ - lib/dinabaztag/action/ear_movement.rb
27
+ - lib/dinabaztag/action/led_light.rb
28
+ - lib/dinabaztag/choreography.rb
29
+ - lib/dinabaztag/message.rb
30
+ - lib/dinabaztag/version.rb
31
+ homepage: https://github.com/digitalnatives/dinabaztag
32
+ licenses: []
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ required_rubygems_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubyforge_project:
51
+ rubygems_version: 1.8.24
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: Dinabaztag is a Ruby Wrapper for Nabaztag API!
55
+ test_files: []