rails_blocks 0.5.4.pre.alpha.pre.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.
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)