rebels 0.2.0 → 0.3.0

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.
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