bushido 0.0.35 → 0.0.36

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +4 -0
  3. data/Gemfile +6 -13
  4. data/README.md +3 -0
  5. data/Rakefile +31 -7
  6. data/app/controllers/bushido/data_controller.rb +2 -1
  7. data/app/controllers/bushido/envs_controller.rb +7 -5
  8. data/app/controllers/bushido/mail_controller.rb +37 -0
  9. data/lib/bushido.rb +27 -5
  10. data/lib/bushido/action_mailer.rb +35 -0
  11. data/lib/bushido/app.rb +7 -0
  12. data/lib/bushido/bar.rb +19 -0
  13. data/lib/bushido/base.rb +23 -0
  14. data/lib/bushido/command.rb +17 -15
  15. data/lib/bushido/config.rb +12 -0
  16. data/lib/bushido/data.rb +41 -23
  17. data/lib/bushido/data_helper.rb +1 -0
  18. data/lib/bushido/engine.rb +21 -0
  19. data/lib/bushido/envs_helper.rb +1 -0
  20. data/lib/bushido/event.rb +25 -2
  21. data/lib/bushido/event_observer.rb +20 -0
  22. data/lib/bushido/mail_helper.rb +1 -0
  23. data/lib/bushido/mail_route.rb +186 -0
  24. data/lib/bushido/middleware.rb +9 -16
  25. data/lib/bushido/platform.rb +27 -3
  26. data/lib/bushido/smtp.rb +24 -0
  27. data/lib/bushido/user.rb +39 -9
  28. data/lib/bushido/user_helper.rb +7 -0
  29. data/lib/bushido/utils.rb +44 -0
  30. data/lib/bushido/version.rb +1 -1
  31. data/lib/generators/bushido/auth_migration_generator.rb +46 -0
  32. data/lib/generators/bushido/hooks_generator.rb +43 -0
  33. data/lib/generators/bushido/mail_routes_generator.rb +45 -0
  34. data/lib/generators/bushido/routes_generator.rb +22 -0
  35. data/lib/{bushido/hooks.rb → hooks.rb} +0 -0
  36. data/lib/rails/routes.rb +36 -8
  37. data/lib/tasks/bushido.rake +6 -0
  38. data/{test_app/spec → spec/app_spec}/controllers/envs_controller_spec.rb +0 -0
  39. data/spec/app_spec/controllers/mail_controller_spec.rb +28 -0
  40. data/{test_app/spec → spec/app_spec}/integration/app_claim_spec.rb +4 -6
  41. data/spec/gem_spec/base_spec.rb +24 -0
  42. data/spec/gem_spec/command_spec.rb +181 -0
  43. data/spec/gem_spec/config_spec.rb +9 -0
  44. data/spec/gem_spec/data_spec.rb +13 -0
  45. data/spec/gem_spec/hooks_spec.rb +5 -0
  46. data/spec/gem_spec/mail_route_spec.rb +168 -0
  47. data/spec/gem_spec/platform_spec.rb +9 -0
  48. data/spec/gem_spec/user_spec.rb +45 -0
  49. data/spec/spec_helper.rb +21 -0
  50. data/spec/test_apps/rails-2.3/.gitignore +13 -0
  51. data/spec/test_apps/rails-2.3/Gemfile +13 -0
  52. data/spec/test_apps/rails-2.3/README +243 -0
  53. data/spec/test_apps/rails-2.3/Rakefile +10 -0
  54. data/spec/test_apps/rails-2.3/app/controllers/application_controller.rb +10 -0
  55. data/spec/test_apps/rails-2.3/app/helpers/application_helper.rb +3 -0
  56. data/spec/test_apps/rails-2.3/config/boot.rb +114 -0
  57. data/spec/test_apps/rails-2.3/config/environment.rb +41 -0
  58. data/spec/test_apps/rails-2.3/config/environments/development.rb +17 -0
  59. data/spec/test_apps/rails-2.3/config/environments/production.rb +28 -0
  60. data/spec/test_apps/rails-2.3/config/environments/test.rb +30 -0
  61. data/spec/test_apps/rails-2.3/config/initializers/backtrace_silencers.rb +7 -0
  62. data/spec/test_apps/rails-2.3/config/initializers/cookie_verification_secret.rb +7 -0
  63. data/spec/test_apps/rails-2.3/config/initializers/inflections.rb +10 -0
  64. data/{test_app → spec/test_apps/rails-2.3}/config/initializers/mime_types.rb +0 -0
  65. data/spec/test_apps/rails-2.3/config/initializers/new_rails_defaults.rb +21 -0
  66. data/spec/test_apps/rails-2.3/config/initializers/session_store.rb +15 -0
  67. data/spec/test_apps/rails-2.3/config/locales/en.yml +5 -0
  68. data/spec/test_apps/rails-2.3/config/routes.rb +43 -0
  69. data/spec/test_apps/rails-2.3/db/seeds.rb +7 -0
  70. data/{test_app → spec/test_apps/rails-2.3}/doc/README_FOR_APP +0 -0
  71. data/spec/test_apps/rails-2.3/lib/tasks/rspec.rake +144 -0
  72. data/spec/test_apps/rails-2.3/public/404.html +30 -0
  73. data/spec/test_apps/rails-2.3/public/422.html +30 -0
  74. data/spec/test_apps/rails-2.3/public/500.html +30 -0
  75. data/{test_app → spec/test_apps/rails-2.3}/public/favicon.ico +0 -0
  76. data/{test_app → spec/test_apps/rails-2.3}/public/images/rails.png +0 -0
  77. data/{test_app → spec/test_apps/rails-2.3}/public/javascripts/application.js +0 -0
  78. data/spec/test_apps/rails-2.3/public/javascripts/controls.js +963 -0
  79. data/spec/test_apps/rails-2.3/public/javascripts/dragdrop.js +973 -0
  80. data/spec/test_apps/rails-2.3/public/javascripts/effects.js +1128 -0
  81. data/spec/test_apps/rails-2.3/public/javascripts/prototype.js +4320 -0
  82. data/{test_app → spec/test_apps/rails-2.3}/public/robots.txt +0 -0
  83. data/spec/test_apps/rails-2.3/script/about +4 -0
  84. data/spec/test_apps/rails-2.3/script/autospec +6 -0
  85. data/spec/test_apps/rails-2.3/script/console +3 -0
  86. data/spec/test_apps/rails-2.3/script/dbconsole +3 -0
  87. data/spec/test_apps/rails-2.3/script/destroy +3 -0
  88. data/spec/test_apps/rails-2.3/script/generate +3 -0
  89. data/spec/test_apps/rails-2.3/script/performance/benchmarker +3 -0
  90. data/spec/test_apps/rails-2.3/script/performance/profiler +3 -0
  91. data/spec/test_apps/rails-2.3/script/plugin +3 -0
  92. data/spec/test_apps/rails-2.3/script/runner +3 -0
  93. data/spec/test_apps/rails-2.3/script/server +3 -0
  94. data/spec/test_apps/rails-2.3/script/spec +10 -0
  95. data/spec/test_apps/rails-2.3/spec/all_spec.rb +5 -0
  96. data/spec/test_apps/rails-2.3/spec/rcov.opts +2 -0
  97. data/spec/test_apps/rails-2.3/spec/spec.opts +4 -0
  98. data/spec/test_apps/rails-2.3/spec/spec_helper.rb +83 -0
  99. data/spec/test_apps/rails-2.3/test/performance/browsing_test.rb +9 -0
  100. data/spec/test_apps/rails-2.3/test/test_helper.rb +38 -0
  101. data/{test_app → spec/test_apps/rails-3.0}/.gitignore +0 -0
  102. data/spec/test_apps/rails-3.0/.rspec +2 -0
  103. data/spec/test_apps/rails-3.0/Gemfile +10 -0
  104. data/{test_app → spec/test_apps/rails-3.0}/README +0 -0
  105. data/{test_app → spec/test_apps/rails-3.0}/Rakefile +0 -0
  106. data/{test_app → spec/test_apps/rails-3.0}/app/controllers/application_controller.rb +0 -0
  107. data/{test_app → spec/test_apps/rails-3.0}/app/controllers/static_controller.rb +0 -0
  108. data/{test_app → spec/test_apps/rails-3.0}/app/helpers/application_helper.rb +0 -0
  109. data/{test_app → spec/test_apps/rails-3.0}/app/helpers/static_helper.rb +0 -0
  110. data/{test_app → spec/test_apps/rails-3.0}/app/views/layouts/application.html.erb +0 -0
  111. data/{test_app → spec/test_apps/rails-3.0}/app/views/static/home.html.erb +0 -0
  112. data/{test_app → spec/test_apps/rails-3.0}/config.ru +0 -0
  113. data/{test_app → spec/test_apps/rails-3.0}/config/application.rb +2 -0
  114. data/{test_app → spec/test_apps/rails-3.0}/config/boot.rb +0 -0
  115. data/{test_app → spec/test_apps/rails-3.0}/config/environment.rb +0 -0
  116. data/{test_app → spec/test_apps/rails-3.0}/config/environments/development.rb +0 -0
  117. data/{test_app → spec/test_apps/rails-3.0}/config/environments/production.rb +0 -0
  118. data/{test_app → spec/test_apps/rails-3.0}/config/environments/test.rb +0 -0
  119. data/{test_app → spec/test_apps/rails-3.0}/config/initializers/backtrace_silencers.rb +0 -0
  120. data/{test_app → spec/test_apps/rails-3.0}/config/initializers/inflections.rb +0 -0
  121. data/spec/test_apps/rails-3.0/config/initializers/mime_types.rb +5 -0
  122. data/{test_app → spec/test_apps/rails-3.0}/config/initializers/secret_token.rb +0 -0
  123. data/{test_app → spec/test_apps/rails-3.0}/config/initializers/session_store.rb +0 -0
  124. data/{test_app → spec/test_apps/rails-3.0}/config/locales/en.yml +0 -0
  125. data/{test_app → spec/test_apps/rails-3.0}/config/routes.rb +0 -0
  126. data/{test_app → spec/test_apps/rails-3.0}/db/schema.rb +0 -0
  127. data/{test_app → spec/test_apps/rails-3.0}/db/seeds.rb +0 -0
  128. data/spec/test_apps/rails-3.0/doc/README_FOR_APP +2 -0
  129. data/{test_app → spec/test_apps/rails-3.0}/lib/tasks/.gitkeep +0 -0
  130. data/{test_app → spec/test_apps/rails-3.0}/public/404.html +0 -0
  131. data/{test_app → spec/test_apps/rails-3.0}/public/422.html +0 -0
  132. data/{test_app → spec/test_apps/rails-3.0}/public/500.html +0 -0
  133. data/{test_app/public/stylesheets/.gitkeep → spec/test_apps/rails-3.0/public/favicon.ico} +0 -0
  134. data/spec/test_apps/rails-3.0/public/images/rails.png +0 -0
  135. data/{test_app → spec/test_apps/rails-3.0}/public/index.html +0 -0
  136. data/spec/test_apps/rails-3.0/public/javascripts/application.js +2 -0
  137. data/{test_app → spec/test_apps/rails-3.0}/public/javascripts/controls.js +0 -0
  138. data/{test_app → spec/test_apps/rails-3.0}/public/javascripts/dragdrop.js +0 -0
  139. data/{test_app → spec/test_apps/rails-3.0}/public/javascripts/effects.js +0 -0
  140. data/{test_app → spec/test_apps/rails-3.0}/public/javascripts/prototype.js +0 -0
  141. data/{test_app → spec/test_apps/rails-3.0}/public/javascripts/rails.js +0 -0
  142. data/spec/test_apps/rails-3.0/public/robots.txt +5 -0
  143. data/{test_app/vendor/plugins → spec/test_apps/rails-3.0/public/stylesheets}/.gitkeep +0 -0
  144. data/{test_app → spec/test_apps/rails-3.0}/script/rails +0 -0
  145. data/spec/test_apps/rails-3.0/spec/all_spec.rb +5 -0
  146. data/{test_app → spec/test_apps/rails-3.0}/spec/spec_helper.rb +13 -1
  147. data/{test_app → spec/test_apps/rails-3.0}/test/performance/browsing_test.rb +0 -0
  148. data/{test_app → spec/test_apps/rails-3.0}/test/test_helper.rb +0 -0
  149. data/spec/test_apps/rails-3.0/vendor/plugins/.gitkeep +0 -0
  150. data/tasks/cover_me.rake +11 -0
  151. metadata +249 -117
  152. data/lib/engine.rb +0 -16
  153. data/test/executable_test.rb +0 -10
  154. data/test/routes_test.rb +0 -12
  155. data/test/test_helper.rb +0 -8
  156. data/test_app/.rspec +0 -1
  157. data/test_app/Gemfile +0 -7
  158. data/test_app/config/database.yml +0 -22
  159. data/test_app/spec/helpers/static_helper_spec.rb +0 -14
  160. data/test_app/spec/support/integration_example_group.rb +0 -35
