bushido 0.0.29 → 0.0.30
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/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
|