bang-bang 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bang-bang (0.1.6)
4
+ bang-bang (0.2.0)
5
5
  activesupport (>= 2.0.0)
6
6
  honkster-addressable (>= 2.2.3)
7
7
  mustache
@@ -13,112 +13,11 @@ require "#{dir}/bang-bang/version"
13
13
  require "#{dir}/bang-bang/env_methods"
14
14
 
15
15
  module BangBang
16
- def self.included(mod)
17
- mod.extend(ClassMethods)
18
- end
19
-
20
- module ClassMethods
21
- attr_accessor :application_name, :named_routes, :stderr_dir, :stdout_dir, :root_dir, :views_class
22
- alias_method :uris, :named_routes
23
-
24
- include ::BangBang::EnvMethods
25
-
26
- def init(params={})
27
- self.application_name = params[:application_name] || raise(ArgumentError, "You must provide an :application_name param")
28
- self.root_dir = params[:root_dir] || raise(ArgumentError, "You must provide a :root_dir param")
29
- self.named_routes = params[:named_routes] || raise(ArgumentError, "You must provide a :named_routes param")
30
- self.views_class = params[:views_class] || raise(ArgumentError, "You must provide a :views_class param")
31
-
32
- plugins.init
33
- end
34
-
35
- def register_controller(controller)
36
- controller.config = self
37
- end
38
-
39
- def register_service(path, &block)
40
- unless service_dirs.include?(path)
41
- service = Service.new(path)
42
- services << service
43
- service.init(&block)
44
- end
45
- end
46
-
47
- def service_dirs
48
- services.map do |service|
49
- service.root_dir
50
- end
51
- end
52
-
53
- def services
54
- @services ||= []
55
- end
56
-
57
- def services_by_url_prefix
58
- services.group_by do |service|
59
- service.url_prefix
60
- end
61
- end
62
-
63
- def services_by_root_dir
64
- services.inject({}) do |memo, service|
65
- memo[service.root_dir] = service
66
- memo
67
- end
68
- end
69
-
70
- def stderr_logger
71
- @stderr_logger ||= Logger.new(stderr_dir)
72
- end
73
-
74
- def stdout_logger
75
- @stdout_logger ||= Logger.new(stdout_dir)
76
- end
77
-
78
- def plugins
79
- @plugins ||= ::BangBang::Plugins::Set.new(self)
80
- end
81
-
82
- def lib_dir
83
- File.join(root_dir, "lib")
84
- end
85
-
86
- def stylesheets_dirs
87
- service_subdirectory_dirs "app/stylesheets"
88
- end
89
-
90
- def vendor_dir
91
- File.join(root_dir, "vendor")
92
- end
93
-
94
- def services_dir
95
- File.join(root_dir, "services")
96
- end
97
-
98
- def service_subdirectory_dirs(relative_directory)
99
- service_dirs.flatten.map do |service_path|
100
- full_path = File.join(service_path, relative_directory)
101
- full_path if File.directory?(full_path)
102
- end.compact
103
- end
104
-
105
- def stderr_dir
106
- "#{root_dir}/log/#{application_name}.#{rack_env}.stderr.log"
107
- end
108
-
109
- def stdout_dir
110
- "#{root_dir}/log/#{application_name}.#{rack_env}.stdout.log"
111
- end
112
-
113
- def remove_generated_files
114
- Dir["#{root_dir}/**/public/**/*.generated"].each do |generated_path|
115
- FileUtils.rm_f(File.join(File.dirname(generated_path), File.basename(generated_path, ".generated")))
116
- FileUtils.rm_f(generated_path)
117
- end
118
- end
119
- end
120
16
  end
121
17
 
18
+ require "#{dir}/bang-bang/concern"
19
+ require "#{dir}/bang-bang/service_config"
20
+ require "#{dir}/bang-bang/app_config"
122
21
  require "#{dir}/bang-bang/controller"
123
22
  require "#{dir}/bang-bang/service"
124
23
  require "#{dir}/bang-bang/views"