data/.gitignore CHANGED
@@ -1 +1,7 @@
1
1
  Gemfile.lock
2
+ \#*#
3
+ doc/**
4
+ pkg/**
5
+ coverage.data
6
+ pkg
7
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --format nested
2
+ --color
3
+ --profile
4
+
data/Gemfile CHANGED
@@ -4,21 +4,14 @@ source "http://rubygems.org"
4
4
  # Specify your gem's dependencies in bushido.gemspec
5
5
  gemspec
6
6
 
7
- gem "rails", "~> 3.0.7"
8
7
  gem "sqlite3-ruby"
8
+ gem "rails", "~> 3.0.7"
9
9
 
10
- group :test do
10
+ group :development, :test do
11
11
  # gem "webrat", "0.7.2", :require => false
12
12
  # gem "mocha", :require => false
13
- gem 'rspec'
14
- end
15
-
16
- platforms :ruby do
17
- # gem "sqlite3-ruby"
18
-
19
- # group :mongoid do
20
- # gem "mongo", "~> 1.3.0"
21
- # gem "mongoid", "2.0.1"
22
- # gem "bson_ext", "~> 1.3.0"
23
- # end
13
+ gem "rspec-rails", "~> 2.7.0"
14
+ gem "configatron", "> 2.8.3"
15
+ gem "cover_me"
16
+ gem "ci_reporter"
24
17
  end
@@ -0,0 +1,3 @@
1
+ # Bushido gem
2
+
3
+ This is the secret tonic that gives Bushido apps their super powers. Never take more than the recommended dose of awesomeness.
data/Rakefile CHANGED
@@ -1,12 +1,36 @@
1
1
  require 'rake/testtask'
2
+ require 'rspec/core/rake_task'
2
3
  require 'bundler'
4
+ require 'ci/reporter/rake/rspec'
3
5
  Bundler::GemHelper.install_tasks
4
6
 
5
- task :default => :test
7
+ Dir['tasks/**/*.rake'].each { |rake| load rake }
6
8
 
