r_kit 0.3.2 → 0.4.2

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: 37ae0ce25844d771e435d1448bb7b18733cbec45
4
- data.tar.gz: 900e39cc2b92494cedbbdce9f58556622df4da8b
3
+ metadata.gz: d98f71dcaea265f716ff792fad147279f44b4287
4
+ data.tar.gz: 217d736a30a4f845b3d976b1c2c2ca1fbbb7df6b
5
5
  SHA512:
6
- metadata.gz: 1d7db4ae33a413c6c2b5582b041f16fd151c32d3219da1ea70a802f6a2c9abe34a9c216b4aa690731d97d99d9f00ac2e3deb21fd531abf0768cc9d2371115275
7
- data.tar.gz: 7fee02dc77b0845b938d2dabb911752cbd51a950dfe2767bbbf562369c804e912da7189dc32c7518646e83df863899a6662f59620d872fde24fa5653b12b3a4a
6
+ metadata.gz: 1ecb5dd37f794116e6128d7376b8ede61fb06e6d1f4cb41aa4285d894581d472cf0655477108841299b37a936bd2eadcf001f08eb46b7eb104002b1ffe3e6782
7
+ data.tar.gz: f5da4ecd90a62e5256d531a2a5fad1b543478bfb7a0c8116c12624af626a19258ea773176df1ae401e61d081785ea21c5543c5cca2fbfc858b143f2e7d2e2a7f
@@ -0,0 +1,18 @@
1
+ module RKit::ActiveRecordUtility::ActiveRecordExtend
2
+
3
+ RKit::ActiveRecordUtility::UTILITIES.each do |utility, method_name|
4
+
5
+ define_method method_name do
6
+ RKit::ActiveRecordUtility::Utility.const_get(utility.classify).new(self, method: __method__).interfere
7
+ end
8
+
9
+ end
10
+
11
+ def interfered? utility
12
+ RKit::ActiveRecordUtility::Utility.const_get(utility.classify).interfered? model_klass
13
+ rescue NameError
14
+ false
15
+ end
16
+
17
+ ActiveRecord::Base.extend self
18
+ end
@@ -0,0 +1,9 @@
1
+ class DatabaseSchemaError < StandardError
2
+ def initialize base, method:;
3
+ super %Q{
4
+ WARNING - You tried to use the '#{ method }' DSL on '#{ base }',
5
+ You may want to create a 'tag' column first.
6
+ To do so, please refer to the 'RKit::ActiveRecordUtlity' documentation.
7
+ }
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ class RKit::ActiveRecordUtility::Utility::Tag < RKit::ActiveRecordUtility::Utility
2
+
3
+ def can_interfere?
4
+ base.table_exists? && base.column_names.include?("tag")
5
+ end
6
+
7
+ def interfere!
8
+ base.validates_presence_of :tag
9
+ base.validates_uniqueness_of :tag
10
+
11
+ base.send :define_method, :to_param, ->{ tag }
12
+ base.send :define_singleton_method, :tagged, ->(tag){ find_by tag: tag }
13
+ end
14
+ end
@@ -0,0 +1,53 @@
1
+ class RKit::ActiveRecordUtility::Utility
2
+
3
+ attr_accessor :base, :method
4
+
5
+ def initialize base, method:;
6
+ @base = base
7
+ @method = method
8
+ end
9
+
10
+
11
+ def interfere
12
+ if can_interfere?
13
+ interfere!
14
+ interfered!
15
+ else
16
+ raise DatabaseSchemaError.new(base, method: method) unless running_script? /^rake db:/
17
+ end
18
+ end
19
+
20
+
21
+ # TODO: private/protected ?
22
+ def can_interfere?
23
+ raise NotImplementedError, 'Subclasses must implement this method'
24
+ end
25
+
26
+ def interfere!
27
+ raise NotImplementedError, 'Subclasses must implement this method'
28
+ end
29
+
30
+ def interfered!
31
+ __class__.interfered base
32
+ end
33
+
34
+
35
+ module SingletonInheritance
36
+ def self.extended base
37
+ base.instance_variable_set :@extended, []
38
+ end
39
+
40
+ def interfered? base
41
+ @extended.include? base
42
+ end
43
+
44
+ def interfered base
45
+ @extended << base
46
+ end
47
+ end
48
+
49
+ def self.inherited(subclass)
50
+ subclass.extend SingletonInheritance
51
+ super
52
+ end
53
+ end
@@ -0,0 +1,15 @@
1
+ class RKit::ActiveRecordUtility
2
+ dependency :utilities
3
+
4
+ load_path __FILE__, 'active_record_extend.rb'
5
+ load_path __FILE__, 'database_schema_error.rb'
6
+ load_path __FILE__, 'utility.rb'
7
+
8
+ UTILITIES = {
9
+ tag: :acts_as_taggables,
10
+ }
11
+
12
+ UTILITIES.each do |utility, _|
13
+ load_path __FILE__, "utility/#{ utility }.rb"
14
+ end
15
+ end
@@ -34,7 +34,7 @@ module Kernel
34
34
  end