@@ -0,0 +1,36 @@
1
+ module BangBang
2
+ module AppConfig
3
+ extend BangBang::Concern
4
+
5
+ include ServiceConfig
6
+
7
+ module ClassMethods
8
+ attr_accessor :application_name, :stderr_dir, :stdout_dir
9
+
10
+ def init(params={})
11
+ params[:root_dir] || raise(ArgumentError, "You must provide a :root_dir param")
12
+ params[:named_routes] || raise(ArgumentError, "You must provide a :named_routes param")
13
+ params[:views_class] || raise(ArgumentError, "You must provide a :views_class param")
14
+ self.application_name = params[:application_name] || raise(ArgumentError, "You must provide an :application_name param")
15
+ params[:app_config] = self
16
+ super
17
+ end
18
+
19
+ def stderr_logger
20
+ @stderr_logger ||= Logger.new(stderr_dir)
21
+ end
22
+
23
+ def stdout_logger
24
+ @stdout_logger ||= Logger.new(stdout_dir)
25
+ end
26
+
27
+ def stderr_dir
28
+ "#{root_dir}/log/#{application_name}.#{rack_env}.stderr.log"
29
+ end
30
+
31
+ def stdout_dir
32
+ "#{root_dir}/log/#{application_name}.#{rack_env}.stdout.log"
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ module BangBang
2
+ begin
3
+ require "active_support/concern"
4
+ Concern = ActiveSupport::Concern
5
+ rescue LoadError
6
+ # A typical module looks like this
7
+ #
8
+ # module M
9
+ # def self.included(base)
10
+ # base.send(:extend, ClassMethods)
11
+ # base.send(:include, InstanceMethods)
12
+ # scope :foo, :conditions => { :created_at => nil }
13
+ # end
14
+ #
15
+ # module ClassMethods
16
+ # def cm; puts 'I am a class method'; end
17
+ # end
18
+ #
19
+ # module InstanceMethods
20
+ # def im; puts 'I am an instance method'; end
21
+ # end
22
+ # end
23
+ #
24
+ # By using <tt>ActiveSupport::Concern</tt> the above module could instead be written as:
25
+ #
26
+ # module M
27
+ # extend ActiveSupport::Concern
28
+ #
29
+ # included do
30
+ # scope :foo, :conditions => { :created_at => nil }
31
+ # end
32
+ #
33
+ # module ClassMethods
34
+ # def cm; puts 'I am a class method'; end
35
+ # end
36
+ #
37
+ # module InstanceMethods
38
+ # def im; puts 'I am an instance method'; end
39
+ # end
40
+ # end
41
+ module Concern
42
+ def self.extended(base)
43
+ base.instance_variable_set("@_dependencies", [])
44
+ end
45
+
46
+ def append_features(base)
47
+ if base.instance_variable_defined?("@_dependencies")
48
+ base.instance_variable_get("@_dependencies") << self
49
+ return false
50
+ else
51
+ return false if base < self
52
+ @_dependencies.each { |dep| base.send(:include, dep) }
53
+ super
54
+ base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
55
+ base.send :include, const_get("InstanceMethods") if const_defined?("InstanceMethods")
56
+ base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block")
57
+ end
58
+ end
59
+
60
+ def included(base = nil, &block)
61
+ if base.nil?
62
+ @_included_block = block
63
+ else
64
+ super
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,23 +1,23 @@
1
1
  module BangBang
2
2
  class Service
3
- attr_reader :root_dir
3
+ attr_reader :app_config, :root_dir
4
4
  attr_accessor :url_prefix
5
5
 
6
- def initialize(dir)
6
+ def initialize(app_config, dir)
7
+ @app_config = app_config
7
8
  @root_dir = dir
8
9
  end
9
10
 
10
11
  def init
11
- init_controllers
12
- autoload_models
13
12
  append_load_paths
14
13
  eval_init_rb
14
+ init_controllers
15
+ autoload_models
15
16
  yield(self) if block_given?
16
17
  self
17
18
  end
18
19
 
19
20
  def append_load_paths
20
- lib_dir = File.join(root_dir, "lib")
21
21
  $LOAD_PATH << lib_dir if File.directory?(lib_dir)
22
22
  end
23
23
 
@@ -146,6 +146,10 @@ module BangBang
146
146
  end
147
147
 
148
148
  protected
149
+ def lib_dir
150
+ File.join(root_dir, "lib")
151
+ end
152
+
149
153
  def asset_url(file, url_path, cache_buster)
150
154
  if cache_buster
151
155
  "#{url_path}?_cb=#{File.mtime(file).to_i}"