7
- desc "Run bushido tests"
8
- Rake::TestTask.new(:test) do |t|
9
- t.libs += ["lib", "test"]
10
- t.test_files = FileList['test/*_test.rb']
11
- t.verbose = true
12
- end
9
+ desc "Default: run all specs"
10
+ task :default => :all_specs
11
+
12
+ desc "Run all specs"
13
+ task :all_specs do
14
+ Rake::Task["spec"].execute
15
+ Rake::Task["dummy_specs"].execute
16
+ end
17
+
18
+ desc "run unit tests in dummy apps"
19
+ task :dummy_specs do
20
+ Dir['spec/test_apps/**/Rakefile'].each do |rakefile|
21
+ directory_name = File.dirname(rakefile)
22
+ sh <<-CMD
23
+ cd #{directory_name} && bundle exec rake
24
+ CMD
25
+ end
26
+ end
27
+
28
+ desc "run unit tests for gem only"
29
+ RSpec::Core::RakeTask.new('spec') do |t|
30
+ t.pattern = '**/gem_spec/*_spec.rb'
31
+ end
32
+
33
+
34
+ if ENV["RAILS_ENV"] != "production"
35
+ require 'ci/reporter/rake/rspec'
36
+ end
@@ -22,8 +22,9 @@ module Bushido
22
22
  hook_data["data"] = params["data"]