35
35
 
36
36
 
37
- if RubyVM.const_defined? "DebugInspector"
37
+ if RubyVM.const_defined? 'DebugInspector'
38
38
  alias :backtrace :_backtrace_from_ruby_vm
39
39
  else
40
40
  require 'continuation'
@@ -1,4 +1,4 @@
1
- class RKit::Backtrace < RKit::Core
1
+ class RKit::Backtrace
2
2
 
3
3
  load_path __FILE__, 'kernel_extend.rb'
4
4
 
@@ -19,7 +19,7 @@ class RKit::Core::Configurer
19
19
 
20
20
 
21
21
  def config *name, default
22
- _config.deep_merge! [*name, default].reverse.inject{ |nested, key| Hash[key, nested] }
22
+ _config.deep_merge! [*name, default].reverse.reduce{ |nested, key| Hash[key, nested] }
23
23
  end
24
24
 
25
25
  def load_config! config_options
@@ -33,7 +33,7 @@ class RKit::Core::Configurer
33
33
 
34
34
  def alias *name, old_name
35
35
  new_name = name.pop
36
- config = name.inject(_config){ |config, nested| config = config[nested] }
36
+ config = name.reduce(_config){ |config, nested| config = config[nested] }
37
37
 
38
38
  config[new_name] = config[old_name] if config[new_name].blank?
39
39
  end
@@ -47,7 +47,7 @@ class RKit::Core::Configurer
47
47
 
48
48
  def load_public_accessor!
49
49
  _base.const_set :CONFIG, OpenStruct.new(_config)
50
- _base.define_singleton_method("config"){ self::CONFIG }
50
+ _base.define_singleton_method('config'){ self::CONFIG }
51
51
  end
52
52
 
53
53
 
@@ -26,7 +26,7 @@ class RKit::Core::Engineer
26
26
  def load_sprockets!
27
27
  digest = _base.digest
28
28
  sprockets_extend = Module.new do
29
- define_method "digest" do
29
+ define_method 'digest' do
30
30
  super().update(digest)
31
31
  end
32
32
  end
@@ -3,6 +3,15 @@ class RKit::Core::Loader
3
3
 
4
4
  @@loaded = []
5
5
 
6
+ def self.loaded
7
+ @@loaded.map{ |name| name.demodulize.underscore }
8
+ end
9
+
10
+ def self.loaded? name
11
+ @@loaded.include? name
12
+ end
13
+
14
+
6
15
  def initialize base
7
16
  @_base = base
8
17
  @load_paths = []
@@ -11,7 +20,7 @@ class RKit::Core::Loader
11
20
 
12
21
 
13
22
  def dependency dependency
14
- dependencies << Dependency.new(_base, str: dependency)
23
+ dependencies << Dependency.new(_base, service: dependency)
15
24
  end
16
25
 
17
26
  def dependencies!
@@ -32,7 +41,7 @@ class RKit::Core::Loader
32
41
 
33
42
 
34
43
  def loaded!
35
- @@loaded << _base.name.demodulize.underscore
44
+ @@loaded << _base.name
36
45
  end
37
46
 
38
47
 
@@ -102,26 +111,25 @@ class RKit::Core::Loader
102
111
  end
103
112
 
104
113
 
105
- class Dependency < String
106
- attr_accessor :_base
107
-
108
- def initialize base, str: ""
109
- @_base = base
114
+ class Dependency
115
+ attr_accessor :base, :service
110
116
 
111
- super str.to_s
117
+ def initialize base, service:;
118
+ @base = base
119
+ @service = RKit.const_get(service.to_s.classify)
112
120
  end
113
121
 
114
122
  def should_load?
115
- !RKit::Core::Loader.class_variable_get(:@@loaded).include? self
123
+ !RKit::Core::Loader.class_variable_get(:@@loaded).include? @service.name
116
124
  end
117
125
 
118
126
  def dependency!
119
127
  warn %Q{
120
- WARNING - RKit::#{ classify } was implicitly loaded,
121
- As a dependency for #{ _base }.
128
+ WARNING - #{ @service.name } was implicitly loaded,
129
+ As a dependency for #{ base }.
122
130
  You may want to load it explicitly.
123
131
  }