@@ -0,0 +1,100 @@
1
+ module BangBang
2
+ module ServiceConfig
3
+ extend Concern
4
+
5
+ module ClassMethods
6
+ attr_accessor :app_config, :root_dir
7
+ attr_writer :named_routes, :views_class
8
+
9
+ include ::BangBang::EnvMethods
10
+
11
+ def init(params={})
12
+ self.app_config = params[:app_config]
13
+ self.root_dir = params[:root_dir]
14
+ self.named_routes = params[:named_routes]
15
+ self.views_class = params[:views_class]
16
+
17
+ plugins.init
18
+ end
19
+
20
+ def named_routes
21
+ @named_routes || (app_config && app_config.named_routes) || nil
22
+ end
23
+ alias_method :uris, :named_routes
24
+ alias_method :uris=, :named_routes=
25
+
26
+ def views_class
27
+ @views_class || (app_config && app_config.views_class) || nil
28
+ end
29
+
30
+ def register_controller(controller)
31
+ controller.config = self
32
+ end
33
+
34
+ def register_service(path, &block)
35
+ unless service_dirs.include?(path)
36
+ service = Service.new(self, path)
37
+ services << service
38
+ service.init(&block)
39
+ end
40
+ end
41
+
42
+ def service_dirs
43
+ services.map do |service|
44
+ service.root_dir
45
+ end
46
+ end
47
+
48
+ def services
49
+ @services ||= []
50
+ end
51
+
52
+ def services_by_url_prefix
53
+ services.group_by do |service|
54
+ service.url_prefix
55
+ end
56
+ end
57
+
58
+ def services_by_root_dir
59
+ services.inject({}) do |memo, service|
60
+ memo[service.root_dir] = service
61
+ memo
62
+ end
63
+ end
64
+
65
+ def plugins
66
+ @plugins ||= ::BangBang::Plugins::Set.new(self)
67
+ end
68
+
69
+ def lib_dir
70
+ File.join(root_dir, "lib")
71
+ end
72
+
73
+ def stylesheets_dirs
74
+ service_subdirectory_dirs "app/stylesheets"
75
+ end
76
+
77
+ def vendor_dir
78
+ File.join(root_dir, "vendor")
79
+ end
80
+
81
+ def services_dir
82
+ File.join(root_dir, "services")
83
+ end
84
+
85
+ def service_subdirectory_dirs(relative_directory)
86
+ service_dirs.flatten.map do |service_path|
87
+ full_path = File.join(service_path, relative_directory)
88
+ full_path if File.directory?(full_path)
89
+ end.compact
90
+ end
91
+
92
+ def remove_generated_files
93
+ Dir["#{root_dir}/**/public/**/*.generated"].each do |generated_path|
94
+ FileUtils.rm_f(File.join(File.dirname(generated_path), File.basename(generated_path, ".generated")))
95
+ FileUtils.rm_f(generated_path)
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,3 +1,3 @@
1
1
  module BangBang
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -3,9 +3,13 @@ require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
3
3
  module BangBang
4
4
  describe Controller do
5
5
  describe "GET /authentication/error-page" do
6
+ def uris
7
+ @uris ||= Authentication::Routes.instance
8
+ end
9
+
6
10
  context "when there is not a rack.logger" do
7
11
  it "responds with a 500" do
8
- any_instance_of(FixtureApp::Controller) do |controller|
12
+ any_instance_of(Authentication::Controller) do |controller|
9
13
  stub.proxy(controller).env do |env|
10
14
  env.delete("rack.logger")
11
15
  env
@@ -6,7 +6,7 @@ module BangBang
6
6
  context "when the service has a file matching the given url" do
7
7
  it "returns the file path of the static file base on the Service's prefix + file path" do
8
8
  authentication_path = "#{FixtureApp.root_dir}/services/authentication"
9
- service = Service.new(authentication_path).init
9
+ service = Service.new(Object.new, authentication_path).init
10
10
  service.url_prefix.should == "/authentication"
11
11
  service.get_static_file_path("/authentication/javascripts/foo.js").should ==
12
12
  File.join(authentication_path, "/public/javascripts/foo.js")
@@ -16,7 +16,7 @@ module BangBang
16
16
  context "when the service does not have a file matching the given url" do
