support_segment 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +5 -0
- data/Rakefile +24 -0
- data/lib/support_segment.rb +4 -0
- data/lib/support_segment/cti_helpers.rb +96 -0
- data/lib/support_segment/form_model.rb +23 -0
- data/lib/support_segment/method_decorator.rb +33 -0
- data/lib/support_segment/mobile_detect.rb +40 -0
- data/lib/support_segment/railtie.rb +14 -0
- data/lib/support_segment/sti_helpers.rb +114 -0
- data/lib/support_segment/version.rb +3 -0
- data/lib/tasks/support_segment_tasks.rake +4 -0
- data/lib/validators/receiver_validator.rb +23 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 185c390313e63928b711e35f0ba86c17229e3426
|
4
|
+
data.tar.gz: fd0893634af5e8ac8e703a9b2d05837dfc0a819b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 473e0abaf78f4371fda6604142ffb17f8fb14eec2e42cc899d0acf5e710ea98c34da89df215386e096e9e0116a31dfadbdb18c5261b20e979c0bee213a181795
|
7
|
+
data.tar.gz: 3d42775d2518068244a9bf19481ecf0aad1d72ea49419617006b415514c19056aeb98f6e3ebd06c6b777ae03093654e3bc1929ef6dba433e4f978f3c551ee7f8
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'SupportSegment'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
load 'rails/tasks/statistics.rake'
|
21
|
+
|
22
|
+
|
23
|
+
Bundler::GemHelper.install_tasks
|
24
|
+
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
class Relation
|
3
|
+
|
4
|
+
alias_method :relation_delete_all, :delete_all
|
5
|
+
def delete_all(conditions = nil)
|
6
|
+
return relation_delete_all(conditions) if !@klass.acts_as_citier?
|
7
|
+
|
8
|
+
return relation_delete_all(conditions) if conditions
|
9
|
+
|
10
|
+
deleted = true
|
11
|
+
ids = nil
|
12
|
+
c = @klass
|
13
|
+
|
14
|
+
bind_values.each do |bind_value|
|
15
|
+
if bind_value[0].name == "id"
|
16
|
+
ids = bind_value[1]
|
17
|
+
break
|
18
|
+
end
|
19
|
+
end
|
20
|
+
ids ||= where_values_hash["id"] || where_values_hash[:id]
|
21
|
+
where_hash = ids ? { :id => ids } : nil
|
22
|
+
|
23
|
+
deleted &= c.base_class.where(where_hash).relation_delete_all
|
24
|
+
while c.superclass != ActiveRecord::Base
|
25
|
+
if c.const_defined?(:Writable)
|
26
|
+
citier_debug("Deleting back up hierarchy #{c}")
|
27
|
+
deleted &= c::Writable.where(where_hash).delete_all
|
28
|
+
end
|
29
|
+
c = c.superclass
|
30
|
+
end
|
31
|
+
|
32
|
+
deleted
|
33
|
+
end
|
34
|
+
|
35
|
+
alias_method :relation_to_a, :to_a
|
36
|
+
def to_a
|
37
|
+
return relation_to_a if !@klass.acts_as_citier?
|
38
|
+
|
39
|
+
records = relation_to_a
|
40
|
+
|
41
|
+
c = @klass
|
42
|
+
|
43
|
+
if records.all? { |record| record.class == c }
|
44
|
+
return records
|
45
|
+
end
|
46
|
+
|
47
|
+
full_records = []
|
48
|
+
ids_wanted = {}
|
49
|
+
|
50
|
+
# Map all the ids wanted per type
|
51
|
+
records.each do |record|
|
52
|
+
if record.class == c # We don't need to find the record again if this is already the correct one
|
53
|
+
full_records << record
|
54
|
+
next
|
55
|
+
end
|
56
|
+
|
57
|
+
ids_wanted[record.class] ||= []
|
58
|
+
ids_wanted[record.class] << record.id
|
59
|
+
end
|
60
|
+
|
61
|
+
# Find all wanted records
|
62
|
+
ids_wanted.each do |type_class, ids|
|
63
|
+
full_records.push(*type_class.find(ids))
|
64
|
+
end
|
65
|
+
|
66
|
+
# Make a new array with the found records at the right places
|
67
|
+
records.each do |record|
|
68
|
+
full_record = full_records.find { |full_record| full_record.id == record.id }
|
69
|
+
record.force_attributes(full_record.instance_variable_get(:@attributes), :merge => true, :clear_caches => false)
|
70
|
+
end
|
71
|
+
|
72
|
+
return records
|
73
|
+
end
|
74
|
+
|
75
|
+
alias_method :relation_apply_finder_options, :apply_finder_options
|
76
|
+
def apply_finder_options(options)
|
77
|
+
return relation_apply_finder_options(options) if !@klass.acts_as_citier?
|
78
|
+
|
79
|
+
relation = self
|
80
|
+
|
81
|
+
# With option :no_children set to true, only records of type self will be returned.
|
82
|
+
# So Root.all(:no_children => true) won't return Child records.
|
83
|
+
no_children = options.delete(:no_children)
|
84
|
+
if no_children
|
85
|
+
relation = clone
|
86
|
+
|
87
|
+
c = @klass
|
88
|
+
|
89
|
+
self_type = c.superclass == ActiveRecord::Base ? nil : c.name
|
90
|
+
relation = relation.where(:type => self_type)
|
91
|
+
end
|
92
|
+
|
93
|
+
relation.relation_apply_finder_options(options)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module SupportSegment
|
2
|
+
class FormModel
|
3
|
+
|
4
|
+
class NotImplemented < Exception; end
|
5
|
+
class NotValid < Exception; end
|
6
|
+
|
7
|
+
extend ActiveModel::Naming
|
8
|
+
include ActiveModel::Conversion
|
9
|
+
include ActiveModel::Validations
|
10
|
+
|
11
|
+
def initialize(attributes = {})
|
12
|
+
attributes.each do |name, value|
|
13
|
+
send("#{name}=", value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Forms are never themselves persisted
|
18
|
+
def persisted?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SupportSegment
|
2
|
+
module MethodDecorator
|
3
|
+
|
4
|
+
def before(method, &block)
|
5
|
+
decorate(method, :before, block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def after(method, &block)
|
9
|
+
decorate(method, :after, block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def around(method, &block)
|
13
|
+
decorate(method, :around, block)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def decorate(method, callback, block)
|
18
|
+
old_method = instance_method(method)
|
19
|
+
|
20
|
+
define_method(method) do |*args|
|
21
|
+
if [:before, :around].include? callback
|
22
|
+
self.instance_eval &block
|
23
|
+
end
|
24
|
+
|
25
|
+
old_method.bind(self).call(*args)
|
26
|
+
|
27
|
+
if [:after, :around].include? callback
|
28
|
+
self.instance_eval &block
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module SupportSegment
|
2
|
+
module MobileDetect
|
3
|
+
class Constraint
|
4
|
+
|
5
|
+
def matches?(request)
|
6
|
+
return false if request.cookies[:full_site_form_mobile] || request.host.match(/^m./)
|
7
|
+
request.user_agent.to_s.match(/Mobile/)
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
# the following sucks and it makes sense to be more in control of what routes you want to expose for the mobile experience
|
14
|
+
class Middleware
|
15
|
+
|
16
|
+
def initialize(app)
|
17
|
+
@app = app
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
begin
|
22
|
+
request = Rack::Request.new(env)
|
23
|
+
if request.host.match(/^m./)
|
24
|
+
request.params[:format] = :mobile
|
25
|
+
request.env["action_dispatch.request.formats"] = [Mime::Type.lookup_by_extension(:mobile)]
|
26
|
+
end
|
27
|
+
|
28
|
+
return @app.call(env)
|
29
|
+
rescue => exception
|
30
|
+
Rails.logger.fatal(
|
31
|
+
"\n#{exception.class} (#{exception.message}):\n " +
|
32
|
+
exception.backtrace.join("\n") + "\n\n"
|
33
|
+
)
|
34
|
+
raise exception
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'support_segment/mobile_detect'
|
2
|
+
|
3
|
+
module SupportSegment
|
4
|
+
class Railtie < Rails::Railtie
|
5
|
+
initializer "support_segment.configure_rails_initialization" do |app|
|
6
|
+
Mime::Type.register_alias "text/html", :mobile
|
7
|
+
app.middleware.use MobileDetect::Middleware
|
8
|
+
end
|
9
|
+
|
10
|
+
initializer 'support_segment.validators', :before => :set_autoload_paths do |app|
|
11
|
+
app.config.autoload_paths << File.expand_path("../../validators", __FILE__)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
#-------------------------------------------------------------------------------
|
2
|
+
# From: https://gist.github.com/1139595
|
3
|
+
# This module is meant to be included in the Base class of an STI model
|
4
|
+
# hierarchy.
|
5
|
+
#
|
6
|
+
# Heavily inspired by a couple key blog posts
|
7
|
+
# http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html
|
8
|
+
# http://coderrr.wordpress.com/2008/04/22/building-the-right-class-with-sti-in-rails/#comment-1826
|
9
|
+
#
|
10
|
+
# Thanks to Alex and coderrr!
|
11
|
+
#-------------------------------------------------------------------------------
|
12
|
+
module SupportSegment
|
13
|
+
module StiHelpers
|
14
|
+
|
15
|
+
def self.included(base)
|
16
|
+
base.send :include, InstanceMethods
|
17
|
+
base.extend ClassMethods
|
18
|
+
end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
|
22
|
+
|
23
|
+
def select_options
|
24
|
+
descendants.map{ |c| c.to_s }.sort
|
25
|
+
end
|
26
|
+
|
27
|
+
def sti_helpers_base
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def sti_association_extensions
|
32
|
+
@sti_association_extensions ||= Module.new
|
33
|
+
end
|
34
|
+
|
35
|
+
def inherited(child)
|
36
|
+
super
|
37
|
+
base = sti_base_class
|
38
|
+
|
39
|
+
|
40
|
+
child.instance_eval do
|
41
|
+
def self.sti_helpers_base
|
42
|
+
false
|
43
|
+
end
|
44
|
+
|
45
|
+
def model_name
|
46
|
+
sti_base_class.model_name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
method_name = :"#{child.name.to_s.demodulize.underscore.pluralize}"
|
51
|
+
|
52
|
+
base.define_singleton_method method_name do
|
53
|
+
where(inheritance_column.to_sym => child.name)
|
54
|
+
end
|
55
|
+
|
56
|
+
sti_association_extensions.send :define_method, method_name do
|
57
|
+
relation = where(inheritance_column.to_sym => child.name)
|
58
|
+
relation.define_singleton_method :build do |*args, &block|
|
59
|
+
result = super(*args, &block)
|
60
|
+
proxy_association.add_to_target(result)
|
61
|
+
end
|
62
|
+
|
63
|
+
relation
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
def sti_base_class
|
69
|
+
# TODO: use the included hook to set the sti_base_class class?
|
70
|
+
if self.sti_helpers_base
|
71
|
+
return self
|
72
|
+
end
|
73
|
+
return superclass.sti_base_class
|
74
|
+
end
|
75
|
+
|
76
|
+
def implied_inheritance_class(*inheritance_type_sources)
|
77
|
+
if scope_values = self.current_scope.try(:where_values_hash)
|
78
|
+
inheritance_type_sources << scope_values
|
79
|
+
end
|
80
|
+
|
81
|
+
valid_sources = inheritance_type_sources.select do |source|
|
82
|
+
source.is_a? Hash
|
83
|
+
end
|
84
|
+
|
85
|
+
inheritance_type = valid_sources.inject(nil) do |type, values|
|
86
|
+
type ? type : values.with_indifferent_access[inheritance_column]
|
87
|
+
end
|
88
|
+
|
89
|
+
inheritance_type
|
90
|
+
end
|
91
|
+
|
92
|
+
# !! with the first conditional clause type logic will only apply to base class
|
93
|
+
# this MAY not be what you'd want, in which case ommit.
|
94
|
+
def new(*a, &b)
|
95
|
+
if (self == sti_base_class) \
|
96
|
+
and (subclass_name = implied_inheritance_class(a.first)) \
|
97
|
+
and (subclass = subclass_name.safe_constantize) != self
|
98
|
+
raise "wtF hax!!" unless subclass < self # klass should be a descendant of us
|
99
|
+
return subclass.new(*a, &b)
|
100
|
+
end
|
101
|
+
super(*a, &b)
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
module InstanceMethods
|
107
|
+
def sti_base_class
|
108
|
+
self.class.sti_base_class
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'active_model/validations'
|
2
|
+
|
3
|
+
class ReceiverValidator < ActiveModel::EachValidator
|
4
|
+
|
5
|
+
def validate_each(record, attribute, value)
|
6
|
+
if Array.wrap(value).reject {|r| r.marked_for_destruction? || r.valid?(record.validation_context) }.any?
|
7
|
+
receiver = record.public_method(attribute).call
|
8
|
+
if options[:map_attributes]
|
9
|
+
options[:map_attributes].each do |receiver_attribute, command_attribute|
|
10
|
+
if errors = receiver.errors.delete(receiver_attribute)
|
11
|
+
errors.each do |error|
|
12
|
+
record.errors.add(command_attribute, error)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
unless receiver.errors.empty?
|
18
|
+
record.errors.add(attribute, :invalid, options.merge(value: value))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: support_segment
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Leandro Pedroni
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.1.8
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.1.8
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-collection_matchers
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: capybara
|
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'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: poltergeist
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rb-fsevent
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Support modules for rails applications.
|
140
|
+
email:
|
141
|
+
- ilpoldo@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- MIT-LICENSE
|
147
|
+
- README.rdoc
|
148
|
+
- Rakefile
|
149
|
+
- lib/support_segment.rb
|
150
|
+
- lib/support_segment/cti_helpers.rb
|
151
|
+
- lib/support_segment/form_model.rb
|
152
|
+
- lib/support_segment/method_decorator.rb
|
153
|
+
- lib/support_segment/mobile_detect.rb
|
154
|
+
- lib/support_segment/railtie.rb
|
155
|
+
- lib/support_segment/sti_helpers.rb
|
156
|
+
- lib/support_segment/version.rb
|
157
|
+
- lib/tasks/support_segment_tasks.rake
|
158
|
+
- lib/validators/receiver_validator.rb
|
159
|
+
homepage: https://github.com/ilpoldo/support_segment
|
160
|
+
licenses:
|
161
|
+
- MIT
|
162
|
+
metadata: {}
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
requirements: []
|
178
|
+
rubyforge_project:
|
179
|
+
rubygems_version: 2.2.2
|
180
|
+
signing_key:
|
181
|
+
specification_version: 4
|
182
|
+
summary: Support modules for rails applications.
|
183
|
+
test_files: []
|