124
- RKit.const_get(classify).load
132
+ @service.load
125
133
  end
126
134
 
127
135
  def load!
data/lib/r_kit/core.rb CHANGED
@@ -7,8 +7,8 @@ class RKit::Core
7
7
  @_load = Loader.new self
8
8
  end
9
9
 
10
- def inherited base
11
- base.init!
10
+ def inherited subclass
11
+ subclass.init!
12
12
  super
13
13
  end
14
14
 
@@ -31,16 +31,25 @@ class RKit::Core
31
31
  to: :@_load
32
32
 
33
33
 
34
- def load config = {}
34
+ def loaded?
35
+ RKit::Core::Loader.loaded? name
36
+ end
37
+
38
+ def load! config
39
+ require "#{ name.underscore }.rb"
40
+
35
41
  @_config.load! config
36
42
  @_engine.load!
37
43
  @_load.load!
38
44
  end
39
45
 
46
+ def load config = {}
47
+ load! config if !loaded?
48
+ end
40
49
 
41
50
 
42
51
  def inspect
43
- "#{ name } config_w/#{ @_config.inspect }"
52
+ "#{ name } config_w/#{ @_config.inspect } loaded/#{ loaded? }"
44
53
  # TODO: add link to doc
45
54
  end
46
55
 
@@ -54,9 +63,4 @@ class RKit::Core
54
63
  require 'r_kit/core/engineer.rb'
55
64
  require 'r_kit/core/loader.rb'
56
65
 
57
- require 'r_kit/backtrace.rb'
58
- require 'r_kit/css.rb'
59
- require 'r_kit/decorator.rb'
60
- require 'r_kit/grid.rb'
61
-
62
66
  end
@@ -1,5 +1,9 @@
1
+ html,
2
+ body{
3
+ height: 100%;
4
+ }
5
+
1
6
  html{
2
- min-height: 100%;
3
7
  font: 16px "Helvetica Neue","Helvetica","Arial", sans-serif;
4
8
  -webkit-transform: translateZ(0); /* using GPU for render - webkit only */
5
9
  }
@@ -8,5 +12,8 @@ body{
8
12
  background-color: background-color();
9
13
  color: text-color();
10
14
 
11
- margin: 0 0 1em;
15
+ padding-top: 1em;
16
+ margin: 0 {
17
+ top: -1em;
18
+ };
12
19
  }
data/lib/r_kit/css.rb CHANGED
@@ -1,4 +1,4 @@
1
- class RKit::Css < RKit::Core
1
+ class RKit::Css
2
2
 
3
3
  with_engine __FILE__
4
4
  with_sprockets __FILE__
@@ -6,7 +6,7 @@ module RKit::Decorator::ActiveRecordExtend
6
6
  define_instance_methods
7
7
  end
8
8
 
9
-
9
+ # TODO: all the methods below this comment should be private, even more, they should be in a "decorator_finder_creator_definer", and not included in active_record. SRP guys !
10
10
  def define_decorator arg
11
11
  @decorator_klass = decorator_klass_from arg
12
12
  end
@@ -24,12 +24,17 @@ module RKit::Decorator::ActiveRecordExtend
24
24
  if base <=> RKit::Decorator::Base
25
25
  base
26
26
  else
27
- base.send :include, Module.new{ include refine(RKit::Decorator::Base){} }
27
+ base.tap do |base|
28
+ base.send :include, Module.new{ include refine(RKit::Decorator::Base){} }
29
+ base.extend Module.new{ include refine(RKit::Decorator::Base.singleton_class){} }
30
+
31
+ RKit::Decorator::Base.inherited base
32
+ end
28
33
  end
29
34
  end
30
35
 
31
36
  def decorator_klass_from_module mod
32
- namespace = (mod.name.deconstantize.presence || "Object").constantize
37
+ namespace = (mod.name.deconstantize.presence || 'Object').constantize
33
38
  const_name = mod.name.demodulize
34
39
 
35
40
  namespace.send :remove_const, const_name
@@ -37,7 +42,7 @@ module RKit::Decorator::ActiveRecordExtend
37
42
  end
38
43
 
39
44
  def decorator_klass_from_proc block
40
- (name.deconstantize.presence || "Object")
45
+ (name.deconstantize.presence || 'Object')
41
46
  .constantize
42
47
  .const_set "#{ name.demodulize }Decorator", Class.new(RKit::Decorator::Base, &block)
43
48
  end
