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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5bb311b6d5e695b3f2f38ad298a3c174784087e4
4
- data.tar.gz: 4063d5405184d85c352446cdfbd9bacb030f51de
3
+ metadata.gz: 4cff5f5afc7bd6ebb1fe3ce55d2ce2e37ff03a25
4
+ data.tar.gz: 513031c7df35a2693587905f490213e0926dc96a
5
5
  SHA512:
6
- metadata.gz: 02a0de807d259fc0ed9b7b0bd4b35fad6ec39e7774e81db926559a2e05d908fa97308ad1f63f6c0d7b21ff3869ccb03f4ac20ff1d88c9fc507e19ff7267b5797
7
- data.tar.gz: 58fcae3a95a16d4fe697617662bf3797fafbc89e90e1c4adf15234dc45aba59974f4e18c04ab34367a9f5f2d547005474a271e2c6cdaa9358021641897d0e123
6
+ metadata.gz: 934102c32b377be6e12048bfee97cec3a6fbceb5d1d0fdae9690e66d45454f8ad7a12efc886bb2e0514c2e4b5ecb2e128239c6383a5ef01387d0a70664c206aa
7
+ data.tar.gz: b2b60f3bfa97d957ddecedbaadc49bfa932cd3da3ce9edb81ac55f8d98bbbf85744e72853b3c948467ca786e376874f47d229157444e60d487adea52287fed0d
@@ -1,5 +1,5 @@
1
1
  class Rebels::Factories::RequestFactory
2
- def from_controller(controller)
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,11 @@
1
+ class Rebels::Fakes::FakeBCrypt
2
+ def generate_salt
3
+ @salt_counter ||= -1
4
+ @salt_counter += 1
5
+ "salt#{@salt_counter}"
6
+ end
7
+
8
+ def hash_secret(passwd, salt)
9
+ "#{passwd}#{salt}"
10
+ end
11
+ 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,8 @@
1
+ class Rebels::Fakes::FakeRails
2
+ def initialize(db=Rebels::Fakes::FakeDB.new)
3
+ @db = db
4
+ end
5
+ def db
6
+ @db
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ class Rebels::Fakes::FakeRand
2
+ def uuid
3
+ nextt('uuid')
4
+ end
5
+
6
+ def hex
7
+ nextt('hex')
8
+ end
9
+
10
+ private
11
+
12
+ def nextt(pref)
13
+ @map ||={}
14
+ @map[pref] ||= -1
15
+ @map[pref] += 1
16
+ "#{pref}#{@map[pref]}"
17
+ end
18
+ end
19
+
@@ -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
@@ -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)
@@ -1,7 +1,13 @@
1
1
  module Rebels
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  module Values
4
4
  end
5
5
  module Factories
6
6
  end
7
+ module Objects
8
+ end
9
+ module RailsAdapters
10
+ end
11
+ module Fakes
12
+ end
7
13
  end
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.2.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-06-30 00:00:00.000000000 Z
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