23
23
 
24
24
  puts "Firing with: #{hook_data.inspect}"
25
+ event = "#{params['category']}.#{params['event']}".gsub('.', '_').to_sym
25
26
 
26
- Bushido::Data.fire(hook_data, "#{params['category']}.#{params['event']}")
27
+ Bushido::Data.fire(hook_data, event)
27
28
 
28
29
  respond_to do |format|
29
30
  format.json {render :json => {'acknowledged' => true}, :status => 200}
@@ -10,17 +10,19 @@ module Bushido
10
10
 
11
11
  else
12
12
 
13
- ENV[params[:id]] = params[:value]
14
- @value = ENV[params[:id]]
13
+ var = params[:id].upcase
14
+
15
+ ENV[var] = params[:value]
16
+ @value = ENV[var]
15
17
 
16
18
  respond_to do |format|
17
- if @value != ENV[params[:id]]
19
+ if @value != ENV[var]
18
20
  format.html{render :layout => false, :text => true, :status => :unprocessable_entity}
19
21
  format.json{render :status => :unprocessable_entity}
20
22
  else
21
- Bushido::Data.fire(params[:id], {params[:id] => ENV[params[:id]]})
23
+ Bushido::Data.fire(var, {var => ENV[var]})
22
24
  format.html{render :text => true}
