sana-mvcbase 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: efe4c405cdfefbb65ab2f1427c8c5a45314c5093
4
+ data.tar.gz: 1943f8d1f3b6ecc1b6f80432998b16b25f6e24c5
5
+ SHA512:
6
+ metadata.gz: f2fe133feed6724c3da90e40fe95a33f326b87cc8a541e9e1be11d108693e2f47f69c172f6930a0ed7934c9db46e686865a9ce5cdd5576720fe1c9673463db01
7
+ data.tar.gz: a6411dbaed1a53790453d32e43662148f3dbb20667fad091c7442f4ab5bb04b69493dd85017461416e4f6f91259edb502e6e50df58d161eb61ec629bc4c73024
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /doc/
6
+ /coverage/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .*.sw?
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format doc
3
+ --require ./spec/spec_helper.rb
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ os:
5
+ - linux
6
+ - osx
7
+ script: bundle exec rake spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in shioruby.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,113 @@
1
+ # [Sanae MVC Base](https://github.com/Narazaka/sana-mvcbase)
2
+
3
+ [![Gem](https://img.shields.io/gem/v/sana-mvcbase.svg)](https://rubygems.org/gems/sana-mvcbase)
4
+ [![Gem](https://img.shields.io/gem/dtv/sana-mvcbase.svg)](https://rubygems.org/gems/sana-mvcbase)
5
+ [![Gemnasium](https://gemnasium.com/Narazaka/sana-mvcbase.svg)](https://gemnasium.com/Narazaka/sana-mvcbase)
6
+ [![Inch CI](http://inch-ci.org/github/Narazaka/sana-mvcbase.svg)](http://inch-ci.org/github/Narazaka/sana-mvcbase)
7
+ [![Travis Build Status](https://travis-ci.org/Narazaka/sana-mvcbase.svg)](https://travis-ci.org/Narazaka/sana-mvcbase)
8
+ [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/Narazaka/sana-mvcbase?svg=true)](https://ci.appveyor.com/project/Narazaka/sana-mvcbase)
9
+ [![codecov.io](https://codecov.io/github/Narazaka/sana-mvcbase/coverage.svg?branch=master)](https://codecov.io/github/Narazaka/sana-mvcbase?branch=master)
10
+ [![Code Climate](https://codeclimate.com/github/Narazaka/sana-mvcbase/badges/gpa.svg)](https://codeclimate.com/github/Narazaka/sana-mvcbase)
11
+
12
+ Ukagaka SHIORI subsystem 'Sana' MVC Helper
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ ```ruby
19
+ gem 'sana-mvcbase'
20
+ ```
21
+
22
+ And then execute:
23
+
24
+ $ bundle
25
+
26
+ Or install it yourself as:
27
+
28
+ $ gem install sana-mvcbase
29
+
30
+ ## Usage
31
+
32
+ ```ruby
33
+ require 'sana-mvcbase'
34
+ require 'shiolink'
35
+
36
+ # define controllers
37
+
38
+ # for load(), unload()
39
+ class DLController < SanaController
40
+ def _load(dirpath)
41
+ MySave.load
42
+ p dirpath
43
+ end
44
+
45
+ def _unload
46
+ p :unload
47
+ end
48
+ end
49
+
50
+ # view rendering module
51
+ module MyViewModule
52
+ def render_response(name)
53
+ MyView.talk(name || event_id)
54
+ end
55
+ end
56
+
57
+ # view rendering base controller
58
+ class MyWithViewController < SanaAnyEventController
59
+ include MyViewModule
60
+ end
61
+
62
+ # normal talk controller
63
+ class TalkEventsController < MyWithViewController
64
+ def OnBoot
65
+ @foo = MySave.foo_flag
66
+ @bar = MyModel.bar(params.shell_name)
67
+ end
68
+
69
+ def OnFirstBoot
70
+ @foo = MySave.foo_flag
71
+ render :OnBoot
72
+ end
73
+ end
74
+
75
+ # resource controller
76
+ class ResourcesController < SanaController
77
+ def homeurl
78
+ "http://www.example.com/foo/"
79
+ end
80
+ end
81
+
82
+ # register routing
83
+
84
+ router = SanaRouter.new(TalkEventsController)
85
+ router.draw do
86
+ controller DLController do
87
+ load
88
+ unload
89
+ end
90
+
91
+ controller ResourcesController do
92
+ route :homeurl
93
+ end
94
+
95
+ route :OnBoot, {shell_name: 0, halted: 6, halted_ghost_name: 7}
96
+
97
+ # OnFirstBoot is not registered but will called with default controller (= TalkEventsController)
98
+ end
99
+
100
+ # app start
101
+
102
+ sana = Sana.new(router.events)
103
+ shiolink = Shiolink.new(sana.method(:load), sana.method(:unload), sana.method(:request))
104
+ shiolink.start
105
+ ```
106
+
107
+ ## API
108
+
109
+ [API Document](http://www.rubydoc.info/github/Narazaka/sana-mvcbase)
110
+
111
+ ## License
112
+
113
+ This is released under [MIT License](http://narazaka.net/license/MIT?2016).
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'yard'
4
+ require 'yard/rake/yardoc_task'
5
+
6
+ task :default => :spec
7
+
8
+ RSpec::Core::RakeTask.new
9
+ YARD::Rake::YardocTask.new do |t|
10
+ t.options = ["--private"]
11
+ end
data/appveyor.yml ADDED
@@ -0,0 +1,20 @@
1
+ version: "{build}"
2
+ branches:
3
+ except:
4
+ - gh-pages
5
+ install:
6
+ - set RUBY_HOME=C:\Ruby%ruby_version%
7
+ - set PATH=%RUBY_HOME%\bin;%PATH%
8
+ - ruby --version
9
+ - gem --version
10
+ - gem install bundler --no-document
11
+ - bundle --version
12
+ - bundle install
13
+ test_script:
14
+ - bundle exec rake spec
15
+ build: off
16
+ deploy: off
17
+ environment:
18
+ matrix:
19
+ - ruby_version: 22
20
+ - ruby_version: 22-x64
@@ -0,0 +1,2 @@
1
+ require 'sana_router'
2
+ require 'sana_controller'
@@ -0,0 +1,96 @@
1
+ # Sana Controller
2
+ class SanaController
3
+ # constructor
4
+ # @param [SanaRouter::Events] events events
5
+ # @param [Symbol] event_id event id
6
+ # @param [OpenStruct] request request
7
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
8
+ def initialize(events, event_id, request, mapping = {})
9
+ @events = events
10
+ @event_id = event_id
11
+ @request = request
12
+ @mapping = mapping
13
+ end
14
+
15
+ # events
16
+ # @return [SanaRouter::Events]
17
+ attr_reader :events
18
+ # event id
19
+ # @return [Symbol]
20
+ attr_reader :event_id
21
+ # request
22
+ # @return [OpenStruct]
23
+ attr_reader :request
24
+
25
+ # named access to request headers
26
+ # @return [SanaController::Params] params
27
+ def params
28
+ @params ||= Params.new(request, @mapping)
29
+ end
30
+
31
+ # exec action and get response
32
+ # @return [String, Openstruct] response
33
+ def action
34
+ @return_value = public_send(@event_id)
35
+ if @response
36
+ @response
37
+ else
38
+ render
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # render result
45
+ # @param args various result options
46
+ # @return [String, Openstruct] response
47
+ def render(*args)
48
+ @response = render_response(*args)
49
+ end
50
+
51
+ # make result by given options
52
+ # @param args various result options
53
+ # @return [String, Openstruct] response
54
+ # @note this method should be overridden for convenient view rendering
55
+ # @example override
56
+ # class HogeViewController < SanaController
57
+ # def render_response(value = nil)
58
+ # # @return_value is event method's return value
59
+ # eval (value || @return_value)
60
+ # end
61
+ # end
62
+ def render_response(*args)
63
+ args[0] || @return_value
64
+ end
65
+
66
+ # named access to request headers
67
+ class Params
68
+ # constructor
69
+ # @param [OpenStruct] request request
70
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
71
+ # @example mapping
72
+ # params = SanaController::Params.new(request, {shell_name: 0, halted: 6, halted_ghost_name: 7}) # mapping for Reference0, 6 and 7
73
+ def initialize(request, mapping = {})
74
+ @request = request
75
+ @mapping = mapping
76
+ end
77
+
78
+ # named access to the header
79
+ # @example named access
80
+ # params.shell_name == params.Reference0
81
+ # @param [Symbol] method param name
82
+ # @return [String] header value
83
+ def method_missing(method)
84
+ @request[method] || @request["Reference#{@mapping[method]}".to_sym]
85
+ end
86
+ end
87
+ end
88
+
89
+ # Sana Controller (any event accepted)
90
+ class SanaAnyEventController < SanaController
91
+ # SHIORI request()
92
+ # @param [Symbol] method method name = event id
93
+ def method_missing(method)
94
+ render
95
+ end
96
+ end
@@ -0,0 +1,126 @@
1
+ require 'sana'
2
+ # Sana Router
3
+ class SanaRouter
4
+ # constructor
5
+ # @param [SanaController] default_controller default scope controller
6
+ def initialize(default_controller = nil)
7
+ @default_controller = default_controller
8
+ @controller = @default_controller
9
+ @route = {}
10
+ @mapping = {}
11
+ end
12
+
13
+ # register event route to controller
14
+ # @param [Symbol, Array<Symbol>] events event names
15
+ # @param [Hash<Symbol, Integer>] mapping request argument mappings
16
+ # @example register to various controllers
17
+ # router.draw do
18
+ # # register to specific controller
19
+ # controller BootController do
20
+ # route [:OnBoot, :OnFirstBoot]
21
+ # end
22
+ # controller CloseController do
23
+ # route [:OnClose, :OnCloseAll]
24
+ # end
25
+ # # register to default controller
26
+ # route :OnSecondChange
27
+ # end
28
+ # @example mapping usage
29
+ # route :OnBoot, {shell_name: 0, halted: 6, halted_ghost_name: 7} # mapping for Reference0, 6 and 7
30
+ def route(events, mapping = {})
31
+ Array(events).each do |method|
32
+ @route[method.to_sym] = @controller
33
+ @mapping[method.to_sym] = mapping
34
+ end
35
+ return
36
+ end
37
+
38
+ alias_method :r, :route
39
+
40
+ # register SHIORI load() route to controller
41
+ # @example register to specific controller
42
+ # router.draw do
43
+ # controller DLController do
44
+ # load
45
+ # end
46
+ # end
47
+ def load
48
+ @load_controller = @controller
49
+ end
50
+
51
+ # register SHIORI unload() route to controller
52
+ # @example register to specific controller
53
+ # router.draw do
54
+ # controller DLController do
55
+ # unload
56
+ # end
57
+ # end
58
+ def unload
59
+ @unload_controller = @controller
60
+ end
61
+
62
+ # execute register methods in instance context
63
+ # @yield instance_exec context
64
+ def draw(&block)
65
+ instance_exec &block
66
+ end
67
+
68
+ # set controller context
69
+ # @param [SanaController] controller target controller
70
+ # @yield controller context block
71
+ def controller(controller)
72
+ @controller = controller
73
+ yield if block_given?
74
+ @controller = @default_controller
75
+ end
76
+
77
+ # router events
78
+ # @example with Sana
79
+ # sana = Sana.new(router.events)
80
+ # @return [SanaRouter::Events] events
81
+ def events
82
+ @events ||= Events.new(@route, @mapping, @load_controller, @unload_controller, @default_controller)
83
+ end
84
+
85
+ # router events
86
+ class Events
87
+ # constructor
88
+ # @param [Hash<Symbol, SanaController>] route route hash
89
+ # @param [Hash<Symbol, Hash<Symbol, Integer>>] mapping mapping hash
90
+ # @param [SanaController] load_controller load controller
91
+ # @param [SanaController] unload_controller unload controller
92
+ # @param [SanaController] default_controller default controller
93
+ def initialize(route, mapping, load_controller, unload_controller, default_controller = nil)
94
+ @route = route
95
+ @mapping = mapping
96
+ @load_controller = load_controller
97
+ @unload_controller = unload_controller
98
+ @default_controller = default_controller
99
+ end
100
+
101
+ # SHIORI request()
102
+ # @param [Symbol] method method name = event id
103
+ # @param [OpenStruct] request request
104
+ # @return [String, Openstruct] response
105
+ # @example request()
106
+ # events.OnBoot(request)
107
+ def method_missing(method, request)
108
+ if controller = @route[method] || @default_controller
109
+ controller.new(self, method, request, @mapping[method]).action
110
+ else
111
+ super
112
+ end
113
+ end
114
+
115
+ # SHIORI load()
116
+ # @param [String] dirpath "ghost/master" path
117
+ def _load(dirpath)
118
+ @load_controller.new(self, __method__, nil, nil)._load(dirpath)
119
+ end
120
+
121
+ # SHIORI unload()
122
+ def _unload
123
+ @load_controller.new(self, __method__, nil, nil)._unload
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "sana-mvcbase"
6
+ spec.version = "0.0.1"
7
+ spec.authors = ["Narazaka"]
8
+ spec.email = ["info@narazaka.net"]
9
+
10
+ spec.summary = %q{Ukagaka SHIORI subsystem 'Sana' MVC Helper}
11
+ spec.description = %q{Ukagaka SHIORI subsystem 'Sana' MVC Helper}
12
+ spec.homepage = "https://github.com/Narazaka/sana-mvcbase"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler", ">= 1.7.9"
19
+ spec.add_development_dependency "rake", "~> 10.0"
20
+ spec.add_development_dependency "rspec", "~> 3.4"
21
+ spec.add_development_dependency "yard", "~> 0.8.7"
22
+ spec.add_development_dependency "simplecov", "~> 0.11"
23
+ spec.add_development_dependency "codecov", "~> 0.1"
24
+ spec.add_dependency "shioruby", ">= 0.0.3"
25
+ spec.add_dependency "sana", ">= 0.0.4"
26
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sana-mvcbase
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Narazaka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.7.9
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.7.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.8.7
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.11'
83
+ - !ruby/object:Gem::Dependency
84
+ name: codecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: shioruby
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.3
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: sana
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 0.0.4
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: 0.0.4
125
+ description: Ukagaka SHIORI subsystem 'Sana' MVC Helper
126
+ email:
127
+ - info@narazaka.net
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".travis.yml"
135
+ - Gemfile
136
+ - README.md
137
+ - Rakefile
138
+ - appveyor.yml
139
+ - lib/sana-mvcbase.rb
140
+ - lib/sana_controller.rb
141
+ - lib/sana_router.rb
142
+ - sana-mvcbase.gemspec
143
+ homepage: https://github.com/Narazaka/sana-mvcbase
144
+ licenses:
145
+ - MIT
146
+ metadata: {}
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '0'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 2.4.5.1
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Ukagaka SHIORI subsystem 'Sana' MVC Helper
167
+ test_files: []
168
+ has_rdoc: