rails_blocks 0.5.4.pre.alpha.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +10 -0
  5. data/Gemfile +10 -0
  6. data/Guardfile +43 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +31 -0
  9. data/Rakefile +12 -0
  10. data/app/assets/javascripts/block.coffee +98 -0
  11. data/app/assets/javascripts/jblocks.coffee +95 -0
  12. data/app/assets/javascripts/jquery_bem.coffee +4 -0
  13. data/app/assets/javascripts/jquery_bem_copy.coffee +486 -0
  14. data/app/assets/javascripts/main.coffee +10 -0
  15. data/app/assets/javascripts/rails_blocks.js +5 -0
  16. data/app/assets/stylesheets/rails_blocks.sass +94 -0
  17. data/app/helpers/block_helper.rb +122 -0
  18. data/app/views/rails_blocks/element.slim +2 -0
  19. data/coffeelint.json +12 -0
  20. data/config/spring.rb +1 -0
  21. data/config.ru +7 -0
  22. data/lib/rails_blocks/blocks/block.rb +28 -0
  23. data/lib/rails_blocks/blocks/element.rb +6 -0
  24. data/lib/rails_blocks/blocks/renderer.rb +13 -0
  25. data/lib/rails_blocks/configuration.rb +27 -0
  26. data/lib/rails_blocks/engine.rb +29 -0
  27. data/lib/rails_blocks/exceptions.rb +4 -0
  28. data/lib/rails_blocks/initializers/rails_blocks.rb +0 -0
  29. data/lib/rails_blocks/levels.rb +7 -0
  30. data/lib/rails_blocks/names.rb +60 -0
  31. data/lib/rails_blocks/path.rb +108 -0
  32. data/lib/rails_blocks/version.rb +3 -0
  33. data/lib/rails_blocks.rb +24 -0
  34. data/lib/tasks/rails_blocks.rake +8 -0
  35. data/rails_blocks.gemspec +39 -0
  36. data/spec/helpers/block_helper_spec.rb +58 -0
  37. data/spec/internal/app/blocks/app/block3/_mod1.slim +0 -0
  38. data/spec/internal/app/blocks/app/block3/_mod2_value2.slim +0 -0
  39. data/spec/internal/app/blocks/app/block3/block3.slim +0 -0
  40. data/spec/internal/app/blocks/common/block1/_mod1.slim +0 -0
  41. data/spec/internal/app/blocks/common/block1/_mod2_value2.slim +0 -0
  42. data/spec/internal/app/blocks/common/block1/block1.slim +2 -0
  43. data/spec/internal/app/blocks/common/block2/__elem1.slim +0 -0
  44. data/spec/internal/app/blocks/common/block2/__elem1_mod1.slim +0 -0
  45. data/spec/internal/app/blocks/common/block2/__elem1_mod2_val2.slim +0 -0
  46. data/spec/internal/app/blocks/common/block2/block2.slim +0 -0
  47. data/spec/internal/app/blocks/common/block3/_mod1.slim +0 -0
  48. data/spec/internal/app/blocks/common/block3/_mod2_value2.slim +0 -0
  49. data/spec/internal/app/blocks/common/block3/block3.slim +0 -0
  50. data/spec/internal/app/controllers/admin/admin_test_controller.rb +2 -0
  51. data/spec/internal/app/controllers/admin_controller.rb +2 -0
  52. data/spec/internal/app/controllers/application_controller.rb +2 -0
  53. data/spec/internal/config/database.yml +3 -0
  54. data/spec/internal/config/initializers/rails_blocks.rb +7 -0
  55. data/spec/internal/config/routes.rb +3 -0
  56. data/spec/internal/db/schema.rb +3 -0
  57. data/spec/internal/log/.gitignore +1 -0
  58. data/spec/internal/log/test.log +8 -0
  59. data/spec/internal/public/favicon.ico +0 -0
  60. data/spec/rails_blocks/blocks/block_spec.rb +11 -0
  61. data/spec/rails_blocks/configuration_spec.rb +29 -0
  62. data/spec/rails_blocks/names_spec.rb +66 -0
  63. data/spec/rails_blocks/path_spec.rb +70 -0
  64. data/spec/rails_blocks_spec.rb +104 -0
  65. data/spec/spec_helper.rb +112 -0
  66. metadata +368 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NThlOTJmNjMwMTEzYTJkODkwOWE0YzlhYjllMjkwNGFkNTU5YmQ2ZQ==
5
+ data.tar.gz: !binary |-
6
+ YzcwOTQxYzQ0ZTZhODExM2RjZDJmN2U3ZTE4YThmZGU3MTg3NmU3YQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OGI5MmE4NTRjYTZiNTRjNjI5NDM0ZGYyMzEwYmEzZmE4YmU5NDE5MWVlNzU3
10
+ YzdhZWRlNTM0Nzk0M2FkOTY3ZDQ4Y2VjNjczNjFlNDZlN2I4Njg4N2ZhOTli
11
+ M2M3OTYyNDkzMGU4ODE3YTU0ZTAyZWYzZjA4ZWI5ZWNhYzgwYmY=
12
+ data.tar.gz: !binary |-
13
+ MjFlODE0MmY0YjAyOTE0YzZjNGZlOWE3OWFhOTE3ZmJkZTA0M2RhMjZhMTY5
14
+ MDRiN2RhYWQ2YmU0ZDAxZWNiNDgzMmQyOTBlYjkyMTExYjhlMzk5YTkxZTkx
15
+ NDUxNTFkYjRkNTJiNTFiNjc4YjBmYWNkNDkxMGVlMGVlYmQxMTA=
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /spec/internal/log/
11
+ *.bundle
12
+ *.so
13
+ *.o
14
+ *.a
15
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2
4
+ deploy:
5
+ provider: rubygems
6
+ api_key:
7
+ secure: dwzb8NAPqnWOjaMHbUCFdLfE89P+t6n+xc/4ry66jHIWOKgCh1SQdYtJ1N6SUYr+nKpX+9e3XHfUwFp6OsNrieYfCnRBpupkZ5ty9OE1YrEGD328obP2ujc1rGTzp4SD967Wv6Mqu73+mNaP0Ba2u3QlVF89kIMPSg0fE3ozSjC1z/7fqs4D84fZh/FTLfAFDMqkvrlxLx5cmLuSzZ9cm5OT+gFGQDzCtcGBOCcou8uM16OoAEQjtnZKFvfYNFQCE5ne/emscbTViXNtImBbOrf1s4noUUJB/uoO952KxsJ5nWB5TeAst9M4Qd359MiLqTd84upM5ROPVjeEXCFHD5oIXZgIU68NX7Krh9C/fvWm29iopMc1khq2LRp7/ZpLSNAdnzWzAC58RBmbuYaKVRpzBpfZON3SDXT39VwNPV9p/axBCs9Z1WXlPJ3JR4ccVlM5pkGFCNN3lVtxG3tjL/ywL++fib1/dfkLTD/HCs9QXa0D/QtvyGzf5RdKPwFaW+VJwYmlNDt7m/H66zM0/IDlOp/e86/JnnNNs3aNfL1pDuPooos6dSNKWo2m0C4gu2yr2Xy+Ijz/nw+UMXTianrSDYUwa578Xu3k0d1Pnp7jWBWR7KUz2Wvv0tKQHHCkSU2cjArcZ7nxkVw5kKBEX9+6dp9CoREridrsVnL/9BU=
8
+ gem: rails_blocks
9
+ on:
10
+ repo: Sickphilosopher/rails_blocks
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rails_blocks.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'actionpack' # action_controller, action_view
8
+ gem 'sprockets'
9
+ gem 'slim-rails'
10
+ end
data/Guardfile ADDED
@@ -0,0 +1,43 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ # Note: The cmd option is now required due to the increasing number of ways
19
+ # rspec may be run, below are examples of the most common uses.
20
+ # * bundler: 'bundle exec rspec'
21
+ # * bundler binstubs: 'bin/rspec'
22
+ # * spring: 'bin/rspec' (This will use spring if running and you have
23
+ # installed the spring binstubs per the docs)
24
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
25
+ # * 'just' rspec: 'rspec'
26
+
27
+ guard :rspec, cmd: "rspec" do
28
+ # watch /lib/ files
29
+ watch(%r{^lib/(.+).rb$}) do |m|
30
+ puts m[1]
31
+ "spec/#{m[1]}_spec.rb"
32
+ end
33
+
34
+ watch(%r{^app/(.+).rb$}) do |m|
35
+ puts m[1]
36
+ "spec/#{m[1]}_spec.rb"
37
+ end
38
+
39
+ # watch /spec/ files
40
+ watch(%r{^spec/(.+).rb$}) do |m|
41
+ "spec/#{m[1]}.rb"
42
+ end
43
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Andrey Potetiurin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # RailsBlocks
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rails_blocks'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rails_blocks
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( https://github.com/sickphilosopher/rails_blocks/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'rspec/core/rake_task'
2
+ require 'bundler/gem_tasks'
3
+
4
+ # Default directory to look in is `/specs`
5
+ # Run with `rake spec`
6
+ RSpec::Core::RakeTask.new(:spec) do |task|
7
+ task.rspec_opts = ['--color', '--format', 'documentation']
8
+ end
9
+
10
+ Bundler::GemHelper.install_tasks
11
+
12
+ task :default => :spec
@@ -0,0 +1,98 @@
1
+ class window.Block
2
+ constructor: ($b, options) ->
3
+ @$node = $b
4
+ @name = $$.getBlockName($b)
5
+ @$node.b_name = @name
6
+ @id = $$.guid()
7
+ @params = $.extend({}, $b.data('bem'), options)
8
+ #$.extend this, decl.methods
9
+ @_addEvents() if @events
10
+ # if @elements
11
+ # for element in @elements
12
+ # @_addEvents(element)
13
+ @init() if @init
14
+
15
+ elem: (e_name, mod_name, mod_value, context) ->
16
+ klass = ".b-#{@name}__#{e_name}"
17
+ $elem = $(klass, context || @$node)
18
+ if mod_name
19
+ $elem = $elem.filter("#{klass}--#{$$.makeMod(mod_name, mod_value)}")
20
+
21
+ $elem.e_name = e_name
22
+ $elem.b_name = @name
23
+ $elem
24
+
25
+
26
+ _addEvents: (element)->
27
+ for event_name, handler of @events
28
+ p = event_name.split(' ')
29
+ if typeof handler == 'string'
30
+ handler = decl.methods[handler]
31
+ @$node.on p[0], p[1], handler.bind(@)
32
+
33
+ _trigger: (event) ->
34
+ @$node.trigger event
35
+
36
+ addElem: (e_name, o, $parent) ->
37
+ o ||= {}
38
+ $elem = $$.makeElement($parent || @$node, @name, e_name, o)
39
+ $elem.e_name = e_name
40
+ $elem.b_name = @name
41
+ $elem
42
+
43
+ addMod: (mod, value) ->
44
+ @$node.addMod(mod, value)
45
+
46
+ delMod: (mod, value) ->
47
+ @$node.delMod(mod, value)
48
+
49
+ toggleMod: (mod, value) ->
50
+ if @hasMod(mod, value)
51
+ @$node.delMod(mod, value)
52
+ else
53
+ @$node.addMod(mod, value)
54
+
55
+ hasMod: (mod, value) ->
56
+ mod = $$.makeMod(mod, value)
57
+ @$node.hasClass("b-#{@name}--#{mod}")
58
+
59
+ # class window.Block
60
+ # constructor: ($b) ->
61
+ # name = $b.getBlockName()
62
+ # params = $b.data('bem')
63
+ # decl = RB.decls[name]
64
+ # if !decl
65
+ # throw new Error(name + ' block is not declared')
66
+ # @name = name
67
+ # @params = params
68
+ # @$node = $b
69
+ # @id = $$.guid()
70
+ #
71
+ # $.extend this, decl.methods
72
+ # @_addEvents()
73
+ # @_setInited()
74
+ # @_trigger 'b-inited'
75
+ # return
76
+ #
77
+ # _addEvents: ->
78
+ # decl = $$.decls[@name]
79
+ # events = decl.events
80
+ # for e of events
81
+ # if events.hasOwnProperty(e)
82
+ # p = e.split(' ')
83
+ # handler = events[e]
84
+ # if typeof handler == 'string'
85
+ # handler = decl.methods[handler]
86
+ # @$node.on p[0], p[1], handler.bind(@)
87
+ #
88
+ # _setInited:->
89
+ #
90
+ # setMod: (mod, value) ->
91
+ #
92
+ # _trigger: (event) ->
93
+ # @$node.trigger event
94
+ #
95
+ # destroy: ->
96
+ # $$.cache[@id] = null
97
+ # @$node.off()
98
+ # @_trigger 'b-destroyed'
@@ -0,0 +1,95 @@
1
+ camelCase = (input) ->
2
+ input.toLowerCase().replace /(^|-)(.)/g, (match, $1, $2) ->
3
+ $2.toUpperCase()
4
+
5
+ window.$$ =
6
+ decls: {}
7
+ cache: {}
8
+ utils: {}
9
+ _id: 0
10
+ bem_class: 'js_bem'
11
+ bem_class_selector: '.js_bem'
12
+ guid: () ->
13
+ return @_id++
14
+
15
+ processOptions: ($dom, b_name, o) ->
16
+ if o.attrs
17
+ for attr, attr_value of o.attrs
18
+ $dom.prop(attr, attr_value)
19
+ if o.content
20
+ $dom.html(o.content)
21
+ if o.mix
22
+ $dom.addClass($$.mixClass(o.mix))
23
+ if o.elements
24
+ for e_name, e_o of o.elements
25
+ $$.makeElement($dom, b_name, e_name, e_o)
26
+
27
+ makeElement: ($parent, b_name, e_name, o) ->
28
+ tag = o.tag || 'div'
29
+ $e = $("<#{tag} class='b-#{b_name}__#{e_name}'>")
30
+ $$.processOptions($e, b_name, o)
31
+ if o.prepend
32
+ $parent.prepend $e
33
+ else
34
+ $parent.append $e
35
+ $e
36
+
37
+ makeBlock: (b_name, o) ->
38
+ o ||= {}
39
+ tag = o.tag || 'div'
40
+ $b = $("<#{tag} class='b-#{b_name}'>")
41
+ $$.processOptions($b, b_name, o)
42
+ $b
43
+
44
+ init: ($context) ->
45
+ $$.getBlocks($context.find($$.bem_class_selector))
46
+ $$.getBlocks($context) if $context.hasClass $$.bem_class
47
+
48
+ getBlocks: ($context, options) ->
49
+ $context.map ->
50
+ $$.getBlock($(this), options)
51
+
52
+ getBlock: ($b, options)->
53
+ bid = $b.data('_bid')
54
+ if bid
55
+ return $$.cache[bid]
56
+ block = new $$.decls[camelCase($$.getBlockName($b))]($b, options)
57
+ bid = block.id
58
+ $b.data '_bid', bid
59
+ $$.cache[bid] = block
60
+ block
61
+
62
+ getBlockName: ($b) ->
63
+ regexp = /^b(-[a-zA-Z0-9]+)+$/
64
+ for klass in $b.attr('class').split(/\s+/)
65
+ return klass.replace('b-', '') if regexp.test(klass)
66
+
67
+ makeMod: (name, value) ->
68
+ mod = name
69
+ mod += "_#{value}" if value
70
+ mod
71
+
72
+ mixClass: (mix) ->
73
+ "b-#{mix.b}__#{mix.e}"
74
+
75
+ $.fn.destroyBlocks = ->
76
+ @find($$.bem_class_selector).getBlocks().each ->
77
+ @destroy()
78
+
79
+ $.fn.addMod = (name, value) ->
80
+ mod = $$.makeMod(name, value)
81
+ if @e_name
82
+ @addClass("b-#{@b_name}__#{@e_name}--#{mod}")
83
+ else
84
+ @addClass("b-#{@b_name}--#{mod}")
85
+
86
+ $.fn.delMod = (name, value) ->
87
+ mod = $$.makeMod(name, value)
88
+ if @e_name
89
+ @removeClass("b-#{@b_name}__#{@e_name}--#{mod}")
90
+ else
91
+ @removeClass("b-#{@b_name}--#{mod}")
92
+
93
+ $.fn.asBlock = (name, o) ->
94
+ @addClass("b-#{name}")
95
+ $$.getBlock(@, o)
@@ -0,0 +1,4 @@
1
+ $ ->
2
+ $.b = (name) ->
3
+ arguments[0] = '.b-' + name
4
+ $.apply(null, arguments)