bushido 0.0.35 → 0.0.36

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.
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
+