bushido 0.0.29 → 0.0.30
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +23 -0
- data/Rakefile +9 -3
- data/app/controllers/bushido/data_controller.rb +4 -2
- data/app/controllers/bushido/envs_controller.rb +11 -3
- data/bushido.gemspec +1 -0
- data/lib/bushido/data.rb +44 -29
- data/lib/bushido/envs.rb +3 -31
- data/lib/bushido/hooks.rb +38 -0
- data/lib/bushido/ido_schema.rb +17 -0
- data/lib/bushido/middleware.rb +6 -5
- data/lib/bushido/models.rb +144 -0
- data/lib/bushido/orm/active_record.rb +44 -0
- data/lib/bushido/orm/mongoid.rb +31 -0
- data/lib/bushido/platform.rb +4 -1
- data/lib/bushido/schema.rb +42 -0
- data/lib/bushido/version.rb +1 -1
- data/lib/bushido.rb +17 -2
- data/lib/engine.rb +4 -7
- data/lib/generators/active_record/bushido_generator.rb +28 -0
- data/lib/generators/active_record/templates/migration.rb +20 -0
- data/lib/generators/bushido/bushido_generator.rb +14 -0
- data/lib/generators/bushido/install_generator.rb +24 -0
- data/lib/generators/bushido/orm_helpers.rb +21 -0
- data/lib/generators/mongoid/bushido_generator.rb +17 -0
- data/lib/generators/templates/README +5 -0
- data/lib/generators/templates/bushido.rb +10 -0
- data/lib/rails/#routes.rb# +16 -0
- data/test/controllers/envs_controller_test.rb +21 -0
- data/test/rails_app/Rakefile +9 -0
- data/test/rails_app/app/controllers/application_controller.rb +7 -0
- data/test/rails_app/app/helpers/application_helper.rb +2 -0
- data/test/rails_app/app/views/application/index.html.erb +1 -0
- data/test/rails_app/app/views/layouts/application.html.erb +14 -0
- data/test/rails_app/config/application.rb +50 -0
- data/test/rails_app/config/boot.rb +10 -0
- data/test/rails_app/config/database.yml +22 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +26 -0
- data/test/rails_app/config/environments/production.rb +49 -0
- data/test/rails_app/config/environments/test.rb +35 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/inflections.rb +10 -0
- data/test/rails_app/config/initializers/mime_types.rb +5 -0
- data/test/rails_app/config/initializers/secret_token.rb +7 -0
- data/test/rails_app/config/initializers/session_store.rb +8 -0
- data/test/rails_app/config/locales/en.yml +5 -0
- data/test/rails_app/config/routes.rb +62 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/db/development.sqlite3 +0 -0
- data/test/rails_app/db/test.sqlite3 +0 -0
- data/test/rails_app/log/development.log +66 -0
- data/test/rails_app/log/production.log +0 -0
- data/test/rails_app/log/server.log +0 -0
- data/test/rails_app/log/test.log +0 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/rails_app/public/javascripts/application.js +2 -0
- data/test/rails_app/public/javascripts/controls.js +965 -0
- data/test/rails_app/public/javascripts/dragdrop.js +974 -0
- data/test/rails_app/public/javascripts/effects.js +1123 -0
- data/test/rails_app/public/javascripts/prototype.js +6001 -0
- data/test/rails_app/public/javascripts/rails.js +191 -0
- data/test/rails_app/public/stylesheets/.gitkeep +0 -0
- data/test/rails_app/script/rails +6 -0
- data/test/test_helper.rb +9 -0
- metadata +154 -79
- data/config/routes.rb +0 -1
- data/test/routes_test.rb +0 -12
- data/test/test_executable.rb +0 -10
data/Gemfile
CHANGED
@@ -3,3 +3,26 @@ source "http://rubygems.org"
|
|
3
3
|
|
4
4
|
# Specify your gem's dependencies in bushido.gemspec
|
5
5
|
gemspec
|
6
|
+
|
7
|
+
|
8
|
+
gem "rails", "~> 3.0.7"
|
9
|
+
gem "sqlite3-ruby"
|
10
|
+
|
11
|
+
group :test do
|
12
|
+
# gem "webrat", "0.7.2", :require => false
|
13
|
+
# gem "mocha", :require => false
|
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
|
24
|
+
end
|
25
|
+
|
26
|
+
group :development do
|
27
|
+
gem 'ci_reporter'
|
28
|
+
end
|
data/Rakefile
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'rake/testtask'
|
2
2
|
require 'bundler'
|
3
|
+
require 'ci/reporter/rake/test_unit'
|
4
|
+
|
3
5
|
Bundler::GemHelper.install_tasks
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
7
|
+
task :default => :test
|
8
|
+
|
9
|
+
desc "Run bushido tests"
|
10
|
+
Rake::TestTask.new(:test) do |t|
|
11
|
+
t.libs << 'lib'
|
12
|
+
t.libs << 'test'
|
13
|
+
t.pattern = 'test/**/*_test.rb'
|
8
14
|
t.verbose = true
|
9
15
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Bushido
|
2
2
|
class DataController < ApplicationController
|
3
|
-
|
3
|
+
|
4
|
+
# POST /bushido/data/
|
4
5
|
def index
|
5
6
|
@key = params.delete(:key)
|
6
7
|
if ENV["BUSHIDO_APP_KEY"] != @key
|
@@ -13,7 +14,8 @@ module Bushido
|
|
13
14
|
|
14
15
|
puts "OMG GOT DATA FROM BUSHIBUS"
|
15
16
|
puts params.inspect
|
16
|
-
|
17
|
+
puts params[:category].inspect
|
18
|
+
Bushido::Data.fire(params, "#{params[:category]}.#{params[:event]}")
|
17
19
|
respond_to do |format|
|
18
20
|
format.json {render :json => {'acknowledged' => true}, :status => 200}
|
19
21
|
end
|
@@ -2,7 +2,11 @@ module Bushido
|
|
2
2
|
class EnvsController < ApplicationController
|
3
3
|
# PUT /bushido/envs/:id
|
4
4
|
def update
|
5
|
-
|
5
|
+
logger.info "Updating ENV vars!"
|
6
|
+
logger.info "params: #{params.inspect}"
|
7
|
+
|
8
|
+
if Bushido::Platform.key != params[:key] or params[:id] == Bushido::Platform.key
|
9
|
+
logger.info "key didn't match! #{Bushido::Platform.key} != #{params[:key]}"
|
6
10
|
respond_to do |format|
|
7
11
|
format.html { render :layout => false, :text => true, :status => :forbidden }
|
8
12
|
format.json { render :status => :unprocessable_entity }
|
@@ -10,16 +14,20 @@ module Bushido
|
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
17
|
+
logger.info "next: #{params[:id]} = #{ENV[params[:id]]}"
|
18
|
+
|
13
19
|
ENV[params[:id]] = params[:value]
|
14
20
|
@value = ENV[params[:id]]
|
15
|
-
|
21
|
+
|
22
|
+
logger.info "next: #{params[:id]} = #{ENV[params[:id]]}"
|
23
|
+
|
16
24
|
respond_to do |format|
|
17
25
|
if @value != ENV[params[:id]]
|
18
26
|
format.html{render :layout => false, :text => true, :status => :unprocessable_entity}
|
19
27
|
format.json{render :status => :unprocessable_entity}
|
20
28
|
else
|
21
29
|
puts "Firing update hooks method from controller"
|
22
|
-
Bushido::
|
30
|
+
Bushido::Envs.fire(params[:id], {params[:id] => ENV[params[:id]]})
|
23
31
|
format.html{render :text => true}
|
24
32
|
format.json{render :json => {params[:id] => ENV[params[:id]]}}
|
25
33
|
end
|
data/bushido.gemspec
CHANGED
data/lib/bushido/data.rb
CHANGED
@@ -1,40 +1,55 @@
|
|
1
1
|
module Bushido
|
2
2
|
class Data #:nodoc:
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
class << self
|
7
|
-
def fire(data, *hooks)
|
8
|
-
unless @@hooks[:global].nil?
|
9
|
-
@@hooks[:global].call(data, 'global')
|
10
|
-
end
|
4
|
+
extend Hooks
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
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.
|
19
10
|
end
|
20
11
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
def bushido_data(model, model_data)
|
13
|
+
puts "prepping publish data..."
|
14
|
+
data = {}
|
15
|
+
data[:key] = Bushido::Platform.key
|
16
|
+
|
17
|
+
|
18
|
+
data["data"] = model_data
|
19
|
+
puts data.inspect
|
20
|
+
data["data"]["ido_model"] = model
|
21
|
+
puts "Publishing Ido model"
|
22
|
+
puts data.to_json
|
23
|
+
puts Bushido::Platform.publish_url
|
24
|
+
|
25
|
+
return data
|
29
26
|
end
|
27
|
+
|
30
28
|
|
31
|
-
def publish(model)
|
32
|
-
puts "
|
33
|
-
|
34
|
-
|
29
|
+
def publish(model, model_data, verb=:post)
|
30
|
+
puts "in the Data::Publish method"
|
31
|
+
# POST to /apps/:id/bus
|
32
|
+
data = bushido_data(model, model_data)
|
33
|
+
|
34
|
+
puts "got the data"
|
35
|
+
url = Bushido::Platform.publish_url
|
36
|
+
puts "url: #{url} , verb #{verb}"
|
37
|
+
|
38
|
+
if verb == :delete
|
39
|
+
verb = :put
|
40
|
+
url += "/#{data['data']['ido_id']}"
|
41
|
+
end
|
42
|
+
|
43
|
+
puts "Publishing to: #{url}"
|
44
|
+
|
45
|
+
# TODO: Catch non-200 response code
|
46
|
+
response = JSON.parse(RestClient.send(verb, url, data.to_json, :content_type => :json, :accept => :json))
|
47
|
+
if response['ido_id'].nil? or response['ido_version'].nil?
|
48
|
+
return false
|
49
|
+
end
|
50
|
+
|
51
|
+
return response
|
35
52
|
end
|
36
|
-
|
37
53
|
end
|
38
|
-
|
39
54
|
end
|
40
|
-
end
|
55
|
+
end
|
data/lib/bushido/envs.rb
CHANGED
@@ -1,34 +1,6 @@
|
|
1
1
|
module Bushido
|
2
2
|
class Envs #:nodoc:
|
3
|
-
|
4
|
-
@@hooks = {}
|
5
|
-
|
6
|
-
class << self
|
7
|
-
def fire(data, *hooks)
|
8
|
-
unless @@hooks[:global].nil?
|
9
|
-
@@hooks[:global].call(data, 'global')
|
10
|
-
end
|
11
|
-
|
12
|
-
if hooks.length > 0
|
13
|
-
hooks.each do |h|
|
14
|
-
unless @@hooks[h].nil?
|
15
|
-
@@hooks[h].call(data, hook)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def listen *hooks, &block
|
22
|
-
if hooks.empty? and block_given?
|
23
|
-
@@hooks[:global] = block
|
24
|
-
elsif !hooks.nil? and block_given?
|
25
|
-
hooks.each do |h|
|
26
|
-
@@hooks[h] = block
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
3
|
+
extend Hooks
|
33
4
|
end
|
34
|
-
end
|
5
|
+
end
|
6
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Hooks
|
2
|
+
|
3
|
+
@@hooks = {}
|
4
|
+
|
5
|
+
def fire(data, *events)
|
6
|
+
puts "Hooks: #{@@hooks.inspect}"
|
7
|
+
|
8
|
+
puts "Events: #{events.inspect}"
|
9
|
+
puts "\twith data: #{data.inspect}"
|
10
|
+
unless @@hooks[:global].nil?
|
11
|
+
@@hooks[:global].call(data, 'global')
|
12
|
+
end
|
13
|
+
|
14
|
+
if events.length > 0
|
15
|
+
events.each do |event|
|
16
|
+
print "Checking for event: #{event} in hooks..."
|
17
|
+
if @@hooks[event].nil?
|
18
|
+
puts "not found, ignoring."
|
19
|
+
else
|
20
|
+
puts "found, firing!"
|
21
|
+
@@hooks[event].call(data, event)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def listen *events, &block
|
28
|
+
puts "Listening for #{events.inspect}"
|
29
|
+
|
30
|
+
if events.empty? and block_given?
|
31
|
+
@@hooks[:global] = block
|
32
|
+
elsif !events.nil? and block_given?
|
33
|
+
events.each do |event|
|
34
|
+
@@hooks[event] = block
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# This is probably a bad idea. Feel free to kill this file if you're unsure.
|
2
|
+
module Bushido
|
3
|
+
module IdoSchema
|
4
|
+
class << self
|
5
|
+
def schema_for(ido_model)
|
6
|
+
# GET to /ido/schemas/:ido_model
|
7
|
+
# TODO: Catch non-200 response code
|
8
|
+
response = JSON.parse(RestClient.get("#{Bushido::Platform.host}/ido/schemas/#{ido_model}/#{ENV['BUSHIDO_PROJECT_SHA']}", :content_type => :json, :accept => :json))
|
9
|
+
if response['ido_schema'].nil?
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
|
13
|
+
return response['ido_schema']
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/bushido/middleware.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
require 'rack/utils'
|
1
|
+
#require 'rack/utils'
|
2
2
|
|
3
3
|
module Bushido
|
4
4
|
class Middleware
|
5
5
|
|
6
|
-
|
7
|
-
BUSHIDO_JS_URL = 'http://bushi.do/api/bushido.js'
|
6
|
+
BUSHIDO_JS_URL = "#{Bushido::Platform.host}/api/bushido.js"
|
8
7
|
|
9
8
|
include Rack::Utils
|
10
9
|
|
@@ -12,10 +11,12 @@ module Bushido
|
|
12
11
|
@app = app
|
13
12
|
@bushido_app_name = ENV['BUSHIDO_APP']
|
14
13
|
@bushido_metrics_token = ENV['BUSHIDO_METRICS_TOKEN']
|
15
|
-
@bushido_claimed = ENV['BUSHIDO_CLAIMED'].nil? ? false : true
|
14
|
+
@bushido_claimed = (ENV['BUSHIDO_CLAIMED'].nil? or ENV['BUSHIDO_CLAIMED'].blank?) ? false : true
|
16
15
|
end
|
17
16
|
|
18
17
|
def call(env)
|
18
|
+
@bushido_claimed = (ENV['BUSHIDO_CLAIMED'].nil? or ENV['BUSHIDO_CLAIMED'].blank?) ? false : true
|
19
|
+
|
19
20
|
status, headers, response = @app.call(env)
|
20
21
|
|
21
22
|
unless @bushido_app_name.empty?
|
@@ -30,7 +31,7 @@ module Bushido
|
|
30
31
|
var _bushido_metrics_token = '#{@bushido_metrics_token}';
|
31
32
|
(function() {
|
32
33
|
var bushido = document.createElement('script'); bushido.type = 'text/javascript'; bushido.async = true;
|
33
|
-
bushido.src = '#{BUSHIDO_JS_URL}
|
34
|
+
bushido.src = '#{BUSHIDO_JS_URL}?ts=#{::Bushido::VERSION.gsub('.', '')}';
|
34
35
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(bushido, s);
|
35
36
|
})();
|
36
37
|
</script>
|
@@ -0,0 +1,144 @@
|
|
1
|
+
module Bushido
|
2
|
+
module Models
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def posh
|
8
|
+
puts "posh"
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_ido
|
12
|
+
data = {}
|
13
|
+
|
14
|
+
self.class.ido_schema.each do |schema_field|
|
15
|
+
data[schema_field] = self.send(schema_field.to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
data
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def ido_destroy
|
23
|
+
unless self.ido_id.nil?
|
24
|
+
puts "Global IdoData, publishing destroy event to Bushido databus"
|
25
|
+
|
26
|
+
data = self.to_ido
|
27
|
+
|
28
|
+
puts "This is the data I *want* to publish: #{data.inspect}"
|
29
|
+
|
30
|
+
begin
|
31
|
+
response = Bushido::Data.publish(self.class.class_variable_get("@@ido_model"), data, :delete)
|
32
|
+
rescue => e
|
33
|
+
puts e.inspect
|
34
|
+
# TODO: Catch specific exceptions and bubble up errors (e.g. 'bushido is down', 'model is malformed', etc.)
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
|
38
|
+
self.ido_version = response["ido_version"]
|
39
|
+
self.ido_id ||= response["ido_id"]
|
40
|
+
|
41
|
+
puts response.inspect
|
42
|
+
else
|
43
|
+
puts "Remote change, not publishing to Bushido databus"
|
44
|
+
end
|
45
|
+
|
46
|
+
return true
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
def ido_save
|
52
|
+
# It's possible we're saving an item just handed to us by Bushido, so we
|
53
|
+
# don't want to re-publish it. We can detect it using the version.
|
54
|
+
|
55
|
+
puts "what"
|
56
|
+
# bushido_id.nil? This is new, it's from us (otherwise bushido would have given it an id), we should publish it.
|
57
|
+
# bushido_version == self.find(self.id).bushido_version The version hasn't changed, our data has, we should publish it
|
58
|
+
puts "new_record? #{self.new_record?}"
|
59
|
+
puts "self.id = #{self.id}"
|
60
|
+
puts "ido_id.nil? #{ido_id.nil?}"
|
61
|
+
unless self.new_record?
|
62
|
+
puts "ido_version == self.class.find(self.id).ido_version ? #{ido_version == self.class.find(self.id).ido_version}"
|
63
|
+
puts "#{self.ido_version} == #{self.class.find(self.id).ido_version} ? #{ido_version == self.class.find(self.id).ido_version}"
|
64
|
+
end
|
65
|
+
if self.ido_id.nil? or (not self.new_record? and self.ido_version == self.class.find(self.id).ido_version)
|
66
|
+
puts "Local change, publishing to Bushido databus"
|
67
|
+
|
68
|
+
puts "Converting to Ido format..."
|
69
|
+
data = self.to_ido
|
70
|
+
|
71
|
+
puts "Publishing: #{data}"
|
72
|
+
|
73
|
+
begin
|
74
|
+
print "About to publish"
|
75
|
+
response = Bushido::Data.publish(self.class.class_variable_get("@@ido_model"), data)
|
76
|
+
puts "done!"
|
77
|
+
rescue => e
|
78
|
+
puts "ERROR!"
|
79
|
+
puts e.inspect
|
80
|
+
# TODO: Catch specific exceptions and bubble up errors (e.g. 'bushido is down', 'model is malformed', etc.)
|
81
|
+
return false
|
82
|
+
end
|
83
|
+
|
84
|
+
self.ido_version = response["ido_version"]
|
85
|
+
self.ido_id ||= response["ido_id"]
|
86
|
+
|
87
|
+
puts response.inspect
|
88
|
+
else
|
89
|
+
puts "Remote change, not publishing to Bushido databus"
|
90
|
+
end
|
91
|
+
|
92
|
+
return true
|
93
|
+
end
|
94
|
+
|
95
|
+
module ClassMethods
|
96
|
+
def ido model
|
97
|
+
self.class_variable_set("@@ido_model", model)
|
98
|
+
|
99
|
+
[:create, :update, :destroy].each do |event|
|
100
|
+
puts "Hooking into #{model}.#{event}..."
|
101
|
+
|
102
|
+
Bushido::Data.listen("#{model}.#{event}") do |data, hook|
|
103
|
+
puts "#{hook}.) Firing off #{model}.#{event} now with data: #{data}"
|
104
|
+
self.send("on_ido_#{event}".to_sym, self.from_ido(data))
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
before_save :ido_save
|
109
|
+
before_destroy :ido_destroy
|
110
|
+
end
|
111
|
+
|
112
|
+
def from_ido(incoming_json)
|
113
|
+
model = self.new
|
114
|
+
puts model.inspect
|
115
|
+
|
116
|
+
ido_schema.each do |schema_field|
|
117
|
+
puts "Setting#{schema_field}= #{incoming_json[schema_field]}"
|
118
|
+
model.send("#{schema_field}=".to_sym, incoming_json[schema_field])
|
119
|
+
end
|
120
|
+
|
121
|
+
model
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
def on_ido_create(ido_app)
|
126
|
+
ido_app.save
|
127
|
+
end
|
128
|
+
|
129
|
+
def on_ido_update(ido_app)
|
130
|
+
app = self.find_or_create_by_ido_id(ido_app.ido_id)
|
131
|
+
|
132
|
+
ido_schema.each do |schema_field|
|
133
|
+
app.send("#{schema_field}=".to_sym, ido_app[schema_field])
|
134
|
+
end
|
135
|
+
|
136
|
+
app.save
|
137
|
+
end
|
138
|
+
|
139
|
+
def on_ido_destroy(ido_app)
|
140
|
+
self.find_by_ido_id(ido_app.ido_id).try(:destroy)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'orm_adapter/adapters/active_record'
|
2
|
+
|
3
|
+
module Bushido
|
4
|
+
module Orm
|
5
|
+
# This module contains some helpers and handle schema (migrations):
|
6
|
+
#
|
7
|
+
# create_table :accounts do |t|
|
8
|
+
# t.database_authenticatable
|
9
|
+
# t.confirmable
|
10
|
+
# t.recoverable
|
11
|
+
# t.rememberable
|
12
|
+
# t.trackable
|
13
|
+
# t.lockable
|
14
|
+
# t.timestamps
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# However this method does not add indexes. If you need them, here is the declaration:
|
18
|
+
#
|
19
|
+
# add_index "accounts", ["email"], :name => "email", :unique => true
|
20
|
+
# add_index "accounts", ["confirmation_token"], :name => "confirmation_token", :unique => true
|
21
|
+
# add_index "accounts", ["reset_password_token"], :name => "reset_password_token", :unique => true
|
22
|
+
#
|
23
|
+
module ActiveRecord
|
24
|
+
module Schema
|
25
|
+
include Bushido::Schema
|
26
|
+
|
27
|
+
# Tell how to apply schema methods.
|
28
|
+
def apply_bushido_schema(name, type, options={})
|
29
|
+
column name, type.to_s.downcase.to_sym, options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module ActiveRecord
|
37
|
+
class Base
|
38
|
+
include Bushido::Models
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
ActiveRecord::ConnectionAdapters::Table.send :include, Bushido::Orm::ActiveRecord::Schema
|
43
|
+
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Bushido::Orm::ActiveRecord::Schema
|
44
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'orm_adapter/adapters/mongoid'
|
2
|
+
|
3
|
+
module Bushido
|
4
|
+
module Orm
|
5
|
+
module Mongoid
|
6
|
+
module Hook
|
7
|
+
def bushido_modules_hook!
|
8
|
+
extend Schema
|
9
|
+
yield
|
10
|
+
return unless Devise.apply_schema
|
11
|
+
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Schema
|
16
|
+
include Bushido::Schema
|
17
|
+
|
18
|
+
# Tell how to apply schema methods
|
19
|
+
def apply_bushido_schema(name, type, options={})
|
20
|
+
type = Time if type == DateTime
|
21
|
+
field name, { :type => type }.merge!(options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Mongoid::Document::ClassMethods.class_eval do
|
29
|
+
include Bushido::Models
|
30
|
+
include Bushido::Orm::Mongoid::Hook
|
31
|
+
end
|
data/lib/bushido/platform.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Bushido
|
2
|
+
# Holds devise schema information. To use it, just include its methods
|
3
|
+
# and overwrite the apply_schema method.
|
4
|
+
module Schema
|
5
|
+
|
6
|
+
# Creates reset_password_token and reset_password_sent_at.
|
7
|
+
#
|
8
|
+
# == Options
|
9
|
+
# * :reset_within - When true, adds a column that reset passwords within some date
|
10
|
+
def recoverable(options={})
|
11
|
+
use_within = options.fetch(:reset_within, Devise.reset_password_within.present?)
|
12
|
+
apply_devise_schema :reset_password_token, String
|
13
|
+
apply_devise_schema :reset_password_sent_at, DateTime if use_within
|
14
|
+
end
|
15
|
+
|
16
|
+
# Creates remember_token and remember_created_at.
|
17
|
+
#
|
18
|
+
# == Options
|
19
|
+
# * :use_salt - When true, does not create a remember_token and use password_salt instead.
|
20
|
+
def rememberable(options={})
|
21
|
+
use_salt = options.fetch(:use_salt, Devise.use_salt_as_remember_token)
|
22
|
+
apply_devise_schema :remember_token, String unless use_salt
|
23
|
+
apply_devise_schema :remember_created_at, DateTime
|
24
|
+
end
|
25
|
+
|
26
|
+
# Creates sign_in_count, current_sign_in_at, last_sign_in_at,
|
27
|
+
# current_sign_in_ip, last_sign_in_ip.
|
28
|
+
def trackable
|
29
|
+
apply_devise_schema :sign_in_count, Integer, :default => 0
|
30
|
+
apply_devise_schema :current_sign_in_at, DateTime
|
31
|
+
apply_devise_schema :last_sign_in_at, DateTime
|
32
|
+
apply_devise_schema :current_sign_in_ip, String
|
33
|
+
apply_devise_schema :last_sign_in_ip, String
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Overwrite with specific modification to create your own schema.
|
38
|
+
def apply_devise_schema(name, type, options={})
|
39
|
+
raise NotImplementedError
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/bushido/version.rb
CHANGED
data/lib/bushido.rb
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
module Bushido #:nodoc:
|
2
2
|
require 'optparse'
|
3
|
-
require '
|
3
|
+
require 'rest_client'
|
4
4
|
require 'json'
|
5
5
|
require 'highline/import'
|
6
|
-
|
6
|
+
require 'orm_adapter'
|
7
|
+
|
7
8
|
require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
9
|
+
|
10
|
+
require "action_dispatch"
|
11
|
+
require "rails/routes"
|
12
|
+
require "bushido/hooks"
|
8
13
|
require "bushido/platform"
|
9
14
|
require "bushido/utils"
|
15
|
+
require "bushido/hooks"
|
10
16
|
require "bushido/command"
|
11
17
|
require "bushido/app"
|
12
18
|
require "bushido/user"
|
@@ -15,4 +21,13 @@ module Bushido #:nodoc:
|
|
15
21
|
require "bushido/envs"
|
16
22
|
require "bushido/data"
|
17
23
|
require "bushido/middleware"
|
24
|
+
require "bushido/models"
|
25
|
+
require "bushido/schema"
|
26
|
+
require "bushido/ido_schema"
|
27
|
+
|
28
|
+
# Default way to setup Bushido. Run rails generate bushido_install to create
|
29
|
+
# a fresh initializer with all configuration values.
|
30
|
+
def self.setup
|
31
|
+
yield self
|
32
|
+
end
|
18
33
|
end
|
data/lib/engine.rb
CHANGED
@@ -4,15 +4,12 @@ require 'rails/routes'
|
|
4
4
|
|
5
5
|
module Bushido
|
6
6
|
class Engine < Rails::Engine
|
7
|
-
|
7
|
+
|
8
8
|
initializer "bushido.add_middleware" do |app|
|
9
|
-
|
9
|
+
|
10
10
|
#Only include our middleware if its on our platform
|
11
|
-
unless ENV['BUSHIDO_APP'].nil?
|
12
|
-
app.middleware.use Bushido::Middleware
|
13
|
-
end
|
14
|
-
|
11
|
+
app.middleware.use Bushido::Middleware unless ENV['BUSHIDO_APP'].nil?
|
15
12
|
end
|
16
|
-
|
13
|
+
|
17
14
|
end
|
18
15
|
end
|