rebels 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rebels/factories/request_factory.rb +1 -1
- data/lib/rebels/fakes/fake_bcrypt.rb +11 -0
- data/lib/rebels/fakes/fake_db.rb +37 -0
- data/lib/rebels/fakes/fake_rails.rb +8 -0
- data/lib/rebels/fakes/fake_rand.rb +19 -0
- data/lib/rebels/rails_adapters/database.rb +18 -0
- data/lib/rebels/rails_adapters/externals_adapter.rb +18 -0
- data/lib/rebels/rails_adapters/request_response_adapter.rb +44 -0
- data/lib/rebels/values/request.rb +5 -0
- data/lib/rebels/values/response.rb +19 -0
- data/lib/rebels/values/with.rb +1 -1
- data/lib/rebels/version.rb +7 -1
- data/lib/rebels.rb +8 -0
- data/rebels.gemspec +2 -0
- data/tmuxp.yml +11 -0
- metadata +39 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cff5f5afc7bd6ebb1fe3ce55d2ce2e37ff03a25
|
4
|
+
data.tar.gz: 513031c7df35a2693587905f490213e0926dc96a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 934102c32b377be6e12048bfee97cec3a6fbceb5d1d0fdae9690e66d45454f8ad7a12efc886bb2e0514c2e4b5ecb2e128239c6383a5ef01387d0a70664c206aa
|
7
|
+
data.tar.gz: b2b60f3bfa97d957ddecedbaadc49bfa932cd3da3ce9edb81ac55f8d98bbbf85744e72853b3c948467ca786e376874f47d229157444e60d487adea52287fed0d
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Rebels::Factories::RequestFactory
|
2
|
-
def
|
2
|
+
def from_rails(request)
|
3
3
|
Rebels::Values::Request.with(method: controller.request.request_method, path: controller.request.path, path_params: controller.request.path_parameters, session: controller.session, params: controller.params, env: controller.env)
|
4
4
|
end
|
5
5
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class Rebels::Fakes::FakeDB
|
2
|
+
class NonNullFinder < Struct.new(:attrs)
|
3
|
+
def to_proc
|
4
|
+
->(thing) { attrs.select{|k,v| !v.nil?}.all?{|k,v| thing.send(k) == v } }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@tables = {}
|
10
|
+
@ids = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def where(table, filters)
|
14
|
+
@tables[table].select(&NonNullFinder.new(filters))
|
15
|
+
end
|
16
|
+
|
17
|
+
def insert(table, record)
|
18
|
+
@tables[table] ||= []
|
19
|
+
record = record.with(id: next_id(table))
|
20
|
+
@tables[table] << record
|
21
|
+
record
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(table, id, attrs)
|
25
|
+
record = @tables[table].detect{|r| r.id == id}
|
26
|
+
idx = @tables[table].index(record)
|
27
|
+
@tables[table][idx] = record.with(attrs)
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def next_id(table)
|
33
|
+
@ids[table] ||= 0
|
34
|
+
@ids[table] += 1
|
35
|
+
@ids[table]
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Rebels::RailsAdapters::Database
|
2
|
+
def initialize(tables)
|
3
|
+
@tables = tables
|
4
|
+
end
|
5
|
+
def insert(table, record)
|
6
|
+
@tables[table].first.create!(record.attributes)
|
7
|
+
end
|
8
|
+
def where(table, filters)
|
9
|
+
@tables[table].first.where(filters).map do |ar|
|
10
|
+
keys = @tables[table].last.with({}).attributes.keys
|
11
|
+
attrs = keys.reduce({}){|m,e| m.merge(e => ar.attributes[e.to_s])}
|
12
|
+
@tables[table].last.with(attrs)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
def update(table, id, attrs)
|
16
|
+
@tables[table].first.find(id).update_attributes(attrs)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Rebels::RailsAdapters::ExternalsAdapter
|
2
|
+
def initialize(controller, db)
|
3
|
+
@controller = controller
|
4
|
+
@db = db
|
5
|
+
end
|
6
|
+
|
7
|
+
def db
|
8
|
+
@db
|
9
|
+
end
|
10
|
+
|
11
|
+
def render(*args, &blk)
|
12
|
+
@controller.render(*args, &blk)
|
13
|
+
end
|
14
|
+
|
15
|
+
def head(*args, &blk)
|
16
|
+
@controller.head(*args, &blk)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Rebels::RailsAdapters::RequestResponseAdapter
|
2
|
+
def initialize(rails_adapter, rebel_app)
|
3
|
+
@rails_adapter = rails_adapter
|
4
|
+
@rebel_app = rebel_app
|
5
|
+
end
|
6
|
+
|
7
|
+
def method_missing(meth, *args, &blk)
|
8
|
+
controller = args.first
|
9
|
+
req = Rebels::Values::Request.with(params: controller.params)
|
10
|
+
response = @rebel_app.send(meth, req)
|
11
|
+
# @rails_adapter
|
12
|
+
# response.session.each do |k,v|
|
13
|
+
# @controller.session[k] = v
|
14
|
+
# end
|
15
|
+
|
16
|
+
# response.template_vars.each do |k,v|
|
17
|
+
# @controller.instance_variable_set("@#{k}".to_sym, v)
|
18
|
+
# end
|
19
|
+
|
20
|
+
ret = if response.redirect_path
|
21
|
+
# args = Array(response.redirect_path)
|
22
|
+
# meth = args.shift
|
23
|
+
# redir_args = if args.last.is_a? Hash
|
24
|
+
# args.pop
|
25
|
+
# else
|
26
|
+
# {}
|
27
|
+
# end
|
28
|
+
# @controller.redirect_to meth, redir_args
|
29
|
+
elsif response.json
|
30
|
+
@rails_adapter.render json: response.json, status: response.status
|
31
|
+
elsif response.text
|
32
|
+
# @controller.render text: response.text, status: response.status
|
33
|
+
elsif response.template_name
|
34
|
+
# @controller.render response.template_name, status: response.status, layout: response.layout
|
35
|
+
elsif response.status
|
36
|
+
@rails_adapter.head response.status
|
37
|
+
else
|
38
|
+
raise 'no good' + response.inspect
|
39
|
+
end
|
40
|
+
# Rails.logger.info("response: #{ret}")
|
41
|
+
ret
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'values'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
3
|
require_relative './with'
|
3
4
|
|
4
5
|
class Rebels::Values::Request < Value.new(:method, :session, :params, :env, :path, :path_params)
|
@@ -8,6 +9,10 @@ class Rebels::Values::Request < Value.new(:method, :session, :params, :env, :pat
|
|
8
9
|
@path_params || {}
|
9
10
|
end
|
10
11
|
|
12
|
+
def params
|
13
|
+
HashWithIndifferentAccess.new(@params)
|
14
|
+
end
|
15
|
+
|
11
16
|
def all_params
|
12
17
|
path_params.merge(params)
|
13
18
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'values'
|
2
|
+
require_relative './with'
|
3
|
+
|
4
|
+
class Rebels::Values::Response < Value.new(:session, :redirect_path, :template_name, :text, :template_vars, :status, :json, :source, :layout)
|
5
|
+
include Rebels::Values::With
|
6
|
+
|
7
|
+
def session
|
8
|
+
@session || {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def layout
|
12
|
+
@layout.nil? && true || @layout
|
13
|
+
end
|
14
|
+
|
15
|
+
def template_vars
|
16
|
+
@template_vars || {}
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/rebels/values/with.rb
CHANGED
@@ -5,7 +5,7 @@ module Rebels::Values::With
|
|
5
5
|
end
|
6
6
|
def with(deltas)
|
7
7
|
keys = self.class.superclass.const_get(:VALUE_ATTRS)
|
8
|
-
raise "bad keys" if !(deltas.keys - keys).empty?
|
8
|
+
raise "bad keys #{(deltas.keys - keys)}" if !(deltas.keys - keys).empty?
|
9
9
|
map = Hash[keys.zip(values)]
|
10
10
|
keys.each do |k|
|
11
11
|
map[k] = deltas[k] if deltas.has_key?(k)
|
data/lib/rebels/version.rb
CHANGED
data/lib/rebels.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
require "rebels/version"
|
2
2
|
require "rebels/values/request"
|
3
|
+
require "rebels/values/response"
|
3
4
|
require "rebels/factories/request_factory"
|
5
|
+
require "rebels/fakes/fake_rails"
|
6
|
+
require "rebels/fakes/fake_rand"
|
7
|
+
require "rebels/fakes/fake_bcrypt"
|
8
|
+
require "rebels/fakes/fake_db"
|
9
|
+
require "rebels/rails_adapters/externals_adapter"
|
10
|
+
require "rebels/rails_adapters/database"
|
11
|
+
require "rebels/rails_adapters/request_response_adapter"
|
4
12
|
|
5
13
|
module Rebels
|
6
14
|
end
|
data/rebels.gemspec
CHANGED
@@ -23,6 +23,8 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
25
|
spec.add_dependency "values"
|
26
|
+
spec.add_dependency "activesupport"
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.8"
|
27
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_development_dependency "rspec"
|
28
30
|
end
|
data/tmuxp.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
---
|
2
|
+
session_name: "rebels"
|
3
|
+
windows:
|
4
|
+
- panes:
|
5
|
+
- 'be rspec spec; git status; echo "enter to vim OR Ctrl-C to quit"; read && vim .'
|
6
|
+
- panes:
|
7
|
+
- 'echo rspec'
|
8
|
+
- panes:
|
9
|
+
- 'cd spec/fixtures/dummy_consumer; echo "bundle exec irb -r rebels"'
|
10
|
+
- panes:
|
11
|
+
- 'echo welcome'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rebels
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Serguei Filimonov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: values
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
description: in a rails controller, new up a RebelApp of yours and call 1 method
|
56
84
|
email:
|
57
85
|
- serguei.filimonov@gmail.com
|
@@ -71,10 +99,19 @@ files:
|
|
71
99
|
- bin/setup
|
72
100
|
- lib/rebels.rb
|
73
101
|
- lib/rebels/factories/request_factory.rb
|
102
|
+
- lib/rebels/fakes/fake_bcrypt.rb
|
103
|
+
- lib/rebels/fakes/fake_db.rb
|
104
|
+
- lib/rebels/fakes/fake_rails.rb
|
105
|
+
- lib/rebels/fakes/fake_rand.rb
|
106
|
+
- lib/rebels/rails_adapters/database.rb
|
107
|
+
- lib/rebels/rails_adapters/externals_adapter.rb
|
108
|
+
- lib/rebels/rails_adapters/request_response_adapter.rb
|
74
109
|
- lib/rebels/values/request.rb
|
110
|
+
- lib/rebels/values/response.rb
|
75
111
|
- lib/rebels/values/with.rb
|
76
112
|
- lib/rebels/version.rb
|
77
113
|
- rebels.gemspec
|
114
|
+
- tmuxp.yml
|
78
115
|
homepage: http://serguei.me
|
79
116
|
licenses:
|
80
117
|
- MIT
|