23
- format.json{render :json => {params[:id] => ENV[params[:id]]}}
25
+ format.json{render :json => {var => ENV[var]}}
24
26
  end
25
27
  end
26
28
  end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Bushido
3
+ class MailController < ApplicationController
4
+
5
+ # POST /bushido/mail
6
+ def index
7
+ puts "Handling email!"
8
+ mail = {}
9
+ attachments = []
10
+
11
+ # Strip the attachments first
12
+ params.keys.each do |key|
13
+ attachments << params.delete(key) if key =~ /attachment-\d+/
14
+ end
15
+
16
+ # Copy the params to the hook data
17
+ (params.keys - ["controller", "action"]).each do |param|
18
+ mail[param.downcase] = params[param]
19
+ end
20
+
21
+ mail["attachments"] = attachments
22
+
23
+ puts "params: #{params.inspect}"
24
+ puts "mail: #{mail.inspect}"
25
+
26
+ # Output for debugging remotely
27
+ Bushido::Mailroute.pretty_print_routes
28
+ puts "Finished routing"
29
+
30
+ # Mailroute is in charge of figuring out which callback to trigger
31
+ Bushido::Mailroute.routes.process(mail)
32
+
33
+ result = {:success => true, :message => nil, :data => {}}
34
+ render :text => result.to_json, :status => 200
35
+ end
36
+ end
37
+ end
@@ -4,12 +4,17 @@ module Bushido #:nodoc:
4
4
  require 'json'
5
5
  require 'highline/import'
6
6
  require 'orm_adapter'
7
-
8
- require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
9
-
10
- require "action_dispatch"
7
+ require 'bushido/engine'
8
+ if defined?(Rails) && Rails::VERSION::MAJOR == 3
9
+ require "action_dispatch"
10
+ end
11
11
  require "rails/routes"
12
- require "bushido/hooks"
12
+ require "bushido/base"
13
+ require "bushido/bar"
14
+ require "bushido/config"
15
+ require "bushido/smtp"
16
+
17
+ require "hooks"
13
18
  require "bushido/platform"
14
19
  require "bushido/utils"
15
20
  require "bushido/command"
@@ -22,6 +27,23 @@ module Bushido #:nodoc:
22
27
  require "bushido/middleware"
23
28
  require "bushido/models"
24
29
  require "bushido/schema"
30
+ require "bushido/event_observer"
31
+ require "bushido/mail_route"
32
+ require "bushido/user_helper"
33
+
34
+ # Manually require the controllers for rails 2
35
+ if defined?(Rails) && Rails::VERSION::MAJOR == 2
36
+ base_dir = "#{File.dirname(__FILE__)}/.."
37
+
38
+ require "#{base_dir}/app/controllers/bushido/data_controller"
39
+ require "#{base_dir}/app/controllers/bushido/mail_controller"
40
+ require "#{base_dir}/app/controllers/bushido/envs_controller"
41
+ require "bushido/action_mailer"
42
+ end
43
+
44
+ if defined?(Rails) && Rails::VERSION::MAJOR == 3
45
+ Bushido::SMTP.setup_action_mailer_smtp!
46
+ end
25
47
 
26
48
  # Default way to setup Bushido. Run rails generate bushido_install to create
27
49
  # a fresh initializer with all configuration values.
@@ -0,0 +1,35 @@
1
+ module ActionMailer
2
+ class Base
3
+ private
4
+ def perform_delivery_bushido(mail)
5
+ if mail.to.nil?
6
+ unless logger.nil?
7
+ logger.error "This mail isn't addressed to anyone! Dropping"
8
+ end
9
+
10
+ return false
11
+ end
12
+
13
+ #result = Bushido::App.mail_allowed?
14
+ result = {"success" => true}
15
+
16
+ if result
17
+ logger.info result.inspect unless logger.nil?
18
+ if result["success"] == true
19
+ Bushido::SMTP.setup_action_mailer_smtp!
20
+
21
+ unless logger.nil?
22
+ logger.info "App allowed to send email, sending via SMTP"
23
+ logger.info "Sending:"
24
+ logger.info mail.inspect
25
+ __send__("perform_delivery_smtp", mail) if perform_deliveries
26
+ end
27
+ else
28
+ logger.info "Unable to send email: #{result['message']}" unless logger.nil?
29
+ end
30
+ else
31
+ logger.info "Unable to contact Bushido to verify email credentials" unless logger.nil?
32
+ end
33
+ end
34
+ end
35
+ end
@@ -187,6 +187,13 @@ module Bushido
187
187
  end
188
188
 
189
189
 
190
+ # Check if the app is allowed to send emails
191
+ # Apps are rate-limited according to their tier
192
+ def mail_allowed?
193
+ Bushido::Command.get_command(Bushido::Base.allowed_email_url)
194
+ end
195
+
196
+
190
197
  def ssh_key #:nodoc:
191
198
  get({:gift => "ssh_key"})["ssh_key"]
192
199
  end
@@ -0,0 +1,19 @@
1
+ module Bushido
2
+ # Bushido::Bar
3
+ class Bar
4
+ # Default to showing the bar on all paths
5
+ @@bar_paths = [/.*/]
6
+
7
+ def self.set_bar_display_paths(*paths)
8
+ @@bar_paths = paths
9
+ end
10
+
11
+ def self.in_bar_display_path?(env)
12
+ @@bar_paths.each do |path_regex|
13
+ return true if env['PATH_INFO'] =~ path_regex
14
+ end
15
+
16
+ return false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module Bushido
2
+ class Base
3
+ class << self
4
+ url_pairs = {
5
+ :unity=>[:valid, :exists, :invite, :pending_invites, :remove, :notify],
6
+ :email=>[:send, :allowed]
7
+ }
8
+
9
+ def notify_user_url
10
+ "#{Bushido::Platform.host}/notifications.json"
11
+ end
12
+
13
+ # NOTE Cannot use define_singleton_method since ruby 1.8 compatibility is a must
14
+ url_pairs.each_pair do |prefix, method_names|
15
+ method_names.each do |method_name|
16
+ define_method "#{method_name}_#{prefix}_url".to_sym do
17
+ "#{Bushido::Platform.host}/#{prefix}/#{Bushido::Config.api_version}/#{method_name}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -15,21 +15,25 @@ module Bushido
15
15
 
16
16
  begin
17
17
  raw = RestClient.get(url, {:params => params, :accept => :json})
18
- rescue => e
19
- puts e.inspect
18
+ rescue # => e
19
+ # puts e.inspect
20
20
  @@last_request_successful = false
21
21
  return nil
22
22
  end
23
23
 
24
24
  @@last_request_successful = true
25
- @@last_request = JSON.parse raw
25
+ @@last_request = JSON(raw)
26
26
  end
27
27
 
28
28
  def post_command(url, params)
29
29
  @@request_count += 1
30
- params.merge!({:auth_token => Bushido::Platform.key}) if params[:auth_token].nil? unless Bushido::Platform.key.nil?
30
+
31
+ unless Bushido::Platform.key.nil?
32
+ params["auth_token"] ||= Bushido::Platform.key
33
+ end
31
34
 
32
35
  begin
36
+ puts "RestClient.post(#{url}, #{params.to_json}, :content_type => :json, :accept => :json)"
33
37
  raw = RestClient.post(url, params.to_json, :content_type => :json, :accept => :json)
34
38
  rescue => e
35
39
  puts e.inspect
@@ -38,39 +42,37 @@ module Bushido
38
42
  end
39
43
 
40
44
  @@last_request_successful = true
41
- @@last_request = JSON.parse raw
45
+ @@last_request = JSON(raw)
42
46
  end
43
47
 
44
48
  def put_command(url, params, meta={})
