dinabaztag 0.0.2

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 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: []