17
17
  it "returns nil" do
18
18
  authentication_path = "#{FixtureApp.root_dir}/services/authentication"
19
- service = Service.new(authentication_path).init
19
+ service = Service.new(Object.new, authentication_path).init
20
20
  service.get_static_file_path("i-dont-exist").should be_nil
21
21
  end
22
22
  end
@@ -25,7 +25,7 @@ module BangBang
25
25
  describe "#templates_hash" do
26
26
  it "returns a hash of all of the template files" do
27
27
  authentication_path = "#{FixtureApp.root_dir}/services/authentication"
28
- service = Service.new(authentication_path).init
28
+ service = Service.new(Object.new, authentication_path).init
29
29
 
30
30
  hash = service.templates_hash
31
31
  hash["/authentication/index.html.ms"].should == File.read(File.join(service.templates_dir, "index.html.ms"))
@@ -14,7 +14,7 @@ module BangBang
14
14
  context "when the presenter file exists" do
15
15
  it "evals the presenter file (which is responsible for adding the method)" do
16
16
  authentication_path = "#{FixtureApp.root_dir}/services/authentication"
17
- service = Service.new(authentication_path).init
17
+ service = Service.new(Object.new, authentication_path).init
18
18
  app_instance = Object.new
19
19
  stub(app_instance).services {[service]}
20
20
  stub(app_instance).config {FixtureApp}
@@ -1,9 +1,10 @@
1
1
  module FixtureApp
2
- include ::BangBang
2
+ include ::BangBang::AppConfig
3
3
 
4
4
  def self.app
5
5
  @app ||= Rack::Builder.new do
6
6
  use Rack::Logger
7
+ use Authentication::Controller
7
8
  run ::FixtureApp::Controller
8
9
  end.to_app
9
10
  end
@@ -1,4 +1,4 @@
1
- FixtureApp::Controller.define_routes do
1
+ Authentication::Controller.define_routes do
2
2
  def authentication_error_page; end
3
3
  get path(:authentication_error_page, "/authentication/error-page") do
4
4
  raise "An Error"
@@ -1 +1,2 @@
1
+ require "#{lib_dir}/authentication"
1
2
  self.url_prefix = "/authentication"
@@ -0,0 +1,22 @@
1
+ module Authentication
2
+ include BangBang::ServiceConfig
3
+
4
+ class Controller < ::BangBang::Controller
5
+ set :dump_errors, false
6
+ end
7
+ register_controller Controller
8
+
9
+ class Views < ::BangBang::Views
10
+ end
11
+
12
+ class Routes < NamedRoutes::Routes
13
+ end
14
+
15
+ init(
16
+ :views => Views,
17
+ :routes => Routes,
18
+ :root_dir => File.expand_path("#{File.dirname(__FILE__)}/.."),
19
+ :named_routes => Routes,
20
+ :views_class => Views
21
+ )
22
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: bang-bang
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brian Takita
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-23 00:00:00 -07:00
13
+ date: 2011-07-24 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -174,11 +174,14 @@ files:
174
174
  - Rakefile
175
175
  - bang-bang.gemspec
176
176
  - lib/bang-bang.rb
177
+ - lib/bang-bang/app_config.rb
178
+ - lib/bang-bang/concern.rb
177
179
  - lib/bang-bang/controller.rb
178
180
  - lib/bang-bang/env_methods.rb
179
181
  - lib/bang-bang/plugins.rb
180
182
  - lib/bang-bang/plugins/directory_first_sort.rb
181
183
  - lib/bang-bang/service.rb
184
+ - lib/bang-bang/service_config.rb
182
185
  - lib/bang-bang/version.rb
183
186
  - lib/bang-bang/views.rb
184
187
  - spec/bang-bang/controller_spec.rb
@@ -189,6 +192,7 @@ files:
189
192
  - spec/fixture-app/services/authentication/app/presenters/index.html.ms.rb
190
193
  - spec/fixture-app/services/authentication/app/templates/index.html.ms
191
194
  - spec/fixture-app/services/authentication/init.rb
195
+ - spec/fixture-app/services/authentication/lib/authentication.rb
192
196
  - spec/fixture-app/services/authentication/public/javascripts/foo.js
193
197
  - spec/spec_helper.rb
194
198
  - spec/spec_helpers/example_group.rb