45
49
  @@request_count += 1
50
+
46
51
  if meta[:force]
47
52
  params.merge!({:auth_token => Bushido::Platform.key}) if params[:auth_token].nil? unless Bushido::Platform.key.nil?
48
53
 
49
54
  begin
50
55
  raw = RestClient.put(url, params.to_json, :content_type => :json)
51
- rescue => e
52
- puts e.inspect
56
+ rescue # => e
57
+ # puts e.inspect
53
58
  @@last_request_successful = false
54
59
  return nil
55
60
  end
56
61
 
57
- @@last_request_successful = true
58
- @@last_request = JSON.parse raw
59
-
60
62
  else
61
63
  params.merge!({:auth_token => Bushido::Platform.key}) if params[:auth_token].nil? unless Bushido::Platform.key.nil?
62
64
 
63
65
  begin
64
66
  raw = RestClient.put(url, params.to_json, :content_type => :json)
65
- rescue => e
66
- puts e.inspect
67
+ rescue # => e
68
+ #puts e.inspect
67
69
  @@last_request_successful = false
68
70
  return nil
69
71
  end
70
-
71
- @@last_request_successful = true
72
- @@last_request = JSON.parse raw
73
72
  end
73
+
74
+ @@last_request_successful = true
75
+ @@last_request = JSON.parse raw
74
76
  end
75
77
 
76
78
  def show_response(response)
@@ -0,0 +1,12 @@
1
+ module Bushido
2
+ class Config
3
+
4
+ # API version defaults to v1
5
+ # Passing prefix "v" to ensure that developers assume it's a string. For future advantage when using API versions like 1.6.23
6
+ @api_version = "v1"
7
+
8
+ class << self
9
+ attr_accessor :api_version
10
+ end
11
+ end
12
+ end
@@ -1,34 +1,52 @@
1
1
  module Bushido
2
2
  class Data #:nodoc:
3
+ @@observers = []
4
+
5
+ def self.add_observer(observer)
6
+ puts "Subscribing #{observer} to Bushido data calls"
7
+ @@observers << observer
8
+ end
3
9
 
4
- extend Hooks
10
+ def self.fire(data, event)
11
+ puts "Bushido Hooks Firing #{event} with => #{data.inspect}"
5
12
 
6
- class << self
7
- def attach(*models)
8
- # Total no-op, we just need to load the classes in order to
9
- # register the hooks, and this does that.
10
- end
13
+ processed = false
14
+
15
+ @@observers.each do |observer|
16
+ puts "#{observer}.respond_to?(#{event}) => #{observer.respond_to?(event)}"
17
+
18
+ if observer.respond_to?(event)
19
+ processed = true
20
+
21
+ # Make a copy of the data so it's not mutated as the events
22
+ # pass through the observers
23
+ observer.instance_variable_set("@params", data.dup)
11
24
 
12
-
13
- def publish(model, model_data)
14
- # POST to /apps/:id/bus
15
- data = {}
16
- data[:key] = Bushido::Platform.key
17
-
18
- data["data"] = model_data
19
- data["data"]["ido_model"] = model
20
- #puts "Publishing Ido model"
21
- #puts data.to_json
22
- #puts Bushido::Platform.publish_url
23
-
24
- # TODO: Catch non-200 response code
25
- response = JSON.parse(RestClient.post(Bushido::Platform.publish_url, data.to_json, :content_type => :json, :accept => :json))
26
- if response['ido_id'].nil? or response['ido_version'].nil?
27
- return false
25
+ result = observer.send(event)
26
+
27
+ # Allow an observer to halt event propagation
28
+ if result == :halt
29
+ puts "Observer #{observer} halted event propagation"
30
+ break
31
+ end
28
32
  end
33
+ end
34
+
35
+ # We've checked all the observers to see if they respond to the
36
+ # named events, so if the event is still unprocessed then let's
37
+ # fall back on the first catch_all event we find
38
+ if !processed
39
+ @@observers.each do |observer|
40
+ if observer.respond_to?(:catch_all)
41
+ observer.instance_variable_set("@params", data.dup)
29
42
 
30
- return response
43
+ observer.send(:catch_all)
44
+ break
45
+ end
46
+ end
31
47
  end
32
48
  end
33
49
  end
34
50
  end
51
+
52
+