@@ -49,7 +54,7 @@ module RKit::Decorator::ActiveRecordExtend
49
54
 
50
55
 
51
56
  def define_instance_methods
52
- define_method "decorate" do |view_context: nil|
57
+ define_method 'decorate' do |view_context: nil|
53
58
  self.class.decorator_klass.new self, view_context: view_context
54
59
  end
55
60
  end
@@ -1,7 +1,17 @@
1
1
  require 'delegate'
2
2
 
3
3
  class RKit::Decorator::Base < SimpleDelegator
4
- alias :_obj :__getobj__
4
+ def self.decorator_name
5
+ name.demodulize.sub(/Decorator$/, '').underscore
6
+ end
7
+
8
+ def self.inherited subclass
9
+ subclass.class_eval do
10
+ alias :"#{ decorator_name }" :__getobj__
11
+ end
12
+ super
13
+ end
14
+
5
15
 
6
16
  def initialize obj, view_context: nil
7
17
  @_view_context = view_context
@@ -1,4 +1,4 @@
1
- class RKit::Decorator < RKit::Core
1
+ class RKit::Decorator
2
2
 
3
3
  dependency :backtrace
4
4
 
@@ -16,7 +16,7 @@ class RKit::Grid::Base
16
16
  end
17
17
 
18
18
  def _attributes
19
- _binding.col_attributes
19
+ _binding.col_attributes object
20
20
  end
21
21
 
22
22
  def capture
@@ -7,7 +7,7 @@ class RKit::Grid::Base
7
7
  end
8
8
 
9
9
  def required_bindings
10
- raise NotImplemented, "Subclasses must implement this method"
10
+ raise NotImplementedError, 'Subclasses must implement this method'
11
11
  end
12
12
 
13
13
 
@@ -16,7 +16,7 @@ class RKit::Grid::Base
16
16
  end
17
17
 
18
18
  def _attributes
19
- raise NotImplemented, "Subclasses must implement this method"
19
+ raise NotImplementedError, 'Subclasses must implement this method'
20
20
  end
21
21
 
22
22
 
@@ -38,7 +38,7 @@ class RKit::Grid::Base
38
38
 
39
39
 
40
40
  def capture
41
- raise NotImplemented, "Subclasses must implement this method"
41
+ raise NotImplementedError, 'Subclasses must implement this method'
42
42
  end
43
43
 
44
44
  def to_s
@@ -14,7 +14,7 @@ class RKit::Grid::Binding
14
14
 
15
15
  def block= block
16
16
  if block
17
- @view_context = block.binding.eval("self")
17
+ @view_context = block.binding.eval('self')
18
18
  @block = block
19
19
  end
20
20
  end
@@ -51,29 +51,38 @@ class RKit::Grid::Binding
51
51
  end
52
52
 
53
53
 
54
+ # TODO: Allow to take only a proc (so not a hash)
55
+ # TODO: OR a single symbol (and we use that to send a method on the object)
56
+ # TODO: Tha last one can be replaced (or duplicated) by a "respond_to?" automatically triggered from here
54
57
  def attributes= attributes
55
58
  @attributes.merge!(attributes) do |key, old_value, new_value|
56
59
  Array.wrap(old_value) + Array.wrap(new_value)
57
60
  end
58
61
  end
59
62
 
60
- def attributes
61
- @computed ||= @attributes.each_with_object({}) do |(key, value), public_attributes|
62
- public_attributes[process(key)] = process(value)
63
+ # TODO: @computed need to be back, we compute what can be, the procs or methods will be calc each time
64
+ def attributes object = nil
65
+ #@computed ||=
66
+ @attributes.each_with_object({}) do |(key, value), public_attributes|
67
+ public_attributes[process(key, object)] = process(value, object)
63
68
  end
64
69
  end
65
70
 
66
71
 
67
- def process value
72
+ def process value, object = nil
68
73
  case value
69
74
  when Proc
70
- process(value.call)
75
+ proc_value = case value.arity
76
+ when 1 then value.call(object)
77
+ else value.call
78
+ end
79
+ process(proc_value, object)
71
80
  when Array
72
- value.map{ |unique_value| process(unique_value) }.join(" ")
81
+ value.map{ |unique_value| process(unique_value, object) }.join(' ')
73
82
  when String, Symbol
74
83
  value.to_s.dasherize
75
84
  else
76
- raise ArgumentError, "Must be Array, Proc or String/Symbol"
85
+ raise ArgumentError, 'Must be Array, Proc or String/Symbol'
77
86
  end
78
87
  end
79
88
  end
data/lib/r_kit/grid.rb CHANGED
@@ -1,4 +1,4 @@
1
- class RKit::Grid < RKit::Core
1
+ class RKit::Grid
2
2
 
3
3
  with_engine __FILE__
4
4
  with_sprockets __FILE__
@@ -18,7 +18,7 @@ class RKit::Grid < RKit::Core
18
18
  alias_config :kernel_extend, :extends
19
19
 
20
20
 
21
- config :base_width, [0.75, ["rem"]]
21
+ config :base_width, [0.75, ['rem']]
22
22
  config :col_size, 3
23
23
 
24
24
  end
@@ -0,0 +1,7 @@
1
+ class Array
2
+
3
+ def include_all? values
4
+ (self & Array(values)).size == size
5
+ end
6
+
7
+ end
@@ -0,0 +1,8 @@
1
+ class Hash
2
+
3
+ # TODO: for doc - this is usefull to fill an hash wich have a default proc
4
+ def keys= keys
5
+ Array(keys).each &method(:[])
6
+ end
7
+
8
+ end
@@ -0,0 +1,19 @@
1
+ module Kernel
2
+
3
+ def __class__
4
+ self.class
5
+ end
6
+
7
+ def __namespace__
8
+ (__class__.name.deconstantize.presence || 'Object').constantize
9
+ end
10
+
11
+
12
+ def running_script
13
+ "#{ File.basename($0) } #{ ARGV.join " " }"
14
+ end
15
+
16
+ def running_script? script
17
+ Regexp.new(script) =~ running_script
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ class Symbol
2
+ delegate :classify, to: :to_s
3
+ end
@@ -0,0 +1,16 @@
1
+ class RKit::Utility
2
+ UTILITIES = %i{array hash kernel symbol}
3
+
4
+
5
+ config :extends, true
6
+
7
+ UTILITIES.each do |utility|
8
+ alias_config "#{ utility }_extend", :extends
9
+ load_path __FILE__, "#{ utility }_extend.rb", if: "#{ utility }_extend"
10
+ end
11
+
12
+ # TODO: class_extend: to_module, ancestor=
13
+ # TODO: module_extend: to_class
14
+ # TODO: enumerable_extend/or-array_extend: with_indifferent_access
15
+ # TODO: get back some code from hash_extend && array_extend gems
16
+ end
data/lib/r_kit/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RKit
2
- VERSION = "0.3.2"
2
+ VERSION = '0.4.2'
3
3
  end
data/lib/r_kit.rb CHANGED
@@ -37,6 +37,15 @@ module RKit
37
37
  extend self
38
38
 
39
39
 
40
- require "r_kit/core"
41
- require "r_kit/version"
40
+ require 'r_kit/core'
41
+ require 'r_kit/version'
42
+
43
+
44
+ Dir[File.join(File.dirname(__FILE__), "r_kit", "*.rb")].each do |file|
45
+ basename = File.basename file, ".rb"
46
+
47
+ if ["core", "version"].exclude? basename
48
+ const_set basename.classify, Class.new(RKit::Core){}
49
+ end
50
+ end
42
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Petrachi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rails tools box
14
14
  email:
@@ -23,6 +23,11 @@ files:
23
23
  - README.md
24
24
  - Rakefile
25
25
  - lib/r_kit.rb
26
+ - lib/r_kit/active_record_utility.rb
27
+ - lib/r_kit/active_record_utility/active_record_extend.rb
28
+ - lib/r_kit/active_record_utility/database_schema_error.rb
29
+ - lib/r_kit/active_record_utility/utility.rb
30
+ - lib/r_kit/active_record_utility/utility/tag.rb
26
31
  - lib/r_kit/backtrace.rb
27
32
  - lib/r_kit/backtrace/kernel_extend.rb
28
33
  - lib/r_kit/core.rb
@@ -70,6 +75,11 @@ files:
70
75
  - lib/r_kit/grid/lib/assets/stylesheets/r_kit/mixins/gris.scss
71
76
  - lib/r_kit/grid/lib/assets/stylesheets/r_kit/variables/grid.scss
72
77
  - lib/r_kit/grid/sass_extend.rb
78
+ - lib/r_kit/utility.rb
79
+ - lib/r_kit/utility/array_extend.rb
80
+ - lib/r_kit/utility/hash_extend.rb
81
+ - lib/r_kit/utility/kernel_extend.rb
82
+ - lib/r_kit/utility/symbol_extend.rb
73
83
  - lib/r_kit/version.rb
74
84
  - r_kit.gemspec
75
85
  homepage: https://github.com/petrachi/r_kit